我想使用異步通信加快我的MPI-程序。但使用時間保持不變。工作流程如下。MPI_Isend/Irecv:是否有可能同時訪問未使用的內存位置上的發送緩衝區
before:
1. MPI_send/ MPI_recv Halo (ca. 10 Seconds)
2. process the whole Array (ca. 12 Seconds)
after:
1. MPI_Isend/ MPI_Irecv Halo (ca. 0,1 Seconds)
2. process the Array (without Halo) (ca. 10 Seconds)
3. MPI_Wait (ca. 10 Seconds) (should be ca. 0 Seconds)
4. process the Halo only (ca. 2 Seconds)
測量表明,Array-core的通信和處理對於常見的工作負載幾乎是相同的。所以不同步應該幾乎隱藏通信時間。 但它dosn't。
一個事實 - 我認爲這可能是問題 - 是sendbuffer也是計算的數組。儘管通信只訪問Halo(具有派生數據類型)並且計算只訪問數組的核心(只讀),但MPI是否可能序列化內存訪問?
有沒有人知道這是肯定的原因?
它可能是實現依賴(我正在使用OpenMPI)?
在此先感謝。
如果消息足夠大以至於無法通過MPI實現進行內部緩衝,那麼後者將不會開始發送消息,直到接收方發佈匹配的接收爲止。你能發佈你的部分代碼嗎? – 2012-07-17 20:52:30