适用于AMD和Nvidia的OpenCL代码

3

有人能告诉我编译后如何让OpenCL代码在AMD和Nvidia卡上都能运行,一般的步骤是什么? 我是否需要安装两个OpenCL SDK(AMD / Nvidia),并使用“if”结构为每种情况编写不同的代码(AMD设备或Nvidia设备)? 如果您能用一些标题澄清一下,会很感激。 谢谢。

1个回答

4

是的,这是OpenCL比CUDA更好的地方(CUDA只适用于NVIDIA硬件)。基本上,您需要使用C99编写内核代码,然后将其编译成独立于制造商的中间代码。最终代码将在运行时由您的显卡(AMD或Nvidia)解释。

通常情况下,您不需要编写不同的显卡特定代码或使用不同的SDK(但我在Max OS 10.7上,可能与其他环境不同)。


谢谢Flavien,所以如果我使用OpenCL和AMD SDK编译一个示例,它应该可以在Nvidia显卡上运行吗?还是会有什么遗漏? - Maiss
AMD的BLAS和FFT库也可以在NVIDIA设备上运行,ArrayFire OpenCL库也是如此。非常方便! - arrayfire
2
如果您正在寻求性能,您可能需要进行特定于供应商的调整。对于AMD,您可以通过Kernel Analyzer运行您的openCL内核,并查看生成的中间语言以及将在硬件上运行的ISA代码。 - kiranputtur
1
继续...操作,NVIDIA / AMD都提供性能/分析工具,它们向您提供有关内核的不同信息,例如占用率、内存/缓冲区使用情况、内核运行时间、IL / PTX视图、ISA代码等。在GPU世代中,存在不同的调优机制,例如AMD 5XXX系列调优可能在AMD 7xxx南岛卡中效果不佳。因此,在我看来,如果您计划从硬件中获得最大的性能,则需要进行特定于供应商的调优。 - kiranputtur
@Ocluser:非常感谢,现在是深入了解这个“野兽”的时候了 :) - Maiss
显示剩余2条评论

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