Cuda PTX和CUBIN w.r.t.NVCC编译器之间有什么区别?

Cuda PTX和CUBIN w.r.t.NVCC编译器之间有什么区别?,cuda,nvidia,nvcc,ptx,Cuda,Nvidia,Nvcc,Ptx,我已经安装了CUDA 4.0,一个具有计算能力2.0的设备,一个GTX 460卡 “cubin”和“ptx”文件之间有什么区别 我认为cubin是gpu的本机代码,因此这是特定于微体系结构的,而ptx是一种中间语言,通过JIT编译在费米设备上运行,例如Geforce GTX 460。编译.cu源文件时,我可以在ptx或cubin目标之间进行选择。如果我想要cubin文件,我选择code=sm_20。但是如果我想要一个ptx文件,我就使用code=compute\u20 是否正确?您将选择编译阶段

我已经安装了CUDA 4.0,一个具有计算能力2.0的设备,一个GTX 460卡

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

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


是否正确?

您将选择编译阶段-ptx和-cubin的选项与控制目标设备编码的选项混合在一起,因此您应该重新查看文档

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

-ptx的输出是一个纯文本ptx文件。PTX是NVIDIA GPU的中间汇编语言,尚未完全优化,稍后将组装为设备特定代码。例如,不同的设备具有不同的寄存器计数,因此完全优化PTX是错误的。 -cubin的输出是一个fat二进制文件,它可能包含一个或多个特定于设备的二进制图像以及可选的PTX。 您引用的-code参数有完全不同的用途。我鼓励您查看包含几个示例的nvcc文档,通常我建议使用-gencode选项,因为它允许更多的控制,并允许您在一个二进制文件中针对多个设备。举个简单的例子:

-gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'使nvcc瞄准所有具有计算能力xx(即arch=bit)的设备,并将PTX code=compute_xx以及sm_yy和sm_zz的设备特定二进制文件嵌入最终fat二进制文件中。 .cubin是CUDA二进制文件,.ptx是传递给ptxas汇编程序的CUDA汇编程序源文本