我想在CUDA 的volume rendering 例程上做一些改动,添加了两个函数
global void
data_init(uchar4* g_volume,uchar4* g_volumed,int xdim,int ydim,int zdim)//初始化一些数据
{
const int tid = threadIdx.x;
long i,j;
j=1;
for (i=0;i<xdimydim;i++)
{
(g_volumed+jxdimydim+i)->x=255;
(g_volumed+jxdimydim+i)->y=255;
(g_volumed+jxdimydim+i)->z=255;
(g_volumed+jxdim*ydim+i)->w=255;
}
g_xdim=xdim;
g_ydim=ydim;
g_zdim=zdim;
}
extern “C”
void initCudaarray(uchar4 h_volume,int xdim,int ydim,int zdim)
{
uchar4 g_volume,g_volumed=0;
//checkCudaErrors(cudaMalloc((void)&g_volume,xdimydimsizeof(uchar4)));
checkCudaErrors(cudaMalloc((void**)&g_volumed,xdimydimzdimsizeof(uchar4)));
printf(“totot %f\n”,(float)xdimydimzdimsizeof(uchar4));
checkCudaErrors(cudaMemset(g_volumed,0,xdimydimzdimsizeof(uchar4)));
//checkCudaErrors(cudaMemcpy(g_volume,h_volume,xdimydimsizeof(uchar4),cudaMemcpyHostToDevice));
data_init<<<1,1>>>((uchar4 *)0/g_volume/,g_volumed,xdim,ydim,zdim);
}
其中xdim是5000,ydim是2500,zdim是3 。 运行这个程序的时候,显卡会停止工作。经测试,是data_init函数中的那个循环的地方出问题了,如果循环的小一点,程序可以正常运行,如果按照程序中的xdim*ydim,就会出错。
很不理解为什么会出现这种情况,数组分配的有那么大,为什么访问会出错呢?我用的显卡是GTX580,显存足够那个数组了。 能否帮忙解答一下呢