我開始學習MPI。我剛開始做一個簡單的例子:我有一個矩形,它被分成兩個子框。我已經說過每個盒子中有N/2個粒子(總計爲N個粒子)。我使用兩個進程/內核來完成這項工作。第一個核心處理第一個子盒子,第二個核心處理第二個子盒子。在一段時間內,粒子從一個子盒子交叉到另一個子盒子。我相信我必須使用MPI_Send和MPI_Recv來完成這項工作。但我不明白的是,如果每次都有多個粒子跨越(從一個核心到另一個核心),我如何高效地使用MPI_Send/Recv或MPI_Sendrecv?我忘了說我不知道每次穿越的粒子數量。對不起如果問題太簡單/愚蠢。通過MPI_Send/recv發送和接收多個元素
回答
有很多的選擇:
- 你可以做一些簡單的像使用
MPI_ALLTOALL
交換顆粒的數量在所有的子盒。然後使用點對點通信傳達實際的粒子。 - 您可以使用社區集體只與您的鄰居通信使用
MPI_NEIGHBOR_ALLTOALL
- 您可以使用所有鄰居之間的點對點非阻塞通信來交換粒子的數量和內容。
- 你可以使用
MPI_PROBE
來確定正在發送給您(如果不發送粒子以某種方式傳達想法的消息顆粒的數量。
所以,是的,這是可能的。有很多你可能需要了解更多關於MPI才能使用它們的任何一個
「...帶有一個信息,如果沒有粒子被髮送的話可以傳達想法」 - 發送空(零計數)消息在MPI中是完全合法的。當循環計數器中使用'MPI_GET_COUNT'的返回值時,甚至不需要編寫特殊的邏輯來處理這種情況。 – 2014-10-28 18:49:45
這將工作。無論爲OP運作什麼。關鍵是有很多選擇。 – 2014-10-28 20:04:22
非常感謝你們的答案..我很驚訝地看到有多驚人的Stack Overflow! – 2014-10-29 09:45:48
- 1. 通過ActiveMQ發送和接收PDF
- 2. 通過GameKit發送和接收NSData
- 3. 通過多個接口發送/接收數據
- 4. 通過多處理髮送和接收異步.Pipe()in Python
- 5. Java通過Socket發送和接收多條消息
- 6. 通過AWS SNS發送和接收推送通知
- 7. 通過curl發送和接收字符串通過http
- 8. 通過tcpclient發送/接收對象
- 9. WindowsPhone - 通過USB發送/接收數據
- 10. 通過REST發送/接收圖像
- 11. JAVA通過json發送/接收信息
- 12. 通過Arduino發送/接收短信
- 13. 通過套接字發送和接收數據python3
- 14. 通過TCP套接字發送和接收數據的問題
- 15. 通過C#套接字正確發送和接收?
- 16. 通過http連接發送和接收字符串android
- 17. 通過套接字發送和接收數據
- 18. 通過套接字發送和接收數組
- 19. 在Python中通過套接字發送和接收輸出
- 20. 如何通過套接字發送和接收Java對象?
- 21. 通過郵件發送HTML元素
- 22. 在套接字中發送多個發送/接收
- 23. 從一個發送者/接收者併發地接收/發送
- 24. 如何通過PHP發送和接收標頭
- 25. 是否有限制通過ajax發送和接收數據
- 26. 通過NSNotificationCenter在swift中發送和接收消息?
- 27. 發送和接收通過串行端口.txt文件在c#
- 28. 在Delphi上通過POST發送和接收XML
- 29. 通過Rails應用程序發送和接收電子郵件
- 30. Android,通過HTTP POST方法發送和接收XML
你將粒子數據打包到一個連續的數組中並一次發送全部 – 2014-10-28 13:12:38
感謝您的回覆@HristoIliev ....我實際上有兩個以上的子盒子......我希望我可以爲兩個以上的子盒子做這件事 – 2014-10-28 14:01:02
有很多平行的分子動力學軟件包,比如NA MD,LAMMPS,DL_POLY_4等,它們使用空間域分解技術。所以是的,你可以做兩個以上的子盒子:) – 2014-10-28 15:41:41