I am trying to understand how OMP treats different for
loop declarations. I have:
int main()
{
int i, A[10000]={...};
double ave = 0.0;
#pragma omp parallel for reduction(+:ave)
for(i=0;i<10000;i++){
ave += A[i];
}
ave /= 10000;
printf("Average value = %0.4f\n",ave);
return 0;
}
where {...}
are the numbers form 1 to 10000. This code prints the correct value. If instead of #pragma omp parallel for reduction(+:ave)
I use #pragma omp parallel for private(ave)
the result of the printf
is 0.0000
. I think I understand what reduction(oper:list)
does, but was wondering if it can be substituted for private
and how.