Nsight调试时local值显示不对

[attach]3332[/attach]
rt,在中local中的值和实际的值不相同,而实际的值是那个小框中的值。。这个是怎么回事?谢谢

LZ您好:

您代码段中下拉显示的是 piArray1,您下放Locals窗口中是piArray。这是两个数组的。

祝您好运~

哦。。对哦。。先没有看清楚。。斑竹见谅。。但是有个疑问。。[attach]3333[/attach]
这里面后面带1的是这个核函数中的,不带1的是另外一个核函数的,我怎么在这里面有看到他们了呢。。因为这里命名相近,有点不好意思。。谢谢斑竹。。

能看到另外的核函数里的变量????

这不可能!

另外的kernel估计此时都没运行,您怎么看??

我给你截个图啊。。我这个问题问了两次了。。但是还是没有搞明白。。[attach]3334[/attach]
你看这个。。是不是。。我也想不通为啥。。而且这个更加奇怪了。。核函数里面有的这里面却没有。。没有的却有了。。这个是怎么的啊?后面有数据类型。。如果斑竹不相信可以帮我调试看一下。。决定是这样的。。谢谢

楼主您说:
您源代码有的变量,调试的时候local variables窗口里没有;
而没有的变量,调试的时候却出现了??

那最大的可能因为是您调试的目标代码和您的源代码不一致。
而导致不一致的原因最大的可能是您忘记编译了。

请您尝试如下建议进行编译和调试:
在您的solution上点击右键,选择rebuild all;
然后重新启动nsight的start cuda debugging。

(注意直接start cuda debugging不会自动编译的)

斑竹我感觉是不是我程序结构有问题。。我有重新写了一个非常简单的函数。。但是情况还是一样的。。程序代码如下:
funtion.cuh

__global__ void  kernel1(int n);
__global__ void	 kernel2(int n);

function.cu

__global__ void  kernel1(int n)
{
	int bk=blockIdx.x;
	int td=threadIdx.x;
	__shared__ float a[300];
	if (td==0){
		for (int i=0;i<300;i++){
			a[i]=i;
		}
	}
	__syncthreads();
}
__global__ void  kernel2(int n)
{
	int bk=blockIdx.x;
	int td=threadIdx.x;
	__shared__ float a1[300];
	if (td==0){
		for (int i=0;i<300;i++){
			a1[i]=i;
		}
	}
	__syncthreads();
}

test.cu

#include <iomanip>
#include <helper_cuda.h>
#include "function.cuh"
using namespace std;

int main()
{
dim3 bk(2,2);
dim3 td(300,1);
kernel1<<<bk,td>>>(300);
kernel2<<<bk,td>>>(300);
}

调试截图
[attach]3337[/attach]
还是两个都存在的。。

那太奇怪了。。。还是能在kernel2中看到kernel1的变量么。。。

现在只好建议您升级到nsight 3.1:
nsight 3.1将不再在locals窗口中显示kernel级别的__shared__变量。

这样也许可以规避您的困扰。

(nsight 3.1可以在must的资源板块下载,或者您字节安装cuda toolkit 5.5, 将升级您的nsight到3.1版本。)