【发布时间】:2015-11-14 13:39:14
【问题描述】:
我想将 CUDA 代码转换为 llvm 位代码,以便对其进行检测。我试过 gpuocelot,它将 ptx 编译成 CPU 可执行代码。尽管如此,我无法从中获取 llvm 位码,因此无法对其进行检测。有一些活动试图让 llvm 支持 CUDA。任何人都可以提供一个强大的解决方案来将 CUDA 转换为可行的 llvm 位码吗?谢谢。
【问题讨论】:
-
gpuocelot 似乎是使用 LLVM 实现的,因此中间步骤应该是将 ptx 解析为 LLVM IR。你为得到它做了什么尝试,它是如何失败的?
-
@Oak:gpuocelot 从 nvcc 的 .o 开始,输出一个 .out 文件执行。我不知道如何获取用于 llvm 检测的位码 .bc 文件。有什么建议吗?
-
由于 gpucelot 是开源的,您可以获取它的源代码,修改它以在解析 LLVM IR 后转储它,然后在您的输入上运行它。例如,每个 LLVM 元素都有一个
dump()方法,它将 IR(以文本格式,但很容易转换为位码)转储到标准输出,我相信还有更精致的方法。