我从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;
}

我使用以下命令运行它:
aprun -n 4 test

我的输出是
master
master
master
master

我期待着类似的东西
slave
master
slave
slave

为什么会这样呢?为什么我所有的线程都是高手?

最佳答案

问题在这一行:

int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

您不应将myRank分配给对MPI_Comm_rank的调用结果。做就是了:
int myRank;
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

它会工作。

07-27 13:28