我正在嘗試使用MPI實現分佈式遺傳算法(島模型)。所有節點都會重複生成新的種羣,並在每次迭代後交換最佳個體。我希望使交換隨機,以便任何進程都可以向任何其他進程發送消息。因此,每進行一次k次迭代後,每個進程都會向隨機選擇的進程發送消息。但是,我不確定如何使用MPI實現此功能。從這篇文章 - Sending data to randomly selected hosts by using MPI我得到這樣的想法,異步通信將是有益的,但我不知道如何。mpi發送消息到隨機選擇的節點
0
A
回答
3
隨機通信模式很難在MPI中實現。 MPI基於所有具有確定性通信模式的等級。
對於點對點解決方案,每個等級將在MPI_ANY_SOURCE上調用MPI_Irecv。當數據交換髮生時,每個等級可以調用MPI_Send到特定的目標等級。目標等級需要再次調用MPI_Irecv來爲下一次迭代做準備。作業完成後,任何未使用的MPI_Irecv調用都可以是MPI_Cancel'd。
對於一個集體方法,每個等級將調用MPI_Alltoall或MPI_Alltoallv(如果交換的數據量不同)。每個等級只會將數據填充到隨機選擇接收數據的單個等級中。這種「稀疏」數據交換與MPI_Alltoall非常相似。這個集合可能很昂貴,但它確實允許每k次迭代進行一次硬同步,並避免清理MPI_Cancel。
相關問題
- 1. 隨機選擇XSLT中的節點
- 2. XPath隨機選擇子節點
- 3. 通過jQuery選擇隨機p節點
- 4. MPI掛在MPI_Send上發送大消息
- 5. 將消息發送到erlang的遠程節點端口
- 6. 發送消息到JBoss集羣域中的所有節點
- 7. 使用Codeigniter發送消息到手機
- 8. 發送ems消息從pc到手機
- 9. 發送消息到WCF主機進程
- 10. 發送消息從一個節點到其鄰居
- 11. SignalR發送消息給隨機數的客戶端
- 12. 隨機時間的隨機消息
- 13. 以編程方式將點擊消息發送到ListView以選擇/取消選擇項目
- 14. 如何使用BotKit在Slack上隨機發送一條消息?
- 15. PHP隨機消息褪色到下一個隨機消息在20秒
- 16. 隨機選擇
- 17. 隨機選擇
- 18. 隨機選擇
- 19. CodeIgniter PHP - 如何隨機選擇語言類消息?
- 20. 在數組中選擇隨機字符串以打印消息
- 21. 如何在節點中的CPU內核之間發送消息?
- 22. Omnet ++:同時發送來自多個節點的消息
- 23. 壓縮Erlang節點之間發送的消息
- 24. 發送消息到Twitter
- 25. 發送消息到對象
- 26. 如何在MPI編程中隨機選擇主處理器?
- 27. 如何從SPARQL中選擇隨機DBPedia節點?
- 28. 根據條件從xmllist中選擇隨機xml節點
- 29. 使用LINQ來選擇一個隨機XML節點
- 30. 發送消息
謝謝!如果兩個發件人生成同一個接收者的ID,並且因此都將消息發送給相同的消息,那麼是否會丟失消息?你也可以澄清有兩個MPI_IRecv的點嗎? – vjain27 2013-04-27 02:15:18
在點對點解決方案中,在任何給定時間,每個級別MPI_ANY_SOURCE上只有一個MPI_IRecv未完成。如果消息匹配,則應發佈新的MPI_Irecv以允許接收「下一個」隨機消息。我沒有考慮「我」排名都是隨機挑選相同目標等級的情況。在這種情況下,MPI_Alltoall解決方案將更可取。點對點案例的困難在於,需要單獨的「全部清除」消息或集體調用以允許所有隊伍知道是時候進行下一組迭代。 – 2013-04-27 02:26:50
一個很好的答案。不過,我認爲實施異步解決方案會很有趣。我曾經爲我的畢業論文做過這樣的工作,它比同步算法快得多,並且質量相當。然而,我使用了主從方法,並且僅對評估進行了並行處理。主人維護一個工作和閒置奴隸列表,以決定在哪裏發送解決方案。 – Andreas 2013-04-28 06:14:32