【问题标题】:Paralelizing FFT (using CUDA)并行化 FFT(使用 CUDA)
【发布时间】:2013-08-09 10:46:43
【问题描述】:

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

我希望能够使用 GPU 同时进行多个 FFT。更准确地说,我使用的是 NVIDIA 的 CUDA。现在,一些注意事项:

  1. CUDA 的 FFT 库,CUFFT 只能从主机 (https://devtalk.nvidia.com/default/topic/523177/cufft-device-callable-library/) 进行调用。
  2. 关于这个话题 (running FFTW on GPU vs using CUFFT),Robert Corvella 说

    “cufft 例程可以被多个主机线程调用”。

我相信并行执行所有这些 FFT 会提高性能,但 Robert cmets

“FFT 运算的大小相当大,那么只需按照指示调用 cufft 库例程即可为您提供良好的加速并大致充分利用机器”

所以, 是这个吗?一次执行多个 FFT 是否没有任何好处?

有没有支持设备调用的库?

如果我只使用 cufftPlanMany() 代替(如挂起的“is-there-a-method-of-fft-that-will-run-inside-cuda-kernel”中所述或如上一主题中所述,罗伯特)?

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

(这 2 个链接的限制让我死了......)

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

【问题讨论】:

  • 可以编写自己的 FFT 内核...

标签: cuda fft


【解决方案1】:

那么,是这个吗?一次执行多个 FFT 是否没有任何好处?

如果单个 FFT 足够大以充分利用设备,则一次执行多个 FFT 没有任何好处。您仍然可以使用复制和计算重叠等标准方法来充分利用机器的性能。

如果 FFT 很小,那么 batched plan 是获得最佳性能的好方法。如果你走这条路,我建议使用 CUDA 5.5,因为有一些 API 改进。

有没有支持设备调用的库?

不能通过从设备代码进行调用来使用cuFFT库。

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

如果我只使用 cufftPlanMany() 代替(如挂起的“is-there-a-method-of-fft-that-will-run-inside-cuda-kernel”中所述或如上一主题中所述,罗伯特)? 或者最好的选择是调用多个主机线程?

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

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2011-08-09
    • 2012-08-20
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多