我从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);
它会工作。