在我的应用程序中,我需要转换图像的每一行,应用过滤器并将其转换回来。
我想能够使用GPU同时进行多个FFT。 更确切地说,我正在使用NVIDIA的CUDA。 现在,有些考虑:
- CUDA的FFT库CUFFT只能从主机进行调用(https://devtalk.nvidia.com/default/topic/523177/cufft-device-callable-library/)。
- 在此主题(running FFTW on GPU vs using CUFFT)上,Robert Corvella表示
“cufft例程可以被多个主机线程调用”。
我认为并行执行所有这些FFT会提高性能,但是Robert评论说
“如果FFT操作具有相当大的大小,则仅按照指示调用cufft库例程应该为您提供良好的加速,并且近似充分利用机器”
那么,这就是它了吗?一次执行多个FFT没有任何收益吗?
有支持从设备调用的库吗?
我应该只使用cufftPlanMany()吗(如hang在“is-there-a-method-of-fft-that-will-run-inside-cuda-kernel”中提到的或如Robert在之前的话题中提到的)?
还是最好的选择是调用多个主机线程?
(这两个链接的限制让我很纠结...)
我的目标是讨论这个问题的最佳解决方案,因为许多人面临类似的情况。一旦NVIDIA在CUFFT上实现设备调用,这可能会过时。(这是在NVIDIA论坛的讨论中说的,但没有预计发布日期(第一个链接))