看不懂MPI_Bcast
Can't understand MPI_Bcast
我使用 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;
}
您的代码出现死锁。在您的 MPI_Bcast
之后,您有一个 MPI_Recv
没有匹配的 MPI_Send
,这会导致您的代码挂起。根据您提出问题的方式,我假设您认为您需要 MPI_Recv
来接收通过 MPI_Bcast
发送的信息,但这是不正确的。 MPI_Bcast
命令本身(之后没有 MPI_Recv
)将实现你想要的。
我使用 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;
}
您的代码出现死锁。在您的 MPI_Bcast
之后,您有一个 MPI_Recv
没有匹配的 MPI_Send
,这会导致您的代码挂起。根据您提出问题的方式,我假设您认为您需要 MPI_Recv
来接收通过 MPI_Bcast
发送的信息,但这是不正确的。 MPI_Bcast
命令本身(之后没有 MPI_Recv
)将实现你想要的。