cuda一维快速傅立叶变换的实现

参考:http://www.cnblogs.com/zhangjxblog/p/5016986.html

无意间看到cuda解决FFT有一个cufft函数库,大体查看了有关cufft有关知识,写了一个解决一维情况的cuda代码,据调查知道cufft在解决1D,2D,3D的情况时间复杂度都为O(nlogn),附上解决一维情况的代码,准备后面找一些详细的资料去学习一下cuda的函数库。

#include "stdio.h"
#include "cuda_runtime.h"
#include "cufft.h"
#include "device_launch_parameters.h"


#define LENGTH 4
int main()
{

    float Data[LENGTH] = {1,2,3,4};
    cufftComplex *CompData=(cufftComplex*)malloc(LENGTH*sizeof(cufftComplex));
    int i;
    for(i=0;i<LENGTH;i++)
    {
        CompData[i].x=Data[i];
        CompData[i].y=0;
    }

    cufftComplex *d_fftData;
    cudaMalloc((void**)&d_fftData,LENGTH*sizeof(cufftComplex));
    cudaMemcpy(d_fftData,CompData,LENGTH*sizeof(cufftComplex),cudaMemcpyHostToDevice);

    cufftHandle plan;
    cufftPlan1d(&plan,LENGTH,CUFFT_C2C,1);
    cufftExecC2C(plan,(cufftComplex*)d_fftData,(cufftComplex*)d_fftData,CUFFT_FORWARD);
    cudaDeviceSynchronize();
    cudaMemcpy(CompData,d_fftData,LENGTH*sizeof(cufftComplex),cudaMemcpyDeviceToHost);
 
  for(i=0;i<LENGTH;i++)
  {
    if(CompData[i].x != 0)
    {
      printf("%3.1f",CompData[i].x);
    }
    if(CompData[i].y != 0 )
    {
      printf("+%3.1fi",CompData[i].y);
    } 
    printf("\n");
  }
     cufftDestroy(plan);
     free(CompData);
     cudaFree(d_fftData);

}

在Linux下运行的这段代码:

编译命令:nvcc -o cuffts testFFT.cpp cudaFFT.cpp -I /usr/local/cuda/include -L /usr/local/cuda/lib64 -lcufft

运行命令:./fftcu

注:/usr/local/cuda/include中有cufft.h头文件,/usr/local/cuda/lib64中有libcufft.so库文件

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值