各种OpenCL SDK之间有什么区别

时间:2015-01-27 03:06:01

标签: sdk opencl

我想学习如何使用OpenCL API,但是我对如何安装"感到有点困惑。 OpenCL用于开发。 Google上的各种文章都存在冲突,我怀疑有些文章已经过时了。

我的理解是Khronos集团提供规范,然后各公司提供符合该规范的SDK。

据我所知,你需要:

  1. OpenCL标题,可以从Khronos网站下载
  2. OpenCL库,附带各种SDK
  3. 不同的SDK之间有区别吗?据我所知,选项包括Intel,AMD或Nvidia。我读过有关您使用的SDK是否重要的​​相互矛盾的信息 - 有些消息来源说SDK仅供开发人员使用,生成的二进制文件可以在任何支持OpenCL的硬件上运行,而其他来源则表示使用特定的SDK将您的应用程序锁定到一个供应商硬件这是什么?我选择使用哪个SDK,是否存在可以链接到的非供应商特定的OpenCL库?

4 个答案:

答案 0 :(得分:4)

OpenCL SDK是不同的。它们提供了简化开发,附加功能,样本和文档的工具。 每个制造商都会包含最适合他们硬件的产品,但是在编译应用程序时它们都应该兼容。

" .lib" " .A"链接到应用程序(SDK中的那个)的OpenCL库在所有情况下都是相同的(除非它们具有不同的版本,1.1,1.2,2.0)。 这是因为库不是真正的库,而只是实际驱动程序中实际函数的存根。这也解释了为什么标题都是相同的,它们都链接到同一个库。

所有应用程序,无论编译后的SDK应该是相同的。

对于nVIDIA,除了他们的OpenCL.lib之外,他们提供了一些功能来简化平台获取(oclUtils.h中的oclGetPlatformID())等等,在其他驱动程序上不可用,建议不要使用它们,除非您想要将另一个nVIDIA专用库打包到您的应用程序中。


但是如果你真的想要通用,那么你应该去动态库加载(dload()LoadLibrary())。这将使您的应用程序即使在系统甚至没有安装OpenCL的情况下也能正常工作。

答案 1 :(得分:3)

您是对的,所有SDK都使用(或应该使用)Khronos标头。您也可以自己使用Khronos标题。

在Windows上,您可以链接到OpenCL.lib,它只是OpenCL.dll的静态包装(由\ Windows \ System32中的图形驱动程序安装)。对于相同版本的OpenCL,每个人的包装器应该是相似的。它也是由Khronos提供的(ICD是开源的)但是从SDK中使用它更容易。

OpenCL.dll使用ICD机制加载每个驱动程序安装的运行时。如果安装了多个运行时,它们每个都显示为cl_platform。

如果您的目标是OpenCL 1.1(由于NVIDIA),我建议您使用1.1版标题,以确保您不会意外使用较新的API。

答案 2 :(得分:0)

虽然OpenCL旨在从硬件中抽象代码,但有几种不同类型的GPU架构。这些差异迫使编写特定硬件的特定代码。因此,编写可移植代码并不容易。恕我直言,你最好选择一个硬件,并为该平台使用开发人员友好的SDK。

您尝试解决的用例是什么?

答案 3 :(得分:0)

二进制文件可以在运行时编译(至少在Java中)。因此需要一个OpenCL-C运行时(?),但编译的内核主要依赖于硬件。