用GTX650Ti +CUDA5.0+Nsight3.0进行调试,设置按照NVIDIA Nsight Visual Studio Edition 3.0 User Guide > CUDA Debugger > Walkthrough: Debugging a CUDA Application 里面进行的(在这里不能发链接),但是在断点处不停留,但是中间有链接过程如下图:请问一下是怎么回事啊?谢谢
[attach]3192[/attach]
楼主您好,因为您没有具体描述您的编译步骤,这里我将给出正确的过程,供您参考:
(1)确定您的.cu使用了-G进行编译。
(2)确定您通过VS在kernel而不是host code中点击了断点。
(3)确定您是通过Nsight->Start CUDA Debugging开始的调试。
(4)确定您的kernel会被正确的执行到。
(举个反例,一个<<<0,0>>>(…);的形状配置,将无法执行您的kernel)。
建议您检查此4点。
感谢您的周末来访。
谢谢斑竹的回答,经过检查你说的四项都应该没问题。但是第一点不是很明确,我认为斑竹是不是让我用cuda的编译规则进行编译啊。如果理解错误换望斑竹指点。
后面改了一下,出来的结果是这样的:
@flatBlockIdx 0 long
@flatThreadIdx 0 long
-
threadIdx {x = 0, y = 0, z = 0} const uint3
-
blockIdx {x = 0, y = 0, z = 0} const uint3
-
blockDim {x = 32, y = 32, z = 1} const dim3
-
gridDim {x = 20, y = 10, z = 1} const dim3 @gridId 1 const long long
不知道是怎么回事?谢谢
第一点说的情况请参阅下图:
[attach]3196[/attach]
这是VS 2008中的截图,供您参考。
祝您编码顺利~
嗯。谢谢斑竹,现在可以了。。谢谢
不客气的,恭喜您搞定问题~~
祝您好运~
如果您是在按照上述四点进行了确保,然后在kernel中停下来了,然后在vs的debug->local窗口中看到了这些变量和它们的当前值,
那么这样是正常的。它们是内建的变量。
所以您在调试的时候,哪怕您自己没有定义过它们,它们也会存在的。
谢谢。
谢谢斑竹的提醒。。。现在已经能够成功调试。但是有几个问题不明白:
1:在Inspect Values in Memory看到的是一群地址,有什么用呢?
2:还有个就是cuda编程技巧的问题,原来一直是把每个线程到一个cpu用,结果速度很慢。后面听说在GPU中最好执行 纯计算的运算,不如全部为加或者减,乘除都要少用;而且最好不要用for循环这种语句。但是到底是怎样才比较好,没有个明确的概念。望斑竹指教。谢谢
也解决了我的问题:lol