OpenMP,通过函数调用全局变量

时间:2014-07-25 05:03:06

标签: c++ visual-c++ openmp

实现以下代码时:

#pragma omp parallel for default(shared) private(rx,ry,a, Xmax,Ymax)
for (a=0;a<30000;a++)
{int mn,mnn;
mn=part.i;
mnn=part.j;
setup(mn,mnn,a);
}

功能设置使用全局变量rx,ry,Xmax和Ymax。 Open MP是否注意到这些被声明为私有?或者如果在循环中存在的函数中调用全局变量会发生什么?

1 个答案:

答案 0 :(得分:0)

除非使用threadprivate,否则将共享函数中使用的全局变量。因此,如果您在函数中调用它们,rx,ry, Xmax,Ymax将不会是私有的,除非您使用threadprivate

使用和不使用threadprivate尝试以下代码并查看结果。

#include <stdio.h>
int x;
//#pragma omp threadprivate(x)

void foo() {
    printf("%p\n", &x);
}

int main() {
    //#pragma omp parallel
    #pragma omp parallel private(x)
    {
        printf("%p\n", &x);
        foo();
    }
}

请参阅“a。中引用的变量的数据共享属性规则”下的OpenMP specificiation 区域但不在构造“

  

区域中被调用例程中引用的文件范围或命名空间范围变量是共享的,除非它们出现在threadprivate指令中。