CUDA新人求助

今天刚刚配置好CUDA,写了一个程序来试试,结果程序不能正常运行。想请教各位是什么情况?
下面是程序代码,完全放在.cu文件中
#include <stdio.h>

// Kernel definition
global void VecAdd(float* A, float* B, float* C)
{
int i = threadIdx.x;
C[i] = A[i] + B[i];
}

int main()
{
float A[5], B[5], C[5];
for (int j = 0; j < 5; j++)
{
A[j] = j;
B[j] = j;
C[j] = 0;
}
VecAdd<<<1, 3>>>(A, B, C);
printf(“%f %f %f %f %f”,C[0],C[1],C[2],C[3],C[4]);
system(“pause”);
return 0;
}
就是想做一个并行向量加法,可是出来的结果却是5个都是0,请问我哪里做得不对啊?

还有,cu文件可以调试么?我调试的时候发现里面那个for循环貌似没有执行

1 没有在GPU内存开辟空间,用cudaMalloc
2 数据仍然放在了Host内存上,需要用cudaMemcpy拷贝到GPU空间
3 计算结束后需要将数据重新拷贝到host内存空间

建议楼主重新看书!

建议楼主还是多看看书吧
#include
global void VecAdd(float *A,float *B,float *C)
{
int i = threadIdx.x;
if(i<5)//防止越界
C[i] = A[i] + B[i];
}

int main()
{
float A[5], B[5], C[5];
float dev_a,dev_b,dev_c;
//在GPU上开辟内存空间
cudaMalloc((void **)&dev_a,5
sizeof(int));
cudaMalloc((void **)&dev_b,5
sizeof(int));
cudaMalloc((void **)&dev_c,5
sizeof(int));

for (int j = 0; j < 5; j++)
{
A[j] = j;
B[j] = j;
}
//将A、B数组复制到GPU
cudaMemcpy(dev_a,A,5sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(dev_b,B,5
sizeof(int),cudaMemcpyHostToDevice);

VecAdd<<<1, 5>>>(dev_a,dev_b,dev_c);
//将C复制到cpu
cudaMemcpy(C,dev_c,5*sizeof(int),cudaMemcpyDeviceToHost);
printf(“%f %f %f %f %f”,C[0],C[1],C[2],C[3],C[4]);
//释放GPU内存
cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
return 0;
}

补充3楼tianyuan08版主
LZ估计是把某个向量相加的例子(nsight的例子?)按照自己的想法,删去自己不会的,修改来的吧。
1:你A,B,C三个数组都是在host端定义的,kernel如何用?运行难道都没报错?
2:即便你前后cudaMalloc什么的都写对了,你kernel是按照<<<1,3>>>运行的,5个元素的数组,最后两个数据也是没有计算的。(当然这是一个小细节,也许是笔误。)
3:调试host代码可以直接用vs的调试;调试kernel请用nsight。不知楼主是如何添加断点的,以至于for循环不停?这是最普通的主机端的循环而已。

最后,大概一个多星期以前,在某个群里面,有人问了一模一样的问题,代码都一样,当时第一时间就有N个群友给予了回答和指正,敢问楼主,当时那个问题是你问的么?这么久了没看看书研究下么?照着nsight自带例子看一遍也行啊。