MPI에서 쓰고 싶은 시뮬레이션이 있으며 온라인으로 읽었습니다. 내 시뮬레이션에서는 필자가 시뮬레이션 중에 수정해야하기 때문에 필자가 입자 배열에 대한 포인터로 인수를 전달하는 함수가 있습니다. 이제는 MPI가 어떻게 작동하는지 완전히 이해하지 못하여이 작은 프로그램을 작성했습니다. mpirun -np 2 ./program
내가 출력 아래와 같이 가지고 : 나는 그것을 실행함수 및 함수 인수 내에서 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;
}
6 process: 0
5 process: 1
5 0
6 0
1
1
이합니까 각 프로세스 변수 a
및 i
의 복사본을 가지고 의미하며, 내가 MPI_Finalize()
을 function()
이라고 부른 후에도 MPI는 어떻게 작동합니까?
각 프로세스가 자체 복사본을 갖도록 내가했던 것처럼 변수를 정의하는 것이 "현명한"방법입니까? –
사실 그것이 유일한 방법입니다. MPI 호출을 사용하여 값을 전달함으로써 명시 적으로 공유하지 않고 "공유 된"변수에 대한 개념은 없습니다. –