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

时间:2012-05-23 15:03:10

标签: 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;
}

我使用以下命令运行它:

aprun -n 4 test

我的输出是

master
master
master
master

我期待像

这样的东西
slave
master
slave
slave

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

1 个答案:

答案 0 :(得分:6)

问题出在这一行:

int myRank = MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

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

int myRank;
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

它会起作用。