CUDA为开发人员提供了多种库,cuFFT库则是CUDA中专门用于进行傅里叶变换的函数库。因为在网上找资料,当时想学习一下多个 1 维信号的 fft,这里我推荐这位博主的文章,但是我没有成功,我后来自己实现了。
1. 下载
想使用cuFFT库,必须下载,可以从CUDA官网下载软件包,也可以通过我提供的模板下载资料里有。 提取码: dp52
一键安装即可。注意我的是win10系统。
默认安装位置为 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里能找到。
现在才正式开始:
1、用malloc函数为输入信号分配主机内存
2、为输入信号赋值
3、创建cuFFT plan
4、用cudaMalloc()为输入信号分配设备内存
5、用cudaMemcpy()将主机内存数据传输到设备内存
6、傅里叶变换设置
7、信号转换,如:cufftExecC2C()
8、用cudaMemcpy()将设备内存数据传输到主机内存
9、输出信号
10、销毁cuFFT文本:cufftDestroy(plan);清除主机、设备内存空间,设备复位。
开始的时候我想做800*900000的数据,每800为一列。每列做FFT,然后我用cufftPlanMany函数写了以下代码。
无论我怎么修改参数,根本没有起作用,不知道是不是我掌握的不好。后来我在傅里叶变换设置时将每800个数据进行FFT就解决了我先前的问题。
我将我那段时间的经验分享给大家,希望能解决各位的问题。