3

我正在使用 Capabilities 3.5、CUDA 5 和 VS 2010(显然还有 Windows)。

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

  • 我需要在 VS 中进行什么配置来编译代码以提高可读性(将编译设置为 PTX 就足够了吗?)?
  • 我需要什么工具对生成的 PTX 进行逆向工程才能读取它?
4

1 回答 1

8

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

nvcc -ptx mycode.cu

这将生成一个mycode.ptx包含与您使用的文件相对应的 ptx 代码的文件。使用该-src-in-ptx选项也可能具有指导意义:

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

这会将源代码行与它们对应的 ptx 行穿插。

要理解 ptx,请从文档开始

请注意,由于优化,编译器可能会生成与源代码不完全对应的 ptx 代码,或者在其他方面令人困惑。您可能希望(也许获得洞察力)也使用 switch 编译一些测试用例-G,以查看未优化版本的比较情况。

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

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

cuobjdump -sass mycode.exe

如果需要,关于预先设置适当路径的类似警告。我将从ptx开始。我想对于你想做的事情,这就足够了。

于 2013-06-01T18:14:53.583 回答