kenel计算结果有的点出现QNAN!!!
__global__ void Set_Kernel (int Nr, int Na, cuFloatComplex *data, double *chazhi, double *ForwardTrack, double *sequence_i,int *ww)
{
unsigned int i = blockDim.x * blockIdx.x + threadIdx.x;
unsigned int j = blockDim.y * blockIdx.y + threadIdx.y;
unsigned int index = i + Nr * j;
unsigned int www = (ww[j]+1)*Nr;
unsigned int index_1 = index+www;
unsigned int index_2 = j+ww[j];
unsigned int index_3 = index_1-Nr;
unsigned int index_4 = index_2+1;
//chazhi[index]=data[index].x; //不能先这样做,否则有的结果出现QNAN,不知道为什么 ??????
chazhi[index]=(data[index_1].x*(sequence_i[j]-ForwardTrack[index_2])+data[index_3].x*
(ForwardTrack[index_4]-sequence_i[j]))/(ForwardTrack[index_4]-ForwardTrack[index_2]);
data[index].x=chazhi[index];
//chazhi[index]=data[index].y; //不能先这样做,否则有的结果出现QNAN,不知道为什么 ??????
chazhi[index]=(data[index_1].y*(sequence_i[j]-ForwardTrack[index_2])+data[index_3].y*
(ForwardTrack[index_4]-sequence_i[j]))/(ForwardTrack[index_4]-ForwardTrack[index_2]);
data[index].y=chazhi[index];
}
1. 上面代码data是复数数据,这个kenel就是对其实部和虚部分别计算,但不知道为什么,当取消两处//时(就是把data先赋值再计算)结果有的会出现QNAN,当注释掉那两行,即按照上面的代码运行时,结果是对的。
2. 同时还有一个问题,即便是上面的代码,2000*5000小数据时是对的,但当运行大数据时,程序本身不会报错,但是运行结果有的数据还是有QNAN。
当然此kenel函数传入的数据都验证过,是正确的,错误就在这个kenel函数上。
求各位大神帮忙解答啊!!!