0

我找到了关于使用开源工具将 OpenCL 内核离线编译到 SPIR-V 中的指南,clang但我找不到使用其他编译器执行此操作的官方方法。

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

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

4

1 回答 1

0

但我找不到与其他编译器一起执行此操作的官方方法。

因为没有任何官方的方式。大多数实现甚至不允许您以独立/离线方式运行他们的编译器。有 Clang,IIRC Intel 确实有离线 OpenCL 编译器;我不知道其他任何人。

除了编写自定义脚本和在不同操作系统上调用 clang 之外,是否还有另一种通用方法来构建相同的包含 OpenCL 的项目

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

包含 SPIR-V 模块的应用程序是否可以在 NVidia 显卡上运行?

不可以。您可以使用“官方方式”获取特定于 Nvidia 的二进制文件,方法是在 clBuildProgram()之后调用clGetProgramInfo ()。

于 2020-12-30T19:58:08.280 回答