一部のプロセスのみが関数をバイパスする状況に直面していMPI_Barrier
ます。
この問題は、次のコード フラグメントに現れます。
printf("[%d] Before barrier\n", mpi_rank);
fflush(stdout);
MPI_Barrier(MPI_COMM_WORLD);
printf("[%d] After barrier\n", mpi_rank);
fflush(stdout);
sleep(1);
4 つのプロセスで実行した後、次の出力が得られます。
[3] Before barrier
[2] Before barrier
[0] Before barrier
[1] Before barrier
[1] After barrier
そして、アプリケーションがフリーズします。
すべてのプロセスがメッセージを出力できることを期待していましたが、[id] After barrier
プロセスのみがメッセージを1
出力しました。
すべてのプロセスがバリアを通過しないのはなぜですか?
次のような出力を期待していました。
[3] Before barrier
[2] Before barrier
[0] Before barrier
[1] Before barrier
[1] After barrier
[0] After barrier
[2] After barrier
[3] After barrier
Docker内のcentosでopenmpiを使用しています。アプリケーションはいくつかのスレッドを開始しますが、表示されたフラグメントはその中にありません。