我已经成功地编写了一些 CUDA FFT 代码,它对图像进行 2D 卷积,以及其他一些计算。

我如何确定我可以运行的最大 FFT 是多少?似乎 2D R2C 卷积的计划需要 2 倍的图像大小,另外 2 倍的 C2R 图像大小。这似乎是很多开销!

此外,似乎大多数基准测试都是针对相对较小的 FFT 的……这是为什么?似乎对于大图像,我将很快耗尽内存。这通常是如何处理的?您能否对图像的图块执行 FFT 卷积并组合这些结果,并期望它与我在整个图像上运行 2D FFT 相同?

感谢您回答这些问题

最佳答案

CUFFT 根据您的图像大小计划不同的算法。如果你不能适应共享内存并且不是 2 的幂,那么 CUFFT 会计划一个不合适的变换,而具有正确尺寸的较小图像将更适合该软件。

如果您设置对整个图像进行 FFT,并且需要查看您的 GPU 可以处理什么,我的最佳答案是猜测并检查不同的图像大小,因为 CUFFT 规划很复杂。

请参阅文档:http://developer.download.nvidia.com/compute/cuda/1_1/CUFFT_Library_1.1.pdf

我同意 Mark 并说平铺图像是卷积的方法。由于卷积只是计算许多独立的积分,因此您可以简单地将域分解为其组成部分,独立计算这些部分,然后将它们拼接在一起。 FFT 卷积技巧只是降低了您需要计算的积分的复杂性。

我希望你的 GPU 代码在所有情况下都应该比 matlab 好很多,除非你做了一些奇怪的事情。

关于image-processing - 如何在 cuda 中管理大型 2D FFT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5995118/

10-11 22:08
查看更多