9

我正在做一个需要在 Nvidia 和 AMD 显卡上使用 FFT 的项目。我最初寻找一个可以同时在两者上工作的库(认为这将是 OpenCL 方式),但我没有任何运气。

有人向我建议,我必须使用每个供应商的 FFT 实现并编写一个包装器,根据平台选择要做什么。我很容易发现 AMD 的实现,但与此同时我实际上正在使用 Nvidia 卡(这对于我的特定应用程序来说是更重要的)。

我能找到的唯一 Nvidia 实现是 CUFFT 一个。有谁知道我如何实际使用 OpenCL 的 CUFFT 库?我能想到的唯一方法是在我的 OpenCL 代码旁边添加一些 CUDA 代码。我读过我不能只使用 OpenCL 缓冲区作为 CUDA 指针(尝试在 NVIDIA 的 SDK 模板中将 OpenCL 与 CUDA 混合)。相反,我是否必须在运行 OpenCL 内核后将缓冲区复制回主机,然后使用 CUDA 内存传输例程将它们复制回 GPU?我不太喜欢这种方法,因为它似乎涉及毫无意义的内存传输,如果我可以使用 OpenCL 的 CUFFT,我会更喜欢它。

4

3 回答 3

6

NVIDIA 没有做任何工作来支持 OpenCL 库,比如 FFT。它也没有为其 CUDA 库提供源代码,因此无法使用 OpenCL 运行这些库。

AMD 的 FFT 库是您最好的选择,它可以在任何其他兼容 OpenCL 的设备上运行,包括 NVIDIA 的 GPU。 ArrayFire OpenCL利用 AMD 的 FFT 库,我已经在我们实验室的 Intel、NVIDIA 和 AMD 设备上运行了它。

于 2012-07-03T14:50:59.770 回答
1

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

于 2012-07-05T11:41:59.753 回答
0

the SHOC benchmark on github also includes code that I have tested on nvidia GPU 650M, intel gpu, and intel CPU for FFT. on windows it takes a few minutes to create a project and set your include and link path but it was straightforward. running on the intel gpu requires setting the command line options or a small code modification since the intel gpu is device 1 not device 0 which is the default in the shoc benchmark suite.

i did not verify correctness of the output, only that it compiled and ran to completion.

于 2014-03-15T21:04:01.987 回答