我試圖使用MPI_Bcast從根節點向所有其他節點廣播消息。然而,每當我運行這個程序時,它總是會在開始時掛起。有人知道它有什麼問題嗎?使用MPI_Bcast進行MPI通信
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
int rank;
int buf;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == 0) {
buf = 777;
MPI_Bcast(&buf, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
else {
MPI_Recv(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
printf("rank %d receiving received %d\n", rank, buf);
}
MPI_Finalize();
return 0;
}
感謝你的解釋。然而,我仍然對如何讓每個節點使用MPI_Recv接收消息感到困惑。我嘗試在if(rank!= 0)塊中包裝MPI_Recv調用,但沒有一個,但我的程序仍然不打印任何內容。你知道如何在每個節點上接收消息嗎? – David
你沒有。 MPI_Bcast不像發送;這是一個集體操作,每個人都參與發送者和接收者,並且在通話結束時,接收者具有發送者的價值。如果rank == root(這裏是0)和(類似的)a是相同的函數調用,則發送(類似)發送。我已經更新了上面的代碼,所以你可以看到每個人都會得到相同的結果。 –
@David:如果你認爲'MPI_Bcast'是'參與廣播事件'的意思,那麼它可能更有意義。 –