2012-07-03 18 views
0

爲了推廣我的問題,比方說,我有一個小集羣包括了在一個3×3矩陣排列的9個節點的:MPI_Comm實例是全局還是私有的?

6 7 8 
3 4 5 
0 1 2 

我試圖幾個「當地」溝通(MPI_Comm),其中包括:

  1. 當前節點的等級和
  2. 那些相鄰節點。

我試圖從MPI_Comm_World中分離節點,併爲每個節點創建新的通信器,但未能使用新的通信器,因爲它似乎包含的行列不是當前節點。

所以這裏是我的問題,是否有可能只爲所有節點使用一個變量,比如說,每個節點包含不同等級的local_comm。或者我必須使用不同的成員變量等預先低於

MPI_Comm local_comm_0 = {0, 1, 3}; 
MPI_Comm local_comm_4 = {1, 3, 4, 5, 7}; 
MPI_Comm local_comm_7 = {4, 6, 7, 8}; 

等等

感謝。

+3

這看起來像一個企圖編寫代碼來做什麼*笛卡兒傳播者已經提供。如果'MPI_CART_CREATE'不是您想要的,請進一步解釋。 –

+0

MPI_CART_CREATE是我需要的,謝謝你的提示。 – Gnavvy

回答

2

可以在所有節點上都有一個名稱相同的變量,但您可能不想。一個節點將具有一個通信器,該通信器包含與其每個鄰居不同的一組節點。在你的例子中,節點4和7是相鄰的,但是在它們的通信器中有不同的節點集合。這會引起頭痛。

一個比較好的主意(儘管它完全取決於你在做什麼)將使用MPI_Cart_create來定義處理器的矩陣,然後使用普通的Sends和Recvs(或ISends和IRecvs)來進行通信。這裏有一個MPI_Cart_create示例:http://mpi.deino.net/mpi_functions/MPI_Cart_create.html

如果節點集合是完全不相交的(如{0,3,6},{1,4,7},{2,5,9}),那麼我建議創建不同的通信器並給它們相同的變量名稱。但我不認爲這將是您的問題的正確解決方案。