快速2D卷积实现?

kir*_*chi 3 optimization implementation signal-processing image-processing convolution

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

我可以使用经典的多循环方法或matlab的conv2来比较我自己在普通C中的实现,但它不像是合法/公平的比较,因为它们不是那里最快的实现.

此外,我正在考虑尝试OpenCV,我一直在寻找没有运气的SIMD优化版本.任何建议,我应该使用OpenCV吗?

注意:我已经阅读了其他问题,包括这个问题,但答案基本上与我的普通C代码或可用的各种方法的讨论相同.

Pac*_*ace 5

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

GSL是要给你一个标准,并快速实现FFT的,如果你想使用它.

此外,如果内核是可分离的,您可以将卷积作为两个1D卷积进行.

如果OpenCV也很好用,它应该被广泛接受为快速实现.