65
#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?

1
  • 6
    Yes, they're automatically private Commented Jun 15, 2011 at 13:35

2 Answers 2

61

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.

Sign up to request clarification or add additional context in comments.

Comments

5

The data within a parallel region is private to each thread.

Kindly refer http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [Data sharing attribute clauses]

1 Comment

I think OpenMP clauses are applied to variables declared outside the parallel region. My question is related to local variables.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.