2017-08-27 50 views
1

我的問題可能是微不足道的。我使用MPI庫對一個CFD代碼進行了並行處理,現在我正試圖調查我的並行效率。首先,我創建了一個案例,它將提供行列中相同的負載和對傳輸數據的計算量的恆定比率。因此,我的期望是,當我增加等級時,任何運行時變化都將僅歸因於通信延遲。然而,我意識到不調用等級通信的子程序(因此它們只執行域計算,因此它們處理所有等級的相同負載)顯着貢獻 - 實際上是最大運行時增加。我在這裏錯過了什麼?這甚至有意義嗎?並行效率下降不一致

+2

可能應該發佈代碼來重現您的問題。你可以將它編輯成你的問題。 –

+0

如果您的應用程序受內存限制,則同一套接字上的所有隊列將共享相同的內存帶寬。這將解釋效率下降 –

+0

對不起科迪格雷,但我不能分享代碼由於工業產權問題 – makmarios

回答

0

這是否有意義?

您創建的進程越多(every process has a rank),越能達到系統以真正並行方式執行進程的能力的限制。

您的系統(例如您的計算機)可以並行運行一定數量的進程,當超過此限制時,某些進程將等待執行(因此並非所有進程都並行運行),這會損害性能。

例如,假設一臺計算機有4個內核,並且您創建了4個進程,那麼每個內核都可以執行一個進程,因此進程之間的通信會損害您的性能(如果有的話)。

現在,在同一臺計算機上,您將創建8個進程。會發生什麼?

4個進程將開始並行執行,但其他4個將等待使內核可用,以便它們也可以運行。這不是一個真正的並行執行(某些進程將以線性方式執行)。而且,根據操作系統調度策略,某些進程可能會交織,導致每臺交換機都會產生開銷。

+0

更糟糕的是,他們將交錯,導致每個交換機開銷。 –

+0

這將是瘋狂@MadPhysicist。我更新了答案,你現在喜歡嗎? – gsamaras

+1

瘋狂如何做dat :​​-) –