cufft 傅里叶变换结果疑问
在进程并行化过程中,发现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