一种用于并行fft计算的数据存取方法及装置的制作方法

文档序号:6444964阅读:208来源:国知局
专利名称:一种用于并行fft计算的数据存取方法及装置的制作方法
技术领域
本发明主要涉及数据存取领域,尤其是一种用于并行FFT计算的数据存取方法及
直ο
背景技术
信号处理系统经常需要将信号内容在时域和频域进行转换,快速傅立叶变换算法 (FFT)可进行时域和频域间的信号转换。相对于其它转换算法来说,快速傅立叶变换算法具有结构统一、计算量少的优点,因此广泛应用于信号处理系统中。FFT算法输入N个数据,输出N个数据;一般称时域至频域的变换为正向变换,而频域至时域的变换变逆向变换。FFT算法有多种实现方式,但都由库利-图基算法演变而来。对于N个数据点,基2的库利-图基算法包括Iog2N个计算级。每个计算级输入N个数,输出N个数;前一计算级的输出经过一定的排序后作为后一计算级的输入。第一级输入为原始数据,最后一级输出为FFT计算结果,计算流程如图1所示,图中假定数据点长度为 8,整个计算过程需要三个计算级103 :S0、S1、S2。每个计算级103由N/2个蝶形102组成,蝶形的计算流程如图2所示。每个蝶形输入两个数据点A和B,以及一个旋转因子W,经过蝶形计算后得到两个计算结果A+BW和 A-BW。每个蝶形计算中,输入数据A和B的序号具有确定的对应关系,该对应关系由蝶形所在的计算级以及输入数据A或B的序号来确定;同时,旋转因子W的值由当前蝶形所在的计算级103、输入数据A或B的序号、FFT数据长度确定。如图1中SO计算级中的第1个数据必定与第O个数据构成一蝶形,并且第O个数据为蝶形输入的A,第1个数据为蝶形输入的 B,而W的值为1。而Sl计算级中的第1个数据必定与第3个数据构成一蝶形,并且第1个数据为蝶形输入的A,第3个数据为蝶形输入的B,而W的值为1。计算级之间存在数据相关,后一计算级必须等待前一计算级完成以后才能开始计算。因此,每级计算完成后都需要将结果存放在存储器中,下一级计算从存储器中读取上一级的计算结果作为本级计算的输入。计算级内的蝶形相互独立,蝶形的计算顺序不影响计算结果,但每个蝶形所读取的数据A、B和旋转因子W必须满足内在的对应关系。在并行FFT计算中,运算部件从多粒度并行存储器中读取多个蝶形所需数据及对应的旋转因子,并行计算多个、多级蝶形,然后将计算结果并行写入存储器,以便进行一下级计算,如图4所示。图中假定数据长度为64,并行粒度为4,即多粒度并行存储器400 — 次可读写4个数据。此时,两相邻计算级中存在数据相关的4个蝶形403构成一个蝶形组 402,两相邻计算级中的蝶形组构成一计算节401。蝶形计算模块301从存储器300或302 中并行读取一个蝶形组所需数据点,从存储器303中并行读取所需旋转因子,完成一个蝶形组计算后,再将计算结果并行写回存储器300或320,如图3所示。在蝶形组402中,每个蝶形的输入A、B、W仍必须满足其内在的对应关系,因此,并行FFT算法中必须考虑计算数据和旋转因子在存储器中的分布,以及每个蝶形组402的读写地址和读写方式,以保证蝶形计算模块每次都能并行读取所需数据和旋转因子。
大部分并行FFT算法相关的专利都着重讨论如何将长序列的FFT数据分解成多个短序列的FFT,利用多个处理器并行计算各个短序列的FFT,最后对多个短序列的 FFT进行交织计算,得到最终的长序列FFT结果,如美国专利US 6,792,441B2 (Parallel Multiprocessing For Fast Fourier Transform With Pipeline Architecture)。这一类算法都没考虑多个处理单元同时访问存储器时的冲突问题,以及多个处理器如何交织多个短序列FFT结果;而实际应用中,存储器访问冲突以及处理器之间的同步和通信效率将严重影响 FFT 的计算效率。美国专利 US 6,304,887B1 (FFT-Based Parallel System For Array Processing With Low Latency)讨论了 FFT算法中数据并行读写的问题,该专利将 FFT数据存放在多个存储器中,利用多个数据缓冲区、多个选择器对数据进行排序,以保证每次读写的数据分布在不同的存储器中,实现并行读写。该专利需要专用的存储器、数据缓冲区和选择器,读写地址计算复杂,难以实现不同数据长度、不同读写粒度的并行FFT算法。

发明内容
为了解决上述问题,本发明提出一种用于并行FFT计算的数据存取方法及装置。本发明所提出的一种用于并行FFT蝶形计算的数据存取方法,其特征在于,该方法包括以下步骤步骤1,按照2b的并行粒度,将长度为N的初始FFT数据,分为2e个数据组,其中, G = Iog2N-B ;并将2g个数据组存放在多粒度并行存储器300或302中的2B个存储块804 的各个存储行805中,每个存储块804包含2g_b个数据组,占用2g_b个存储行805 ;步骤2,将每个蝶形组402计算需要的2B_1个旋转因子依次存放在多粒度并行存储器303的存储行中;步骤3,读取多粒度并行存储器300或302中第i个存储块804的第j个存储行 805中存储的FFT蝶形计算所需的数据,读取粒度为2B,其中,i、j的初始值均为0 ;并以2b 的粒度从多粒度并行存储器303中按照存储行的顺序依次读取FFT蝶形计算所需的旋转因子;步骤4,根据读取出的旋转因子,按2b的粒度对读出的第j个存储行805所存储的数据进行并行蝶形计算;步骤5,按1的粒度将蝶形计算结果数据并行写回到多粒度并行存储器300或302 中,当步骤3中从存储器300读取数据时,步骤5将蝶形计算结果数据写回到存储器302中, 反之亦然;步骤6,判断当前存储行号j是否满足j < 2",如果满足,则将j加1后返回到步骤3;否则将j置0,跳到步骤7;步骤7,判断当前存储块号i是否满足i < 2B,如果满足,则将i加1后跳到步骤 3,否则结束。另一方面,本发明还提出一种用于并行FFT计算的数据存取装置,其特征在于,该装置包括多粒度并行存储器300、302,多粒度并行存储器303和蝶形计算模块301,其中,多粒度并行存储器300、302构成乒乓结构,交替存放一个计算级401的输入数据或输出数据;
多粒度并行存储器303用于存放计算级401所需的旋转因子;蝶形计算模块301用于根据所述多粒度并行存储器303中存放的旋转因子对于从多粒度并行存储器300、302中交替取出的待处理数据进行蝶形计算,并将计算得到的结果交替存放在多粒度并行存储器300、302中;多粒度并行存储器300与蝶形计算模块301之间的连线包括数据线306、地址线 310和存取粒度指示线309 ;多粒度并行存储器302与蝶形计算模块301之间的连线包括数据线305、地址线 312和存取粒度指示线311 ;多粒度并行存储器303与蝶形计算模块301之间的连线包括数据线304、地址线 308和存取粒度指示线307 ;其中,如果从多粒度并行存储器300中读取数据,进行蝶形计算,那么计算得到的结果数据写回到多粒度并行存储器302中,反之亦然。本发明方法将FFT数据和旋转因子存放在多粒度并行存储器中,并用统一的蝶形表达式对整个计算过程中的FFT数据和对应的旋转因子进行分组。每分组数据包含多个蝶形,可并行计算;同时根据该蝶形表达式,可方便生成各个分组的数据地址和旋转因子系数地址,利用不同的读写粒度,可从多粒度存储器中并行读写数据和对应的旋转因子。读写过程中不会产生存储器冲突,也不需要额外的步骤再对读写数据进行排序。同时,本发明方法可根据具体实现灵活指定并行粒度。


图1是数据长度为8时按时间抽取的基2FFT算法流程图。图2是蝶形结构示意图。图3是本发明并行FFT计算的数据存取装置结构图。图4是本发明中蝶形、蝶形组、计算级、计算节的示意图。图5是蝶形表达式的构成示意图。图6是并行粒度为4数据长度为64时各计算节、计算级的蝶形表达式示意图。图7是并行粒度为8时一个蝶形组所需旋转因子在存储行中的存储方式示意图。图8是根据本发明所述方法64点FFT数据在存储器中的分布以及一个计算节的读、写方式示意图。图9是并行FFT计算中一个计算节的数据存取方法流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。描述过程中约定以下符号■ N =FFT数据长度,必须为2的幂次方;■ B 并行粒度比特位宽,2B即为并行粒度;■ G 数据组索引值比特位宽,G = Iog2N-B ;_g:数据组索引值;
_b:组内索引值。为了实现并行FFT的读写和计算,首先定义并行粒度2B,(B为正整数),并行粒度是指从存储器并行读取并且可独立进行蝶形计算的数据个数。如图4所示,图中假定FFT数据长度N = 64,并行粒度为22。此时,64个数据点被分为16组数据组并行进行处理,每个数据组包括4个数据点,该组数据可独立进行两级基2的FFT计算,每级计算包括两个蝶形 403。当并行粒度为2B时,每组数据可独立进行B级基2的FFT计算,每级计算包括Qb)/2 个基2的蝶形。因此,蝶形计算模块读取一组数据后,可独立进行BX (2b)/2 = BX2B—1个蝶形计算,然后将计算结果写回多粒度并行存储器400。对于长度为N的FFT数据,每个数据点的索引地址需要Iog2N个比特位来表示。对该N点数据以2b的粒度进行分组后,每个数据点索引值分解成两部分数据组索引值和组内索引值。对于N点数据,一共有N/2B个数据组,数据组索引值需要1o&(N/2b) = Iog2N-B 个比特位来表示,我们定义G = Iog2N-B ;此时数据组索引值可表示为g = gy. . . &而。同时每个数据组包括2B个数据点,组内索引值需要B个比特位来表示,此时组内索引值可表示为b = Iv1. . . ID1Iv在FFT计算开始之前,每个数据点的索引可表示为
权利要求
1.一种用于并行FFT蝶形计算的数据存取方法,其特征在于,该方法包括以下步骤 步骤1,按照2B的并行粒度,将长度为N的初始FFT数据,分为2e个数据组,其中,G =Iog2N-B ;并将2G个数据组存放在多粒度并行存储器(300)或(30 中的2B个存储块(804) 的各个存储行(805)中,每个存储块(804)包含2G_B个数据组,占用2"个存储行(805);步骤2,将每个蝶形组(402)计算需要的2B-1个旋转因子依次存放在多粒度并行存储器(303)的存储行中;步骤3,读取多粒度并行存储器(300)或(30 中第i个存储块(804)的第j个存储行 (805)中存储的FFT蝶形计算所需的数据,读取粒度为2B,其中,i、j的初始值均为0 ;并以 2B的粒度从多粒度并行存储器(30 中按照存储行的顺序依次读取FFT蝶形计算所需的旋转因子;步骤4,根据读取出的旋转因子,按2B的粒度对读出的第j个存储行(80 所存储的数据进行并行蝶形计算;步骤5,按1的粒度将蝶形计算结果数据并行写回到多粒度并行存储器(300)或(302) 中,当步骤3中从存储器(300)读取数据时,步骤5将蝶形计算结果数据写回到存储器 (302)中,反之亦然;步骤6,判断当前存储行号j是否满足j < 2g-b,如果满足,则将j加1后返回到步骤3 ; 否则将j置0,跳到步骤7;步骤7,判断当前存储块号i是否满足i < 2B,如果满足,则将i加1后跳到步骤3,否则结束。
2.根据权利要求1所述的方法,其特征在于,所述步骤3中读取数据的地址由存储块(804)的索引值i以及存储行(80 的索引值j确定,第i个存储块(804)的第j个存储行(805)地址为:iX存储块大小+jX2B。
3.根据权利要求1所述的方法,其特征在于,所述步骤3从多粒度并行存储器(303)中读取旋转因子进一步包括以下步骤步骤3. 1,根据所述步骤3读取FFT蝶形计算所需的数据时读取的存储块(804)的序号 i和存储行(805)的序号j得到存储行总序号1 :1 = (i << G)+j ;步骤3. 2,根据所述存储行总序号1计算其对应的蝶形组002)的编号g :g = 1循环左移kB个比特位,其中,k为当前计算节的序号;步骤3. 3,根据蝶形组(40 的编号g利用蝶形表达式(500)计算本蝶形组(40 所需的旋转因子指数T ;步骤3. 4,根据旋转因子指数T计算出本蝶形组(402)所需的旋转因子e_(P/N)T。
4.根据权利要求3所述的方法,其特征在于,所述2e个数据组中,每个数据点的索引值go-!· · · gigobB-!· · · b^o分成两部分数据组索引值g = gw · · glgo和组内索引值b =^Β-ι· · · bibQO
5.根据权利要求4所述的方法,其特征在于,所述步骤3.3中的蝶形表达式(500)分为两部分第一部分(501)用于表达蝶形计算的两个输入数据索引值的比特位;第二部分 (505)用于表达该蝶形计算对应的旋转因子指数的比特位。
6.根据权利要求5所述的方法,其特征在于,所述第一部分(501)又分为两部分数据组索引值(502,503)和组内索引值(504),其中,数据组索引值(502)为数据组索引值g =gw · · glgo的低位部分g^!· · ·關。,其中,i为当前计算节的序号;数据组索引值(503)为数据组索引值去掉低位部分(502)剩下的高位部分gw · · giB,组内索引值(504)为B个比特位Iv1. ..b Iv1. . . hb。,其中,k为当前计算级的序号,表示蝶形计算的两个输入数据的组内索引值所相差的那一个比特位。
7.根据权利要求6所述的方法,其特征在于,当为0时代表该蝶形计算的输入A;当为1时代表该蝶形计算的输入B。
8.根据权利要求7所述的方法,其特征在于,所述第二部分(50 为第一部分(501)所描述的蝶形计算对应的旋转因子指数的二进制值。
9.根据权利要求1所述的方法,其特征在于,所述步骤4中的蝶形计算为原址运算,即基于输入数据A、B和旋转因子W的蝶形计算结果之一 A+BW在输出数据中的序号为A在输入数据中的序号,另一蝶形计算结果A-BW在输出数据中的序号为B在输入数据中的序号。
10.根据权利要求1所述的方法,其特征在于,所述步骤5中的数据写回地址为递增的存储行序号,第i个存储块(804)的第j个存储行(80 对应的序号为iXN/22B+j。
11.一种用于并行FFT计算的数据存取装置,其特征在于,该装置包括多粒度并行存储器(300、302),多粒度并行存储器(30 和蝶形计算模块(301),其中,多粒度并行存储器(300、302)构成乒乓结构,交替存放一个计算级G01)的输入数据或输出数据;多粒度并行存储器(303)用于存放计算级(401)所需的旋转因子;蝶形计算模块(301)用于根据所述多粒度并行存储器(30 中存放的旋转因子对于从多粒度并行存储器(300、302)中交替取出的待处理数据进行蝶形计算,并将计算得到的结果交替存放在多粒度并行存储器(300、302)中;多粒度并行存储器(300)与蝶形计算模块(301)之间的连线包括数据线(306)、地址线 (310)和存取粒度指示线(309);多粒度并行存储器(302)与蝶形计算模块(301)之间的连线包括数据线(305)、地址线 (312)和存取粒度指示线(311);多粒度并行存储器(303)与蝶形计算模块(301)之间的连线包括数据线(304)、地址线 (308)和存取粒度指示线(307);其中,如果从多粒度并行存储器(300)中读取数据进行蝶形计算,那么计算得到的结果数据写回到多粒度并行存储器(302)中,反之亦然。
全文摘要
本发明提供一种用于并行FFT计算的数据存取方法及装置。该方法将FFT计算数据和旋转因子存放在多粒度并行存储器中,并用统一的蝶形表达式对整个计算过程中的FFT数据和对应的旋转因子进行分组,每分组数据包含多个蝶形,可并行计算;同时根据该蝶形表达式,可方便生成各个分组的数据地址和旋转因子系数地址,利用不同的读写粒度,可从多粒度存储器中并行读写数据和对应的旋转因子。本发明还提供一种用于并行FFT计算的数据存取装置。利用本发明,数据的读写过程中不会产生存储器冲突,也不需要额外的步骤再对读写数据进行排序,同时,本发明可根据具体实现灵活指定并行粒度。
文档编号G06F17/14GK102411491SQ20111046058
公开日2012年4月11日 申请日期2011年12月31日 优先权日2011年12月31日
发明者尹磊祖, 林啸, 汪涛, 蒿杰, 薛晓军, 谢少林 申请人:中国科学院自动化研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1