标签: optimization image-processing implementation signal-processing convolution
我已经制作了一个用于2D卷积的CUDA程序,现在想将它与一些非CUDA实现进行比较,以测量加速。
我可以使用经典的多循环方法或matlab的conv2来比较我自己在普通C中的实现,但它不像是合法/公平的比较,因为它们不是那里最快的实现。
此外,我正在考虑尝试使用OpenCV,而且我一直在寻找没有运气的SIMD优化版本。任何建议,我应该使用OpenCV吗?
注意:我已经阅读了其他问题,包括this one,但答案与我的普通C代码或对各种可用方法的讨论基本相同。
答案 0 :(得分:5)
最快的一般2D卷积算法首先在源上执行FFT,然后关联,然后FFT返回以获得结果(这是conv2在matlab中所做的)所以你的多循环方法可能不是最好的
GSL如果您想使用它,将为您提供标准且快速的FFT实现。
此外,如果内核为separable,您可以将卷积作为两个1D卷积进行。
OpenCV非常好,如果它也有效,它应该被广泛接受为快速实现。