Худшая производительность при использовании OpenMP - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь распараллелить мой код, используя 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.

Есть идеи, что мне улучшить, чтобы улучшить производительность?

...