我已经找到了一个关于用开源工具将OpenCL内核离线编译成SPIR的clang指南,但是我无法找到一种与其他编译器一起进行此操作的正式方法。
有没有一种方法可以使用OpenCL将一个CMake内核转换到SPIR中?如果不是,除了编写自定义脚本和在不同的操作系统上调用clang (我对Linux和Windows特别感兴趣)之外,是否还有另一种通用的方法来构建相同的包含OpenCL的项目?
我看到SPIR-V是为OpenCL 2.0+设计的,但是NVidia显卡只支持OpenCL 1.2-。包含SPIR模块的应用程序会在NVidia显卡上工作吗?
发布于 2020-12-30 19:58:08
但我无法找到一种与其他编译器一起进行此操作的正式方法。
因为没有任何官方的方法。大多数实现甚至不允许您以独立或脱机的方式运行它们的编译器。有Clang,IIRC确实有一个离线OpenCL编译器;我不知道还有其他编译器。
除了编写自定义脚本和在不同的操作系统上调用clang之外,是否还有另一种通用的方法来构建相同的包含OpenCL的项目?
取决于你所说的“建筑”是什么意思。几乎在任何地方工作的唯一方法是使用程序分发OpenCL源代码,并在运行时调用clBuildProgram()。如果这对您不好,那么您有两个选项: 1)混淆CL源,2)分发二进制文件。对于2),没有任何正式的二进制格式在任何地方都能工作。SPIR非常接近,但它的支持仅在OpenCL 2.1之后才是强制性的。
包含SPIR模块的应用程序会在NVidia显卡上工作吗?
不是的。您可以使用“正式方式”获得特定于Nvidia的二进制文件,方法是在clGetProgramInfo()之后调用clBuildProgram()。
https://stackoverflow.com/questions/65476190
复制相似问题