Я пытаюсь распараллелить мой код, используя OpenMP, в основном атакуя каждый цикл for, который, я вижу, стоит распараллеливать. Но мне не удается добиться лучшей производительности в любой реализации. Вот простой пример:
double start = omp_get_wtime();
#pragma omp parallel for collapse(2)
for(int y=0;y<hl;y++)
for(int x=0;x<wl;x++)
{
dI_l[x + y*wl][0] = 0.25f * (dI_lm[2*x + 2*y*wlm1][0] +
dI_lm[2*x+1 + 2*y*wlm1][0] +
dI_lm[2*x + 2*y*wlm1+wlm1][0] +
dI_lm[2*x+1 + 2*y*wlm1+wlm1][0]);
}
double end = omp_get_wtime();
std::cout << " wall time : " << end - start << std::endl;
Время без прагмы меняется, но оно около 0,000385959. Когда я добавляю, прагма переходит к: 0,00149408.
Я пытался добавить предложение 'schedule' с другим количеством блоков и многими другими реализациями, но мне никогда не удавалось добиться большей производительности.
hl - 240, а wl - 340. dI_l и dI_lm - указатели типа Eigen :: Vector3f.
Есть идеи, что мне улучшить, чтобы улучшить производительность?