Мне интересно, почему следующий код дает разные результаты в своих скалярных и параллельных вариантах:
#define N 10
double P[N][N];
// zero the matrix just to be sure...
for (int i=0; i<N; i++)
for(int j=0; j<N; j++)
P[i][j]=0.0;
double xmin=-5.0,ymin=-5.0,xmax=5.0,ymax=5.0;
double x=xmin,y=ymin;
double step= abs(xmax-xmin)/(double)(N - 1 );
for (int i=0; i<N; i++)
{
#pragma omp parallel for ordered schedule(dynamic)
for ( int j=0; j<N; j++)
{
x = i*step+xmin;
y = j*step+ymin;
P[i][j]=x+y;
}
}
Этот код дает не совсем равные результаты в двух версиях (скалярная версия имеет только #pragma ...
часть закомментирована).Я заметил, что очень маленький процент элементов P[i][j]
в параллельной версии отличается от скалярной версии, но мне интересно, почему ...
Помещение #pragma
во внешнем цикле, как предлагается, беспорядок ... совершенно неверные результаты.
PS g ++ - 4.4, intel i7, linux