1

私は MPI プログラミング ( mpich2 fedora ) の初心者です。MPI_COMM_WORLD とは別のコミュニケータで MPI_Barrier を使用すると、デッドロックが発生しました。

私はこのような2つのコミュニケーターを作ります:

MPI_Comm_split (MPI_COMM_WORLD, 色, ランク, &split_comm);

すべての色が通過できる MPI_Barrier を配置すれば、問題ありません。

しかし、color == 1 のみが通過できる MPI_Barrier を配置すると、デッドロックが発生しました。

別のコミュニケータで MPI_Barrier を使用するには? 私も MPI_Bcast() を (別のコミュニケーター MPI_COMM_WORLD で) 使用していましたが、誰も MPI_Bcast を呼び出さない場合でもブロックされませんでした。MPI_COMM_WORLD への 1 つの異なるコミュニケーターで、独自のプロセスを同期できますか?

4

1 に答える 1

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 はブロッキング関数です。そのため、1 つ以上のランクが MPI_Bcast 呼び出しに到達しない場合、デッドロックが発生する可能性があります。

MPI_Comm_Split 呼び出しの後であっても、MPI_COMM_WORLD にはすべてのランクが含まれることに注意してください。

于 2013-10-17T01:28:05.517 に答える