CUDA为开发人员提供了多种库,cuFFT库则是CUDA中专门用于进行傅里叶变换的函数库。因为在网上找资料,当时想学习一下多个 1 维信号的 fft,这里我推荐这位博主的文章,但是我没有成功,我后来自己实现了。

1. 下载

想使用cuFFT库,必须下载,可以从CUDA官网下载软件包,也可以通过我提供的模板下载资料里有。 提取码: dp52

一键安装即可。注意我的是win10系统。

cvxpy gpu加速 gpu加速fft_FFT


默认安装位置为 C:\Users\BAOJH~1\AppData\Local\Temp\CUDA

安装完毕一般会安装在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1里可以找到。安装不成功多安装几次,别让杀毒软件杀了,注意:此库适用于N卡,A卡貌似不能运用。

2.编程

加入头文件:

#include <stdio.h>
 #include <stdlib.h>
 #include < iostream>
 #include <cuda_runtime.h> // Include CUDA runtime and CUFFT
 #include <cufft.h>
 #include “device_launch_parameters.h” // Helper functions for CUDA

在属性里加入路径,路径一般在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1里能找到。

cvxpy gpu加速 gpu加速fft_CUDA_02


现在才正式开始:

1、用malloc函数为输入信号分配主机内存

cvxpy gpu加速 gpu加速fft_CUDA_03


2、为输入信号赋值

cvxpy gpu加速 gpu加速fft_cvxpy gpu加速_04


3、创建cuFFT plan

cvxpy gpu加速 gpu加速fft_FFT_05


4、用cudaMalloc()为输入信号分配设备内存

cvxpy gpu加速 gpu加速fft_CUDA_06


5、用cudaMemcpy()将主机内存数据传输到设备内存

cvxpy gpu加速 gpu加速fft_GPU_07


6、傅里叶变换设置

cvxpy gpu加速 gpu加速fft_CUDA_08


7、信号转换,如:cufftExecC2C()

cvxpy gpu加速 gpu加速fft_cvxpy gpu加速_09


8、用cudaMemcpy()将设备内存数据传输到主机内存

cvxpy gpu加速 gpu加速fft_GPU_10


9、输出信号

cvxpy gpu加速 gpu加速fft_cvxpy gpu加速_11


10、销毁cuFFT文本:cufftDestroy(plan);清除主机、设备内存空间,设备复位。

cvxpy gpu加速 gpu加速fft_GPU_12


开始的时候我想做800*900000的数据,每800为一列。每列做FFT,然后我用cufftPlanMany函数写了以下代码。

cvxpy gpu加速 gpu加速fft_GPU_13


无论我怎么修改参数,根本没有起作用,不知道是不是我掌握的不好。后来我在傅里叶变换设置时将每800个数据进行FFT就解决了我先前的问题。

我将我那段时间的经验分享给大家,希望能解决各位的问题。