後,但是我注意到只有根(recieving方繼續運行?)。前後SENDRECV產生具有cout
:其他進程掛我認爲使用<code>MPI_Sendrecv</code></p> <pre><code>MPI_Sendrecv(&ballPos, 2, MPI_INT, FIELD, NEW_BALL_POS_TAG, &ballPos, 2, MPI_INT, winner, NEW_BALL_POS_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE); </code></pre> <p>MPI_Sendrecv
0 b4 sendrecv
2 b4 sendrecv
4 b4 sendrecv
1 b4 sendrecv
3 b4 sendrecv
5 b4 sendrecv
0 after sendrecv
所有進程SENDRECV前行,但只有根事後疏導。
Full source:參見線147
UPDATE
結果應該是類似於下面
if (rank == winner) {
ballPos[0] = rand() % 128;
ballPos[1] = rand() % 64;
cout << "new ball pos: " << ballPos[0] << " " << ballPos[1] << endl;
MPI_Send(&ballPos, 2, MPI_INT, FIELD, NEW_BALL_POS_TAG, MPI_COMM_WORLD);
} else if (rank == FIELD) {
MPI_Recv(&ballPos, 2, MPI_INT, winner, NEW_BALL_POS_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
我更新了我期望發生的qn(單獨發送和接聽電話)。也許你可以建議一個相應的'Sendrecv'調用是什麼樣的? –
@JiewMeng嗯,你不需要執行發送接收。您的原始代碼與單獨的發送和接收應該工作正常(也見[你的其他問題](http://stackoverflow.com/q/13307056/1374437)爲什麼你的推定,它不工作是錯誤的)。 –
我真的認爲如果我可以將單獨的send/recv代碼縮短爲1 sendrecv,那會更好。或者也很高興知道這個等價物。我在想如果我可以在單獨的send/recv中編程,我應該可以使用1 sendrecv嗎? –