Example 2
In the following program, the
pragma omp for directive
has a reduction clause,
reduction(+:sum), right before the
parallel for loop. This tells OpenMP to generate code that uses the
+ operator to add together the value of
sum at the end
of the for loop. Otherwise the program is identical to the previous
version.
// File: example2.cpp
//
#include
#include
int main() {
int reps = 10000 ;
long int A[reps] ;
long int sum = 0 ;
for (long int i=0; i < reps ; i++) {
A[i] = i ;
}
omp_set_dynamic(0) ;
#pragma omp parallel shared(A,sum,reps) num_threads(4)
{
#pragma omp single
{ // only one thread has to do this
// omp_set_num_threads(4);
printf("Number of threads = %d\n", omp_get_num_threads() ) ;
}
#pragma omp for schedule(static,5) reduction(+:sum)
for (long int i=0; i < reps; i++) {
sum += A[i] ;
}
} // end of parallel region
printf("sum = %ld\n", sum) ;
return 0 ;
}
Download: example2.cpp
Download this program. Then, compile and run it a few times.
What happened? Do you get the same answer for each run?