我正在试图编译一些来源的最后泰坦X设备上的一台Win机器。不幸的是,要在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]这个功能有什么已知的问题吗?有什么想法来获得想要的信息吗?
发布于 2015-04-16 16:16:05
用于--ptxas-options=-v的nvcc开关指示“编译器”生成有关已编译函数的附加输出。
nvcc实际上是一个编译器驱动程序,它做了很多“幕后”的事情。此外,nvcc可以将PTX和/或SASS嵌入到CUDA可执行文件中。PTX是一种中间代码格式,它仍然必须由名为ptxas的子工具编译,以便生成GPU机器可执行代码,称为SASS。
简而言之,当您指定表单compute_XX的虚拟体系结构目标时,这将指示nvcc要生成的PTX类型,并可能嵌入到可执行文件中。当您指定表单sm_XX的物理GPU目标时,您正在标识希望嵌入到可执行文件中的GPU机器代码(SASS)的类型。
将PTX转换为SASS的工具是ptxas。这里所讨论的开关是一个引导ptxas行为的开关。但是,如果您只指定虚拟体系结构目标(这是合法的),那么您的可执行文件将只包含PTX (没有SASS),并且在编译过程中不会调用ptxas。
这就是这里正在发生的事情,以及为什么看不到来自ptxas开关的预期输出。解决方案是将一个物理GPU目标(本例中为sm_52)添加到nvcc编译命令中。
https://stackoverflow.com/questions/29667411
复制相似问题