我正在尝试使用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变量测量时间。