1
A
回答
4
我可以想到兩種情況:當你編寫多線程代碼或庫。
原因是MPI通信器是消息匹配上下文的一部分。如果您在庫中的MPI調用中使用MPI_COMM_WORLD
,並且也從用戶代碼中使用MPI_COMM_WORLD
,則可能會匹配錯誤的消息。在庫代碼中使用特殊標記很脆弱,因爲用戶代碼可能使用相同的標記。只是做一個單獨的傳播者就容易多了。
多線程代碼的問題是相同的 - 消息匹配,除了更多的機會出錯。例如,如果您在多線程代碼中使用集體調用,則不再有用於區分它們的標記,並且會導致未定義的行爲。
最後,刪除對MPI_COMM_WORLD的依賴可以使您的代碼更加模塊化。例如,假設你爲一些計算寫了一個類。稍後,您可能希望將此類包含在另一個程序中,但僅對節點的子集進行計算。如果類構造函數需要一個參數,MPI_Comm_dup
和它的工作 - 整合很容易。如果MPI_COMM_WORLD
被硬編碼,那麼一些重構將是有序的。
特別是在C++中,您可能會將程序的獨立部分封裝在類中。將它們視爲小型庫並使它們彼此獨立可能是有益的,因此使用它們的代碼不必擔心組合可能如何起作用。
相關問題
- 1. 如何避免必須使用@SuppressWarnings(「unchecked」)?
- 2. 如何避免必須使用@SupressWarnings?
- 3. 如何避免必須使用sed添加'\ n'(1)
- 4. 避免必須將DLL放在CWD中
- 5. 設置Rails應用程序以避免必須使用CORS
- 6. 如何避免在使用BeginInvoke和EndInvoke時必須傳遞/存儲委託?
- 7. React - 不使用setState更改狀態:必須避免它?
- 8. 如何避免必須引用外部XML文件?
- 9. 爲什麼我們必須避免使用conio.h?它過時了嗎?
- 10. 如何在使用wix時避免不必要的標籤
- 11. 如何避免必須編寫樣板代碼?
- 12. 如何避免在更換文件後必須清理項目?
- 13. 避免同時使用XMPP
- 14. 避免必須雙擊切換引導程序下拉菜單
- 15. Paramiko SFTP - 避免必須指定完整的本地文件名?
- 16. 避免必須在GTK彈出式菜單中滾動
- 17. 必須暫停Access 2016 VBA以避免Excel致命錯誤
- 18. 避免必須映射WCF生成的複雜類型
- 19. 避免dotnetopenauth網址中的「必須包含句點」限制
- 20. 我是否必須在spring數據中避免原生sql?
- 21. 使用字典時如何避免KeyError?
- 22. 何時使用FragmentManager.isDestroyed()?避免IllegalStateException?
- 23. 如何在使用DropShadowEffect時避免OutOfMemoryException?
- 24. 如何在使用BakcgroundWorker時避免invalidOperationException?
- 25. 如何使用EJB3.1 @Asynchronous時避免ConcurrentModificationExceptions
- 26. 如何在使用ArrayList時避免ConcurrentModificationException?
- 27. 如何避免使用scrapy時禁止
- 28. 使用KBX擴展進行調試:如何避免必須在每次代碼修改時進行部署?
- 29. 什麼時候應該使用像OSGI這樣的平臺,什麼時候必須避免?
- 30. 如何避免不必要的計算?