听不懂MPI_Bcast

Can't understand MPI_Bcast

本文关键字:Bcast MPI 听不懂      更新时间:2023-10-16

我用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_SendMPI_Recv,这会导致你的代码挂起。我假设从你提问的方式来看,你认为你需要一个MPI_Recv来接收通过MPI_Bcast发送的信息,但这是不正确的。MPI_Bcast命令本身(之后没有MPI_Recv)将实现您想要的。