13

我安装了 CUDA 4.0,以及具有 Compute Capability 2.0 的设备(GTX 460 卡)。

“cubin”和“ptx”文件有什么区别?

我认为 cubin 是 gpu 的本机代码,因此这是特定于微架构的,而 ptx 是通过 JIT 编译在 Fermi 设备(例如 Geforce GTX 460)上运行的中间语言。当我编译.cu源文件时,我可以在 ptx 或 cubin 目标之间进行选择。如果我想要 cubin 文件,我选择code=sm_20. 但是如果我想要一个 ptx 文件,我会使用code=compute_20.

这是对的吗?

4

1 回答 1

18

您将选择编译阶段的选项 (-ptx-cubin) 与控制目标设备的选项( ) 混合在一起-code,因此您应该重新访问文档。

NVCC 是 NVIDIA 编译器驱动程序。-ptx-cubin选项用于选择编译的特定阶段,默认情况下,没有任何特定于阶段的选项 nvcc 将尝试从输入生成可执行文件。大多数人使用该-c选项使 nvcc 生成一个目标文件,该文件稍后将通过默认平台链接器链接到可执行文件中,只有在使用驱动程序 API 时,-ptxand-cubin选项才真正有用。有关中间阶段的更多信息,请查看安装CUDA Toolkit时安装的 nvcc 手册。

  • 的输出-ptx是纯文本 PTX 文件。PTX 是 NVIDIA GPU 的中间汇编语言,尚未完全优化,稍后将被汇编为特定于设备的代码(例如,不同的设备具有不同的寄存器计数,因此完全优化 PTX 将是错误的)。
  • 输出-cubin是一个胖二进制文件,它可能包含一个或多个特定于设备的二进制图像以及(可选)PTX。

您所指的-code论点完全具有不同的目的。我鼓励您查看包含几个示例的 nvcc 文档,通常我会建议使用该-gencode选项,因为它允许更多控制并允许您在一个二进制文件中定位多个设备。举个简单的例子:

  • -gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'导致 nvcc 以所有具有计算能力 xx(arch=即位)的设备为目标,并将 PTX ( code=compute_xx) 以及 sm_yy 和 sm_zz 的设备特定二进制文件嵌入到最终的胖二进制文件中。
于 2011-10-10T08:51:18.660 回答