我正在使用 clang 为 Nvidia OpenCL 和 Cuda 内核生成 LLVM IR,我想随后对其进行检测,为 OpenCL 执行类似的操作:
clang -c -x cl -S -emit-llvm -cl-std=CL2.0 kernel.cl -o kernel.ll
以及描述的内容 here对于 Cuda。
我正在寻找一种从仪表化 IR 到实际二进制文件的方法。对于 Cuda 的情况,我知道我可以使用 NVPTX 后端来生成 PTX 和 JIT 编译,如所述 here (或者也许使用 ptxas?)。我想知道 OpenCL 案例是否也可能有类似的情况,如果是的话,也许是一个最小的例子。提前致谢。
最佳答案
原则上,您可以使用 clGetProgramInfo()
提取已加载和编译的 OpenCL 内核的二进制文件。与 CL_PROGRAM_BINARY_SIZES
和 CL_PROGRAM_BINARIES
。
据我所知,这将以完全实现定义的格式生成二进制文件。所以如果你运气不好,你也只能得到 IR 代码。不过,如果幸运的话,它可能包含您平台上的 PTX 机器代码。
关于clang - OpenCL 内核的 LLVM IR 到 PTX 到二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58658253/