问题描述:在使用NSight进行断点调试时,不能查看相应变量值,如图所示
[attach]2910[/attach]
嗯嗯,nsight调试容易遇到这个问题,哪怕即使添加了-G选项,只要变量不在生存期内,就无法观看。
例如:
int dog = 100;
//…省略一堆使用dog的代码
//最后一句使用dog的代码
//!! 从此处起将无法观察到。
而楼主这个例子,实际上只需要在用到的时候(循环时候), i才有效的占用寄存器,并生存。
所以楼主那个时候的确可以看不到。
而我们的x86/x64上不同,因为寄存器很少,所以局部变量一般都在stack frame里,而stack frame一般在函数开头就分配了,在函数结束的时候才销毁。所以一般CPU调试一进入函数,一般情况下即可看到。当然,打高点优化,依然还是可能看不到的,即使在CPU上调试。
此外,别忘记使用上文的-G选项,在你的.cu属性页里可以看到。有些老版本的nsight这里是-G0。
谢谢版主的详解,之前还在想-G选项和-G0选项之间有啥区别,原来是版本差异,还有版主说的高点优化指的是?是.cu属性页里面的属性么?如图[attach]2911[/attach]
嗯嗯。之前有是device调试信息+device代码优化一起的选项,(-G0,-G1,-G2…), 一般我用-G0. 也就是现在的-G。
至于我说的优化选项,是指的对CPU代码的而言的,这里的选项的确是。
一般的说,我建议调试的时候不要开启优化,否则会给自己带来不必要的麻烦。
其实这个Build扩展/规则是toolkit自带的,所以说,是toolkit版本的不同,导致的选项的变化。至于nsight, 它只不过自动替你配置了VS而已。在没有nsight的年代,我们也可以自己配置一下。
恩,我现在是在MFC单文档里面编写CUDA程序,参考相关资料后确实可以正常工作,但在选择Custom Build Tool编译时,对命令行里面有些不大理解,如图
[attach]2912[/attach]
您帮我看下这个命令行是否正确
“$(CUDA_BIN_PATH)\nvcc.exe” -ccbin “$(VCInstallDir)bin” -c -D_DEBUG -DWIN32 -D_CONSOLE -D_MBCS -Xcompiler /EHsc,/W3,/nologo,/Wp64,/Od,/Zi,/RTC1,/MTd -I"$(CUDA_INC_PATH)" -I./ -I…/…/common/inc -o $(ConfigurationName)\Rt_Calculate.obj Rt_Calculate.cu
这个命名行和Cuda Runtime API的命名行应该是有一定相关关系吧?
还有是不是含有kernel函数的.cu是否需要将Excluded From Build设为true?(惭愧没有找到相关资料)
版主有Custom Build tool命令行配置的参考资料吗?
我使用的这个命令行是直接拷贝人家的,其实不懂
抱歉,我没有这方面的资料。同时这个已经超出了我的能力范围。
其次,我也不懂MS的VS Build Rules Customaztion(对于版本小于2010的VS), 或者VS Build Extensions(对于大于等于2010的VS), 我建议您查看MSDN。上面有您需要的资料。
最后,我建议您安装cuda toolkit自带的build extensions(或者build rules), 里面已经配置好了。
如果您用的是cuda toolkit 5.0, 那么会自动为您配置VS的。如果不是5.0, 您可以手工添加(方法:右键点击任何一个solution, 选择build extensions(rules), 在里面添加。路径是你的toolkit安装路径下的extra目录下的vs_integration(或类似名字))。
EDIT: 说一下的是,toolkit自带的那个就很好用。细节也照顾的挺全(例如在build完毕后复制runtime dll到exe所在目录等)。建议使用的。当然您可以无视此建议。
恩,谢谢版主,还有我用的是5.0:)
嗯嗯。如果您用的是5.0, 您已经无需配置了(如果您先安装的VS, 后安装的toolkit这个顺序的话)。
以及您也无需从他人哪里抄任何配置命令行。
此外,您可以只关注前文中关于5.0的部分,而忽略关于其他版本的toolkit的部分。