[英]Embarrasingly parallel execution, no speedup (MEEP, openMPI)
我一直在嘗試利用並行化來使用MEEP仿真軟件更快地運行一些仿真。 默認情況下,軟件僅使用一個CPU,並且通過並行化可以輕松加快FDTD模擬。 最后我發現運行1或4個核心沒有區別,模擬時間是相同的。
然后我想我會在每個核心上運行單獨的模擬以增加我的總模擬吞吐量(例如同時運行4個不同的模擬)。
我發現令人驚訝的是,每當我開始一個新的模擬時,即使它們在不同的核心上運行,已經開始的模擬也會變慢。 例如,如果我在1個核心上僅運行1次模擬,則FDTD模擬的每個時間步長大約需要0.01秒。 如果我在另一個核心上啟動另一個進程,每個模擬現在每個步驟花費0.02秒,依此類推,這意味着即使我在不同的核心上運行彼此無關的不同模擬,它們都會減速給我凈增速。
我並不一定尋求幫助來解決這個問題,因為我正在尋求幫助來理解它,因為它使我的好奇心達到了頂峰。 模擬的每個實例都需要不到總內存的1%,因此這不是內存問題。 我唯一能想到的是內核共享緩存,或者內存帶寬已經飽和,有沒有辦法檢查是否是這種情況?
模擬非常簡單,我運行的程序比這個程序的內存要多得多,並且在並行化方面有很大的加速。
有什么提示可以幫助我理解這種現象嗎?
我認為應該更好地研究更大的模擬,因為像技術這樣的渦輪增強的眾所周知的問題(單核心性能隨線程數量的變化)無法解釋你的結果。 它將解釋是否有一個核心處理器。
所以,我認為可以用內存緩存級別來解釋。 也許如果你嘗試比L3 Cache更大的模擬(i7> 8MB)。
我對Intel(R)Core(TM)i7-3517U CPU @ 1.90GHz雙核(4線程)的測試。 1 mpi螺紋的所有模擬(-np 1)
10mb模擬:
一個模擬0.0129秒/步
100mb模擬:
四個模擬1.13秒/步
奇怪的是,兩個模擬的2個線程的運行速度幾乎與兩個模擬的線程相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.