为什么我所有的mpi线程都是大师?

Mik*_*ail 2 c++ mpi

我开始使用MPI并编写了一个快速演示程序:

int main(int argc, char** argv)
{
    MPI_Init(&argc, &argv);
    int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
    if (myRank) {
    cout << "slave" << endl;
    }
    else {
    cout << "master" << endl;
    }
    MPI_Finalize();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令运行它:

aprun -n 4 test
Run Code Online (Sandbox Code Playgroud)

我的输出是

master
master
master
master
Run Code Online (Sandbox Code Playgroud)

我期待着类似的东西

slave
master
slave
slave
Run Code Online (Sandbox Code Playgroud)

为什么会这样?为什么我的所有主题都是主人?

bet*_*ido 6

问题出在这一行:

int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
Run Code Online (Sandbox Code Playgroud)

您不应将myRank分配给MPI_Comm_rank调用的结果.做就是了:

int myRank;
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
Run Code Online (Sandbox Code Playgroud)

它会起作用.

  • 这是相当尴尬的,但至少MPI_Comm_rank没有返回错误:-) (2认同)