如何在SPIR-V中使用OpenCL lib?

时间:2018-04-13 08:47:40

标签: c++ visual-studio-2015 opencl

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

  

要将OpenCL C ++内核语言编译为SPIR-V,用户必须使用不属于OpenCL框架的编译器。 Khronos Group提供了参考offline compiler based on Clang 3.6以及名为libclcxx的OpenCL C ++标准库的实现。

如何将这些安装说明改编为VS2015?

1 个答案:

答案 0 :(得分:1)

使用OpenCL时,您应该了解代码的划分方式。其中有一部分代码在 host 环境下运行,然后有 device 代码。

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

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

因此,指令要告诉您执行的操作是使用外部工具将OpenCL运行时自身的“ .cl”文件编译为SPIR-V表示形式,然后将该表示形式(clCreateProgramWithIL,后跟clBuildProgram)加载到OpenCL运行时。

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

一旦构建完成(如果已经安装了git和cmake,就很容易了),则可以在VS2015中使用自定义的构建工具/步骤(无论您喜欢哪个)来调用它。