在mpi中定义全局变量
Defining global variables in mpi
我在下面写了一个示例代码:
#include <stdio.h>
#include <mpi.h>
double x;
int main (int argc, char **argv) {
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank==0) x=10.1;
MPI_Barrier(MPI_COMM_WORLD);
printf("%fn", x);
MPI_Finalize();
return 0;
}
可以注意到,这个程序实际上定义了一个名为x的全局变量,第零个线程尝试给它赋值。当我在4核的SMP(对称多处理)机器上运行这个程序时,我得到以下结果:
10.1
0
0
0
更有趣的是,当我修改代码使每个线程都打印变量x的地址,即&x时,它们都打印相同的东西。
我的问题是SMP系统上的多个线程如何可能共享变量地址的相同值,而它们不共享相同的值?
,我的第二个问题是我应该如何改变上面的代码,使我得到以下结果?
10.1
10.1
10.1
10.1
你可以使用broadcast:
MPI_Bcast(&x,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
这将把进程0上的x值发送给所有其他进程。
相关文章:
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 包括一个类来定义全局变量参数 c++ :(
- 访问另一个.cpp文件中的.cpp文件中定义的全局变量
- 在主循环外部多个文件上定义全局变量
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 全局使用变量定义和C 声明
- 如何访问从C 编译的动态库中定义的全局变量
- 即使在定义类后也无法在C++中声明全局变量?
- 我们可以通过使用 "dot" 运算符在类之外定义类变量来制作全局变量吗?
- 当在其中定义全局变量时,如何在.cpp中包含 C 样式的 .h
- 在 main() 中定义全局变量
- 如何管理多个文件、全局变量和定义
- C 使用c库,其中包含标题文件中定义的全局变量
- 从定义变量的位置以外的程序中检索 C 全局变量
- 我可以在 MFC 应用程序中定义全局变量的位置
- 如何在if/else序列中定义未知类型的全局变量
- GCC链接器抱怨对现有全局变量的未定义引用
- 当 f & g 修改相同的全局变量时,表达式 f() 的值是否> g() 未定义或未指定?
- 将全局变量定义为散列