在mpi中定义全局变量

Defining global variables in mpi

本文关键字:全局变量 定义 mpi      更新时间:2023-10-16

我在下面写了一个示例代码:

#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值发送给所有其他进程。