簡體   English   中英

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)子句,因此對所有ij都並行化了這個雙循環,並並行執行了execute_thread(i,j) 我的問題如下:在內部循環上方聲明的變量var是每個線程專用的,還是在內部循環中的所有線程都共享( for(int j...)一個)?

您正在顯示的代碼片段觸發未定義的行為 實際上, 循環結構必須遵守一些限制才能符合要求(請參閱OpenMP 4.0標准的2.7.1節)。 這些限制中的第一個特別是(強調我的):

與循環構造相關的所有循環必須完全嵌套 ; 也就是說,在任何兩個循環之間都必須沒有中間代碼,也沒有任何OpenMP指令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM