基于GPU的多帧信号的FFT并行实现
基于GPU并行计算及在模式识别中的研究
C U 与 GP P U协 调 工 作 , 行 处 理 , 大 减 少 了整 并 大 个人 脸识 别过 程 的时 间 。
20 吴 恩 华 _ 等 人 发 表 了 一 篇 关 于 GP 04年 5 ] U
通用计算综述性 的文章, 文章里介绍 了 G U 的发 P 展历史、 硬件特 点, 及在矢量运算、 矩阵相乘 、 共扼
中才支持 , 二是 由于涉及到较低层次的编程而产生
困难 。随着 硬件 的近 一 步 发 展 和 各 领 域 研 究 的 深
力。
人们开始利用 T xuesae 结合 R gs rcr— 人 , U 在 通 用计 算 方 面将 会 有 着 巨 大 的 发 展 潜 etr h dr ei e o t n GP
中 图分 类 号
GPU. as d Par le mpu i nd Re e r h i te n Re o nii n b e a l lCo tng a s a c n Pa t r c g to
Ca io e g oX a p n
( ’n Un v r i fP s s a d Te e o Xi i e st o o t n l c mm u ia i n ,Xi n 7 0 2 ) a y nc t s o ’ 1 1 1 a
Ab t a t To a d e s t e c mp t t n le f in y o a t r e o n t n h s p p r u e a a llc mp t g m e h d s rc d r s h o u a i a fi e c f p t e n r c g i o ,t i a e s s a p r l o u i t o o c i e n
FFT并行算法设计与分析
• 4 试验分析:
• 5 问题讨论: • (1)该并行算法的效率主要损失在哪些
地方? • (2)该并行算法还有哪些地方值得改进?
14
6.2 数模转换器
从广义上讲DAC可以看作是一种译码器, 它把一组0、1数字信号转换成模拟信号,并 以相应的电流或电压的形式输出。
从组成结构上DAC可分为电阻串DAC、 电阻解码DAC、恒流源DAC、权电容DAC等 几种类型。
从输入数据方式上DAC可分为并行DAC 和串行DAC。
15
6.2.1 DAC主要性能
输出电压为最小分辨电压ΔV。
VoΔVΔ=VVRnEF1/22ni di i0
当输入数字量D=(11…111)2时,n1 2i di 2n 1 ,
输出电压为最大电压Vm。
i0
Vm= (2n-1) ΔV
Vo
Vm 2n 1
n 1 i0
2idi
23
6.2.2 电阻串DAC
树形开关DAC的电路结构简单,工作原理易懂。 但数字量每增加1位,电阻数量和开关数量都将在 原来的基础上增加1倍,开关的层数也增加1层。设 数字量为n位,那么电阻数量就有2n个,开关的数量 有2n+1-2个,层数就有n层。当n较大时,比如n=16, 开关就有16层,若要选择一个分压值,就需经过16 个电子开关。开关的静态特性和动态特性的不一致, 对DAC的转换速度和精度影响很大。
1)主要技术参数 ⑴ 分辨率 有三种方式表示分辨率 ① 输入数字量位数n; ② 输出最小变化量ΔI或ΔV; ③ 相对变化量S。
相对变化量是指DAC输出最小变化量与满幅 输出Im或
1 2n 1
16
6.2.1 DAC主要性能
⑵ 建立时间
fpga 快速傅里叶变换实现卷积
标题:FPGA实现快速傅里叶变换加速卷积的原理与应用在当今信息时代,数字信号处理和数据处理已经成为许多领域中不可或缺的部分。
而在处理这些信号和数据时,快速傅里叶变换(FFT)和卷积运算是常用的数学工具。
在很多实际应用中,由于其高复杂度,这两个运算往往需要花费大量的时间和资源。
然而,通过利用现代的FPGA技术,我们可以实现这些运算的高效加速,本文将探讨如何利用FPGA来加速实现快速傅里叶变换卷积。
1. 背景介绍快速傅里叶变换(FFT)是一种离散傅里叶变换(DFT)的快速算法。
它不仅可以用于频域分析和信号处理,还被广泛应用于图像处理、通信、雷达和生物医学领域等。
而卷积运算则是数字信号处理和图像处理中常见的运算之一,用于实现信号的滤波、特征提取和模式识别等。
然而,这两种运算都具有较高的计算复杂度,特别是在涉及大规模数据时,传统的处理方法往往效率低下。
2. FPGA加速计算的优势FPGA(Field-Programmable Gate Array)是一种灵活可编程的数字集成电路,它通过可编程的逻辑单元和可编程的连接网络,可以实现大规模的并行计算和高速数据处理。
这使得FPGA在加速计算领域具有独特的优势。
与传统的CPU和GPU相比,FPGA可以根据具体的应用需求进行快速定制和优化,提供更高的计算密度和更低的功耗。
利用FPGA来加速实现FFT和卷积运算,可以大幅提高运算速度和效率。
3. FPGA实现快速傅里叶变换在实现FFT时,FPGA可以充分利用其并行计算的特性,通过设计合适的硬件结构和算法,实现FFT运算的高效加速。
可以采用基于蝶形运算单元(Butterfly)的并行计算结构,利用FPGA的片上资源进行数据流控制和计算单元的并行化。
通过巧妙的数据流设计和数据重用策略,还可以有效地减少时序延迟和资源消耗,进一步提高FFT算法的运行速度。
在实际应用中,基于FPGA的FFT加速器已经被广泛应用于通信系统、无线电频谱监测和图像处理等领域。
GPU-FFT总结
引言傅里叶变换是数字信号处理领域一个很重要的数学变换,它用来实现将信号从时域到频域的变换,在物理学、数论、组合数学、信号处理、概率、统计、密码学、声学、光学等领域有广泛的应用。
离散傅里叶变换(Discrete Fourier Transform ,DFT)是连续傅里叶变换在离散系统中的表示形式,由于DFT 的计算量很大,因此在很长一段时间内其应用受到了很大的限制。
20世纪60年代(1965年)由Cooley 和Tukey 提出了快速傅里叶变换(Fast Fourier Transform ,FFT)算法,它是DFT 的快速算法,使得离散傅里叶变换和卷积这类难度很大的计算工作的复杂度从N 2量级降到了Nlog 2N 量级,大大提高了DFT 的运算速度,从而使DFT 在实际应用中得到了广泛的应用。
传统上,GPU 只负责图形渲染,而大部分的处理都交给了CPU 。
自二十世纪九十年代开始,GPU 的发展迅速。
由于GPU 具有强大的并行计算能力,加之其可编程能力的不断提高,GPU 也用于通用计算,为科学计算的应用提供了新的选择。
2007年6月,NVIDIA 公司推出了CUDA (Compute Unified Device Architecture),CUDA 不需要借助图形学API ,而是采用了类C 语言进行开发。
同时,CUDA 采用了统一处理架构,降低了编程的难度,同时,NVIDIA GPU 引入了片内共享存储器,提高了效率。
这两项改进使CUDA 架构更加适合进行GPU 通用计算。
快速傅里叶变换(FFT )设x(n) 为长度为N 的有限长序列,则其离散傅里叶正变换(DFT)为:1,...,1,0,)()(10-==∑-=N k W n x k X knN N n其中,Nj N e W π2*-=,称为旋转因子或蝶形因子。
从DFT 的定义可知,在)(n x 为复数序列的情况下,对某个k 值,直接按上式计算)(k X 需要N 次复数乘法和(N-1)次复数加法。
基于CPU与GPU_OpenCL的快速傅里叶变换的实现和性能比较
SCIENCE & TECHNOLOGY INFORMATION
○IT 论坛○
科技信息
基于 CPU 与 GPU/OpenCL 的快速 傅里叶变换的实现和性能比较
刘勇苏军 (菏泽学院计算机与信息工程系 山东 菏泽 274015)
【摘 要】采用 AMD 公司的 Radeon HD 5870 GPU 与 Intel 公司的 Core i7 940 CPU 作为比较测试平台,分别用 OPENCL 与单线程 C 代 码编写的一维快速傅里叶变换进行测试。测试结果表明,在 GPU 充分并行的情况下,其性能相对于同价位 CPU 单线程性能提高 30 倍以上,即 使对于充分利用 CPU 所有核心的多线程性能也能提高 10 倍左右。
3 离散傅里叶变换
傅里叶变换在物理学、数论、组合数学、信号处理、概率论、统计
学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用
(例如在信号处理 中,傅里叶变换的典型用途是将信号分解成幅值分
量和频率分量), 傅里叶变换就是将一个信号的时域表示形式映射到
一个频域表示形式。 在不同的研究领域,傅里叶变换具有多种不同的
{int n,mmax,m,j,istep,i;
DP wtemp,wr,wpr,wpi,wi,theta,tempr,tempi;
int nn=data.size()/2;
n=nn << 1;j=1;
for (i=1;i<n;i+=2) {
if (j > i) {
WAP(data[j-1],data[i-1]);
SWAP(data[j],data[i]);}
m=nn;
while (m >= 2 && j > m) {
cuda实现fft快速傅里叶变换
1. 傅立叶变换是信号处理和图像处理中非常重要的数学工具,可以将一个函数在时间域或空域上的表示转换为在频率域上的表示,通过这种变换,我们可以更好地理解信号的频率成分和特征。
而快速傅里叶变换(FFT)则是一种高效的计算傅立叶变换的方法,在许多领域都有着广泛的应用。
2. CUDA是由NVIDIA推出的并行计算评台和编程模型,可以利用GPU的并行计算能力来加速计算任务。
在实现FFT的过程中,利用CUDA可以充分发挥GPU的并行计算能力,从而加速傅立叶变换的计算过程。
3. 针对cuda实现fft快速傅里叶变换这个主题,我们首先需要了解FFT算法的原理和基本思想。
FFT算法通过将一个N点序列的DFT (离散傅立叶变换)分解为若干规模更小的DFT的组合来实现快速计算。
这个分解的过程可以通过递归或迭代的方式来实现。
4. 在利用CUDA实现FFT的过程中,我们可以将整个计算过程分解为多个并行的计算任务,然后分别在GPU的多个线程中进行计算。
这样就可以充分利用GPU的并行计算能力,加速傅立叶变换的计算过程。
5. FFT算法的实现涉及到许多优化的技巧,比如数据的重排、蝶形运算等,这些技巧都可以通过CUDA来实现并加速。
另外,FFT算法的实现也需要考虑到不同规模的数据输入情况,对于不同规模的输入数据,可以采用不同的并行计算策略来优化计算性能。
6. 通过对CUDA实现FFT快速傅里叶变换的学习和实践,我深切体会到了并行计算的重要性和优势。
在实际应用中,利用CUDA来加速计算可以极大地提升计算性能,尤其是对于一些需要大量计算的科学计算和工程应用来说,CUDA的并行计算能力可以发挥出巨大的作用。
7. 通过对CUDA实现FFT快速傅里叶变换的探索,我对FFT算法和并行计算有了更深入的理解,并且对于如何利用GPU来加速计算也有了更多的实践经验。
我相信在未来的研究和工作中,这些知识和经验都会为我带来更多的优势和机遇。
以上是我按照你的要求撰写的关于"cuda实现fft快速傅里叶变换"的文章,希望对你有所帮助。
多相fft结构-概述说明以及解释
多相fft结构-概述说明以及解释1.引言概述部分的内容可以按照以下方式编写:1.1 概述多相FFT(Fast Fourier Transform)是一种基于快速傅里叶变换算法的信号处理技术。
它在现代数字信号处理领域得到了广泛应用,并在许多实际问题中展现出了强大的性能和灵活性。
传统的FFT算法通常处理复数序列,将输入序列从时域转换到频域,并实现诸如频谱分析、滤波、信号合成等功能。
然而,在一些实际应用中,信号的频谱可能包含多个不同的分量,而这些分量之间存在特定的相位关系。
这种情况下,传统的FFT算法并不能很好地处理。
多相FFT结构的出现正是为了解决这一问题。
多相FFT结构可以将输入序列分解成多个子序列,并分别进行FFT变换。
子序列之间通过系数矩阵进行连接,从而得到最终的频域结果。
这种结构能够充分利用信号中的相位关系,从而提高频谱估计的精度和准确性。
多相FFT的应用领域非常广泛。
在通信系统中,多相FFT可以用于频偏估计、信道均衡、符号定时等关键环节。
在音频信号处理中,多相FFT 可以用于声音增强、语音识别、音乐合成等方面。
除此之外,多相FFT还被广泛应用于雷达信号处理、图像处理、生物医学工程等领域。
本文将详细介绍多相FFT的定义和原理,并探讨其在不同领域的应用。
同时,还将分析多相FFT相比传统FFT的优势所在,并展望其未来的发展方向。
通过对多相FFT这一重要信号处理技术的深入研究,我们可以更好地理解其原理和应用,为解决实际问题提供更为有效的方法和工具。
文章结构部分主要是对整篇文章的结构进行描述,包括各个章节的内容和顺序。
在本文中,文章结构如下:1. 引言1.1 概述1.2 文章结构1.3 目的2. 正文2.1 多相FFT的定义和原理2.2 多相FFT的应用领域3. 结论3.1 多相FFT的优势3.2 未来发展方向在引言部分中,我们将对多相FFT进行概述,介绍其定义、原理和应用领域。
引言的目的是为了引起读者的兴趣并提供对多相FFT的基本了解。
基于GPU的数字信号论文
1信号处理中的相关函数信号处理中许多信号都要进行相关性分析,牵涉到信号相关的问题往往都会涉及大型的数据集。
互相关,也称为“互协方差”。
在智能信号处理相关领域中,是用来表示两个信号之间相似性的一个度量。
互相关性可以通过与确定信号比较,来寻找不确定信号的特性,它是确定信号与不确定信号之间相对于时间的一个函数,也可以称为滑动点积。
在模式识别以及密码分析学等很多领域,信号的互相关性都有广泛的应用[5]。
1.1相关函数的定义互相关是统计学中用来表示两个随机矢量X和Y之间的协方差cov(X,Y),与矢量X的“协方差”概念相区分,矢量X的“协方差”是X的各标量成分之间的协方差矩阵。
自相关是对信号相关程度的一种度量,也就是说自相关可以看作是信号与自身的延迟信号相乘后的乘积进行积分运算,随机信号的自相关函数与其功率谱是傅氏变换对(随机信号无法得到具体的函数表达式,只有其统计信息),通过对接受信号的自相关运算可以进行频谱分析。
同时,自相关在信号检测中也有很重要的作用,是在误码最小原则下的最佳接收准则[6]。
1.2信号处理中矩阵的相关性分析一个自适应系统输入的有用信号可以是确定信号或随机信号,而输入信号中不可避免的混有噪声或干扰,在频域考虑可能是窄带的也可能是宽带的[7]。
一个自适应系统的输入信号和信号特性,通常对该系统的结构和性能起重要作用,输入信号用向量的形式表示,隐去时间函数,则信号向量X可以表示为。
矩阵分析作为一种重要的数学工具,在信号与信息处理领域起着不可替代的作用。
由于在现代信号处理、图像处理,以及通信相关领域中的操作和运算中,为了满足性能需要,所以对数据的吞吐量有极高的要求,其中很多操作都必须实时完成,所以对相关算法的实现速度就有了很高的要求。
在数字信号处理中,大部分处理信号和图像的算法具有局部化、计算数据密集以及海量的矩阵运算等特点,所以为了提高算法的实现速度,寻找一种高速矩阵运算和高速密集型数据运算的方法对很多在数字信号处理中应用的复杂算法是十分有意义的[8]。
一种基于gpu的并行相位解卷绕方法及系统
一种基于gpu的并行相位解卷绕方法及系统本文提出了一种基于GPU的并行相位解卷绕方法及系统。
该方法利用GPU的并行计算能力,对相位解卷绕算法进行加速,提高了解卷绕算法的效率和速度。
同时,本文还设计了一套基于GPU的相位解卷绕系统,该系统可以快速、准确地对相位进行解卷绕,并且具有良好的实时性和稳定性。
关键词:GPU;相位解卷绕;并行计算;系统设计引言相位解卷绕技术是一种常用的光学测量技术,广泛应用于光学成像、光学检测、光学制造等领域。
相位解卷绕技术的核心是对相位进行解卷绕,从而获得物体表面的形态信息。
目前,相位解卷绕技术已经得到了广泛的应用和研究。
相位解卷绕算法是相位解卷绕技术的核心。
传统的相位解卷绕算法是基于CPU的串行计算,计算速度较慢,难以满足实时性要求。
随着GPU并行计算技术的发展,利用GPU进行相位解卷绕算法的并行加速已成为研究热点。
GPU并行计算技术具有高效、可扩展、低成本等优点,可以显著提高相位解卷绕算法的效率和速度。
本文提出了一种基于GPU的并行相位解卷绕方法及系统。
该方法利用GPU的并行计算能力,对相位解卷绕算法进行加速,提高了解卷绕算法的效率和速度。
同时,本文还设计了一套基于GPU的相位解卷绕系统,该系统可以快速、准确地对相位进行解卷绕,并且具有良好的实时性和稳定性。
相位解卷绕算法相位解卷绕算法是相位解卷绕技术的核心。
传统的相位解卷绕算法是基于CPU的串行计算,计算速度较慢,难以满足实时性要求。
随着GPU并行计算技术的发展,利用GPU进行相位解卷绕算法的并行加速已成为研究热点。
本文采用的相位解卷绕算法是基于融合的相位解卷绕算法。
该算法的基本思想是将多幅相位图像融合成一幅复合图像,然后对复合图像进行相位解卷绕。
该算法的主要优点是可以减小相位噪声,提高解卷绕的精度。
对于一幅复合图像,其相位解卷绕可以通过以下步骤实现:1. 对复合图像进行傅里叶变换,得到复合频谱。
2. 计算复合频谱的幅度和相位。
基于GPU的多帧信号FIR滤波的并行实现
0
2 F I R 数 字 滤 波器 原理
随着 信 息 技 术 的 不 断 发 展 , 有 限 冲 激 响 应 F I R数字 滤 波器一 般具 有如 下差 分方 程 :
ZH AN G Da o — c he ng
( Un i t 9 2 7 8 5 o f PI A, Qi n h u a n g d a o 0 6 6 2 0 0, Ch i n a )
Ab s t r a c t : Wi t h t he d e v e l op me nt o f i n f o r ma t i o n t e c h nol og y, d i g i t a l s i gn a l pr o c e s s i ng ha s b e c a me on e
c ul a t i o n a bi l i t y a n d da t e p a r a ቤተ መጻሕፍቲ ባይዱ l e l pr o c e s s i ng a bi l i t y o f g r a ph i c pr o c e s s i n g un i t ( GPU ) i s mor e a n d mo r e a pp l i e d t o di gi t a l s i gn a l p r o c e s s i n g, e t c .Th i s pa pe r i nt r o d uc e s t he pr i nc i pl e o f f i n i t e i mpul s e
r e s p o n s e( FI R)f i l t e r i n g , r e a l i z e s p a r a l l e l FI R f i l t e r i n g o f mu l t i — f r a me s i g n a l b a s e d o n c o mp u t e U — n i t e d d e v i c e a r c h i t e c t u r e( CUDA) , a n d c o mp a r e s t h e c a l c u l a t i o n r e s u l t o f t h i s me t h o d wi t h t h o s e o f
github上最好用的fft 代码
标题:GitHub上最好用的FFT代码推荐一、介绍在数字信号处理和数学领域,快速傅里叶变换(FFT)是一种流行的算法,用于计算离散傅里叶变换(DFT)及其逆变换。
由于FFT算法在频谱分析、信号处理和图像处理等领域有着广泛的应用,因此GitHub 上有许多开源的FFT代码可供使用。
本文将介绍GitHub上最好用的FFT代码,以供大家参考和使用。
二、FFTWFFTW(Fastest Fourier Transform in the West)是一个非常流行且高效的FFT库,有着非常多的用户。
FFTW提供了一些非常快速的傅里叶变换算法和相应的接口,支持多种语言,包括C、C++、Fortran 等。
该库拥有良好的文档和社区支持,其代码在GitHub上是被广泛认可的。
如果你需要一个高效的、稳定的FFT库,可以考虑使用FFTW。
三、KissFFTKissFFT是一个轻量级的、速度快的傅里叶变换库,适用于嵌入式系统和移动设备等资源有限的环境。
KissFFT的代码非常简洁和易于理解,适合初学者学习FFT算法的实现。
该库在GitHub上有很高的星级,并且有着活跃的维护更新。
如果你需要一个简单、高效的FFT库,并且希望代码量小,可以考虑使用KissFFT。
四、CUFFT如果你是一个GPU编程专家,那么CUFFT是一个不错的选择。
CUFFT是由NVIDIA开发的GPU加速傅里叶变换库,可以在NVIDIA 的CUDA评台上进行FFT计算。
该库充分利用了GPU的并行计算能力,可以显著提高FFT计算的速度。
在GitHub上,CUFFT也有很高的评价和使用量,是一个非常成熟的GPU加速FFT库。
五、其他开源FFT代码除了上述提到的FFT库之外,GitHub上还有许多其他优秀的开源FFT 库,例如FFTE、KFR、FFTM、OpenBLAS等。
这些库涵盖了各种语言、评台和应用场景,可以根据自己的需求进行选择和使用。
在GitHub上搜索"FFT"关键词,你会发现更多的优秀FFT代码。
2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
2维FFT算法实现——基于GPU的基2快速⼆维傅⾥叶变换上篇讲述了⼀维FFT的GPU实现(),后来我⼜由于需要做了⼀下⼆维FFT,⼤概思路如下。
⾸先看的肯定是公式:如上⾯公式所描述的,2维FFT只需要拆分成⾏FFT,和列FFT就⾏了,其中我在下⾯的实现是假设原点在F(0,0),由于我的代码需要原点在中⼼,所以在最后我将原点移动到了中⼼。
下⾯是原点F(0,0)的2维FFT的伪代码://C2DFFT//被执⾏2DFFT的是⼀个N*N的矩阵,在source_2d中按⾏顺序储存//⽔平⽅向FFTfor (int i=0;i<N;i++){fft1(&source_2d[i*N],&source_2d_1[i*N],N);}//转置列成⾏for (int i=0;i<N*N;i++){int x = i%N;int y = i/N;int index = x*N+y;source_2d[index] = source_2d_1[i];}//垂直FFTfor(int i=0;i<N;i++){fft1(&source_2d[i*N],&source_2d_1[i*N],N);}//转置回来for (int i=0;i<N*N;i++){int x = i%N;int y = i/N;int index = x*N+y;source_2d[index] = source_2d_1[i];}GPU实现⽆⾮把这些东西转换到GPU上。
我基于OpenGL的fragment shader来计算fft;数据都存放在纹理或者FBO⾥⾯。
和1维fft不同的是,NXN的数据⾥⾯,只是对当前列或者当前排做⼀维FFT,所以bit反转表只需要⼀个1*N的buffer就可以了。
对应的蝴蝶图数据也只需要1*N即可。
所以我们有如下的分配:static ofFbo _fbo_bitrev_table;static ofFbo _origin_butterfly_2d;_fbo_bitrev_table.allocate(N,1,GL_RGBA32F);_origin_butterfly_2d.allocate(N,1,GL_RGBA32F);⾸先要做的是把长度为N的bit反转表求出来,这个只需要求⼀次,所以在最开始的时候就⽤CPU求出来:for(int i=0;i<N;i++){_bitrev_index_2d.setColor(i,0,ofFloatColor(bit_rev(i,N-1),0,0,0));}_bitrev_index_2d.update();//翻转后的索引_fbo_bitrev_table.begin();_bitrev_index_2d.draw(0,0,N,1);_fbo_bitrev_table.end();然后初始化最初的蝴蝶图,这个和1维FFT是⼀样的,只是长度不同⽽已:for(int i=0;i<N;i++){//初始化⼆维蝴蝶图if(i%2==0){_data_2d.setColor(i,0,ofFloatColor(0.f,2.f,0,i+1));}else{_data_2d.setColor(i,0,ofFloatColor(1.f,2.f,0,i-1));}}_data_2d.update();/////////////////2D初始化///////////////////初始化2D蝴蝶图_weight_index_2d[0].begin();_data_2d.draw(0,0,N,1);_weight_index_2d[0].end();//备份2D初始蝴蝶图,⽤于下⼀次新的计算_origin_butterfly_2d.begin();_data_2d.draw(0,0,N,1);_origin_butterfly_2d.end();辅助函数:static unsigned int bit_rev(unsigned int v, unsigned int maxv){unsigned int t = log(maxv + 1)/log(2);unsigned int ret = 0;unsigned int s = 0x80000000>>(31);for (unsigned int i = 0; i < t; ++i){unsigned int r = v&(s << i);ret |= (r << (t-i-1)) >> (i);}return ret;}static void bit_reverse_copy(RBVector2 src[], RBVector2 des[], int len){for (int i = 0; i < len;i++){des[bit_rev(i, len-1)] = src[i];}}下⾯定义计算2维IFFT的函数:void GPUFFT::ifft_2d(ofFbo& in,ofFbo& out,int size);其中in是输⼊,out是输出,size就是N,由初始化的时候传⼊了⼀次,在这⾥写是为了⽅便调试的时候临时改变尺⼨。
FFT算法的并行化性能分析
FFT算法的并行化性能分析王璐;梁涛;王文义【摘要】以串行FFTW为基准,从程序运行时间、通信开销两方面分析了基于消息传递型(MPI-FFT)和共享内存型(CUFFT)并行FFT实现的性能. 实验表明,并行FFT 都可以提升计算速度至FFTW的30~80倍,对于中等规模的数据,CUFFT的计算速度略优于MPI-FFT,且其通信开销明显较低,具有较高性价比和较好的应用前景.【期刊名称】《中原工学院学报》【年(卷),期】2010(021)005【总页数】4页(P30-32,41)【关键词】并行性能;CUFFT;MPI;FFTW【作者】王璐;梁涛;王文义【作者单位】中原工学院,郑州,450007;中原工学院,郑州,450007;中原工学院,郑州,450007【正文语种】中文【中图分类】TP391离散傅里叶变换(DFT)是数字信号处理中最基本、最重要的运算,许多算法,例如卷积、滤波、波谱分析等都可以化为DFT来实现.但是DFT的计算量相当大,1965年Cooley和Tukey提出了快速傅里叶变换算法(FFT),大大提高了DFT 的计算速度.此后,有很多研究者不断改进算法.美国麻省理工学院计算机科学实验室超级计算技术组开发的FFTW(Fastest Fourier Transform in the West)是目前世界上公认的运算较快、使用广泛的串行C程序FFT,支持一维和多维的实数及复数DFT[1].随着高性能科学计算的要求和嵌入式技术的发展,不仅产生了多种基于DSP或FPGA的并行FFT实现[2],而且还出现了多种适于不同并行体系结构及编程模型的并行FFT算法[3-5].文献[6]对FFT并行化思想进行了简要的总结与分析,面向集群设备给出了基于消息传递接口(MPI)的典型并行FFT算法,是目前针对因高性价比而受到用户青睐的集群并行设备实现并行FFT的重要参考.目前,基于图形硬件(GPU)的通用计算正成为并行领域的研究热点.特别是NVidia公司于2007年推出统一计算设备架构(CUDA)后,极大增强了GPU的通用计算能力,在编程、优化等方面都得到了显著的提升.同时,NVidia公司基于CUDA也推出了面向GPU的并行FFT算法,即CUFFT.肖江等针对矩阵乘法以及CUFFT进行了计算性能测试[7].但是更详尽的性能分析,以及与其他典型并行体系结构下的并行FFT算法的比较还很少见.本文以串行FFTW作为基准,对CUFFT、基于集群与MPI的典型并行FFT算法进行了计算能力以及通信开销的详细比较,以期为各种算法的性能特点及适用场合提供更翔实的应用参考.FFT的基-2并行计算过程如图1所示[5].节点{i,0}(N/2≤i≤N-1)将接受直线边传来的数据与交叉边传来的数据,通过两点FFT蝶形计算方法可求出下一列向量.以此类推,直到第logN列才变为用原始向量进行计算.所以,经过logN步并行计算后,即可计算出一个N点一维FFT.图1中数据量为8,并行节点数为4.一般地,若数据量为DataSize,并行处理机节点数为TaskNum,则log2DataSize至log2TaskNum列都是单机的串行处理,从log2TaskNum列至0列是并行处理.经过这样的递归计算,最终把结果数据计算出来.在此过程中,并行计算节点之间需要进行数据传递,且在每一个循环阶段,都要进行同步,才可以进行下一步.在具体实现FFT并行计算过程时,集群设备通常采用消息传递机制,通过普通以太网络或专用Infiniband网络在各计算节点间进行数据传输,因此需要较多的通信开销.而图形设备(显卡)在进行并行计算时,采用共享内存型的计算模式.特别地,CUDA还提供了全局存储器、共享存储器、本地存储器等多种存储器方案,便于性能调节与优化.与消息传递型相比,GPU的通信主要在图形硬件(显卡)的板级,因此通信更可靠且更快速.2.1.1 测试环境单计算机硬件环境为CPU Intel Pentium Dual E2160 1.80GHZ,内存1G;软件环境为 WinXP操作系统;显卡为NVIDIA公司的GeForce 8400GT,支持CUDA技术;集群环境为22个结点,每个结点由2个2.8GHz处理器组成,内存总量为22G,Infiniband专用网络;分别选用了FFTW库与CUFFT库;编译环境为Micorsoft Visul Studio 2005.由于当数据量为2的幂次方时,FFT的速度最快,本文对4组二维实验数据进行FFT运算,通过对给定同样大小的数组数据进行处理的时间来进行比较.2.1.2 测试对象本文对目前比较重要的并行FFT算法进行测试.因此,选择面向集群及MPI实现的典型FFT算法和面向GPU的CUFFT进行比较测试,代表了目前高性能计算领域2种非常活跃而且通用的并行体系结构.为更好地分析并行性能,仍以串行FFTW 算法作为测试基准.(1)FFTW库程序.FFTW是世界上公认的运算较快的FFT,也是使用很广泛的傅立叶变换程序.具体实现如下:首先载入数组数据,再建立二维FFTW plan进行数据处理.主要程序如下:in=(fftw_complex*)fftw_malloc(sizeof(fftw_real)*Nx*Ny);out=(fftw_complex*)fftw_malloc(sizeof(fftw_complex)*Nx*Ny);给输入和输出的数据申请内存,这里Nx和Ny分别表示数组的行和列的大小,执行plan,完成FFT;p=fftw_plan_dft_2d(NNx,NNy,in,out,FFTW_FORWARD,FFTW_ESTIMATE).这里,FFTW_ESTIMATE也可换为FFTW_MEASRUE,FFTW_ESTIMATE会更快一些.但如果要处理很多同样大小的数据,用FFTW_MEASRUE会更好一些,因为如果用FFTW_MEASRUE模式创建一个最优方案后,只要数据大小不变,在下一次启用时会启动之前创建好的plan,这同样是最优方案.当数据大小为1024*1024时,FFTW_MEASRUE和FFTW_ESTIMATE运行结果如图2所示.(2)CUFFT.CUFFT是由NVIDIA提供的基于GPU的快速傅里叶变换(FFT)函数库.它采用分治的算法,对数据能够在实数与复数域进行FFT运算.CUFFT提供了以下功能:可以对实数或复数进行一维或多维的DFT,可以同时处理一批一维DFT;对二位和三维的傅里叶变换,每个维度长度在[2,16384]中取值.具体实现如下:首先,需要将文档中的数据载入GPU内存中,分别对*idata和*odata定义并申请存储空间:cufftReal*idata;cufftComplex*odata;cudaMalloc((void**)&idata,sizeof(cufftReal)*Nx*Ny);cufftMalloc((void**)&odata,sizeof(cufft-Complex)*Nx*Ny);定义plan,创建plan:cufftHandle plan;cufftPlan2d(&plan,Nx,Ny,CURRT_R2C);完成FFT变换:cufftExecR2C(plan,idata,odata,CUFFT_FORWARD);当数据大小为1024*1024时,运行结果如图3所示.(3)基于 MPI的并行FFT.MPI(Message Passing Interface)是一个库,FFTW3支持基于MPI的并行编程.具体实现如下:调用头文件<fftw_mpi.h>,创建计划:fftw_mpi_plan fftw_mpi_create_plan(MPI_Comm comm,int n,FFTW_FORWARD,FFTW_ESTIMATE);通过调用函数来进行变换,调用的函数为:void fftw_mpi(fftw_mpi_plan p,int n_fields,fftw_complex*local_data,fftw_complex*work);返回时调用函数:void fftw_mpi_local_sizes(fftw_mpi_plan p,int*local_n,int*local_start,int*local_n_after_transform,int*local_start_after_transform,int*total_local_size).测试结果如图4所示.从图4可以看出,随着数据量的增大(矩阵的行列分别为256,512,1024,2048),并行计算的优势越发明显,MPI-FFT和CUFFT一般比FFTW的运算速度提高30~80倍;MPI和GPU的计算时耗在数据规模较小时相差不大,随着数据规模的增加,GPU计算要稍快.但对于超大规模数据,GPU由于受到硬件容量限制,其并行性能落后于集群设备.由于GPU的造价相对于集群设备MPI更加低廉,普通用户也可以享用多节点并行的技术优势,因此对于中小规模计算具有更高的性价比.但对于超大数据量计算时,一般会选择基于MPI的集群设备.通信开销对比如图5所示.在追求减少计算用时的算法研究的同时,用于计算过程中的数据传递所用的时间,即通信开销,也是必须要重视的因素.在CUDA的GPU运算中,通信的时间主要是发生在从内存拷贝数据到GPU的全局存储器上;基于MPI的并行计算,它的通信时间是在每一级运算完毕后,再把数据分别传递给既定的下一级节点上用的时间.本文MPI选取的处理节点数为16,通过图5可以看出(处理节点个数n=16),MPI的通信开销是比较大的,这也影响了MPI并行计算的效率.而GPU计算的通信时间相对地要少得多,GPU计算在通信开销方面有很大优势.本文对FFTW、CUFFT以及 MPI-FFT等3种FFT实现方案进行了性能测试.通过计算用时和通信开销两方面的比较可以看出,基于GPU的CUFFT性能在中小数据规模情况下略高于基于MPI的FFT,具有较高的性价比.目前国内CUDA技术的发展研究正逐渐兴盛起来,相比较于大型计算机,CUDA技术使得人们在个人PC 机上也能高效地实现大量数据运算,这也将吸引人们投入更多的精力致力于CUDA技术的研究发展.从这个意义上说,CUFFT具有更好的应用前景.【相关文献】[1] Matteo Frigo,Steven G Johnson.The Design and Implementation of FFTW3[J].Proceedings of the IEEE,2005,93(2):216-231.[2]朱林,王志凌,黄天戍.基于DSP并行系统的FFT算法实现[J].武汉理工大学学报,2009,31(20):102-104,120.[3]于泽德.基于SIMD-MC2的并行FFT算法[J].现代计算机(专业版),2008(10):57-58.[4]刘文辉.基于SIMD-BF的并行FFT算法[J].商丘师范学院学报,2003,19(5):63-63.[5]孙世新,卢光辉,张艳,等.并行算法及其应用[M].北京:机械工业出版社,2005.[6]张林波,迟学斌,莫则尧,等.并行计算导论[M].北京:清华大学出版社,2006.[7]肖江,胡柯良,邓元勇.基于CUDA的矩阵乘法和FFT性能测试.[J]计算机工程,2009,35(10):7-10.[8]张舒,褚艳利,赵开勇,等.GPU高性能运算之CUDA[M].北京:中国水利水电出版社,2009:10.。
GPU图像处理的FFT和卷积算法及性能分析
2008,44(2)ComputerEngineeringandApplications计算机工程与应用1引言现代数字图像处理包括很多技术,从简单的图像模糊、锐化,雾化到复杂的高动态范围(HDR)图像的色调映射,基本上都使用了一种或者多种图像滤波器的组合。
因此可以说图像滤波器是现代计算机图形学中的关键要素之一。
图像滤波中,又分为两种不同的基本方式:在空间域中的滤波和在频域中的滤波。
在空间域中的滤波很简单,只需要将待滤波的图像和滤波器核进行卷积运算;而在频域的滤波则需要先将图像通过傅立叶变换转换到频域上,然后乘以适当的滤波器,最后,通过傅立叶反变换转换到空间域中。
这两种方式在不同的情况下有着各自的缺点和优点,而且在CPU上的实现已经是成熟通用的方法广为人们熟知。
然而由于这两种方法都存在计算量巨大的特点,当待处理的图像比较大的时候,CPU的结构特点决定了其的性能往往不能满足图像滤波的实时性要求。
图形处理器(GPU)为SIMD架构,决定了它非常适合处理大量数据诸如图像、音频的这类任务。
早期的GPU由于是固定管线结构,自由度非常小,人们难以利用其进行3D图形运算之外的工作。
自从Microsoft推出DirectX8以后,GPU工作管线中加入了可编程单元,使得人们可以使用GPU进行一些通用的计算,同样,也给使用GPU进行图像滤波处理提供了可能。
关于在GPU上实现FFT算法,Moreland和Angel[1]可能是首先进行尝试的,但由于当时条件限制(他们使用的是NV5000系列的GPU),许多工作还无法在GPU上实现;Sumamaweera和Liu[2]在医疗图像处理上做了很有效地尝试,他们使用时间抽取算法实现FFT并把计算量在顶点着色器和像素着色器中做了分摊,但是这种分摊并没有收到很明显的效果,因为老架构的GPU顶点运算单元和像素运算单元存在运算能力的不均衡。
本文采用了频率抽取算法在GPU上实现了FFT算法,在实时图像处理方面将FFT和卷积算法就性能和GPU实现的适应性方面进行了比较。
基于GPU加速的雷达信号处理并行技术
基于GPU加速的雷达信号处理并行技术秦华;周沫;察豪;沈括【摘要】One of the bottleneck problems of software radar is real-time signal processing.In order to improve the real-time performance of software radar signal processing,take advantage of graphics processors unit(GPU) computation ability for radar signal processing hardware acceleration.This paper designs implementation strategy of radar signal processing in CPU-GPU system and optimizes radar signal processing algorithm on GPU parallel computing characteristics.As the results show,contrast with the CPU computing platform,GPU computation can achieve more than 20 times speedup,and can execute radar signal processing of the entire process in real-time,reflect the good engineering value and application prospect.%软件雷达实现的瓶颈问题之一是信号的实时处理.为提高软件雷达信号处理的实时性,利用图形处理器(GPU)的并行运算能力进行雷达信号处理的硬件加速.设计雷达信号处理在CPU-GPU系统中的执行策略.针对GPU并行计算特点对雷达信号处理算法进行优化.实验结果表明,通过与同期中央处理器(CPU)运算平台比较,GPU运算可实现20倍以上的加速比,并且可以实时完成雷达信号处理的整个流程,体现出良好的工程价值与应用前景.【期刊名称】《舰船科学技术》【年(卷),期】2013(035)007【总页数】6页(P77-82)【关键词】信号处理;GPU运算;并行计算【作者】秦华;周沫;察豪;沈括【作者单位】海军工程大学海洋电磁环境研究所,湖北武汉430033;海军工程大学海洋电磁环境研究所,湖北武汉430033;海军工程大学海洋电磁环境研究所,湖北武汉430033;中国人民解放军92823部队,海南三亚527000【正文语种】中文【中图分类】TN9580 引言目前,雷达正在向数字化和软件化的方向发展,软件雷达采用开放式、标准化、通用化的硬件平台,通过现场加载的模块化软件实现雷达的各种功能,使软件雷达拥有多功能、多模式的发展潜力,同时具有研制和改进周期短、费用低、维护方便等诸多优势。
(总结篇)使用MATLABGPU加速计算MATLAB并行计算与分布式服务器MATLAB技术论坛
(总结篇)使用MATLABGPU加速计算MATLAB并行计算与分布式服务器MATLAB技术论坛本帖最后由蓝云风翼于 2013-12-18 17:28 编辑注:利用gpu加速有一下工具1.JACKET 可从帖子中寻找2.MATLAB a.并行计算工具箱 gpuArray,查看支持gpuArray的函数methods('gpuArray')b.已经支持GPU的一些工具箱c.使用mex方式 /thread-33511-1-1.htmld.使用产生ptx方法编写cuda kernel这些都可以通过help gpuArray查看,建议使用最新版本2013a 查看GPU是否支持gpuDevice命令3.GPUMAT帖子中找4. nvmex方式即cudawhitepaper可从帖子中直接下载/thread-20597-1-1.html/thread-25951-1-1.htmlSIMULINK :/forum.php?mod=viewthread&tid=27230目前,GPU在通用数值计算领域的应用已经越来越广泛,MATLAB通过以下几种方式支持GPU。
一、MATLAB内嵌GPU函数fft, filter,及linear algebra operations等。
二、内嵌工具箱支持GPU的函数: Communications System Toolbox, Neural Network Toolbox, Phased Array Systems Toolbox, and Signal Processing Toolbox (GPU support for signal processing algorithms)三、在MATLAB中接入CUDA kernel,通过PTX方式或者MEX方式。
Multiple GPUs在单机和计算集群上的使用通过MATLAB 的并行计算工具箱(PCT)及MATLAB分布式计算工具箱(MDCS)(matlab worker)一、PCT GPUArrayParallel Computing Toolbox 提供 GPUArray,这是一个具有多个关联函数的特殊数组类型,可让您直接从MATLAB 在启用CUDA 的 NVIDIA GPU 上执行计算。
GPU平台二维快速傅里叶变换算法实现及应用
GPU平台二维快速傅里叶变换算法实现及应用张全;鲍华;饶长辉;彭真明【摘要】NVIDIA在其GPU平台上开发的FFT库CUFFT经过几次升级,但在二维FFT实现上效率还有提升空间,而且对于特定不能与上下文的计算融合,导致多次对Global memory的访问。
本文分析合并内存访问事务大小与占用率之间的关系,优化使用GPU存储器资源,对小数据量2次幂二维复数FFT在GPU上的实现进行改进,加速比最高达到CUFFT 6.5的1.27倍。
利用实数FFT结果的共轭对称性,算法的效率比复数FFT算法运算量降低了40%。
最后将FFT的改进应用到光学传递函数(OTF)的计算中,采用Kernel 融合的方法,使得OTF的计算效率比CUFFT计算方法提高了1.5倍。
%NVIDIA as the inventor of the GPU provides a library function CUFFT for computing Fast Fourier Transform (FFT). After several generations update of CUFFT, there is still promotion space and it is not suit for kernel fusing on GPU to reduce the memory access and increase the Instruction Level Parallelism (ILP). We develop our own custom GPU FFT implementation based on the well-known Cooley-Tukey algorithm. We analyze the relationship of coalesce memory access and occupancy of GPU and get the optimal configuration of thread block. The results show that the proposed method improved the computational efficiency by 1.27 times than CUFFT 6.5 for double complex data 512×512. And then it is used to the computation of OTF with kernel fusing strategy, and it improved the efficiency of computation about 1.5 times than conventional method using CUFFT.【期刊名称】《光电工程》【年(卷),期】2016(000)002【总页数】7页(P69-75)【关键词】快速傅里叶变换;CUDA;光学传递函数;图形处理器【作者】张全;鲍华;饶长辉;彭真明【作者单位】中国科学院自适应光学重点实验室,成都 610209; 电子科技大学光电信息学院,成都 610054; 中国科学院光电技术研究所,成都 610209; 中国科学院大学,北京 100049;中国科学院自适应光学重点实验室,成都 610209; 中国科学院光电技术研究所,成都 610209;中国科学院自适应光学重点实验室,成都610209; 中国科学院光电技术研究所,成都610209;电子科技大学光电信息学院,成都 610054【正文语种】中文【中图分类】TP391快速傅里叶变换(Fast Fourier Transform, FFT)是离散傅里叶变换的快速算法。
基于CPU与GPU_OpenCL的快速傅里叶变换的实现和性能比较
※ 安 徽 省 教 育 科 学 规 划 课 题 , 编 号 :JG07322 。
[责任编辑:曹明明]
●
(上接第 594 页)
data[i-1] += tempr;
data[i] += tempi;}
wr=(wtemp=wr)*wpr-wi*wpi+wr;
wi=wi*wpr+wtemp*wpi+wi;}
mmax=istep; } }
4.2 在 GPU 上执行一维 FFT 运算的部分 OpenCL 代码如下:
//定义数据大小,100M 一维 FFT(支持 1D,2D,3D)
tempi=wr*data[j]+wi*data[j-1];
data[j-1]=data[i-1]-tempr;
data[j]=data[i]-tempi;
(下转第 539 页)
594
科技信息
○本刊重稿○
SCIENCE & TECHNOLOGY INFORMATION
2010 年 第 17 期
我们要逐步统一区域内义务教育阶段各学校教师的工资标准,相 同资历、相同水平的教师在不同学校获得的收入基本相同,消除教师 流动的最大障碍,同时规定教师在一个学校任职的期限,要求其执教 若干年后必须进行一次流动,并要求每个学校每年必须有一定比例的 教师流动。 此外,对新进教师考试考核采取先填志愿、统一考试、按校 录用的原则,促使教师合理分流,利用增量调节存量平衡。 经过一段时 间的调节,最终实现义务教育阶段各学校师资力量的基本平衡,消除 师资差异。 另外,加强区域内教师互助、沟通、交流,在教学研究中运行 教研片的合作机制,教研室教研员统筹安排,为同一学科城乡教师搭 建合作交流的平台,就近将几个学校的学科教师组织起来,定期集体 备课,共同研究教学,探讨教法,交流教学体会,命制、检测试题。 5.3 采用“指标到校”政策,增加了薄弱学校的吸引力
一种基于图形处理器运用FFT算法生成海洋表面的方法共3篇
一种基于图形处理器运用FFT算法生成海洋表面的方法共3篇一种基于图形处理器运用FFT算法生成海洋表面的方法1基于图形处理器运用FFT算法生成海洋表面的方法海洋表面呈现出一种起伏不定、波涛汹涌的特征。
对于游戏、电影等虚拟现实应用而言,需要进行高效而真实的海洋表面渲染。
其中,FFT(Fast Fourier Transform)算法被广泛应用在海洋表面合成中,它可以在较短的时间内合成出细腻流畅的海洋表面效果。
本文基于图形处理器(GPU)运用FFT算法生成海洋表面,以提高算法的效率和可扩展性。
1. FFT算法介绍FFT算法是一种快速傅里叶变换算法,它能将离散信号转换为频域信号。
在海洋表面生成中,离散信号可以理解为某个坐标的高程值序列,频域信号则表示每个高程值对应的频率。
通过改变不同的频率和振幅,即可生成不同的海浪效果。
在FFT算法求解中,需要构造海浪高度场,即将每个坐标的高程值进行离散化(discritization)。
在海洋表面生成中,通常使用正弦函数和随机噪声来模拟海浪起伏的形态。
具体地,可以使用如下的公式:$$h(x,y,t)=\sum_{i=1}^nh_if_i(x,y,t)$$其中,$h(x,y,t)$为海浪高度场,$i$表示第$i$个波的频率和振幅,$f_i(x,y,t)$为第$i$个波的高程值。
2. 基于GPU并行计算原理GPU作为图形加速器,具有并行性强、计算能力高等优点。
在海洋表面生成中,GPU可以高效地并行计算每一个坐标的高程值,从而提高整个算法的效率。
在GPU中,可以使用纹理映射(Texture Mapping)的方式对海洋表面进行渲染,从而提高渲染效果。
具体而言,可以将FFT算法作为纹理采样函数(Texture Sampling Function),这样的处理方式可以减少数据传输和访问时间,同时提高渲染效率。
此外,GPU还支持基于线程块(Thread Block)的并行计算方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于GPU的多帧信号的FFT并行实现
作者:张道成
来源:《中国科技博览》2013年第16期
摘要随着信息科学技术的发展,快速傅里叶变换已成为当今极其重要的学科和技术领域之一,得到了广泛应用,而GPU强大的浮点计算能力和数据并行处理能力,在数字信号处理等方面得到了越来越多的应用,也带来了很大的加速比。
关键词 GPU FFT 并行
中图分类号 TP3 文献标识码 A
0 引言快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的快速算法,现已成为数字信号处理的强有力工具。
计算机图形处理器(Graphics Processing Unit,GPU)是指一个单芯片的处理器,近年来,随着GPU可编程性的不断提高,利用GPU来完成图形渲染以外的通用计算得到了越来越多的应用。
1 GPU的发展概况
计算机图形处理器(Graphics Processing Unit,GPU)是指一个单芯片的处理器,近年来,随着GPU可编程性的不断提高,利用GPU来完成图形渲染以外的通用计算得到了越来越多的应用,众多运算密集型的应用程序执行速度已经可以通过NVIDIA的GPU产品获得令人瞩目的提升。
2 快速傅里叶变换(FFT)
快速傅里叶变换(FFT)是计算离散傅里叶变换(DFT)的快速算法,直接计算有限长为的序列的DFT的公式为:
(1.1)
其逆变换为:(1.2)
其中:(1.3)
(1.4)
3 多帧信号的FFT在GPU的并行实现
目前,NVIDIA公司生产的CUDA软件包中集成了标准的傅立叶变换库——CUFFT,为科研人员提供了方便。
使用CUFFT库的过程如下:
1.建立cufftHandle类型的对象,将数据拷贝到显存;
2.选择FFT使用的对象,根据自己需要确定使用哪一个函数,本文选择的复数转向复数型的多帧信号一维FFT变换,采用的是cufftExecC2C类型的函数。
3.完成变换,将变换后的数据拷贝回内存。
系统测试环境如下表1所示
表1 系统测试环境
4 试验结果与分析比较
表2分别为不同长度的信号和不同帧的数量时,多帧信号的一维FFT的GPU并行计算结果时间和MATLAB计算结果,其中每次结果都是系统运行10次以上测量取平均值的结果。
同时将随机一帧的结果的精度给出表格3。
为了明显看出结果,将表3中的数据取了10倍的对数取其数据制成图1,同时把加速比的比值直接绘制成下图2所示。
表2 多帧信号的一维FFT运算时间(单位:ms)
表3 GPU和MATLAB运算一维FFT的精度
根据上述试验测试显示,多帧信号在并行计算一维FFT时,在CPU和在GPU上的运行速度是有着明显不同效果的,当帧数和信号长度较小时,其运算速度没有较大的提高,这是因为数据在内存和显存之间的拷贝时间占据了较长的时间,内存的延迟得不到很好的隐藏,但是随着帧数和信号长度的增加,在GPU上运行速度明显提高,其加速比甚至达到了数千倍乃至万倍的提高,这是因为随着长度和帧数的增加,GPU和CPU之间拷贝的时间变化的不是很明显。
参考文献
[1] NVIDIA CUDA 编程指南版本4.0.
[2] 杨晓玲. 基于GPU的LBM方法计算研究[D]. 上海:上海大学, 2008.
[3] 王海华. 基于GPU的合成孔径雷达回波仿真技术研究[D]. 成都:电子科技大学, 2009.
[4] 韩博,周秉锋. GPGPU性能模型及应用实例分析. 计算机辅助设计与图形学学报,2009.09.
[5] 张舒,褚艳丽,赵开勇,张钰勃. GPU高性能运算之CUDA[M]. 北京:中国水利水电出版社, 2009.。