在Nvidia和AMD硬件上使用OpenCL FFT?

9
我正在开发一个项目,需要在 Nvidia 和 AMD 的图形卡上使用 FFT。一开始我找了一个可以在两者上运行的库(考虑使用 OpenCL),但是没有找到合适的。
有人建议我需要使用每个供应商的 FFT 实现,并编写一个包装器根据平台选择使用哪个实现。我很容易找到 AMD 的实现,但是我现在手头上只有 Nvidia 的显卡(而且这对我的应用程序来说更重要)。
我唯一能找到的 Nvidia 实现是 CUFFT。有谁知道如何从 OpenCL 中使用 CUFFT 库吗?我唯一能想到的方法是将一些 CUDA 代码与我的 OpenCL 代码一起使用。我已经阅读了相关资料,得知无法直接使用 OpenCL 缓冲区作为 CUDA 指针 (Trying to mix in OpenCL with CUDA in NVIDIA's SDK template)。那么,我是否需要在运行 OpenCL 内核后将缓冲区拷贝回主机,然后使用 CUDA 内存传输例程将它们拷贝回 GPU?我不太喜欢这种方法,因为它似乎涉及无意义的内存传输。我更希望能够直接在 OpenCL 中使用 CUFFT。

ViennaCL现在包含一个“实验性”的FFT实现。至少对于2的幂次方变换,它应该表现得相当合理。 - talonmies
3个回答

6
NVIDIA没有为支持OpenCL库(如FFT)做任何工作。它也没有提供其CUDA库的源代码,因此无法使用OpenCL运行它们。
AMD的FFT库是您最好的选择,并且可以在包括NVIDIA GPU在内的任何其他符合OpenCL标准的设备上运行。ArrayFire OpenCL利用了AMD的FFT库,在我们的实验室中已经在Intel、NVIDIA和AMD设备上运行过。

1
除了Ben的AMD建议之外,您还可以调查Apple FFT示例代码。但是,请注意他们的代码仅在GPU设备上运行,因为它会检查提供的命令队列是为哪种设备类型创建的。

0

GitHub 上的 SHOC 基准测试 中,我还测试了在 NVIDIA GPU 650M、Intel GPU 和 Intel CPU 上运行 FFT 的代码。在 Windows 系统上,创建项目并设置包含文件和链接路径只需要几分钟,非常简单。要在 Intel GPU 上运行,需要设置命令行选项或进行小的代码修改,因为 Intel GPU 是设备 1,而不是 shoc 基准测试套件中默认的设备 0。

我没有验证其输出的正确性,只是编译和运行至完整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接