OpenCL 内核的 LLVM IR 到 PTX 到二进制

Posted

技术标签:

【中文标题】OpenCL 内核的 LLVM IR 到 PTX 到二进制【英文标题】:LLVM IR of OpenCL kernel to PTX to binary 【发布时间】:2019-11-01 11:11:19 【问题描述】:

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

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

以及为 Cuda 描述的 here。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于OpenCL 内核的 LLVM IR 到 PTX 到二进制的主要内容,如果未能解决你的问题,请参考以下文章

OpenCL中的popcnt?

LLVM 之 IR 篇:零基础快速入门 LLVM IR

LLVM 之 IR 篇:如何使用 LLVM IR 优化器

LLVM 之 IR 篇:如何编写生成 LLVM IR 的工具

LLVM 之 IR 篇:如何扩展 LLVM IR 优化器

LLVM 之 IR 篇:如何基于传统 Pass 框架扩展 LLVM IR 优化器