WIN + CUDA 6.5.19 + compute_52 --ptxas-options = -v不显示输出

时间:2015-04-16 06:54:15

标签: visual-studio-2012 cuda


我正在尝试将一些源代码编译到Win机器上的最后一个Titan X设备上。不幸的是,要在Win 7上编译它们,唯一的资源是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_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_xx,sm_xx 已被 compute_52,compute_52 取代。

另一方面,如果我对以前的架构使用相同的功能(即5.0),

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_50,code=\"sm_50,compute_50\" --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" 

输出符合预期。

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]

此功能是否有任何已知问题?有什么想法可以获得所需的信息吗?

1 个答案:

答案 0 :(得分:3)

nvcc--ptxas-options=-v开关指示"编译器"生成有关已编译函数的附加输出。

nvcc实际上是一个编译器驱动程序,它可以做很多事情并在#34;下进行操作。此外,nvcc可以将PTX和/或SASS嵌入到CUDA可执行文件中。 PTX是一种中间代码格式,仍然必须由名为ptxas的子工具编译,以生成GPU机器可执行代码,称为SASS。

简而言之,当您指定compute_XX形式的虚拟体系结构目标时,它会指示nvcc您要生成的PTX类型,并可能嵌入可执行文件中。当您指定sm_XX形式的物理GPU目标时,您将识别要嵌入可执行文件中的GPU机器代码(SASS)的类型。

将PTX转换为SASS的工具为ptxas。这里讨论的交换机是一个指导ptxas行为的开关。但是,如果您指定虚拟体系结构目标(这是合法的),则您的可执行文件将仅包含PTX(无SASS),并且在编译过程中将不会调用 ptxas < / em>的

这就是这里发生的事情,以及为什么没有看到ptxas开关的预期输出。解决方案是将物理GPU目标(在这种情况下为sm_52)添加到nvcc编译命令。