2014-10-28 183 views
0

我開始學習MPI。我剛開始做一個簡單的例子:我有一個矩形,它被分成兩個子框。我已經說過每個盒子中有N/2個粒子(總計爲N個粒子)。我使用兩個進程/內核來完成這項工作。第一個核心處理第一個子盒子,第二個核心處理第二個子盒子。在一段時間內,粒子從一個子盒子交叉到另一個子盒子。我相信我必須使用MPI_Send和MPI_Recv來完成這項工作。但我不明白的是,如果每次都有多個粒子跨越(從一個核心到另一個核心),我如何高效地使用MPI_Send/Recv或MPI_Sendrecv?我忘了說我不知道​​每次穿越的粒子數量。對不起如果問題太簡單/愚蠢。通過MPI_Send/recv發送和接收多個元素

+1

你將粒子數據打包到一個連續的數組中並一次發送全部 – 2014-10-28 13:12:38

+0

感謝您的回覆@HristoIliev ....我實際上有兩個以上的子盒子......我希望我可以爲兩個以上的子盒子做這件事 – 2014-10-28 14:01:02

+0

有很多平行的分子動力學軟件包,比如NA MD,LAMMPS,DL_POLY_4等,它們使用空間域分解技術。所以是的,你可以做兩個以上的子盒子:) – 2014-10-28 15:41:41

回答

0

有很多的選擇:

  • 你可以做一些簡單的像使用MPI_ALLTOALL交換顆粒的數量在所有的子盒。然後使用點對點通信傳達實際的粒子。
  • 您可以使用社區集體只與您的鄰居通信使用MPI_NEIGHBOR_ALLTOALL
  • 您可以使用所有鄰居之間的點對點非阻塞通信來交換粒子的數量和內容。
  • 你可以使用MPI_PROBE來確定正在發送給您(如果不發送粒子以某種方式傳達想法的消息顆粒的數量。

所以,是的,這是可能的。有很多你可能需要了解更多關於MPI才能使用它們的任何一個

+1

「...帶有一個信息,如果沒有粒子被髮送的話可以傳達想法」 - 發送空(零計數)消息在MPI中是完全合法的。當循環計數器中使用'MPI_GET_COUNT'的返回值時,甚至不需要編寫特殊的邏輯來處理這種情況。 – 2014-10-28 18:49:45

+0

這將工作。無論爲OP運作什麼。關鍵是有很多選擇。 – 2014-10-28 20:04:22

+0

非常感謝你們的答案..我很驚訝地看到有多驚人的Stack Overflow! – 2014-10-29 09:45:48