2012-05-26 68 views
2

據我所知,並行處理消息傳遞接口和多線程有兩種方式。沒有消息傳遞接口的多線程不能用於分佈式內存系統;但消息傳遞接口可用於系統「共享內存」和「分佈式內存」。我的問題是關於與MPI並行並在共享內存系統上運行的代碼的性能。該代碼的性能與多線程並行處理的代碼的相同範圍內?共享內存系統上的消息傳遞接口性能

更新:

我的工作是在該流程需要與對方反覆溝通和通信數組可以是200 * 200矩陣

+0

你知道OpenMP嗎?還有很多其他的並行化方案。 – betabandido

+0

是的,我知道;但是所有方法的基礎都分爲雙向多線程和消息傳遞。 – peaceman

回答

2

假設我們只考慮MPI和OpenMP ,因爲它們是你提到的兩個並行編程系列的兩個主要代表。對於分佈式系統,MPI是不同節點之間唯一的選擇。然而,在單個節點中,正如你所說,你仍然可以使用MPI並使用OpenMP。哪一個性能更好取決於你正在運行的應用程序,特別是計算/通信比率。 Here您可以看到多核處理器MPI和OpenMP的比較,他們確認了相同的觀察結果。

您可以更進一步並採用混合方法。在節點之間使用MPI,然後在節點內使用OpenMP。這就是所謂的混合MPI + OpenMP並行編程。您也可以在包含混合CMP + SMT處理器的節點中應用此功能。

您可以查看一些信息herehere。此外this paper比較了MPI方法與混合MPI + OpenMP方法。

2

答案是:它取決於。 MPI進程主要是獨立的OS進程,當通信進程運行在同一個共享內存節點上時,它們之間的通信通過某種共享內存IPC技術發生。作爲獨立的OS進程,MPI進程通常不會共享數據,有時必須在每個進程中複製數據,導致內存使用量不足。另一方面,線程可以共享大量數據,並且可以受益於緩存重用,特別是在具有大型共享最後一級緩存(例如當前一代x86 CPU上的L3緩存)的多核CPU上。與線程之間數據交換的更輕量級方法(通常只是同步,因爲工作數據已經共享)相結合時,緩存重用可以導致比獨立進程獲得更好的性能。

但再一次 - 這取決於。

0

在我看來,他們只是在不同的工作更好。 Actor模型非常擅長在不同時間執行許多不同的任務,而OpenMP/TBB/PPL模型非常適合以非常簡單和可靠的方式並行執行一項任務。