无法理解MPI_Bcast

时间:2015-04-19 21:08:23

标签: c++ c mpi mpich

我使用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;
}

1 个答案:

答案 0 :(得分:4)

您的代码有死锁。在MPI_Bcast之后,您的MPI_RecvMPI_Send不匹配,导致您的代码挂起。我假设你问你的问题,你认为你需要MPI_Recv来接收通过MPI_Bcast发送的信息,但这是不正确的。 MPI_Bcast命令本身(之后没有MPI_Recv)将达到你想要的效果。