optimization - 快速二维卷积实现?

标签 optimization image-processing implementation signal-processing convolution

我已经为 2D 卷积制作了一个 CUDA 程序,现在想将它与一些非 CUDA 实现进行比较以测量加速。

我可以使用经典的多循环方法或 matlab 的 conv2 与我自己在普通 C 中的实现进行比较,但感觉这不像是合法/公平的比较,因为它们不是最快的实现。

此外,我正在考虑尝试 OpenCV,但我一直在寻找 SIMD 优化版本,但没有成功。有什么建议,我应该使用 OpenCV 吗?

注意:我读过其他问题,包括 this one ,但答案与我的纯 C 代码或对各种可用方法的讨论基本相同。

最佳答案

最快的一般 2D 卷积算法将首先对源执行 FFT,然后关联,然后 FFT 返回以获得结果(这是 conv2 在 matlab 中所做的)所以你的多循环方法可能不是最好的.

GSL如果您想使用 FFT,将为您提供标准且快速的实现。

此外,如果内核是 separable您可以将卷积作为两个一维卷积进行。

如果 OpenCV 也有效,它就很棒,它应该被广泛接受为一个快速的实现。

关于optimization - 快速二维卷积实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222725/

相关文章:

c++ - 对临时对象的常量引用

python - Google App Engine ( GAE ) 和静态文件最佳实践

c++ - 将点 vector 转换为 Mat (OpenCV)

java - 一个类或多态实现中的所有方法?

css - Drupal 实现之前的 xhtml-css 编码?

PHP imagesetpixel() 停止将绘制像素限制为 ~250

android - 从 View 中获取上下文是安全的

c# - 如何正确比较列表

java - 当索引的范围通过 and 限制时,Hotspot 可以消除边界检查吗?

Java代码打开应用程序并显示图标