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

LLVM IR of OpenCL kernel to PTX to binary

我正在使用 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 案例是否也可能有类似的东西,如果是的话,也许是一个最小的例子。提前致谢。

原则上,您可以通过使用 clGetProgramInfo()CL_PROGRAM_BINARY_SIZESCL_PROGRAM_BINARIES.

来提取加载和编译的 OpenCL 内核的二进制文件

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