[英]parallelize inner loop using openmp
我有三個嵌套循環但只有最里面的可並行化。 外圈和中圈循環條件取決於最內圈的計算,因此我不能改變順序。
我在最里面的循環之前使用了一個OPENMP pragma指令,但是兩個線程的性能比一個線程的性能差。 我想這是因為在外循環的每次迭代中都會創建線程。
有沒有辦法在外部循環外創建線程,但只是在最里面的循環中使用它?
提前致謝
OpenMP 應該使用線程池,因此每次執行循環時都不會重新創建線程。 但是,嚴格來說,這可能取決於您正在使用的OpenMP實現(我知道GNU編譯器使用池)。 我建議你尋找其他常見問題,比如虛假分享。
不幸的是,當前的多核計算機系統對於這種細粒度的內環並行性並不好。 這不是因為線程創建/分叉問題。 正如Itjax所指出的,幾乎所有OpenMP實現都利用線程池,即它們預先創建了許多線程,並且線程被停放。 因此,實際上沒有創建線程的開銷。
但是,這種並行化內部循環的問題是以下兩個開銷:
因此,應該最小化線程分配/加入的實際數量。 您可以通過增加每次調用的內部循環的工作量來減少此類開銷。 這可以通過一些代碼更改來完成,例如循環展開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.