本人刚接触cuda,现在遇到了一个关于内存泄漏的问题,在此向各位大牛请教!
简单的说,我现在有4个二维矩阵,分别是两个40401350和4040110大小的矩阵。
我要对这4个矩阵中的值进行两两比较(分别进行减法和除法运算)
最后需要输出3个40401大小的数组
实验室的电脑用的是Quadra FX 580 显卡,显存512M,支持cuda 1.1。
我现在遇到的问题是,运行程序时,电脑黑屏一下,然后右下角弹出提示框说显卡驱动遇到问题重启。
在VS2010下出现如下信息
[attach]1772[/attach]
不知道讲明白没有,我将自己的代码贴在下面
自己水平实在太菜,实在找不出到底是哪里出问题了,在此虚心向各位请教,希望不吝赐教,再次感谢!
N=40401
RPatchNum=350
SPatchNum=10
cudaMemcpy2D(patchRA_d,RPitch,patchRA,RPatchNum*sizeof(float),RPatchNum*sizeof(float),N,cudaMemcpyHostToDevice);
cudaMemcpy2D(patchRT_d,RPitch,patchRT,RPatchNum*sizeof(int),RPatchNum*sizeof(int),N,cudaMemcpyHostToDevice);
cudaMemcpy2D(patchSA_d,SPitch,patchSA,SPatchNum*sizeof(float),SPatchNum*sizeof(float),N,cudaMemcpyHostToDevice);
cudaMemcpy2D(patchST_d,SPitch,patchST,SPatchNum*sizeof(int),SPatchNum*sizeof(int),N,cudaMemcpyHostToDevice);
dim3 blocksize(256,1);
dim3 gridsize(((N+blocksize.x-1)/blocksize.x),1);
focusKernel<<<gridsize,blocksize>>>(patchRA_d,patchRT_d,patchSA_d,patchST_d,Rd,Sd,Dd,wave_d,temp,RPatchNum,SPatchNum,N);
checkCudaError("kernel");
cudaMemcpy(R,Rd,N*sizeof(float),cudaMemcpyDeviceToHost);
checkCudaError("memcpy");
cudaMemcpy(S,Sd,N*sizeof(float),cudaMemcpyDeviceToHost);
checkCudaError("memcpy");
cudaMemcpy(D,Dd,N*sizeof(float),cudaMemcpyDeviceToHost);
checkCudaError("memcpy");
kernel函数
if(id<N)
{
for(int j=id;j<N;j++)
{
for (int k=0;k<RPatchNum;k++)
{
deltT=patchRT_d[j*RPatchNum+k]-patchRT_d[id*RPatchNum+k];
if (deltT>-temp&&deltT<temp)
{
//deltA=patchRA_d[j][k]/patchRA_d[id][k];
deltA=__fdividef(patchRA_d[j*RPatchNum+k],patchRA_d[id*RPatchNum+k]);
tempR+=wave_d[deltT+temp]*deltA;
}
}
Rd[id]+=tempR;
for (int k=0;k<SPatchNum;k++)
{
deltT=patchST_d[j*SPatchNum+k]-patchST_d[id*SPatchNum+k];
if (deltT>-temp&&deltT<temp)
{
//deltA=patchSA_d[j][k]/patchSA_d[id][k];
deltA=__fdividef(patchSA_d[j*SPatchNum+k],patchSA_d[id*SPatchNum+k]);
tempS+=wave_d[deltT+temp]*deltA;
}
}
tempD=tempR*tempS;
Sd[id]+=tempS,Dd[id]+=tempD;
}
}