如何使用 Clang 将 OpenCL 内核编译为 SPIR-V

How to compile OpenCL Kernels to SPIR-V using Clang

我需要在 SPIR-V 中编译 OpenCL 内核以与 Vulkan 一起使用,我尝试使用 Google CLSPV https://github.com/google/clspv,但是矢量化会出现问题,像 vload8 这样的函数不起作用。所以我需要使用 clang 在 SPIR-V 中编译 OpenCL 内核。

Clspv 是我所知道的唯一将 OpenCL C 编译为与 Vulkan 兼容的 SPIR-V 的工具链。您需要针对 Clspv 提出问题;附加一个无法正确编译的内核会有很大帮助。

我是 Clspv 的项目负责人。杰西总体上是正确的。

目前故意不支持长度为 8 和 16 的向量。
那是因为 Vulkan 本身不支持。
我们还没有添加模拟此类支持的支持,即使在中期也不打算这样做。
有关旧的已关闭问题的更多信息:
https://github.com/google/clspv/issues/8

https://github.com/KhronosGroup/SPIR/tree/spirv-1.1

您可以关注这个 Khronos 项目。

clang -cc1 -emit-spirv -triple=spir-unknown-unknown -cl-std=c++ -I include kernel.cl -o kernel.spv #For OpenCL C++

clang -cc1 -emit-spirv -triple=spir-unknown-unknown -cl-std=CL2.0 -include opencl.h kernel.cl -o kernel.spv #For OpenCL C