2012-05-29 4 views
1

이 어레이 [1 2 3 4 5 6 7 8 9]가 있고 그 스캔 작업을 수행하고 있습니다.MPI_SCAN의 결과 수집

I 3 개 MPI 작업이 각 태스크 3 개 요소를 얻는다는 각 작업은 스캔을 산출하고 반환 작업을 마스터 발생

task 0 - [1 2 3] => [1 3 6] 
task 1 - [4 5 6 ] => [4 9 15] 
task 2 - [7 8 9] => [7 15 24] 

지금 태스크 0 모든 결과 [1 3 6] [4 9 15를 얻는다 ] [7 15 24]

이러한 결과를 결합하여 최종 스캔 출력을 생성하려면 어떻게해야합니까? 어레이

최종 스캔 출력 것 [1 3 6 10 15 21 28 36 45]

사람 내게주세요 도울 수 있는가?

답변

4

독자적인 스캔 작업을 구현하려고합니까? 이것은 MPI_SCAN이하는 것이 아니기 때문에. 만약, 당신이 원하는 결과를 얻기 위해,

rank 0 - [1 2 3] => [ 1 2 3] 
rank 1 - [4 5 6] => [ 5 7 9] 
rank 2 - [7 8 9] => [12 15 18] 

그럼에도 : 각 노드에 저장된 입력 어레이의 각 I에게 번째 요소 위에 주사 동작 elementwise을 적용하고 그 결과 더 같을 것 다음 검색의 모든 요소 (작업 0의 첫 번째 검사에서 마지막 요소) 6를 추가해야합니다 :

[ 1 3 6][ 4 9 15][ 7 15 24] 
      +6 --------------> 
      = 
[ 1 3 6][10 15 21][13 21 30] 

는 그런 다음 작업 1 의 검사에서 15 (마지막 요소를 추가해야합니다,637 전에이 추가되었습니다)를 다음 스캔에서 모든 요소에 추가합니다.

[ 1 3 6][10 15 21][13 21 30] 
        +15 ----> 
        = 
[ 1 3 6][10 15 21][28 36 45] 

또는 당신은 등 세 번째 검사에서 결과에 21를 추가하고, 단지 두 번째 검사에서 결과에 6를 추가 할 수 있습니다.

어쩌면 MPI 작업을 사용하여 영리한 방법을 찾을 수 있습니다.

+0

+1; (예를 들어, 6과 15를 얻기 위해) 배열의 마지막 요소에 MPI_Scan을 사용하고 위와 같이 진행하면 위와 같이 처리 할 수 ​​있습니다.하지만 모든 것이 프로세서 0으로 전송된다면 이것은 훨씬 더 좋습니다 방법은 추가 통신 오버 헤드가 없기 때문에 가능합니다. –