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

标签 clang opencl llvm ptx

我正在使用 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_SIZESCL_PROGRAM_BINARIES

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

关于clang - OpenCL 内核的 LLVM IR 到 PTX 到二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58658253/

相关文章:

c - 双向链接中的用户输入

python - 安装 `dulwich` 给出 `error: command ' clang' failed with exit status 1`

铛格式BinPackArguments不能按预期工作

c - OpenCL 设备端排队内核和本地内存

c++ - 将 __bridge cast 与 static_cast 结合使用的语法是什么?

rust - 从语义的角度来看,Rust 中发生 `&mut` noalias 的未定义行为是什么时候?

c++ - Clang 的 'type_visibility' 属性有什么作用,什么时候应该使用它?

opengl - 使用 CUDA/OPENCL 直接绘制到屏幕

cuda - NVIDIA GPU上的cuda Kernel的峰值吞吐量

llvm - LLVM中级代表是什么?