各种OpenCL SDK之间的区别是什么

各种OpenCL SDK之间的区别是什么,sdk,opencl,Sdk,Opencl,我想学习如何使用OpenCLAPI,但是对于如何安装OpenCL进行开发,我有点困惑。关于谷歌的各种文章相互矛盾,我怀疑有些已经过时 我的理解是,Khronos group提供了规范,然后各公司提供了符合该规范的SDK 据我所知,您需要: OpenCL标题,可从Khronos网站下载 OpenCL库,它与各种SDK一起提供 不同的SDK之间有区别吗?从我所能看出的选项是英特尔,AMD或Nvidia。我读到了一些关于使用什么SDK是否重要的相互矛盾的信息——一些消息来源说SDK只是为开发人员提供的

我想学习如何使用OpenCLAPI,但是对于如何安装OpenCL进行开发,我有点困惑。关于谷歌的各种文章相互矛盾,我怀疑有些已经过时

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

据我所知,您需要:

OpenCL标题,可从Khronos网站下载 OpenCL库,它与各种SDK一起提供
不同的SDK之间有区别吗?从我所能看出的选项是英特尔,AMD或Nvidia。我读到了一些关于使用什么SDK是否重要的相互矛盾的信息——一些消息来源说SDK只是为开发人员提供的,生成的二进制文件将在任何支持OpenCL的硬件上工作,而其他消息来源说,使用特定SDK会将应用程序锁定到一个供应商的硬件中。是哪一个?我选择使用哪个SDK以及是否有一个非供应商特定的OpenCL库可以链接到,这有关系吗?

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


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

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


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

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

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

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

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

所有的应用程序,不管是什么SDK,编译后都应该是一样的

在nVIDIA的情况下,除了OpenCL.lib之外,它们还提供了一些功能来简化oclUtils.h中的平台获取oclGetPlatformID等,这在其他驱动程序上是不可用的,建议不要使用它们,除非您希望最终不得不将另一个nVIDIA专有库打包到您的应用程序中


但如果您真的想成为泛型,那么您应该使用动态库加载dload,LoadLibrary。这将使您的应用程序即使在系统甚至没有安装OpenCL的情况下也能工作。

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

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

所有的应用程序,不管是什么SDK,编译后都应该是一样的

在nVIDIA的情况下,除了OpenCL.lib之外,它们还提供了一些功能来简化oclUtils.h中的平台获取oclGetPlatformID等,这在其他驱动程序上是不可用的,建议不要使用它们,除非您希望最终不得不将另一个nVIDIA专有库打包到您的应用程序中


但如果您真的想成为泛型,那么您应该使用动态库加载dload,LoadLibrary。这将使您的应用程序即使在系统甚至没有安装OpenCL的情况下也能工作。

您是正确的,所有SDK都使用或应该使用Khronos标题。您也可以自己使用Khronos标题

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

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


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

您是正确的,所有SDK都使用或应该使用Khronos标题。您也可以自己使用Khronos标题

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

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


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

不同的部分:工具,如分析器、库、示例、说明如何编写供应商最佳代码的文档。还要注意OpenCL版本。例如,NVIDIA被1.1卡住了。相同的部分:头文件、链接的ICD库。输出的可执行文件是相同的。不同的部分:工具,例如探查器、库、示例、说明如何编写供应商最佳代码的文档。还要注意OpenCL版本。例如,NVIDIA被1.1卡住了。相同的部分:头文件、链接的ICD库。输出的可执行文件是相同的。现在我只想学习如何访问硬件加速和跨多个处理器运行程序。目前还没有具体的使用案例,但OpenCL似乎是一个有用的API,需要知道如何使用。我用我的Mac和intel inside来尝试OpenCL。如果你感兴趣,你可以在这里看看我的试用程序。如果你有幸尝试OpenCL?现在我只想学习如何访问硬件加速和跨多个处理器运行程序。目前还没有具体的使用案例,但OpenCL似乎是一个有用的API,需要知道如何使用。我用我的Mac和intel inside来尝试OpenCL。如果你感兴趣,你可以在这里看看我的试用程序,有没有机会尝试OpenCL?