Как использовать MPI_Barrier с другим коммуникатором?
Я немного новичок в программировании MPI ( mpich2 fedora). Я пишу потому, что я получил Dead Lock, когда использую MPI_Barrier с другим коммуникатором, отличным от MPI_COMM_WORLD.
Я делаю 2 коммуникатора, как это:
MPI_Comm_split (MPI_COMM_WORLD, цвет, ранг и разделение_кома);
Если я поставлю MPI_Barrier, где все цвета могут пройти, все будет хорошо.
Но если я поставлю MPI_Barrier, где только цвет == 1 может пройти, я получу Dead Lock.
Как использовать MPI_Barrier с другим коммуникатором? Я также использовал MPI_Bcast () (с другим другим коммуникатором MPI_COMM_WORLD), но он не был заблокирован, когда никто не вызывал MPI_Bcast тоже. Может ли один другой коммуникатор MPI_COMM_WORLD синхронизировать ваши собственные процессы?
1 ответ
Было бы полезно, если бы вы могли опубликовать фрагмент кода. Трудно отладить тупик только от твоих слов.
В любом случае вы передаете коммуникатор, который хотите заблокировать, в качестве аргумента MPI_Barrier: http://mpi.deino.net/mpi_functions/mpi_barrier.html http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Barrier.html
MPI_Bcast является функцией блокировки. Таким образом, если один или несколько рангов не достигают вызова MPI_Bcast, вы можете зайти в тупик.
Помните, что MPI_COMM_WORLD включает в себя все ранги, даже после вызова MPI_Comm_Split.