
284 Introduction to Concurrency in Programming Languages
Listing A.4: Demonstrating a reduction.
# inclu de < stdlib .h>
# inclu de < omp .h >
int main ( int argc , char ** argv ) {
int i , j, id , num ;
double mean = 0.0 , * x ;
int N = 20 000000;
x = ( double *) malloc ( sizeof ( double )*N );
/* populate x on main thread ... */
for ( i =0; i <N ; i ++)
x[i] = ( double ) rand () / ( double ) RAND_MAX ;
/* compute mean in pa rallel */
# pragma omp p arallel priva te ( id , i, num) \
reduc tion (+: mean )
{
id = omp_get_thread_num ();
num = omp_get_num_threads ();
for ( i = id; i <N; i += num ) {
mean = mean + x[i] / ( double ) N;
}
}
}
reduction(op: variable)
where ...