是否有独立于 OS 的方法将 OpenCL 内核转换为 SPIR-V?

Is there an OS-independent way to transpile OpenCL kernels into SPIR-V?

我在 Offline Compilation of OpenCL Kernels into SPIR-V Using Open Source Tooling 上找到了 clang 的指南,但我找不到使用其他编译器执行此操作的官方方法。

有没有办法使用 CMake 将 OpenCL 内核转换为 SPIR-V? 如果不是,除了编写自定义脚本并在不同操作系统上调用 clang(我对 Linux 和 Windows 特别感兴趣)之外,是否有另一种通用方法来构建相同的包含 OpenCL 的项目?

我看到 SPIR-V 是为 OpenCL 2.0+ 使用而设计的,但 NVidia 显卡仅支持 OpenCL 1.2-。包含 SPIR-V 模块的应用程序是否可以在 NVidia 显卡上运行?

but I cannot find an official way to do this with other compilers.

因为官方没有办法。大多数实现甚至不允许您以 standalone/offline 的方式 运行 他们的编译器。有 Clang,IIRC 英特尔确实有一个离线 OpenCL 编译器;我不知道其他人。

is there another universal way to build the same OpenCL-containing project except writing custom scripts and call clang on different operating systems

取决于您所说的“建筑”是什么意思。几乎在任何地方都有效的唯一方法是将 OpenCL 源与您的程序一起分发,并在 运行 时间调用 clBuildProgram()。如果这对您不利,那么您有两个选择,1) 混淆 CL 源代码,2) 分发二进制文件。对于 2),没有任何地方都适用的官方二进制格式。 SPIR-V 接近,但仅自 OpenCL 2.1 起才强制支持。

Will applications containing SPIR-V modules be working on NVidia graphics cards?

没有。您可以使用“官方方式”获取特定于 Nvidia 的二进制文件,方法是在 clBuildProgram().

之后调用 clGetProgramInfo()