看不懂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)将实现你想要的。