PTX 和 CUBIN w.r.t 有啥区别? NVCC 编译器?
Posted
技术标签:
【中文标题】PTX 和 CUBIN w.r.t 有啥区别? NVCC 编译器?【英文标题】:What's the difference between PTX and CUBIN w.r.t. the NVCC compiler?PTX 和 CUBIN w.r.t 有什么区别? NVCC 编译器? 【发布时间】:2011-12-03 12:26:21 【问题描述】:我安装了 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
。
对吗?
【问题讨论】:
.cubin
是 CUDA 二进制文件,.ptx
是传递给 ptxas
汇编器的 CUDA 汇编器源代码(文本)
【参考方案1】:
您将选择编译阶段的选项(-ptx
和 -cubin
)与控制目标设备的选项(-code
)混为一谈,因此您应该重新查看文档。
NVCC 是 NVIDIA 编译器驱动程序。 -ptx
和 -cubin
选项用于选择编译的特定阶段,默认情况下,没有任何特定于阶段的选项 nvcc 将尝试从输入生成可执行文件。大多数人使用-c
选项来使nvcc 生成一个目标文件,该文件稍后将通过默认平台链接器链接到可执行文件中,-ptx
和-cubin
选项只有在您使用驱动程序API 时才真正有用.有关中间阶段的更多信息,请查看安装 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 的设备特定二进制文件嵌入到最终的胖二进制文件中。
【讨论】:
以上是关于PTX 和 CUBIN w.r.t 有啥区别? NVCC 编译器?的主要内容,如果未能解决你的问题,请参考以下文章
prefetch 和 prefetchu ptx 指令有啥区别?