Может кто-нибудь сказать мне, почему итерация Jacobi на основе OpenMP так медленнее, чем последовательная версия?
ITERATION = 100;
DIM = 4000;
// sequential version takes only ~5 seconds
for(size_t i=0; i<ITERATION; ++i) {
for(size_t y=1; y<(DIM-1); ++y) {
for(int x=(y*DIM)+1; x<(y*DIM) + DIM-1; ++x) {
dest[x]=(src[x-DIM]+src[x+DIM]+src[x]+src[x-1]+src[x+1])*0.2;
}
}
std::swap(dest, src);
}
// openmp version takes 7s on 4 cores
for(size_t i=0; i<ITERATION; ++i) {
#pragma omp parallel for
for(size_t y=1; y<(DIM-1); ++y) {
for(int x=(y*DIM)+1; x<(y*DIM) + DIM-1; ++x) {
dest[x]=(src[x-DIM]+src[x+DIM]+src[x]+src[x-1]+src[x+1])*0.2;
}
}
std::swap(dest, src);
}
Я использую четыре потока и компилирую программу с флагом O2.