MPIプロセス(8プロセス)間で通信するためにメッセージをプローブしようとしています。コードの特定の部分に到達する最初のプロセスは、他のすべてのプロセスに信号を送り、他のプロセスはそこに到達すると終了します。
これが私が実装したものです:(より単純なソリューションは大歓迎です)
if(depth == size){
endTime = MPI_Wtime();
MPI_Iprobe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &stat, MPI_STATUS_IGNORE);
if(!stat){
printf("Execution completed in %.5f seconds.\n", endTime - beginTime);
for (ctr = 0; ctr < mpi_processors; ctr++) {
if(ctr == mpi_my_pid) continue;
MPI_Isend(&stat, 1, MPI_INT, ctr, 0, MPI_COMM_WORLD, &req);
printf("sent to %d from %d\n",ctr,mpi_my_pid);
}
}
return 1;
}
コードは自明です。stat
メッセージを「送信」するためのダミー変数であり、のフラグとしても使用されIprobe
ます。問題は、すべてのプロセスでstatが常にゼロであるということです。つまり、プロービングは受信する待機中のメッセージを返しません。しかし、MPI_Isendが正しく実行され、メッセージが送信されることを確認できます。
私は根本的に間違ったことをしているのですか、それとも私が見ることができない単純なバグがどこかにありますか?
ありがとう、
できる。