1
我有,我想在MPI寫一個仿真和我已經開始在網上讀到它。在我的模擬中,我有一個函數,我將參數作爲指針傳遞給粒子數組,因爲我需要在模擬過程中對其進行修改。現在,我不完全理解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
副本,在function()
內撥打MPI_Finalize()
之後,MPI如何仍在運行。
它是一個「聰明」的做法,像我一樣,使每個進程都有它自己的拷貝來定義一個變量? –
這實際上是唯一的方法。沒有通過傳遞MPI調用周圍的值來顯式共享「共享」變量的概念。 –