[英]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 節所述:
指定給定變量的列表項不能出現在同一指令的多個子句中,除非變量可以在
firstprivate
和lastprivate
子句中指定。
允許這樣做實際上很有意義。 firstprivate
在進入並行區域時影響列表變量的值,而lastprivate
在退出該區域時影響它們。 兩者都是非沖突的,並且它們的組合使用允許某些變量通過區域“傳播”並以與順序情況相同的方式通過並行代碼修改它們的值。 它主要適用於並行循環。
在 firstprivate(x) 和並行區域的子句中,變量 x 可以被識別為具有某個值的初始變量,該值在某處定義給所有團隊線程。每個團隊線程擁有自己的私有 x。 在並行區域子句中的lastprivate(x)中,它是關於循環的最后一次迭代。 x 將在最后一次迭代中獲得最終值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.