Почему программа Jacobi Stencil на базе OpenMP работает медленнее, чем последовательная версия - PullRequest
0 голосов
/ 31 мая 2018

Может кто-нибудь сказать мне, почему итерация 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...