0
私はMPIポイントツーポイントブロッキングモードについてちょっと混乱します。
今私は次のコードを持っています。 MPI_RECVとしてブロックされます
MPI:ポイントツーポイントブロッキング(MPI_Send&MPI_Recv)
y = id;
j = id - 1;
if(j<0) j = p -1;
k = id + 1;
if(k>p-1) k = 0;
MPI_Recv(&x, 1, MPI_INT, k, 0, MPI_COMM_WORLD, &status);
MPI_Send(&y, 1, MPI_INT, j, 0, MPI_COMM_WORLD);
z = x + y;
は、ブロッキング機能ですが、私はMPI_Send関数を呼び出す順序を変更する際に最初にすべてがOKになり、私はその理由を知りません。
ありがとう、私の英語のために申し訳ありません。
にあるのrecvが
を呼び出し、送信/単一
MPI_Sendrecv()
コールの代わりに、ブロック2を使用することで、今okが、なぜプログラムが正常に実行されないでしょうあなたが 'MPI_Recv()'を最初に実行した場合、私は注文を変更するとブロックされ、MPI_Sendはただちに – AHM200を返します。あなたのプログラムは永遠にハングします。 'MPI_Send()'が最初にあり、メッセージが十分短い場合、それが送信され、一致する 'MPI_Recv()'が完了します。 は意味がありますか? –
はい、ありがとうございます。 – AHM200