我正在嘗試使用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. 通過jQuery選擇隨機p節點
- 3. XPath隨機選擇子節點
- 4. MPI掛在MPI_Send上發送大消息
- 5. MPI發送消息與MPI_Send和MPI_Reduce
- 6. CAPL塊節點發送消息
- 7. 將消息發送到erlang的遠程節點端口
- 8. 發送消息到JBoss集羣域中的所有節點
- 9. 使用Codeigniter發送消息到手機
- 10. 發送消息到WCF主機進程
- 11. 發送ems消息從pc到手機
- 12. 從linq選擇一個隨機節點到xml
- 13. 從一個節點發送Erlang消息到另一個節點返回badarg
- 14. 播放框架發送AnyContentAsMultipartFormData消息到aka節點
- 15. 發送下游消息到谷歌ccs與節點js
- 16. 如何發送消息到另一個節點?
- 17. 發送消息從一個節點到其鄰居
- 18. 從隨機到不隨機選擇列
- 19. SignalR發送消息給隨機數的客戶端
- 20. 隨機時間的隨機消息
- 21. 以編程方式將點擊消息發送到ListView以選擇/取消選擇項目
- 22. 同時在MPI中的所有節點之間傳遞消息
- 23. 發送消息或收到消息?
- 24. 在具有最高屬性值的節點之間選擇隨機節點
- 25. 如何使用BotKit在Slack上隨機發送一條消息?
- 26. MPI連續發送和接收循環中的消息
- 27. 無法發送超過一定長度的MPI消息
- 28. PHP隨機消息褪色到下一個隨機消息在20秒
- 29. SleekXMPP可以隨意發送消息並仍然監聽收到的消息。
- 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