我使用MPI_Bcast函数编写了简单的MPI程序,但我无法理解为什么我的程序没有完成。
此处的代码
#include "mpi.h"
int main(int argc, char* argv[]) {
int ProcNum, ProcRank, RecvRank;
MPI_Status Status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);
MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
RecvRank = ProcRank;
MPI_Bcast(&RecvRank, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Recv(&RecvRank, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);
MPI_Finalize();
return 0;
}
答案 0 :(得分:4)
您的代码有死锁。在MPI_Bcast
之后,您的MPI_Recv
与MPI_Send
不匹配,导致您的代码挂起。我假设你问你的问题,你认为你需要MPI_Recv
来接收通过MPI_Bcast
发送的信息,但这是不正确的。 MPI_Bcast
命令本身(之后没有MPI_Recv
)将达到你想要的效果。