gpt4 book ai didi

c++ - 为什么总是等级是1?

转载 作者:行者123 更新时间:2023-11-30 05:23:57 24 4
gpt4 key购买 nike

我正在测试一个非常基本的 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;
}

此代码打印:

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 .它实际上被视为 bool 值赋值,0(假)的反义词是 1(真)。 if然后评估该分配的结果。所以这条线本质上是一样的:

rank = !0; // ie. set rank = 1
if (rank) // 1 is true

你应该拥有的是:

if (rank != 0)

关于c++ - 为什么总是等级是1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com