我想知道有没有一种方法可以查看给定内核中的所有变量值,例如,对于threadIdx.x =1,它当前正在工作的数据是什么,这些数据的值是什么?
一切都运行正常,所以我的问题是,如何像在普通VS中一样,使用“快速观察”或“添加观察”来查看变量,它们在NSight中的等价物是什么?谢谢,我已经挣扎了几个小时了。
我有CUDA信息窗口和CUDA扭曲窗口,当通过NSight调试时,只显示blockIdx,threadIDx坐标。
__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
if(i<N)
c[i]=a[i]*b[i];
// DUmmy code
if(i<2)
int k=i;
}我的内核名为addKernel<<<1,N>>>(dev_c,dev_a,dev_b),我的#DEFINE N 10。
我在if和else中设置了断点。扭曲窗口中的输出设置为显示:
*(a+i) *(b+i) *(c+i) i
0 0 -1 0
2 1 -1 1
4 4 -1 2
6 9 -1 3
8 16 -1 4所以,我的c永远不会被设置。怎么会这样呢?谢谢
附注:那些给我减号的人看到我的问题时总是放弃,我得了-1。再次感谢
发布于 2013-02-11 06:03:14
在向内核添加了一些虚拟行之后,我可以看到c列的值更新了。所以,这就是解决方案。我知道这听起来微不足道,但我以前试过添加虚线,除非额外的虚线是其他变量,而不是用于计算c的线程。所以,简而言之,计算新的线程(或内核中任何新的线程),并在CUDA Warp窗口中想要看到的变量后添加这些额外的行。
发布于 2014-04-16 11:03:39
Nsight VSE CUDA调试器支持几乎所有的Visual Studio调试器工具窗口,包括变量视图、监视窗口、内存视图、调用堆栈视图和断点视图。可以从Visual Studio中的Debug | Windows菜单打开这些文件。
为了查看特定线程的值,您必须为感兴趣的特定线程ID设置一个条件断点,并将条件定义为true。
请参阅Nsight VSE手册中的以下主题
发布于 2014-04-16 03:32:49
在计算能力为2.1 (ci = 0)的555m gt上也有同样的问题。具有计算能力3.0的GTX 660显示正确的值,但有时ci = -1。
对于"dummy“行,它在任何情况下都工作得很好(行ci =ci中的断点)。
__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
c[i] = a[i] + b[i]; //if breakpoint will be here c[i] = -1 or 0
c[i] = c[i]; //breakpoint here guarantees c[i] is correct
}https://stackoverflow.com/questions/14798821
复制相似问题