kenel计算结果有的点出现QNAN!!!

wyk18766311377 2014-12-21 10:38:41
__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函数上。
求各位大神帮忙解答啊!!!
...全文
162 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧