Я бы хотел отправить два массива: double A
и int B
используя широковещательную рассылку в MPI (я использую C++). Обычно communicator.Bcast
блокирует для читателей, но не для писателя. Так, если бы я сделал:два MPI транслируются один за другим
communicator.Bcast(A, a_len, ...)
communicator.Bcast(B, b_len, ...)
Это может случиться так, что какой-то процесс будет первым получить второе сообщение и все будет беспорядок.
Интересно, какое хорошее, чистое решение для этой проблемы? Должен ли я использовать производные типы данных/MPI_Pack? Это кажется уродливым. Могу ли я каким-то образом использовать TAG в трансляции?
Следует отметить, что гарантия существует только до тех пор, пока последовательность коллективных вызовов одинакова во всех рядах. В противном случае поведение не определено. –