我有一个想用 MPI 编写的模拟,我已经开始在网上阅读它。在我的模拟中,我有一个函数,我将参数作为指向粒子数组的指针传递给它,因为我需要在模拟期间对其进行修改。现在,我不完全了解 MPI 的工作原理,所以我编写了这个小程序。
#include <stdio.h>
#include "mpi.h"
void function(int* a)
{
int size, rank;
MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank!=0)
{
printf("%d ", *a);
printf("process: %d", rank);
}
else
{
(*a)++;
printf("%d ", *a);
printf("process: %d", rank);
}
printf("\n");
MPI_Finalize();
}
int main (void) {
int a,i;
i=0;
a=5;
function(&a);
printf("%d %d\n",a,(i++));
printf("%d\n", i);
return 0;
}
当我运行它时:mpirun -np 2 ./program
我得到如下输出:
6 process: 0
5 process: 1
5 0
6 0
1
1
这是否意味着每个进程都有自己的变量副本a
和i
,以及在我调用MPI_Finalize()
内部之后 MPI 是否仍在运行function()
。