将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 specification版本4.0第2.14.3节所述:
允许这样做实际上很有意义。 firstprivate
在进入并行区域时影响列表变量的值,而lastprivate
在从该区域退出时影响它们的值。两者都不冲突,并且它们的组合使用允许某些变量“传播”整个区域,并以与顺序情况相同的方式由并行代码修改其值。并行循环最有意义。