如何将 OpenCL 库与 SPIR-V 一起使用?

How to use OpenCL lib with SPIR-V?

我已经成功地使用 OpenCL 和 VS2015 编写并执行了一个 .cl 程序。我现在正尝试按照 these guidelines 将其转换为 OpenCL C++,其中提到:

To compile OpenCL C++ kernel language to SPIR-V user have to use compiler that is not a part of OpenCL framework. The Khronos Group provides reference offline compiler based on Clang 3.6 and an implementation of OpenCL C++ Standard Library called libclcxx.

如何使这些安装说明适应 VS2015?

在使用OpenCL的时候,应该明白代码是如何划分的。有一部分代码运行在host环境下,然后是device代码

在您的示例中,您可以使用 VS2015 通过 MSVC 编译器编译主机代码,链接到 OpenCL 运行时库。但是,MSVC 将不支持编译 kernel 代码,无论是 C 还是 C++。

要编译内核代码,您可以使用 OpenCL 运行时库(即 clCreateProgram 后跟 clBuildProgram),如果它们支持源语言。此外,一些(大多数)OpenCL 设备支持内核代码的 中间 表示。这些通用的中间表示之一是 SPIR-V。因此,您可以加载内核的任意 SPIR-V 表示,假设它满足所有 OpenCL 要求。

因此说明告诉您要做的是使用外部工具将您的“.cl”文件编译为 OpenCL 运行时本身为 SPIR-V 表示,然后加载该表示(clCreateProgramWithIL,然后是 clBuildProgram)使用 OpenCL 运行时。

具体如何操作取决于您。一种方法是使用 Khronos 提供的修改后的 Clang 编译器: https://github.com/KhronosGroup/SPIR/tree/spirv-1.1

构建完成后(如果您已经安装了 git 和 cmake,则非常简单),您可以在 VS2015 中使用自定义构建 tool/step(无论您喜欢哪个)调用它。