2012-05-29 52 views
1

我有這個數組[1 2 3 4 5 6 7 8 9],我正在執行掃描操作。收集MPI_SCAN的結果

我有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所做的。它適用在掃描操作的elementwise對存儲在每個節點上的輸入陣列的每個個元件,結果會更喜歡:

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

儘管如此,爲了獲得想要,則結果應(從第一次掃描中任務0的最後一個元素)添加6所有元素在接下來的掃描:

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

那麼你應該在任務1 掃描添加15(最後一個元素前被添加)到下一次掃描中的所有元素等等。

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

另外,您可以添加6只能從第二掃描結果,然後從第三掃描添加21的結果等等。

也許你可以找到一些聰明的方法來做到這一點使用MPI操作。

+0

+1;我們可以通過在數組的最後一個元素上使用MPI_Scan(例如,獲取6和15)來實現上述過程,然後如上所述繼續,但是如果所有內容都將被髮送到處理器0,那麼這是一個更好的方法這樣做的方式,因爲沒有額外的通信開銷。 –