好吧,又多纠结了一天,还是得问下各位大侠们啊
好吧,我纠结了很多天,实在是不明白为什么会出错?哪位高人大侠大哥大姐能来指导一下么?
贴代码:
这段代码是为了求取两个变量(不互相独立)的联合熵。
爆出的错误是非法访问,可是我真心不知道这个哪里来的非法访问,下面是爆出来的bug
我隐隐有个想法:是不是因为我加了两层循环呢?可是为什么加了最外面的两层循环会出这样的问题呢?
谁能来给个提示也行啊,不胜感激涕零落成泥啊
贴代码:
__global__ void GetJointEntropyKernel(float * JonEnt, int * ang1, int * ang2, int xDim, int yDim, int zDim ,int Num)
{
int pid = threadIdx.x+blockIdx.x*blockDim.x;
if (pid<Num)
{
float HXY=0.0;
float pxy=0.0;;
int ptNum=0;
int idx,idy,idz;
int vpid;
idx=pid%xDim;
idz=pid/(xDim*yDim);
idy=pid/xDim-idz*yDim;
for (int vi=0;vi<360;vi++)
{
for (int vj=0;vj<360;vj++)
{
for (int k=-6;k<7;k++)
{
for (int j=-6;j<7;j++)
{
for (int i=-6;i<7;i++)
{
if ((i+idx)>=0&&(i+idx)<xDim&&(j+idy)>=0&&(j+idy)<yDim&&(k+idz)>=0&&(k+idz)<zDim)
{
vpid=(idx+i)+(idy+j)*xDim+(idz+k)*xDim*yDim;
if (vpid>=0&&vpid<Num)
{
if (ang1[vpid]==vi&&ang2[vpid]==vj)
{
pxy+=1;
++ptNum;
}
}
}
}
}
}
if (fabs(pxy)>1e-6)
{
HXY+=pxy*log(pxy);
}
}
}
JonEnt[pid]=HXY/(log(2.0)*ptNum)-log(float(ptNum));
}
}这段代码是为了求取两个变量(不互相独立)的联合熵。
爆出的错误是非法访问,可是我真心不知道这个哪里来的非法访问,下面是爆出来的bug
cudaThreadSynchronize returned error code 6 after launching GetCEKernel!First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0012fdcc..
First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0012fdc8..
First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0012fdc8..
First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0012fdc8..
First-chance exception at 0x7c812fd3 in myCuda1.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..我隐隐有个想法:是不是因为我加了两层循环呢?可是为什么加了最外面的两层循环会出这样的问题呢?
谁能来给个提示也行啊,不胜感激涕零落成泥啊
...全文


CUDA on Windows XP
