2012-06-04 3 views
3

모든 배열에 길이가 같은 길이의 배열이 있습니다 (10이라고 가정 함). 배열의 일부 값에는 프로세서의 순위가 포함됩니다. 예를 들어 ...MPI를 사용하여 모든 순위의 배열 병합

Proc 1: [1 0 0 0 0 1 0 0 0 1] 

Proc 2: [0 2 2 0 0 0 0 2 2 0] 

Proc 3: [0 0 0 3 3 0 3 0 0 0] 

이제 가장 효율적인 방법은 무엇인가 (사용한 MPI-2)의 모든 프로세서 모두의 합으로 간주 될 수있는 다음의 배열

[1 2 2 3 3 1 3 2 2 1] 

끝나야 배열 (모든 순위에 분산). 1K + 코어에서이 작업을 빠르게 수행하려는 경우 성능이 중요합니다.

답변

9

이것은 MPI_Allreduce()MPI_SUM 또는 MPI_MAX 연산자로 가능합니다. MPI_Allreduce의 설명서를 참조하십시오. 주어진 아키텍처에 가장 적합한 방법 중 하나로 구현되기로되어 있습니다. 답에 대한

MPI_Allreduce(MPI_IN_PLACE, arr_a, LEN, MPI_INT, MPI_SUM, MPI_COMM_WORLD); 
+0

감사 :

int arr_a[LEN], arr_b[LEN]; ... // Fill in arr_a MPI_Allreduce(arr_a, arr_b, LEN, MPI_INT, MPI_SUM, MPI_COMM_WORLD); // Result is now in arr_b 

또는 당신이 현재 위치에서 작업을 사용할 수 있지만이 성능이 저하됩니다 메모리 부족 경우

. 나는 더 나은 것을 전혀 생각할 수 없었기 때문에 합계를 예제로 사용했습니다. 나는 그 최선의 선택을 추측한다. – stali