英特尔的OpenCL与Khronos的OpenCL比较

5

Intel、AMD和Khronos OpenCL之间有什么区别?我对OpenCL完全不了解,想要开始学习。我不知道哪一个更好地安装在我的操作系统上。

3个回答

10

OpenCL是针对C和C++语言的扩展,可以在计算设备(CPU、GPU等)上并行化软件。

OpenCL由Khronos Group制定标准,并由硬件厂商Intel、AMD、nVidia等实现。因此,每个OpenCL实现都需要特定于供应商的OpenCL驱动程序,以启用使用供应商的硬件。

因此,如果您有一个基于英特尔的系统,请使用英特尔OpenCL,因为只有这样才能使用机器中的所有计算设备。如果您拥有AMD系统,则同样适用。另请注意,没有Khronos OpenCL实现。

当然,您可以拥有来自多个厂商的OpenCL启用设备的平台(例如Intel CPU + GPU和nVidia离散卡)。在这种情况下,OpenCL运行时包含一个通用层(动态加载库)。该层是一个接口,根据所选的OpenCL平台调用每个设备驱动程序提供的实现。


谢谢你的回答。所以,它有点像 OpenGL,每个平台都有自己的实现,但 Khronos 只是定义了下一个版本应该包含什么等等。这是真的吗? - mmostajab
但是例如,对于OpenGL,我们可以使用Windows实现或Linux实现而无需安装nVIDIA或ATI实现,但OpenCL没有操作系统实现。 - mmostajab
@VAndrei 如果我有一颗Intel CPU+GPU(集成的HD Graphics)和另外一颗nVidia GPU,我可以同时使用它们吗?在驱动方面,它是如何工作的? - manatttta
@manatttta 请查看我的更新回复。基本上,您有一个通用接口,根据代码中选择的平台调用相应的OpenCL实现。 - VAndrei
当你编写程序、主机和内核时,你所关心的只是由Khronos提供的头文件。当你将编译后的目标文件链接到可执行文件或库时,你需要链接运行时库,也称为实现或驱动程序。通常情况下,当你安装GPU驱动程序时,OpenCL库也应该被安装。一个例外是Linux上的Intel GPU驱动程序不包括OpenCL运行时:你需要自己下载/构建/安装,就像由Intel支持的一个名为Beignet的开源项目(谷歌搜索“intel beignet opencl”)。 - user3528438
显示剩余3条评论

1
OpenCL是由Kronos定义的一种标准。他们会提供头文件,你需要将其提供给编译器。他们不提供二进制文件以供链接。为此,您必须获取ICD(可安装客户端驱动程序),在Windows上,这是以DLL文件的形式存在。您可以通过安装以下一项或多项来获得:

不用担心针对一个供应商进行编译而在另一个供应商上无法工作,OpenCL已经被精心设计以解决这个问题。针对任何版本进行编译,它都可以与相同或更新的任何其他版本配合使用,无论是谁制造的。

注意:AMD的OpenCL驱动程序将作为Intel CPU的OpenCL驱动程序运行。例如,如果您拥有AMD GPU和Intel CPU,并安装了Intel OpenCL驱动程序和AMD OpenCL驱动程序,则AMD驱动程序将报告可以提供GPU设备和CPU设备(您的CPU),Intel驱动程序将报告拥有CPU设备(也是您的CPU),很可能还有GPU设备(例如i7-3770上的GPU在Intel CPU芯片上,这将是HD4000)。如果您盲目地请求“所有可用CPU”,则会得到AMD驱动程序和Intel驱动程序都提供相同的CPU。在这种情况下,您的代码将无法很好地运行。
在Windows上,您需要自己下载头文件,然后从DLL(MSVC)创建库,或直接链接到DLL(Mingw和Clang默认行为)。
在Linux上,您的软件包管理器可能有一个要链接的库,请查阅您发行版的文档。在Ubuntu和Debian上,此命令将起作用...
sudo apt-get install ocl-icd-opencl-dev

在Mac上,无需安装任何东西,尝试安装可能会损坏您的系统。只需安装Xcode,并使用“OpenCL”框架即可。
还有其他平台,例如Android。一些FPGA供应商提供OpenCL库。请查阅供应商文档。

0
Khronos定义了OpenCL标准。每个供应商/开源都将实现这些标准。
Khronos定义了一系列符合性测试,如果供应商声称他的OpenCL实现符合标准,那么就需要通过这些测试。

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