我正在尝试将一些源代码编译到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]
此功能是否有任何已知问题?有什么想法可以获得所需的信息吗?
答案 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
编译命令。