我正在做一个需要在 Nvidia 和 AMD 显卡上使用 FFT 的项目。我最初寻找一个可以同时在两者上工作的库(认为这将是 OpenCL 方式),但我没有任何运气。
有人向我建议,我必须使用每个供应商的 FFT 实现并编写一个包装器,根据平台选择要做什么。我很容易发现 AMD 的实现,但与此同时我实际上正在使用 Nvidia 卡(这对于我的特定应用程序来说是更重要的)。
我能找到的唯一 Nvidia 实现是 CUFFT 一个。有谁知道我如何实际使用 OpenCL 的 CUFFT 库?我能想到的唯一方法是在我的 OpenCL 代码旁边添加一些 CUDA 代码。我读过我不能只使用 OpenCL 缓冲区作为 CUDA 指针(尝试在 NVIDIA 的 SDK 模板中将 OpenCL 与 CUDA 混合)。相反,我是否必须在运行 OpenCL 内核后将缓冲区复制回主机,然后使用 CUDA 内存传输例程将它们复制回 GPU?我不太喜欢这种方法,因为它似乎涉及毫无意义的内存传输,如果我可以使用 OpenCL 的 CUFFT,我会更喜欢它。