首页 文章

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

提问于
浏览
8

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

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

我能找到的唯一Nvidia实现是CUFFT实现 . 有谁知道我如何实际使用OpenCL的CUFFT库?我能想到的唯一方法就是在我的OpenCL代码旁边加上一些CUDA代码 . 我只是使用OpenCL缓冲区作为CUDA指针(Trying to mix in OpenCL with CUDA in NVIDIA's SDK template) . 相反,我是否必须在运行OpenCL内核后将缓冲区复制回主机,然后使用CUDA内存传输例程将它们复制回GPU?我真的不喜欢这种方法,因为它似乎涉及无意义的内存传输,如果我可以使用OpenCL的CUFFT,我会更喜欢它 .

3 回答

  • 0

    NVIDIA还没有做任何支持OpenCL库的工作,比如FFT . 它还没有为其CUDA库提供源代码,因此无法使用OpenCL运行它们 .

    AMD 's FFT library is your best bet and will run on any other OpenCL-compliant device, including NVIDIA'的GPU . ArrayFire OpenCL利用AMD 's FFT library, and I'在我们实验室的英特尔,NVIDIA和AMD设备上运行 .

  • 6

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

  • 1

    SHOC benchmark on github还包括我在nvidia GPU 650M,intel gpu和用于FFT的intel CPU上测试过的代码 . 在Windows上,创建项目并设置包含和链接路径需要几分钟,但这很简单 . 在intel gpu上运行需要设置命令行选项或小代码修改,因为intel gpu是设备1而不是设备0,这是shoc基准测试套件中的默认设置 .

    我没有验证输出的正确性,只是它编译并运行完成 .

相关问题