2011-02-16 74 views
0

我寫了一個似乎運行正常的MPI程序,但我想知道性能。主線程需要執行10次或更多次MPI_Send,並且工作者接收數據10次或更多次併發送它。我想知道它是否會帶來性能損失,以及我是否可以將所有內容都轉換爲單一結構,或者我可以從中受益。改進MPI程序

其他一般問題,一旦mpi程序或多或少地工作,什麼是最佳優化技術。

+0

優化高度依賴於代碼,在優化書籍是巨大的。嘗試使用分析器檢查較慢的部分,然後在這裏發佈他們的代碼。 – BlackBear 2011-02-16 16:03:35

回答

2

通常情況下,發送1個大消息比發送10個小消息要快。發送消息的時間成本通過考慮延遲(發送空的消息需要多長時間(因爲函數調用的開銷,網絡延遲等而非零)和帶寬(多少考慮到網絡通信已經開始,發送額外的字節所需的時間越長)。通過將消息捆綁到一條消息中,您只需花費一次延遲成本,這通常是一個勝利(儘管總是可能提出不是的情況)。瞭解任何特定代碼的最好方法是簡單地嘗試。請注意,MPI數據類型允許您以非常強大的方式來描述數據在內存中的佈局,以便您可以將其直接從內存中提取到網絡,而無需在某個緩衝區中執行中間複製(所謂的「編組」數據)。

至於關於MPI的更一般的優化問題 - 不知道更多,我們所能做的就是給你提供一些非常有用的建議。最大限度地減少需要完成的通信量;儘可能使用內置的MPI工具(集體等),而不是實現自己的。

0

完全理解MPI應用程序性能的一種方法是在SimGrid平臺模擬器中運行它。所提供的工具和模型足以獲得對中等應用程序(例如,幾十萬行C或Fortran)的實際時序預測,並且它可以與適合的可視化工具相關聯,可幫助您充分理解正在發生的事情在您的應用程序中,以及您必須考慮的實際性能折衷。

對於演示,請參閱本截屏:https://www.youtube.com/watch?v=NOxFOR_t3xI