7

您是否建议阅读内核的 PTX 代码以进一步优化内核?

一个例子:我读到,可以从 PTX 代码中找出自动循环展开是否有效。如果不是这种情况,则必须在内核代码中手动展开循环。

  • PTX 代码还有其他用例吗?
  • 您查看您的 PTX 代码吗?
  • 在哪里可以找到如何读取 CUDA 为我的内核生成的 PTX 代码?
4

1 回答 1

14

关于 PTX 的第一点是它只是在 GPU 上运行的代码的中间表示——一种虚拟机汇编语言。PTXptxas在编译时或由驱动程序在运行时组装成目标机器代码。因此,当您查看 PTX 时,您查看的是编译器发出的内容,而不是 GPU 实际运行的内容。也可以从头开始编写您自己的 PTX 代码(这是 CUDA 中唯一支持的 JIT 编译模型),或者作为 CUDA C 代码中内联汇编程序部分的一部分(后者自 CUDA 4.0 起正式支持,但是“非官方”支持的时间要长得多)。CUDA 始终随工具包一起提供 PTX 语言的完整指南,并且有完整的文档。豹猫项目已经使用此文档实现了他们自己的 PTX 交叉编译器,它允许 CUDA 代码在其他硬件上本地运行,最初是 x86 处理器,但最近是AMD GPU

如果您想查看 GPU 实际运行的内容(而不是编译器发出的内容),NVIDIA 现在提供了一个名为的二进制反汇编工具cudaobjdump,该工具可以显示为 Fermi GPU 编译的代码中的实际机器代码段。有一个decuda用于 G80 和 G90 GPU 的旧的、非官方的工具。

话虽如此,从 PTX 输出中可以学到很多东西,特别是编译器如何应用优化以及它发出什么指令来实现某些 C 结构。每个版本的 NVIDIA CUDA 工具包都附带PTX 语言的指南nvcc和文档。两个文档中都包含大量信息,既可以学习如何将 CUDA C/C++ 内核代码编译为 PTX,也可以了解 PTX 指令的作用。

于 2011-11-10T15:12:17.010 回答