2

我开始使用 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

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

4

1 回答 1

6

问题出在这一行:

int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

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

int myRank;
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

它会起作用。

于 2012-05-23T15:09:14.660 回答