中值滤波器OpenMP优化
Median Filter OpenMP Optimization
我正在尝试使用CImg库并行化中值过滤器。代码看起来很简单:
void omp_median_filter(CImg<float> & img) {
CImg<float> copy(img);
size_t i;
#pragma omp parallel for schedule(dynamic)
for (i = 1; i < img.width()-1; i++) {
for (size_t j = 1; j < img.height()-1; j++) {
for (size_t k = 0; k < img.spectrum(); k++) {
img(i, j, k) = getNeighboursMedian(copy, i, j, k);
}
}
}
}
getNeighboursMedian
函数与本例无关,但无论如何:
float getNeighboursMedian(CImg<float> & img, int i, int j, int k) {
float neighbours[9];
int kk = 0;
for (size_t ii = i-1; ii <= i+1; ii++) {
for (size_t jj = j-1; jj <= j+1; jj++) {
neighbours[kk++] = img(ii,jj,k);
}
}
sort(&neighbours[0], &neighbours[8]);
return neighbours[4];
}
我的问题是:是否有任何额外的pragma参数,我可以使用,使它走得更快?我一直在尝试一些事情,但没有人增加算法的性能…我不知道。
也许您应该看看CImg方法CImg<T>::blur_median()
的代码。它还实现了openMP并行化的中值滤波器。在CImg.h
文件中查找
相关文章:
- 空基优化子对象的地址
- OpenMP阵列性能较差
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- OpenMP:并行更新数组总是需要减少数组吗
- 纯函数,为什么没有优化
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 使用 OpenMP 优化外循环并减少
- 如何使GNU GCC类似地优化OpenMP线程
- 对于循环在 gcc -O3 使用 OpenMP 优化后不会加速
- OpenMP 优化了 for 循环的调度
- 优化依赖循环openmp
- OpenMP优化不起作用
- 中值滤波器OpenMP优化
- 使用-O2优化和OpenMP