cuda grid launch failed

大家好,运行cuda程序出现以下问题,用Nsight调试提示cuda grid launch failed,直接主机运行程序提示cuda Runtime api error 30:unknown error。核函数如下:

global void color_project3Dto2D(float *matrix_3D,float *R_depth,float *T_depth, float px_d,float py_d,float fx_d,float fy_d,float *k_clolor,int *depth_mapto_color)
{

float r2,r4,r6;
int i=blockIdx.x;
int j=threadIdx.x;
int offset=i*width+j;
// 	if (!(matrix_3D[offset*3]==0&&matrix_3D[offset*3+1]==0&&matrix_3D[offset*3+2]==0))
// 	{
float x1=matrix_3D[offset*3]*R_depth[0]+matrix_3D[offset*3+1]*R_depth[1]+matrix_3D[offset*3+2]*R_depth[2]+T_depth[0];
float y1=matrix_3D[offset*3]*R_depth[3]+matrix_3D[offset*3+1]*R_depth[4]+matrix_3D[offset*3+2]*R_depth[5]+T_depth[1];
float d=matrix_3D[offset*3]*R_depth[6]+matrix_3D[offset*3+1]*R_depth[7]+matrix_3D[offset*3+2]*R_depth[8]+T_depth[2];
x1=x1/d;
y1=y1/d;

r2 = x1*x1 + y1*y1;
r4 = r2*r2;
r6 = r4*r2;

float x2 = x1*(1 + k_clolor[0]*r2 + k_clolor[1]*r4 + k_clolor[4]*r6) + 2*k_clolor[2]*(x1*y1) + k_clolor[3]*(r2+2*(x1*x1));
float y2 = y1*(1 + k_clolor[0]*r2 + k_clolor[1]*r4 + k_clolor[4]*r6) + k_clolor[2]*(r2 + 2*(y1*y1)) + 2*k_clolor[3]*(x1*y1);

float rgbx= (x2 * fx_d) + px_d;
float rgby= (y2 * fy_d) + py_d;

depth_mapto_color[offset*2]=int(rgby+0.5);
depth_mapto_color[offset*2+1]=int(rgbx+0.5);
//	}	

}

调用如下:
for (int i=0;i<3;i++)
{color_project3Dto2D<<<dimGrid,dimBlock>>>(cuda_NV_matrix_3D,cuda_R_depth[i],cuda_T_depth[i],px_d[i],py_d[i],fx_d[i],fy_d[i],k_clolor[i],cuda_depth_mapto_color[i]);

}
线程快和线程数定义如下:
dim3 dimGrid(hight, 1, 1);
dim3 dimBlock(width, 1, 1);
其中width=640,hight=480;

其中cuda_NV_matrix_3D定义和内存分配方式如下:float cuda_NV_matrix_3D;
checkCudaErrors(cudaMalloc((void
*)&cuda_NV_matrix_3D,sizeof(float)widthhight3));
checkCudaErrors(cudaMemset(cuda_NV_matrix_3D,0,sizeof(float)widthhight
3));
该变量已在上文的某个核函数中调用,并拷贝到主机内存中查看结果,没有问题;
cuda_R_depth定义如下:
float **cuda_R_depth=new float *[3];
for (int i=0;i<3;i++)
{

checkCudaErrors(cudaMalloc((void**)&cuda_R_depth[i],sizeof(float)*9));
checkCudaErrors(cudaMemcpy(cuda_R_depth[i],R_depth[i],sizeof(float)*9,cudaMemcpyHostToDevice));
}
cuda_T_depth[i],px_d[i],py_d[i],fx_d[i],fy_d[i],k_clolor[i]等申请类似;
以上这些变量都在上文的核函数使用过
cuda_depth_mapto_color[i]是第一次使用,定义方式如下:
int **cuda_depth_mapto_color=new int *[kinect_num];
for (int i=0;i<3;i++)
{

checkCudaErrors(cudaMalloc((void**)&cuda_depth_mapto_color[i],sizeof(int)widthhight2));
checkCudaErrors(cudaMemset(cuda_depth_mapto_color[i],0,sizeof(int)widthhight
2));

}
以上是问题描述,希望大家能帮助放下错误,解决一下!!

显卡 GTX690

LZ您好:

unknown error多由内存越界引起,请您优先检查一下。

祝您好运!

可以帮我看一下吗 我还是看不出是哪里的问题 谢谢版主了 一般内存越界都是怎么引起的? 帮忙分析下吧

LZ您好:

内存越界指的是您代码中访问到了申请以外的区域。
您可以使用cudaMemcheck或者部分版本的nsight快速得到出问题的地方,并予以分析。

我肉眼不具备类似的功能。

您不妨先试试,并反馈结果。

祝您好运~