我已经安装了CUDA 4.0,以及一个具有计算功能2.0 ( GTX 460卡)的设备。
'cubin‘和'ptx’文件有什么区别?
我认为古巴是gpu的原生代码,所以这是针对微体系结构的,ptx是通过JIT编译运行在费米设备(例如Geforce GTX 460)上的一种中间语言。当我编译一个.cu源文件时,我可以在ptx或cubin目标之间进行选择。如果我想要古巴文件,我选择code=sm_20。但是如果我想要一个ptx文件,我使用code=compute_20。
这是正确的吗?
发布于 2011-10-10 08:51:18
您将选择编译阶段(-ptx和-cubin)的选项与控制要针对哪些设备(-code)的选项混合在一起,因此您应该重新查看文档。
NVCC是NVIDIA编译器驱动程序。默认情况下,-ptx和-cubin选项用于选择编译的特定阶段,而没有任何特定阶段的选项,nvcc将尝试从输入生成可执行文件。大多数人使用-c选项使nvcc生成一个对象文件,该对象文件稍后将被默认平台链接器链接到可执行文件中,只有在使用驱动程序API时,-ptx和-cubin选项才真正有用。有关中间阶段的更多信息,请参阅安装CUDA工具包时安装的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将所有具有计算能力的设备(即arch=位)作为目标,并将PTX (code=compute_xx)以及sm_yy和sm_zz的设备特定二进制文件嵌入到最终的fat二进制文件中。https://stackoverflow.com/questions/7696230
复制相似问题