As you saw, barrierit will not work; criticalheavy enough for this particular operation. Atomic weight is less than critical; you can always do
if (j >= max_j)
{
#pragma omp atomic
data[j] += data[j-max_j];
}
(, ) - , parallelism ( , , ).
, , () [maxints-1] , [maxints-1-max_j], [maxints-1-2 * max_j].. , OpenMPs. ( , , ).
maxints < 2*max_j, ;
#pragma omp parallel for shared(data)
for (j = max_j; j < numints; j++){
data[j] += data[j-max_j];
}
, [j], . (), , () ...