我已经为 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/