【发布时间】:2014-03-31 09:34:08
【问题描述】:
看起来我的应用程序开始是 (i)FFT 有界的,它对平均大小约为 500x200(宽度和高度总是均匀)的矩形进行了大量 2D 相关。场景和往常一样 - 执行两个 FFT(每个字段一个),将复杂字段相乘,然后执行一个 iFFT。
因此,根据分析器,在 CPU(Intel Q6600,带有 JTransforms 库)上,FFT 转换占用大约 70% 的时间,在 GPU(GTX670,cuFFT 库)上 - 大约 50%(因此,CUDA 上的性能有所提高,但不是我想要的)。我意识到,可能是 GPU 没有完全饱和(带宽有限)的情况,但从其他情况来看 - 批量计算会显着增加应用程序的复杂性。
问题:
- 我可以做些什么来减少花在 FFT 上的时间至少几个 次?
- 我应该尝试 FFTW 库吗(目前我不确定它是否会比 JTransforms 带来显着的收益)?
- 是否有任何可以插入 PC 的专用硬件 用于 FFT 转换?
【问题讨论】:
-
幻灯片 19 Fast Fourier Transforms (FFTs) and Graphical Processing Units (GPUs) 可能对您有用。我想说,所涉及的 FFT 并没有比 FFTW 具有明显更好的性能所需的那么大。此外,在对running FFTW on GPU vs using CUFFT 的回答中,我会说对于从不同主机线程调用 cuFFT 的小尺寸可能是批处理情况的替代方案。
-
杰克,谢谢你的回答。实际上,有 4 个并行线程(每个 CPU 内核一个线程),每个都调用 cuFFT 进行转换 - 所以,看起来我已经在使用批量大小的替代方法了。
标签: cuda fft correlation cufft