C++ 为什么排名总是1?

C++ 为什么排名总是1?,c++,C++,我正在测试一个非常基本的MPI代码: int main(int argc, char** argv){ MPI_Init(&argc, &argv); int size, rank; MPI_Status status; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(rank == 0) cout << "

我正在测试一个非常基本的MPI代码:

int main(int argc, char** argv){

  MPI_Init(&argc, &argv);
  int size, rank;
  MPI_Status status;
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

  if(rank == 0)
    cout << "world size" << size << " my rank " << rank;
  else
    cout << rank << endl;
  MPI_Finalize(); 
  return 1;
}
没关系

当我将代码更改为以下内容时:

int main(int argc, char** argv){

  MPI_Init(&argc, &argv);
  int size, rank;
  MPI_Status status;
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

  if(rank == 0)
    cout << "world size" << size << " my rank " << rank;
  if(rank =! 0)                                                                                                                                                                                           
    cout << rank << endl;
  MPI_Finalize();
  return 1;
}
我使用-np4运行代码


为什么在第二种方法中,秩总是打印为1?

正如您可能注意到的,秩最初是0,然后被设置为1。仔细观察你的输出。如果
rank
为1,则不会打印出
01
。它正在打印第一行
cout
int main(int argc, char** argv){

  MPI_Init(&argc, &argv);
  int size, rank;
  MPI_Status status;
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

  if(rank == 0)
    cout << "world size" << size << " my rank " << rank;
  if(rank =! 0)                                                                                                                                                                                           
    cout << rank << endl;
  MPI_Finalize();
  return 1;
}
world size111                                                                                                                                                                                               
4
my rank 
01
if(rank =! 0)
rank = !0; // ie. set rank = 1
if (rank)  // 1 is true
if (rank != 0)