CUDA快速傅里叶变换 cuFFT
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
CUDA为开发人员提供了多种库,每一类库针对某一特定领域的应用,CUFFT库则是CUDA中专门用于进行傅里叶变换的函数库,这一系列的文章是博主近一段时间对cuFFT库的学习总结,主要内容是文档的译文,其间夹杂一些博主自己的理解。初学CUDA,理解有误之处在所难免,阅读本篇文章的读者如若发现请不吝指正。
1. 简介
cuFFT是的全称是CUDA Fast Fourier Transform,顾名思义,它提供了一系列的函数帮助开发者进行快速傅里叶变换的运算。cuFFT库由两个子库构成,它们分别是CUFFT和CUFFTW。CUFFTW库是一个移植工具(porting tool),它为用户提供了一些接口,以使得用户使用FFTW库(一个非常流行的CPU快速傅里叶变换库)编写的程序能够运行在CUDA GPU上。而CUFFT则是纯CUDA接口的快速傅里叶变换库。
在CUDA toolkit 5.5版本中,cuFFT库支持的特性有:
1、对于可以表示为的输入规模,CUFFT会自动采用一些优化算法来达到最佳的运算性能
2、对于所有的输入规模,CUFFT的算法复杂性均为O(nlogn)
3、不同输入输出类型的指定:其中C2C代表输入输出均为复数,R2C代表输入为实数而输出为复数,C2R代表输入为复数而输出为实数。
4、可以进行1维、2维和3维变换
5、多个不同的1D、2D、3D变换可以并行进行
6、同时支持单精度浮点和双精度浮点运算
7、支持就地转换(输出直接覆盖输入)和外部转换(输出和输入不重叠)
8、与FFTW库兼容的数据布局
9、支持跨步输入数据读取
10、支持流执行(Streamed execution),这样就同时支持了计算与数据传输的异步并行执行。
11、对于单精度浮点数,一次最多传输128百万元素,双精度则一次最多传输64百万元素。
12、CUFFT库提供的API是线程安全的。
2. 使用CUFFT API
#define NX 256 #define BATCH 10 ... { cufftHandle plan; cufftComplex *data; ... cudaMalloc((void**)&data, sizeof(cufftComplex)*NX*BATCH); cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH); ... cufftExecC2C(plan, data, data, CUFFT_FORWARD); cudaThreadSynchronize(); ... cufftDestroy(plan); cudaFree(data); }
2.1. 访问CUFFT(Accessing CUFFT)
CUFFT和CUFFTW均被实现为共享库,可以使用编译器和链接器把它们集成到普通的程序当中。这些库文件和头文件在不同系统上的默认位置如下图所示:
最常见的使用这些库函数的方法是修改一个已经存在的CUDA文件,以filename.cu为例,在filename.cu中将头文件cufft.h包含进来,然后在程序中调用CUFFT库函数,为了使得程序可以运行,一个单一文件的编译和链接命令的形式可以如下:
2.2. 傅里叶变换配置(Fourier Transform Setup)
2.3 傅里叶变换类型(Fourier Transform Types)
CUFFT库实现了三种不同类型的傅里叶变换:C2C(复数到复数)、C2R(复数到实数)、R2C(实数到复数)。本质上,这三种转换都可以被看做是复数域到复数域的变换,之所以这样划分,其最主要的考量是性能因素。例如,在一般的数字信号处理中,输入数据是一些离散的实数域上的采样点,这时候对它们做傅里叶变换实际上就是R2C,根据埃尔米特对称性(Hermitian symmetry),变换后,*代表共轭复数。CUFFT的傅里叶变换类型则利用了这些冗余,将计算量降到最低。
变换执行函数的单精度和双精度版本分别定义如下:
1. cufftExecC2C() / cufftExecZ2Z() - 单精度/双精度浮点数复数域到复数域的傅里叶变换
2. cufftExecR2C() / cufftExecD2Z() - 单精度/双精度浮点数实数域到复数域的傅里叶变换(正向傅里叶变换)
3. cufftExecC2R() / cufftExecZ2D() - 单精度/双精度浮点数复数域到实数域的傅里叶变换(逆向傅里叶变换)
2.4 数据布局(Data Layout)
2.5 流化CUFFT变换(Streamed CUFFT Transform)
2.6 线程安全(Thread Safety)
CUFFT库从版本4.1开始拥有线程安全特性,也就是说,主机端的多个线程同时调用CUFFT中的函数时,CUDA可以保证任务执行的正确性。
http://blog.csdn.net/csgxy123/article/details/10525693
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
CUDA快速傅里叶变换 cuFFT相关推荐
- 【学习笔记】超简单的快速傅里叶变换(FFT)(含全套证明)
整理的算法模板合集: ACM模板 目录 一.概念概述 二.前置知识 1. 多项式 2. 复数 4. 欧拉公式证明 3. 复数的单位根 / 单位向量 三.FFT 算法概述 四.离散傅里叶变换(DFT) ...
- 快速傅里叶变换(FFT)算法【详解】
快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章 ...
- 基于python的快速傅里叶变换FFT(二)
基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...
- 基于python的快速傅里叶变换FFT(一)
基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...
- 再谈 BigInteger - 使用快速傅里叶变换
我在"浅谈 BigInteger"的随笔中实现了一个 Skyiv.Numeric.BigInteger 类,那时乘法是使用常规的 O(N2) 的算法,所以比 .NET Framew ...
- 使用快速傅里叶变换计算大整数乘法-代码
在上一篇随笔"使用快速傅里叶变换计算大整数乘法"中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理.在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态 ...
- 【文文殿下】快速傅里叶变换(FFT)学习笔记
多项式 定义 形如\(A(x)=\sum_{i=0}^{n-1} a_i x^i\)的式子称为多项式. 我们把\(n\)称为该多项式的次数界. 显然,一个\(n-1\)次多项式的次数界为\(n\). ...
- 算法导论之多项式与快速傅里叶变换
在学习本篇之前,有必要理解傅里叶分析相关概念,网上说的比较通俗的参考如下: https://zhuanlan.zhihu.com/p/19763358 要理解正弦和余弦.离散和连续.时域和频域的关系. ...
- java fft 频谱算法_快速傅里叶变换(FFT)算法原理及代码解析
FFT与DFT关系: 快速傅里叶变换(Fast Fourier Transform)是离散傅里叶(DFT)变换的一种快速算法,简称FFT,通过FFT可以将一个信号从时域变换到频域:FFT(快速傅里叶变 ...
最新文章
- java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
- C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
- python paramiko 问题总结
- 手动挡和自动挡该怎么选?哪个起步快、哪个更舒适?
- c# winform 打包(带数据库安装)
- dorado开发模式下实现动态查询
- 《软件项目管理(第二版)》第 4 章——项目估算 重点部分总结
- golang生成c-shared so供c语言或者golang调用到例子
- 自动优化工具Black帮你写出规范漂亮的python代码
- CCF201612试题
- Easyui datagrid getData简单使用
- 获取本机局域网IP地址
- 小智机器人江苏赞_小智伴机器人外观说明
- 微信表情符号 mysql_Emoji表情符号入MySQL数据库报错的解决方案
- 首席数据官:从哪里来?到哪里去?
- 便捷的oh-my-zsh
- 核磁共振 Nuclear Magnetic Resonance (NMR), H1-NMR, C13-NMR, DEPT, COSY 等分析技术
- JavaScript判断浏览器内核
- ORA-00911: invalid character 错误解决
- Vue全家桶系列之Vuex(二)
热门文章
- 【OpenVINO】OpenVINO 2022.1 安装教程(Windows)
- 编码(NRZ、NRZI、曼彻斯特、4B
- lseek和文件末尾
- 机器学习:浅谈先验概率,后验概率
- ARP攻击,使用kali arpspoof
- java做机器视觉_机器视觉用什么语言开发_机器视觉用什么硬件
- 计算机对人类发展历史的影响,【信息技术对人类社会发展有什么影响?】_人类 发展史_全球新能源网...
- 速卖通,aliexpress,关键词搜索,获取商品数据,销量,评价,价格,上架时间,图片,openpyxl 写入excel中
- Android Studio 4.1没有GsonFormat插件
- FS平台数据库设计规范说明书v1.00