Как я могу ускорить циклы, используя OpenMP? - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь использовать OpenMP для ускорения алгоритма обработки изображений для размытия изображения, но время даже больше, чем последовательный алгоритм.

Я попытался поставить pragma omp parallel for, компиляцию скоманда g++ -fopenmp Sorucecode.cpp, затем export OMP_NUM_THREADS=4 и затем запуск исполняемого файла, но он не работает.

void runFilter(float* input, float* output, int width, int height) {
   int i, j, row, col, idx, r_i, r_j;
   float new_val;
   #pragma omp parallel for collapse(2) private(col, row, new_val, i, j, r_i, r_j, idx)
   for(col = 0; col < width; col++)
        for (row = 0; row < height; row++)
        {
                float new_val = 0.0f;
                for (i = -ker_x_dim; i < ker_x_dim; i++) {
                        r_i = i + ker_x_dim;
                        for (j = -ker_y_dim; j < ker_y_dim; j++) {
                                r_j = j + ker_y_dim;
                                idx = get1dIndex(width, height, col + i, row + j); 
                                new_val += kernel[r_i*(ker_y_dim * 2) + r_j] * input[idx];
                        }
                }
                output[get1dIndex(width, height, col, row)] = new_val;
        }
}

Я измеряю время с помощью переменных clock_t.

...