![](/img/trans.png)
[英]Optimizing parallel nested loop with inner loop dependent on outer loop using openmp
[英]openmp parallel for collapse private variable outer loop
考慮以下代碼與OpenMP一起運行
#pragma omp parallel for collapse(2)
for(int i=0; i<10; i++)
{
int var; // is this private to execute_thread?
for(int j=0; j<10; j++)
{
execute_thread(i,j);
}
}
由於使用了collapse(2)
子句,因此對所有i
和j
都並行化了這個雙循環,並並行執行了execute_thread(i,j)
。 我的問題如下:在內部循環上方聲明的變量var
是每個線程專用的,還是在內部循環中的所有線程都共享( for(int j...)
一個)?
您正在顯示的代碼片段觸發未定義的行為 。 實際上, 循環結構必須遵守一些限制才能符合要求(請參閱OpenMP 4.0標准的2.7.1節)。 這些限制中的第一個特別是(強調我的):
與循環構造相關的所有循環必須完全嵌套 ; 也就是說,在任何兩個循環之間都必須沒有中間代碼,也沒有任何OpenMP指令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.