2
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
  }
}
Example: Loop Parallelization