OpenMP code:
• void a12( float *x, int *index, int n ) {
int i;
• #pragma omp parallel
for shared(x, y, index, n)
for( i = 0; i < n; i++ ) {
#pragma omp
atomic
x[ index[i] ] += work1( i );
}
}
Concur code:
• void a12( vector<float> &x, const
vector<int> &index ) {
active for each( int i in range(0, index.size()) ) {
int ii = index[i];
float f = work1( i );
atomic { x[ ii ] += f; } // compiler warning if atomic is absent
}
}