Cuda 如何从.cu文件中获取NVVM IR(LLVM IR)以及如何将NVVM IR编译为二进制文件?

Cuda 如何从.cu文件中获取NVVM IR(LLVM IR)以及如何将NVVM IR编译为二进制文件?,cuda,llvm,nvidia,llvm-ir,ptx,Cuda,Llvm,Nvidia,Llvm Ir,Ptx,我有一个用于CUDA7.5的CUDAC/C++程序。正如我们所知:libnvm库-一个优化编译器库,它从NVVMIR生成PTX 我可以使用:nvcc-PTX.cu-o.PTX 但是如何从.cu获取NVVM IR(LLVM IR) 如何为目标体系结构编译NVVM IR(LLVM IR)或优化IR 我是否需要第三方库或程序,如:libcuda.lang 更多信息请访问: NVVM编译器(基于LLVM)从 NVVM IR NVVM IR和NVVM编译器大多不知道源代码 正在使用的语

我有一个用于CUDA7.5的CUDAC/C++程序。正如我们所知:libnvm库-一个优化编译器库,它从NVVMIR生成PTX

我可以使用:
nvcc-PTX.cu-o.PTX

但是如何从
.cu
获取NVVM IR(LLVM IR)

如何为目标体系结构编译NVVM IR(LLVM IR)或优化IR

我是否需要第三方库或程序,如:libcuda.lang

  • 更多信息请访问:
NVVM编译器(基于LLVM)从 NVVM IR

NVVM IR和NVVM编译器大多不知道源代码 正在使用的语言。NVVM编译器的PTX codegen部分需要 由于DCI的差异,了解源语言 (驱动程序/编译器接口)

从技术上讲,NVVM IR是具有一组规则的LLVM IR, 限制和约定,以及一组受支持的内在 功能。NVVM IR中指定的程序始终是合法的LLVM 节目。合法的LLVM程序可能不是合法的NVVM程序


简单的回答是你不能这样做。NVIDIA的解析器是专有的和封闭源代码的,他们没有以一种可以像您所问的那样使用的方式公开IR代码生成器


也就是说,您不是第一个对此感到疑惑的人,您可能会找到一些有用但完全非官方且不受支持的信息。

嗨,Alex,您能用clang++/LLVM for CUDA代码获取LLVM IR吗?我也很好奇:
clang++-S-emit llvm-o axpy-I/samples/common/inc-L/axpy.cu-lcudart\u static-lcuda-ldl-lrt-pthread
!非常感谢。也就是说,nvcc是编译器驱动程序,是专有的封闭源代码。但nvopencc是.cu解析器,基于open64,是在GPL下发布的,不是吗?@Alex:nvopencc不是基于LVMM的解析器/编译器,它是CUDA最初附带的第一代、不推荐使用的基于open64的编译器。它还直接发射PTX。当前基于LVVM的解析器是专有的、封闭源代码的,隐藏在libnvm中,没有允许访问发出的LVMM IR代码的外部API或文档。感谢您的澄清。但是如果我们可以使用clang+llvm编译没有nvcc的.cu文件:
clang++-o axpy-I/samples/common/inc-L/axpy.cu-lcudart_static-lcuda-ldl-lrt-pthread
,那么我们可以通过使用“clang++-S-emit llvm-o axpy-I/samples/common/inc-L/axpy.cu-lcudart_static-lcuda-lrt-pthread”得到llvm-ir吗?你看过我给你的链接了吗?是的,CLAN+++可以编译简单的CUDA代码,但是开源CLAN解析器不能像英伟达解析器可以执行的优化那样做任何事情。所以你可以得到某种形式的IR,但它有多好,或者编译成PTX有多好,这是我没有经验的。