首页 > 解决方案 > OpenCL 内核的 LLVM IR 到 PTX 到二进制

问题描述

我正在使用 clang 为 Nvidia OpenCL 和 Cuda 内核生成 LLVM IR,我想随后对其进行检测,为 OpenCL 执行以下操作:

clang -c -x cl -S -emit-llvm -cl-std=CL2.0 kernel.cl -o kernel.ll

以及这里为 Cuda描述的内容。

我正在寻找的是一种从仪器 IR 到实际二进制文件的方法。对于 Cuda,我知道我可以使用 NVPTX 后端生成 PTX 和 JIT 编译,如此所述(或者可能使用 ptxas?)。我想知道 OpenCL 案例是否也可能发生类似的事情,如果是这样,也许是一个最小的例子。提前致谢。

标签: clangopenclllvmptx

解决方案


原则上,您可以使用clGetProgramInfo()withCL_PROGRAM_BINARY_SIZES和为加载和编译的 OpenCL 内核提取二进制文件CL_PROGRAM_BINARIES

据我所知,这将生成完全由实现定义的格式的二进制文件。因此,如果您不走运,无论如何您都可以取回 IR 代码。但是,如果运气好的话,它可能会在您的平台上包含 PTX 机器代码。


推荐阅读