2016-11-10 54 views
0

我是MPI的新手,在研究了基礎之後,我仍不明白如何利用mpi來並行執行兩個函數,一個用於第一部分元素,第二個用於第二部分。 例如:如何使用MPI並行化函數C++

for(int i = 0; i < argc/2; i++){ 
    function(el[i]); 
} 

for(int i = 0; i < argc-1; i++){ 
    function(el[i]); 
} 

如何使用MPI_SEND,MPI_RECV ECC?

回答

0

MPI是一個多處理器庫,不是多線程庫。因此,數據被分割並且不能被看作是核心可以在其上處理其一部分的單個陣列。

這裏,爲了處理數據,每個內核需要有一個包含一半數據的數組。隨着MPI_SEND和MPI_RECV,它會是這個樣子

Get rank and number of proc 
Create subarray 
Pass parts of initial array from proc 0 to other procs (With MPI_SEND for proc 0 and MPI_RECV for others) 
Each proc do the calculation 
Reunite the results with a new set of send/recv 

,它存在過的一些功能後,使數據傳播和

好運

+0

感謝reunificating容易! 這就是我期待的 – Giuseppe

+0

我只有一個問題,你是什麼意思:用新的send/recv集合重新結果 – Giuseppe

+0

它取決於你的結果,但是如果函數修改你的元素並且你需要一個處理器哪些知道所有的結果,那麼你需要一個結果標籤,使所有的數組重新聚集。 如果你不需要,你不需要收集結果。但通常情況下,處理器需要知道所有結果,並且需要統一步驟。 – RaymoAisla