小编WON*_*WON的帖子

如何将 opencl-kernel-file(.cl) 编译为 LLVM IR

这个问题与LLVM/clang有关。
我已经知道如何使用 OpenCL API( clBuildProgram() 和 clGetProgramBuildInfo() )编译 opencl-kernel-file(.cl)

我的问题是:
如何使用 OpenCL 1.2 或更高版本将 opencl-kernel-file(.cl) 编译为 LLVM IR?
换句话说,如何在没有 libclc 的情况下将 opnecl-kernel-file(.cl) 编译为 LLVM IR?

我尝试了各种方法来获取 OpenCL-Kernel-File 的 LLVM-IR。

我首先遵循 clang 用户手册。( https://clang.llvm.org/docs/UsersManual.html#opencl-features)但它没有运行。

其次,我找到了使用libclc的方法。
命令是这样的:

clang++ -emit-llvm -c -target -nvptx64-nvidial-nvcl -Dcl_clang_storage_class_specifiers -include /usr/local/include/clc/clc.h -fpack-struct=64 -o "$@".bc "$@" <br>
llvm-link "$@".bc /usr/local/lib/clc/nvptx64--nvidiacl.bc -o "$@".linked.bc <br>
llc -mcpu=sm_52 -march=nvptx64 "$@".linked.bc -o "$@".nvptx.s<br>
Run Code Online (Sandbox Code Playgroud)


此方法工作正常,但由于 libclc 是在 OpenCL 1.1 规范之上构建的,因此它无法与 OpenCL 1.2 或更高版本的代码(例如使用 printf 的代码)一起使用。

该方法使用libclc,它以新函数的形式实现了OpenCL内置函数。您可以观察到,在结果 opencl 二进制文件的程序集(ptx)中,它直接进入函数调用,而不是将其转换为内联程序集。我担心这会影响 GPU 的行为和性能,例如执行时间。

所以现在我正在寻找一种使用libclc代替编译的方法。
作为最后的手段,我正在考虑将 libclc …

llvm opencl llvm-clang llvm-ir

4
推荐指数
1
解决办法
6910
查看次数

标签 统计

llvm ×1

llvm-clang ×1

llvm-ir ×1

opencl ×1