У меня есть этот фрагмент кода, который распараллелен.Каково использование сокращения в openmp?
int i,n; double area,pi,x;
area=0.0;
#pragma omp parallel for private(x) reduction (+:area)
for(i=0; i<n; i++){
x= (i+0.5)/n;
area+= 4.0/(1.0+x*x);
}
pi = area/n;
Говорят, что сокращение устраняет состояние гонки, которое может произойти, если мы не использовали сокращение. Тем не менее, мне интересно, нужно ли добавлять lastprivate для области, поскольку она используется вне параллельного цикла и не будет видна за ее пределами. Else делает это сокращение также?
Вы не хотите использовать последний закрытый. Прочитайте эту ссылку, чтобы узнать о сокращениях, firstprivate, lastprivate и других вещах в OpenMP http://bisqwit.iki.fi/story/howto/openmp/#ReductionClause. См. Мой ответ для получения дополнительной информации о сокращениях. –