Visual studio 2012 赢+;CUDA 6.5.19+;compute_52--ptxas options=-v不显示输出
我正在试图编译一些源代码到Win机器上的最后一个Titan X设备。不幸的是,要在Win7上编译它们,唯一的资源是CUDA 6.5.19。我还试图通过典型的标志--ptxas options=-v来获取关于PTX输出的附加信息。尽管如此,当我使用以下指令时Visual studio 2012 赢+;CUDA 6.5.19+;compute_52--ptxas options=-v不显示输出,visual-studio-2012,cuda,Visual Studio 2012,Cuda,我正在试图编译一些源代码到Win机器上的最后一个Titan X设备。不幸的是,要在Win7上编译它们,唯一的资源是CUDA 6.5.19。我还试图通过典型的标志--ptxas options=-v来获取关于PTX输出的附加信息。尽管如此,当我使用以下指令时 "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_50,code=\"compute_52,compute
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_50,code=\"compute_52,compute_52\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" --keep-dir x64\Release -maxrregcount=0 --ptxas-options=-v --machine 64 --compile -cudart static -DWIN32 -DNDEBUG -D_WINDOWS -D_USRDLL -D_WINDLL -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MD " -o myFile.cu.obj "myFile.cu"
没有显示任何内容注意:我看到通常的compute\u xx、sm\u xx已被compute\u 52、compute\u 52取代
另一方面,如果我对以前的体系结构(即5.0)使用相同的功能
输出与预期一致
1> ptxas info : Compiling entry function '_Z15g_restart_checkPi' for 'sm_50'
1> ptxas info : Function properties for _Z15g_restart_checkPi
1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1> ptxas info : Used 4 registers, 328 bytes cmem[0]
此功能是否存在任何已知问题?获取所需信息有什么想法吗?的--ptxas options=-v
开关指示“编译器”生成有关已编译函数的附加输出
nvcc
实际上是一个编译器驱动程序,在“幕后”做很多事情。此外,nvcc
可以在CUDA可执行文件中嵌入PTX和/或SASS。PTX是一种中间代码格式,仍然必须由名为ptxas
的子工具编译,以便生成GPU机器可执行代码,称为SASS
简而言之,当您以compute\u XX
的形式指定虚拟体系结构目标时,这将指示nvcc
您要生成的PTX类型,并可能嵌入到可执行文件中。指定形式为sm_XX
的物理GPU目标时,您正在标识要嵌入到可执行文件中的GPU机器代码(SASS)的类型
将PTX转换为SASS的工具是ptxas
。这里讨论的开关是一个引导ptxas
行为的开关。但是,如果您只指定虚拟体系结构目标(这是合法的),那么您的可执行文件将只包含PTX(无SASS),并且在编译过程中不会调用ptxas
这就是这里发生的事情,也是为什么看不到ptxas开关的预期输出。解决方案是向
nvcc
compile命令添加一个物理GPU目标(sm_52
) @robert,它有一个更新()允许用compute_52编译。无论如何,我正在安装7.0,我会与您联系!谢谢。你的VS设置有问题。此代码生成开关:-gencode=arch=compute\u 50,code=\“compute\u 52,compute\u 52\”
实际上并不指定任何GPU机器代码的生成,因为只指定了虚拟体系结构(compute\u xx
)。创建的可执行文件(使用适当的工具包)中只嵌入了PTX,编译过程中永远不会调用ptxas
工具(将PTX转换为GPU机器代码,即SASS)。因此,--ptxas options=-v
开关将无效。所以你还需要修复你的VS设置。对不起,我的版本号全搞错了。您是对的,6.5.19应该支持cc5.2。问题不在于工具包版本(您需要6.5.19更新),而在于架构目标的规范。您需要一个体系结构目标sm_52
来指定cc5.2 SASS代码的生成(这将导致调用ptxas
)。您是对的!使用两个compute_52标志进行编译并不是很好。我已经升级到7.0(我认为Win7不支持它,但它是支持的),并且使用compute_52编译,sm_52已经生成了所需的信息。非常感谢@RobertCrovella和Alacasta,你可以添加这些评论作为回答:)
1> ptxas info : Compiling entry function '_Z15g_restart_checkPi' for 'sm_50'
1> ptxas info : Function properties for _Z15g_restart_checkPi
1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1> ptxas info : Used 4 registers, 328 bytes cmem[0]