openMP lastprivate 和 firstprivate 到同一个变量

Luc*_*cas 4 c c++ parallel-processing openmp

在同一个变量上应用 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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Hri*_*iev 5

正如OpenMP 规范4.0 版第 2.14.3 节中所写:

指定给定变量的列表项不能出现在同一指令的多个子句中,除非一个变量可以同时在firstprivateandlastprivate子句中指定。

允许这样做实际上很有意义。firstprivate在进入并行区域时lastprivate影响列表变量的值,而在退出区域时影响它们。两者都是不冲突的,并且它们的组合使用允许某些变量“传播”通过区域并以与顺序情况相同的方式由并行代码修改它们的值。它主要适用于并行循环。