并行FFT(使用CUDA)

并行FFT(使用CUDA),cuda,fft,Cuda,Fft,在我的应用程序中,我需要变换图像的每一行,应用过滤器并将其变换回来 我希望能够使用GPU同时进行多次FFT。更准确地说,我使用的是英伟达的CUDA。现在,有一些考虑: CUDA的FFT库,CUFFT只能从主机()进行调用 关于这个话题,罗伯特·科维拉说 “多个主机线程可以调用CUFT例程” 我相信并行执行所有这些FFT将提高性能,但是Robert评论道 “FFT操作的大小相当大,那么只需调用所示的cufft库例程,就可以获得很好的加速,并大致充分利用机器” 所以, 是这个吗?一次执行多个FFT

在我的应用程序中,我需要变换图像的每一行,应用过滤器并将其变换回来

我希望能够使用GPU同时进行多次FFT。更准确地说,我使用的是英伟达的CUDA。现在,有一些考虑:

  • CUDA的FFT库,CUFFT只能从主机()进行调用
  • 关于这个话题,罗伯特·科维拉说 “多个主机线程可以调用CUFT例程”

  • 我相信并行执行所有这些FFT将提高性能,但是Robert评论道

    “FFT操作的大小相当大,那么只需调用所示的cufft库例程,就可以获得很好的加速,并大致充分利用机器”

    所以, 是这个吗?一次执行多个FFT是否没有增益

    是否有支持设备调用的库

    我应该改用cufftPlanMany()吗(如hang在“is-there-a-method-of-fft-that-will-run-inside-cuda-kernel”中所述,或者如Robert在前面的主题中所述)

    或者最好的选择是调用多个主机线程

    (这2个链接的限制让我很痛苦…)

    我的目标是就这个问题的最佳解决方案进行一些讨论,因为许多人都面临类似的情况。 一旦NVIDIA在CUFFT上实现设备调用,这可能会过时。 (他们说他们正在工作,但是没有发布的预期日期-在英伟达论坛(第一链接)讨论的内容)

    那么,是这样吗?一次执行多个FFT是否没有增益

    如果单个FFT足够大以充分利用该设备,则一次执行多个FFT不会有任何增益。您仍然可以使用标准方法,如复制和计算重叠,以获得机器的最佳性能

    如果FFT很小,则使用FFT是获得最佳性能的好方法。如果你走这条路,我建议你使用CUDA5.5,因为有一些API改进

    是否有支持设备调用的库

    无法通过从设备代码进行调用来使用cuFFT库

    当然,还有其他CUDA库,比如ArrayFire,它们可能有我不熟悉的选项

    我应该改用cufftPlanMany()吗(如hang在“is-there-a-method-of-fft-that-will-run-inside-cuda-kernel”中所述,或者如Robert在前面的主题中所述)? 或者最好的选择是调用多个主机线程

    批处理计划优先于多个主机线程-通过这种方式,API可以更好地管理资源,并且您将有更多API级别的可见性(例如通过CUDA 5.5中的资源估计函数)来了解可能的情况。

    您可以编写自己的FFT内核。。。