大家好!
.cu里有如下一段代码,调试的时候设置的断点都跳过了,并且也看不到变量里的值。
int gdx = Iorigin_height - (2*Iinterval+1);
int gdy = Iorigin_width -(2*Iinterval+1);
int bdx = 2*Iinterval+1;
int bdy = 2*Iinterval+1;
dim3 grd_dim( gdx, gdy);
dim3 blk_dim( bdx, bdy);
请各位指点,谢谢。
大家好!
.cu里有如下一段代码,调试的时候设置的断点都跳过了,并且也看不到变量里的值。
int gdx = Iorigin_height - (2*Iinterval+1);
int gdy = Iorigin_width -(2*Iinterval+1);
int bdx = 2*Iinterval+1;
int bdy = 2*Iinterval+1;
dim3 grd_dim( gdx, gdy);
dim3 blk_dim( bdx, bdy);
请各位指点,谢谢。
仔细看看代码是否有非致命的错误(譬如显存访问越界),有非致命的错误不会报错但是断点停不住,还有你确定是在debug下启动nsight调试才可以哈,release下也可以启动nsight,但是就是断点停不住。。。。。。。。。。。。
对了,你用Visual Profiler能搜集到信息吗,我的不行啊,郁闷死了,总是说Unable to collect metric and values
The order of kernel execution does not match the timeline. To associate events and metrics with the correct kernel, the application must behave identically on each run. Discarding all collected events and metrics .
请问哪些操作可能导致“显存访问越界”?
确定是在debug模式下,而且不是kernel函数里,没有用Nsight调试,直接F5,.cu里的其他断点可以停下。
我刚接触CUDA,还不会用Visual Profiler,所以帮不了你。
这个就要看自己的代码了,譬如说开了10字节的显存,然后程序里访问了第11个字节。我是vs10下的,你的断点是设在host函数代码还是global函数(或device)代码?
LZ您好,根据您1#的内容和3#的补充,可以看出来您这个是在VS 2005下用VS的调试功能调试host端代码。一般来说这样的确是可以的。
只有device端的代码才需要nsight调试,并且nsight应该是不支持VS 2005的。
暂时无法判断您的问题所在,请您检查一下您的代码有无错误以及这几句是否确实被执行了。
大致如此,望他人补充。
祝您好运~
代码编译能通过,就是没有明显的错误。如1#代码所示,就是每行设置一个断点(前面标记一个红点),启动调试时,只剩最后一行有个断点。至于代码执行不执行,和我设置的断点没关系吧,就是说即使代码不执行,断点也应该在。费解。不知道是VS的问题还是CUDA。
sample里的代码可以正常使用(设置断点)。
请大家提示提示,在编写代码时,什么情况下会出现这种情形?
楼主您好,通过阅读您的1#发文和3#补充您是在调试Host Code(使用VS Debugger而不是nsight),
那么此问题和CUDA无关,但依然进行解答:
在VS里,无法调试一段host code但此code的确执行了,而此文件的其他code可以调试,
往往是因为,
您的pdb和您的exe不对应造成的(例如您从他人处复制了代码,或者pdb损坏)
建议的解决方案:请尝试使用clean solution->build solution过程, 或者rebuild solution一次,
然后重新进行调试,看看问题是否解决。
感谢您的周末来访。
感谢大家的解答!
7#的方法已经试过了,不行。
只是同样的语句,放到.cpp文件里就能正常断点。
以前几乎没遇到过这种情况,只是现在用CUDA才遇到,我想可能与CUDA有关吧。
还有这个:
unsigned int timer = 0;
cutilCheckError( cutCreateTimer( &timer));
cutilCheckError( cutStartTimer( timer));
语句是从template里复制过来的,在.cu文件里的host函数里。
timer不能被初始化,跟踪时的情况是跳过timer=0;执行了下一句。请问这又是怎么回事?