2014-04-30 131 views
1

我已經編寫了一個代碼,該代碼使用OpenMP進行了多個並行化循環。當執行此代碼的單個實例時,運行時間非常低。但是,當我並行執行代碼的多個實例時,每個實例的運行時間比預期的要高。OpenMP性能分析

使用縮放,我分析了一個實例(當70個並行運行時),並且該配置文件顯示OpenMP消耗了65%的時間(請參見下圖)。這可能是正確的嗎?

enter image description here

回答

1

看起來你已經oversubscribed機器。因此,OpenMP運行時開始在等待線程數爲preempted的自旋循環中浪費時間。即使自旋循環感知到超額預訂(即週期性地調用sched_yield()),它仍然會浪費時間頻繁切換上下文和其他開銷。

+0

您能否告訴我可能的解決方案是什麼?我如何看待上下文切換的花費? – user1274878

+0

只有一個解決方案 - 只是不要創建太多的線程和很多進程。如果需要,提出單獨的問題 - 如何實現你試圖達到的目標或可能谷歌幫助你 - 我給你的關鍵字 – Anton

+0

@ user1274878,說實話,你不明白你究竟想問什麼。你是否問爲什麼70多線程程序超額訂閱機器?或者你如何運行70個進程並且不會超額訂閱這臺機器?你能解釋一下你想達到什麼嗎?爲什麼你真的需要同時運行大量的多線程進程? – Alex