MPI 中的变量使用

Variable use in MPI

在 MPI 中,如果我有以下代码,将为两个进程创建变量 'a' 的副本,还是我必须在每个循环内声明 'a'?还是两者相同?

main()
{
 int a;

 if(rank==0)
 {
      a+=1;
 }

 if(rank==1)
 {
   a+=2;
 }

 }

MPI 有一个分布式内存编程范例

简单地说,如果您有一个应用程序二进制文件(例如:hello.out),并且如果您 运行 它具有 mpi 运行 时间 mpirun -n 4 hello.out 那么发生的事情是:

它启动了应用程序的 4 个实例 hello.out(我们可以说它类似于在 4 个不同的节点中启动 4 个不同的应用程序)。他们彼此不认识。他们在自己的地址空间中执行自己的代码。这意味着,每个变量、函数等都属于它自己的实例,不与任何其他进程共享。所以所有进程都有自己的变量 a.

即,下面的代码将在不同的 cores/nodes 中同时调用 4 次(如果我们使用 mpirun -n 4)。因此,变量 a 将在所有 4 个实例中可用。您可以使用 rank 来识别您的 MPI 进程并操纵它的值。在下面的示例中,a 将存储进程 rank 值。所有进程都将打印 My rank is aa,取值从 04。并且只有 一个 进程将打印 I am rank 0 因为 a==0 对于 rank 0.

的进程只会是 true
main()
{
 int a;
 int rank;
 MPI_Init(NULL, NULL);
 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 a=rank;
 printf("My rank is %d",a);
 if(a==0)
 {
    printf("I am rank 0");
 }
}

因此,为了相互交互,启动的进程(例如:hello.out)使用 MPI(消息传递接口)库(如 @Hristo Iliev 评论) .

所以基本上,这就像在多个 cores/nodes 上启动相同的常规 C 程序并使用消息传递相互通信(如 Gilles Gouaillardet 在评论中指出)。