3

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

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

我也在考虑尝试 OpenCV,我一直在寻找一个 SIMD 优化版本,但没有运气。有什么建议,我应该使用 OpenCV 吗?

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

4

1 回答 1

5

最快的通用 2D 卷积算法将首先对源执行 FFT,然后关联,然后 FFT 返回以得到结果(这是 conv2 在 matlab 中所做的),因此您的多循环方法可能不是最好的。

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

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

如果 OpenCV 也能正常工作,它就很棒,它应该被广泛接受为一种快速的实现。

于 2011-06-03T03:48:57.180 回答