2011-02-11 3 views
0

MPI를 사용하여 코드에서 여러 번 호출되는 함수를 병렬 처리하려고합니다. 내가 알고 싶었던 점은 함수 내에 MPI_Init을 사용하면 함수가 호출 될 때마다 프로세스가 스폰되거나 1 회만 생성된다는 것입니다. 체계적인 방법으로이를 수행 할 수있는 알려진 디자인 패턴이 있습니까?MPI를 사용하여 함수 병렬화하기

+0

(프로세스의 수는 -n mpiexec하는 매개 변수 또는 mpirun이를 통해 설정 예) 실제로는 MPICH2와 관련이 없습니다. –

+1

설명에 따르면 MPI 대신 OpenMP를 사용하는 것이 좋습니다. –

답변

2

MPI_Init()은 단지 MPI 환경을 초기화하는 것으로, 병렬 처리 자체는 수행하지 않습니다. 병렬 처리는 프로그램 작성 방법에서 비롯됩니다.

"Hello, World"와 같은 경우, printf()은 실행중인 순위 (프로세서)에 따라 다른 작업을 수행합니다. 프로세스의 수는 프로그램을 실행하는 방법에 의해 결정되는이 일반적으로 MPI에 대한 질문이 정말 때문에, MPI와 다시 태그

int main(int argc, char *argv[]) { 

     char name[BUFSIZ]; 
     int length=BUFSIZ; 
     int rank; 
     int numprocesses; 

     MPI_Init(&argc, &argv);  
     MPI_Comm_size(MPI_COMM_WORLD, &numprocesses); 
     MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
     MPI_Get_processor_name(name, &length); 

     printf("%s, Rank %d of %d: hello world\n", name, rank, numprocesses); 

     MPI_Finalize(); 

     return 0; 
} 
2

실제로 MPI (또는 분산 메모리 프로그래밍) 방식이 아닙니다. OpenMP와 같은 방식으로 함수를 병렬 처리 할 수는 없습니다. MPI에서 프로세스는 MPI_Init() 시점에 생성되지 않지만 실행 파일을 실행할 때 (예 : mpiexec의 경우, MPI_Comm_spawn()에서도 마찬가지입니다. 그 이유 중 하나는 분산 메모리 컴퓨팅에서 실행 프로세스 잠재적으로 많은 수의 비공유 노드에서 매우 많은 비용이 드는 작업입니다.

은 사용자가 호출하는 기능을 별도의 실행 파일에 포함시킴으로써 무언가를 함께 표시하지만,

관련 문제