我该如何阅读PTX?

时间:2013-06-01 18:04:11

标签: cuda

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

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

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

1 个答案:

答案 0 :(得分:7)

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

nvcc -ptx mycode.cu

将生成一个mycode.ptx文件,其中包含与您使用的文件对应的ptx代码。使用-src-in-ptx选项也很有启发性:

nvcc -ptx -src-in-ptx mycode.cu

将源代码行与它们对应的ptx行散布在一起。

要理解ptx,请从documentation

开始

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

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

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

cuobjdump -sass mycode.exe

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