OpenMP: are local variables automatically private?

c, c++, openmp, parallel-processing

Solution

Yes, local variables are automatically private.

The reason for the existence of the `private` clause is so that you don't have to change your code.

The only way to parallelize the following code without the private clause

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

is to change the code. For example like this:

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

That's perfectly valid C89/C90 code but one of the goals of OpenMP is not have to change your code except to add `pragma` statements which can be enabled or disabled at compile time.

Problem

``` #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 ? } ``` Thank you! P.S. If local variables are automatically private, what is the point of using private clause?

Original source

Related problems