Как использовать 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.

Другие вопросы по тегам