是否有独立于 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()
我在 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()