2012-08-28 36 views

回答

4

我可以想到兩種情況:當你編寫多線程代碼或庫。

原因是MPI通信器是消息匹配上下文的一部分。如果您在庫中的MPI調用中使用MPI_COMM_WORLD,並且也從用戶代碼中使用MPI_COMM_WORLD,則可能會匹配錯誤的消息。在庫代碼中使用特殊標記很脆弱,因爲用戶代碼可能使用相同的標記。只是做一個單獨的傳播者就容易多了。

多線程代碼的問題是相同的 - 消息匹配,除了更多的機會出錯。例如,如果您在多線程代碼中使用集體調用,則不再有用於區分它們的標記,並且會導致未定義的行爲。

最後,刪除對MPI_COMM_WORLD的依賴可以使您的代碼更加模塊化。例如,假設你爲一些計算寫了一個類。稍後,您可能希望將此類包含在另一個程序中,但僅對節點的子集進行計算。如果類構造函數需要一個參數,MPI_Comm_dup和它的工作 - 整合很容易。如果MPI_COMM_WORLD被硬編碼,那麼一些重構將是有序的。

特別是在C++中,您可能會將程序的獨立部分封裝在類中。將它們視爲小型庫並使它們彼此獨立可能是有益的,因此使用它們的代碼不必擔心組合可能如何起作用。

相關問題