回答
我找到你的MPI程序的觀念中,所有的過程是獨立的很奇怪。我認爲,按照定義,MPI程序中的所有進程都不是獨立的,例如,在調用MPI_INIT之後,它們都在同一個通信器中,以便他們都「知道」彼此的存在。你可能已經編寫了你的代碼,以便過程在那之後不同步,但是過程之間仍然存在相互通信的手段。
研究一個機制(需要同步)是MPI_BCAST(廣播)。另一種方法是使用MPI_ISEND,這是非阻塞式發送操作,但遲早,一個進程或另一個進程必須接收,並且您的發送進程應該測試發送是否成功。
MPI標準中沒有任何內容允許將「中斷」從一個等級發送到另一個等級(或等級)。一般而言,進展需要用戶代碼不時進入MPI庫。缺乏進展,行列之間沒有標準的溝通方式。
同步要求不時有一些條目進入MPI庫。 MPI_Barrier是同步的「大錘」方法。結合MPI_Reduce_Scatter,可以知道至少有一個排名存在錯誤。
由於non-blocking communication,處理MPI時,兩個完全不同的情況是獨立的,沒有同步。
在我看來,你想要的東西可以用這種方式實現:當發生錯誤時,一個進程廣播帶有指定「錯誤」標籤的消息,並且每個進程週期性地發佈非阻塞接收消息標籤。如果他們收到這樣的消息,這意味着最近發生了錯誤,他們可以做出相應的反應,否則他們會繼續正常執行。 (請注意,在這種情況下,「廣播」並不是指MPI_Bcast
,因爲這是一個集體通信操作,因此它會阻止它,而只是將相同的消息發送給所有可能涉及的人。要保持進程之間沒有同步,那麼這個發送也必須是非阻塞的。)
良好的通話,編輯的答案澄清。 – suszterpatt 2010-05-27 09:53:23
你指出的不一致使我想知道:你爲什麼使用MPI?它似乎不適合你的問題,並且沒有太多比試圖將一個方形栓塞入MPI的圓孔更糟。 「MPI進程之間沒有同步」使得它聽起來像你已經承擔了固有的串行農業工作量,並且正試圖將其轉化爲MPI。
說,你可以簡單地通過輪詢MPI_Irecv和MPI_Test來做你想做的事情。
- 1. 從另一個線程發送通知
- 2. C++; MPI:通過MPI向向量發送結構
- 3. 如何從信號處理程序內部向其他進程發送通知?
- 4. 如何從一個qml發送信號到另一個
- 5. 如何從asp.net webapi發送一個信號通知到離子應用程序
- 6. 從C#winform應用程序向另一個用戶發送通知?
- 7. 如何發送通知從一個設備到另一個
- 8. 如何向線程發送無信號?
- 9. PyGTK與線程,gobject,從另一個線程發送信號?
- 10. 從一個laravel應用程序發送通知到另一個
- 11. 通過Laravel通知發送短信至多個電話號碼
- 12. 如何在C#.Net上通過GCM發送Android推送通知
- 13. 如何以編程方式從一個號碼向另一個號碼發送短信?
- 14. 如何從另一個模塊修改或發送信號到Python中的WebKit?
- 15. MPI發送通過指針指針c +
- 16. 發送信號通過php進程
- 17. 離子 - 一個信號推送通知發送兩次
- 18. 發信號通知線程
- 19. 如何從Firebase向node.js發送通知?
- 20. 如何通過javascript向手機號碼發送短信?
- 21. 從另一個Java進程發送一個Java進程的信號
- 22. 如何通過捲髮或終端發送Ionic推送通知?
- 23. mpi從一個通信器到另一個通信器的集體操作
- 24. 如何向Xcode的主線程發送消息或通知?
- 25. 設計建議:通過HTTP向守護進程發送信號
- 26. 如何從python程序發送信號?
- 27. 如何通過Boost :: MPI發送2d C風格的數組?
- 28. 如何使用C++ STL向量通過Boost MPI發送矩陣的列?
- 29. 如何通過串行通信向Arduino發送兩個值?
- 30. 我想通過通知發送信息
那麼,他們越獨立,越是通過減少溝通和等待時間來接近完美的並列化 – Debugger 2010-05-26 19:12:15