我该如何阅读PTX?

Ada*_*dam 2 cuda

我正在使用Capabilities 3.5,CUDA 5和VS 2010(显然是Windows).

我有兴趣阅读已编译的代码,以更好地理解我的C代码更改的含义.

  • 我需要在VS中使用什么配置来编译代码以便于阅读(将编译设置为足够的PTX?)?
  • 我需要使用什么工具对生成的PTX进行反向工程才能读取它?

Rob*_*lla 8

通常,要创建特定.cu文件的ptx版本,该命令为:

nvcc -ptx mycode.cu
Run Code Online (Sandbox Code Playgroud)

这将生成一个mycode.ptx文件,其中包含与您使用的文件对应的ptx代码.使用该-src-in-ptx选项也许是有益的:

nvcc -ptx -src-in-ptx mycode.cu
Run Code Online (Sandbox Code Playgroud)

这将散布源代码行与它们对应的ptx行.

要理解ptx,请从文档开始

请注意,编译器可能会生成与源代码不对应的ptx代码,或者由于优化而导致混乱.您可能希望(也许是为了获得洞察力)使用-G交换机编译一些测试用例,以查看非优化版本如何比较.

由于Windows环境可能因机器而异,我认为如果只查看特定版本msvc++用于调用的路径nvcc (在编译时查看其中一个项目的控制台输出)并添加命令,则会更容易我在上面给出了这条道路.我不确定尝试直接将其构建到Visual Studio中有多大用处,除非您特别需要 ptx 编译为可执行文件.还有一些 示例代码以某种方式与ptx有关.

另请注意,为了完整性,ptx实际上并不是设备执行的内容(但通常非常接近).它是一个中间代码,可以通过nvcc也位于GPU驱动程序中的编译器或部分编译器重新定位到系列中的设备.要查看设备执行的实际代码,我们使用可执行文件而不是源代码,并且提取机器组装代码的工具是:

cuobjdump -sass mycode.exe
Run Code Online (Sandbox Code Playgroud)

如果需要,可以采用类似的警告来预先设置适当的路径.我会从ptx开始.我想你想做什么,就够了.