簡體   English   中英

openMP lastprivate 和 firstprivate 到同一個變量

[英]openMP lastprivate and firstprivate to the same variable

在同一個變量中應用 firstprivate 和 lastprivate 是否正確?

例如:

void main (){
    int a= 100, i;
    #pragma omp for firstprivate(a) lastprivate(a)
    for(i = 0; i <9; i++){
        bla bla bla;
    }
    printf("a= %d",a);
}

謝謝!

OpenMP 規范4.0 版第 2.14.3 節所述:

指定給定變量的列表項不能出現在同一指令的多個子句中,除非變量可以在firstprivatelastprivate子句中指定。

允許這樣做實際上很有意義。 firstprivate在進入並行區域時影響列表變量的值,而lastprivate在退出該區域時影響它們。 兩者都是非沖突的,並且它們的組合使用允許某些變量通過區域“傳播”並以與順序情況相同的方式通過並行代碼修改它們的值。 它主要適用於並行循環。

在 firstprivate(x) 和並行區域的子句中,變量 x 可以被識別為具有某個值的初始變量,該值在某處定義給所有團隊線程。每個團隊線程擁有自己的私有 x。 在並行區域子句中的lastprivate(x)中,它是關於循環的最后一次迭代。 x 將在最后一次迭代中獲得最終值。

暫無
暫無

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

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