c++ - tutorial - OpenMP:局部变量是否自动私有?




openmp教程pdf (2)

#pragma omp parallel
{
    int x; // private to each thread ?
}

#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
    int x; // private to each thread ?
}

谢谢!

PS如果局部变量是自动私有的,那么使用私有子句有什么意义呢?

https://code.i-harness.com



是的,局部变量是自动私有的。

private子句存在的原因是您不必更改代码

没有private子句并行化以下代码的唯一方法

int i,j;
#pragma omp parallel for private(j)
for(i = 0; i < n; i++) {
    for(j = 0; j < n; j++) {
        //do something
    }
}

是改变代码。 例如这样:

int i
#pragma omp parallel for
for(i = 0; i < n; i++) {
    int j;
    for(j = 0; j < n; j++) {
        //do something
    }
}

这是完全有效的C89 / C90代码,但OpenMP的目标之一是不必更改代码,除了添加可在编译时启用或禁用的编译pragma语句。







openmp