Вы писали:
if(thr == 0)
for(c=0;c<numcolsr;c++){
for(j=0 ;j<numcolsa ; j++)
result[0][c]+=a[0][j]*b[j][c];
}
else if (thr ==1 )
for(c=0;c<numcolsr;c++){
for(j=0 ; j<numcolsa ; j++)
result[1][c]+=a[1][j]*b[j][c];
}
// and so on
Я не знаю деталей omp, но я прав, думая, что c
и j
будут общими средипотоки?Поскольку во всех циклах используется один и тот же c
и один и тот же j
.
. В этом случае могут возникнуть различные условия гонки .Например, поток 1 может выполнить c++
непосредственно перед тем, как поток 0 выполнит result[0][c]+=a[0][j]*b[j][c]
, с результатом чтения / записи вне пределов в качестве результата.