为什么总是等级是1?
问题描述:
我正在测试一个非常基本的MPI代码:为什么总是等级是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;
else
cout << rank << endl;
MPI_Finalize();
return 1;
}
此代码打印:
world size1324 my rank
0
这是确定。
当我这样做的代码更改为以下:
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
我运行-np 4
代码为什么在第二种方法,等级总是打印为1?
答
正如您可能注意到或可能没有注意到的,rank
最初为0,然后设置为1.仔细查看您的输出。如果rank
为1,则不会打印出01
。它的打印第一线cout << "world size" << size << " my rank " << rank;
其中rank
为0,然后打印出的第二行cout << rank << endl;
其中rank
为1
这里的问题是这一行:
if(rank =! 0)
你是不是检查,如果rank
是而不是0
,您将rank
设置为!0
。它被有效地视为布尔值的赋值,而0(假)的相反值为1(真)。 if
然后评估该分配的结果。因此,该行基本相同:
rank = !0; // ie. set rank = 1
if (rank) // 1 is true
你应该拥有的是:
if (rank != 0)