cuda和MATLAB结果不同,CUDA fft与MATLAB的不同结果fft

我试图做一个简单的fft并比较MATLAB和CUDA之间的结果。CUDA fft与MATLAB的不同结果fft

MATLAB: 矢量9号1-9

I = [1 2 3 4 5 6 7 8 9];

,并使用此代码:

fft(I)

给出了结果:

45.0000 + 0.0000i

-4.5000 +12.3636i

-4.5000 + 5.3629i

-4.5000 + 2.5981i

-4.5000 + 0.7935i

-4.5000 - 0.7935i

-4.5000 - 2.5981i

-4.5000 - 5.3629i

-4.5000 -12.3636i

和CUDA代码:

int FFT_Test_Function() {

int n = 9;

double* in = new double[n];

Complex* out = new Complex[n];

for (int i = 0; i

{

in[i] = i + 1;

}

// Allocate the buffer

cufftDoubleReal *d_in;

cufftDoubleComplex *d_out;

unsigned int out_mem_size = sizeof(cufftDoubleComplex)*n;

unsigned int in_mem_size = sizeof(cufftDoubleReal)*n;

cudaMalloc((void **)&d_in, in_mem_size);

cudaMalloc((void **)&d_out, out_mem_size);

// Save time stamp

milliseconds timeStart = getCurrentTimeStamp();

cufftHandle plan;

cufftResult res = cufftPlan1d(&plan, n, CUFFT_D2Z, 1);

if (res != CUFFT_SUCCESS) { cout << "cufft plan error: " << res << endl; return 1; }

cudaCheckErrors("cuda malloc fail");

cudaMemcpy(d_in, in, in_mem_size, cudaMemcpyHostToDevice);

cudaCheckErrors("cuda memcpy H2D fail");

res = cufftExecD2Z(plan, d_in, d_out);

if (res != CUFFT_SUCCESS) { cout << "cufft exec error: " << res << endl; return 1; }

cudaMemcpy(out, d_out, out_mem_size, cudaMemcpyDeviceToHost);

cudaCheckErrors("cuda memcpy D2H fail");

milliseconds timeEnd = getCurrentTimeStamp();

milliseconds totalTime = timeEnd - timeStart;

std::cout << "Total time: " << totalTime.count() << std::endl;

return 0;

}

在此CUDA代码我得到的结果是:

f957c887024e5dbaca3389286c5c60cb.png

你可以看到,CUDA给4个零(单元5-9)。

我错过了什么?

非常感谢您的关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值