cufft 傅里叶变换结果疑问

blackjenny242 2013-05-31 06:07:57
在进程并行化过程中,发现cufft和cvdft的结果不一样,然后测试了下,发现cufft的结果感觉是有问题,不知道我的用法有问题,还是获取结果的方法问题? 请给位cuda达人看下:

测试代码如下:
int main(int argc, char **argv)
{
//runTest(argc, argv);
cudaSetDevice(0);
float a[10];
for (int i = 0; i < 10; i++ )
{
a[i]= i;
}
float* d_data;
Complex* d_res;
cudaMalloc(&d_data,sizeof(float)*10);

cudaMemcpy(d_data,a,sizeof(float)*10,cudaMemcpyHostToDevice);

cudaMalloc(&d_res,sizeof(Complex)*10);
cudaMemset(d_res,0,sizeof(Complex)*10);

cufftHandle plan;
cufftResult ret;
ret = cufftPlan1d(&plan, 10, CUFFT_R2C, 1);
ret = cufftExecR2C(plan,d_data,d_res);
cudaThreadSynchronize();

Complex* h_res = new Complex[10];
cudaMemcpy(h_res,d_res,10*sizeof(Complex),cudaMemcpyDeviceToHost);

for (int i = 0; i< 10; i++)
{
printf("%f,%f\n",h_res[i].x,h_res[i].y);
}
cudaDeviceReset();
}
打印结果:45.000000,0.000000
-5.000000,15.388419
-5.000000,6.881910
-5.000000,3.632713
-5.000000,1.624599
-5.000000,0.000000
0.000000,0.000000
0.000000,0.000000
0.000000,0.000000
0.000000,0.000000
请按任意键继续. . .
从打印结果上看,数据少了, 后面4个0明细是初始化的。

matlab的结果:
45.0000
-5.0000 -15.3884i
-5.0000 - 6.8819i
-5.0000 - 3.6327i
-5.0000 - 1.6246i
-5.0000
-5.0000 + 1.6246i
-5.0000 + 3.6327i
-5.0000 + 6.8819i
-5.0000 +15.3884i


...全文
256 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
linxxx3 2013-06-03
  • 打赏
  • 举报
回复
CUDA手册上有写,R2C的fft,结果只输出一半,因为另一半是对称的。

231

社区成员

发帖
与我相关
我的任务
社区描述
CUDA on Windows XP
社区管理员
  • CUDA on Windows XP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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