openMP lastprivate and firstprivate to the same variable

时间:2015-10-23 19:18:22

标签: c++ c parallel-processing openmp

Is it correct apply firstprivate and lastprivate at the same variable?

For example:

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);
}

Thank you!

1 个答案:

答案 0 :(得分:4)

正如OpenMP specification 4.0版第2.14.3节所述:

  

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

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