【发布时间】:2020-05-22 11:29:55
【问题描述】:
我正在一个更大的项目中处理一些 OpenCL 代码。该代码仅在运行时编译 - 但我不想为此部署版本并启动它。有什么方法可以让我检查这些内核的语法(即使不考虑),甚至编译它们,至少在一些限制下,以便更容易更早地捕获错误?
我的目标是 AMD 和/或 NVIDIA GPU。
【问题讨论】:
-
根据您的环境,您可以提前将内核编译为 SPIR-V,或者如果您知道您将使用哪些卡,将其作为构建过程的一部分进行编译并下载二进制文件.您能否添加更多关于您使用的品牌硬件的详细信息?
-
“你可以编译” - 怎么样? “下载二进制文件” - 哪个二进制文件?从哪里来?
-
正如我所说,这取决于您的环境。使用 AMD 卡,您可以使用
cl_amd_offline_devices平台扩展为任何支持的 AMD GPU 编译程序,包括您没有实际安装的那些,然后可以使用clGetProgramInfo(CL_PROGRAM_BINARIES)保存。我不知道 Nvidia 设备的等效设备,但如果它们支持 SPIR-V,您也许可以使用 SPIR-V 编译器。 -
@apetranzilla:啊,现在你在说话。我应该研究那个平台扩展,至少对于 AMD 卡。
-
我找到了this guide,它描述了如何使用
cl_amd_offline_devices扩展(附录A,第8.6 节)。如果您的标题不包含它提到的CL_CONTEXT_OFFLINE_DEVICES_AMD宏,我发现它在我的系统中定义为0x403F,因此使用该值自己定义应该可以正常工作。
标签: opencl dynamic-compilation