[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版本。)