2

一部のプロセスのみが関数をバイパスする状況に直面してい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を使用しています。アプリケーションはいくつかのスレッドを開始しますが、表示されたフラグメントはその中にありません。

4

1 に答える 1