为什么rank总是1
why always rank is 1?
我正在测试一个非常基本的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
运行代码为什么在第二种方法中,rank总是打印为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 (false)的反义词是1 (true)。然后,if
计算该赋值的结果。这一行和
rank = !0; // ie. set rank = 1
if (rank) // 1 is true
你应该拥有的是:
if (rank != 0)
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- QueryWorkingSet总是返回false
- 无论条件是否为true,if总是在c++中执行
- C++A*算法并不总是在路径中具有目标节点
- 为什么(-1)%vector::size()总是返回0
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 类型总是使用其大小存储在内存中吗
- 使用std::istream::peek()总是安全的吗
- OpenMP:并行更新数组总是需要减少数组吗
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 在线程之间拆分任务总是值得的吗?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 为什么rank总是1