CN102411491B - 一种用于并行fft计算的数据存取方法及装置 - Google Patents

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

Info

Publication number
CN102411491B
CN102411491B CN201110460582.8A CN201110460582A CN102411491B CN 102411491 B CN102411491 B CN 102411491B CN 201110460582 A CN201110460582 A CN 201110460582A CN 102411491 B CN102411491 B CN 102411491B
Authority
CN
China
Prior art keywords
data
butterfly
granularity
storage
parallel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201110460582.8A
Other languages
English (en)
Other versions
CN102411491A (zh
Inventor
谢少林
王东琳
林啸
蒿杰
薛晓军
汪涛
尹磊祖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Silang Technology Co ltd
Original Assignee
Institute of Automation of Chinese Academy of Science
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Automation of Chinese Academy of Science filed Critical Institute of Automation of Chinese Academy of Science
Priority to CN201110460582.8A priority Critical patent/CN102411491B/zh
Publication of CN102411491A publication Critical patent/CN102411491A/zh
Application granted granted Critical
Publication of CN102411491B publication Critical patent/CN102411491B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明提供一种用于并行FFT计算的数据存取方法及装置。该方法将FFT计算数据和旋转因子存放在多粒度并行存储器中,并用统一的蝶形表达式对整个计算过程中的FFT数据和对应的旋转因子进行分组,每分组数据包含多个蝶形,可并行计算;同时根据该蝶形表达式,可方便生成各个分组的数据地址和旋转因子系数地址,利用不同的读写粒度,可从多粒度存储器中并行读写数据和对应的旋转因子。本发明还提供一种用于并行FFT计算的数据存取装置。利用本发明,数据的读写过程中不会产生存储器冲突,也不需要额外的步骤再对读写数据进行排序,同时,本发明可根据具体实现灵活指定并行粒度。

Description

一种用于并行FFT计算的数据存取方法及装置
技术领域
本发明主要涉及数据存取领域,尤其是一种用于并行FFT计算的数据存取方法及装置。
背景技术
信号处理系统经常需要将信号内容在时域和频域进行转换,快速傅立叶变换算法(FFT)可进行时域和频域间的信号转换。相对于其它转换算法来说,快速傅立叶变换算法具有结构统一、计算量少的优点,因此广泛应用于信号处理系统中。
FFT算法输入N个数据,输出N个数据;一般称时域至频域的变换为正向变换,而频域至时域的变换变逆向变换。FFT算法有多种实现方式,但都由库利-图基算法演变而来。对于N个数据点,基2的库利-图基算法包括log2N个计算级。每个计算级输入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中S0计算级中的第1个数据必定与第0个数据构成一蝶形,并且第0个数据为蝶形输入的A,第1个数据为蝶形输入的B,而W的值为1。而S1计算级中的第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 FourierTransform With Pipeline Architecture)。这一类算法都没考虑多个处理单元同时访问存储器时的冲突问题,以及多个处理器如何交织多个短序列FFT结果;而实际应用中,存储器访问冲突以及处理器之间的同步和通信效率将严重影响FFT的计算效率。美国专利US 6,304,887B1(FFT-Based ParallelSystem For Array Processing With Low Latency)讨论了FFT算法中数据并行读写的问题,该专利将FFT数据存放在多个存储器中,利用多个数据缓冲区、多个选择器对数据进行排序,以保证每次读写的数据分布在不同的存储器中,实现并行读写。该专利需要专用的存储器、数据缓冲区和选择器,读写地址计算复杂,难以实现不同数据长度、不同读写粒度的并行FFT算法。
发明内容
为了解决上述问题,本发明提出一种用于并行FFT计算的数据存取方法及装置。
本发明所提出的一种用于并行FFT蝶形计算的数据存取方法,其特征在于,该方法包括以下步骤:
步骤1,按照2B的并行粒度,将长度为N的初始FFT数据,分为2G个数据组,其中,G=log2N-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<2G-B,如果满足,则将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=log2N-B;
■g:数据组索引值;
■b:组内索引值。
为了实现并行FFT的读写和计算,首先定义并行粒度2B,(B为正整数),并行粒度是指从存储器并行读取并且可独立进行蝶形计算的数据个数。如图4所示,图中假定FFT数据长度N=64,并行粒度为22。此时,64个数据点被分为16组数据组并行进行处理,每个数据组包括4个数据点,该组数据可独立进行两级基2的FFT计算,每级计算包括两个蝶形403。当并行粒度为2B时,每组数据可独立进行B级基2的FFT计算,每级计算包括(2B)/2个基2的蝶形。因此,蝶形计算模块读取一组数据后,可独立进行B×(2B)/2=B×2B-1个蝶形计算,然后将计算结果写回多粒度并行存储器400。
对于长度为N的FFT数据,每个数据点的索引地址需要log2N个比特位来表示。对该N点数据以2B的粒度进行分组后,每个数据点索引值分解成两部分:数据组索引值和组内索引值。对于N点数据,一共有N/2B个数据组,数据组索引值需要log2(N/2B)=log2N-B个比特位来表示,我们定义G=log2N-B;此时数据组索引值可表示为g=gG-1...g1g0。同时每个数据组包括2B个数据点,组内索引值需要B个比特位来表示,此时组内索引值可表示为b=bB-1...b1b0。在FFT计算开始之前,每个数据点的索引可表示为:
数据索引值=g×2B+b=(g<<B)+b=(gG-1...g1g0bB-1...b1b0)
对于组内2B个数据点,根据FFT计算的内在对应关系,可组成2B/2=2B-1个蝶形,因此,每个蝶形的索引值需要B-1个比特位来表示。在进行数据分组时,本发明规定蝶形计算的两个输入数据的组内索引值只相差一个比特位,我们以“b”表示这一比特位;并且规定当“b”所示比特位为0时,表示该蝶形的输入A;当“b”所示比特位为1时,表示该蝶形的输入B。此时一个蝶形的组内索引值可表示为:b=bB-2...b...b1b0。比特位“b”可以位于组内索引值二制值表示中的任意位置,不同的位置表示了不同计算级中每个蝶形的“蝶距”,即蝶形的两个输入数据的索引值差。比如当“b”位于组内索引值第k个比特位时,表示该级所有蝶形的蝶距为2k
蝶距=B索引-A索引=(bB-2...1bk-1...b1b0)-(bB-2...0bk-1...b1b0)=2k
图4描述了数据分组及并行FFT计算流程图,图中假定FFT数据长度N=64,并行粒度为22。在以2B的并行粒度进行数据分组后,每个数据组可独立进行B×(2B)/2个基2蝶形计算,我们将这B×2B-1个蝶形称为一蝶形组402,所有可并行的蝶形组构成一计算节401。每个计算节具有相同的蝶形结构,纵向由多个蝶形组402构成,横向由多个计算级404构成。整个FFT计算过程由多个计算节401组成,计算节从多粒度并行存储器400中读取数据,经过多个计算级404后将计算结果写回多粒度并行存储器400。
对于不同的计算级,数据组索引g与组内索引b的相对位置可能不同。本发明通过控制每个计算节中蝶形组的读写地址和读写粒度,使得第i个计算节的第k个计算级中的某个蝶形数据索引,以及与该蝶形数据对应的旋转因子指数可以统一表达为图5所示的蝶形表达式500。图5中,蝶形表达式500分成两部分,第一部分501用于表达某蝶形计算的两个输入数据索引值的比特位;第二部分505用于表达该蝶形计算对应的旋转因子指数的比特位。对于长度为N的FFT数据来说,一共需要N/2个旋转因子。每个旋转因子的值可以表示为e-(j2π/N)T(0≤T<N/2),因此,旋转因子的值完全可以由T来决定,称T为旋转因子的指数。输入数据索引值501仍可理解成两部分:数据组索引值502、503和组内索引值504。其中502为数据组索引值的低位部分,对于第i个计算节中的表达式,该部分一共有iB个比特位;503为数据组索引值去掉低位部分502剩下的高位部分。组内索引值504仍为B个比特位,对于位于第i个计算节,第k个计算级的蝶形,“b”标志位于组内索引值504的第k个比特位。
对于表达式501所描述的蝶形,它对应的旋转因子指数的二进制值即图5中的505,505为G+B-1个比特位,它由比特位507和比特位506两部分构成,其中,比特位507为蝶形索引值501中“b”右部分的k+iB个比特位,而比特位506则由G+(1-i)B-1-k个比特0组成。
图6示出了当N=64,B=2时,各计算节、计算级的蝶形表达式。
图1所示为按时间抽取的库利-图基流程图,在该流程图中,第i个计算级103中蝶形的蝶距为2i。为使各蝶形组402能独立计算,数据分组时必须从原数据序列中按蝶距抽取数据。本发明中,利用多粒度并行存储器可实现各种间距的数据抽取。
本发明提出的数据存储方法如图8所示,图中假定N=64,B=2,图中的数字编号为初始FFT数据的索引值,图中多粒度并行存储器801即图3中的多粒度并行存储器300,多粒度并行存储器802即图3中的多粒度并行存储器301。当并行粒度为2B时,多粒度并行存储器801内部可分成2B个存储块804,本发明将长度为N的FFT数据分成2B份,依次存放在2B个存储块804中,每个存储块中的一个存储行805对应一个蝶形组数据。
图9是一个计算节的数据存取方法流程图,本发明按照图9所示的步骤将初始FFT数据存储到多粒度并行存储器中,并依次读取多粒度并行存储器各个存储块804中的各个存储行805的数据,如图9所示,本发明所提出的用于并行FFT蝶形计算的数据存取方法包括以下步骤:
步骤1,按照2B的并行粒度,将长度为N的初始FFT数据,分为2G个数据组,其中,G=log2N-B;并将2G个数据组存放在多粒度并行存储器300或302中的2B个存储块804的各个存储行805中,每个存储块804包含2G-B个数据组,占用2G-B个存储行805;
对于长度为N的FFT数据,当并行粒度为2B时,一共有2G个数据组。
步骤2,将每个蝶形组402计算需要的2B-1个旋转因子依次存放在多粒度并行存储器303的存储行中;
第i个计算节401,第k个计算级404的蝶形403对应的旋转因子指数T=(bk-1...b1b0giB-1...g1g00...0),其中,0≤k≤B-1,如图5中的505所示。对于某一蝶形组402,507中的giB-1...g1g0是固定不变的,但bk-1...b1b0是变化的,因此,该蝶形组的第k个计算级需要2k个旋转因子,而蝶形组有B个计算级,所以整个蝶形组402需要个旋转因子。
当并行粒度为2B时,多粒度并行存储器303的读写位宽为2B,因此,可将蝶形组402各计算级404所需的旋转因子事先计算好,依次存放在多粒度并行存储器303的一个存储行中,计算时可以以2B的粒度并行读取该蝶形组旋转因子。图7示出了并行粒度为8时,蝶形组402各计算级404所需旋转因子在存储行700的存储方式,其中701为第1个计算级所需的旋转因子;702为第2个计算级所需的2个旋转因子;703为第3个计算级所需的4个旋转因子。
步骤3,读取多粒度并行存储器300中各个存储块804的各个存储行805中存储的FFT蝶形计算所需的数据,读取粒度为2B,其中,i、j的初始值均为0;并以2B的粒度从多粒度并行存储器303中按照存储行的顺序依次读取FFT蝶形计算所需的旋转因子;
读取蝶形计算所需的数据时,将读取粒度设置为2B,依次读取多粒度并行存储器300中各个存储块804的各个存储行805中存储的FFT蝶形计算所需的数据,即先读第0个存储块804中的第0个存储行805,再读取第0个存储块804中的第1个存储行805,直到读完该存储块804中的所有被数据组占用的存储行805;读完第0个存储块804的所有被数据组占用的存储行805后,再开始读取第1个存储块804的存储行805,直到读完所有存储块804中被数据组占用的所有存储行805。读取地址由存储块804的索引值i以及存储行805的索引值j确定,第i个存储块804的第j个存储行805地址为:i×存储块大小+j×2B
将步骤3读取FFT蝶形计算所需的数据时读取的存储行805按顺序排列,得到的存储行总序号为l=(i<<G)+j,其中i表示存储块804的序号,j表示存储行805的序号,i<<G表示将i左移G个比特位。该存储行总序号l和蝶形表达式500中蝶形组402的编号g的对应关系与计算节401的序号有关,该关系可描述如下:
Figure BDA0000128004050000091
以2B的粒度从多粒度并行存储器303中按照存储行的顺序依次读取FFT蝶形计算所需的旋转因子:
对于步骤3读取FFT蝶形计算所需的数据时的数据读取顺序,可以根据存储块804的序号i和存储行805的序号j得到存储行总序号l;根据该序号可以根据(公式1)得到存储行l对应的蝶形组402的编号g,根据该编号g可利用蝶形表达式500得出本蝶形组402所需的旋转因子指数505,进而可计算出本蝶形组402所需的旋转因子。
进行FFT计算前,将每个计算节401中的每个蝶形组402所需旋转因子组织成存储行700依次存放在存储器中,如图7所示。按步骤3所述读取蝶形计算所需的数据时,依次读取存储行700即可得到蝶形组402对应的旋转因子。
步骤4,根据读取出的旋转因子,按2B的粒度对读出的第j个存储行805所存储的数据进行并行蝶形计算;
蝶形计算时要求原址运算,即图2中计算结果A+BW在输出数据中的序号必须为A在输入数据中的序号,A-BW在输出数据中的序号必须为B在输入数据中的序号。
步骤5,按1的粒度将蝶形计算结果数据并行写回到多粒度并行存储器300或302中,当步骤3中从存储器300读取数据时,步骤5将蝶形计算结果数据写回到存储器302中,反之亦然;
写回地址即为递增的存储行序号,第i个存储块804的第j个存储行805对应的序号为:i×N/22B+j。
步骤6,判断当前存储行号j是否满足j<2G-B,如果满足,则将j加1后返回到步骤3;否则将j置0,跳到步骤7;
步骤7,判断当前存储块号i是否满足i<2B,如果满足,则将i加1后跳到步骤3,否则结束。
一个计算节401只进行一次读写。多粒度并行存储器801、802构成乒乓结构,当计算节401按图9中步骤3读取存储器801时,步骤5应当写回存储器802,反之亦然。当前一计算节401将结果写回存储器801时,下一计算节所需的数据应从存储器801中读取。
为实现本发明所描述的数据存取方法,本发明提出一种用于并行FFT计算的数据存取装置,如图3所示,该装置包括:多粒度并行存储器300、302,多粒度并行存储器303和蝶形计算模块301,其中,
多粒度并行存储器300、302构成乒乓结构,交替存放一个计算级401的输入数据或输出数据;
多粒度并行存储器303用于存放计算级401所需的旋转因子,其中,旋转因子的生成方法由(公式1确定;
蝶形计算模块301用于根据所述多粒度并行存储器303中存放的旋转因子对于从多粒度并行存储器300、302中交替取出的待处理数据进行蝶形计算,并将计算得到的结果交替存放在多粒度并行存储器300、302中;
多粒度并行存储器300与蝶形计算模块301之间的连线包括数据线306、地址线310和存取粒度指示线309;多粒度并行存储器302与蝶形计算模块301之间的连线包括数据线305、地址线312和存取粒度指示线311;多粒度并行存储器303与蝶形计算模块301之间的连线包括数据线304、地址线308和存取粒度指示线307。
假定某计算节从存储器300中读取数据,计算完成后写回存储器302,按照图9所示的存取方法,则每个计算节各个存储器对应的读写地址与读写粒度为:
地址线310:i×存储块大小+j×2B
存取粒度指示线309:2B
地址线312:i×N/22B+j;
存取粒度指示线311:1;
地址线308:i×N/2B+j×2B
存取粒度指示线307:2B
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种用于并行FFT蝶形计算的数据存取方法,其特征在于,该方法包括以下步骤:
步骤1,按照2B的并行粒度,将长度为N的初始FFT数据,分为2G个数据组,其中,G=log2N-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<2G-B,如果满足,则将j加1后返回到步骤3;否则将j置0,跳到步骤7;
步骤7,判断当前存储块号i是否满足i<2B,如果满足,则将i加1后跳到步骤3,否则结束。
2.根据权利要求1所述的方法,其特征在于,所述步骤3中读取数据的地址由存储块(804)的索引值i以及存储行(805)的索引值j确定,第i个存储块(804)的第j个存储行(805)地址为:i×存储块大小+j×2B
3.根据权利要求1所述的方法,其特征在于,所述步骤3从第三多粒度并行存储器(303)中读取旋转因子进一步包括以下步骤:
步骤3.1,根据所述步骤3读取FFT蝶形计算所需的数据时读取的存储块(804)的序号i和存储行(805)的序号j得到存储行总序号l:l=(i<<G)+j;
步骤3.2,根据所述存储行总序号l计算其对应的蝶形组(402)的编号g:g=l循环左移kB个比特位,其中,k为当前计算节的序号;
步骤3.3,根据蝶形组(402)的编号g利用蝶形表达式(500)计算本蝶形组(402)所需的旋转因子指数T;
步骤3.4,根据旋转因子指数T计算出本蝶形组(402)所需的旋转因子e-(j2π/N)T
4.根据权利要求3所述的方法,其特征在于,所述2G个数据组中,每个数据点的索引值gG-1...g1g0bB-1…b1b0分成两部分:数据组索引值g=gG-1...g1g0和组内索引值b=bB-1…b1b0
5.根据权利要求4所述的方法,其特征在于,所述步骤3.3中的蝶形表达式(500)分为两部分:第一部分(501)用于表达蝶形计算的两个输入数据索引值的比特位;第二部分(505)用于表达该蝶形计算对应的旋转因子指数的比特位。
6.根据权利要求5所述的方法,其特征在于,所述第一部分(501)又分为三部分:第一数据组索引值(502)、第二数据组索引值(503)和组内索引值(504),其中,第一数据组索引值(502)为数据组索引值g=gG-1...g1g0的低位部分giB-1…g1g0,其中,i为当前计算节的序号;第二数据组索引值(503)为数据组索引值g去掉低位部分剩下的高位部分gG-1…giB,组内索引值(504)为B个比特位bB-1…b?bk-1…b1b0,其中,k为当前计算级的序号,b?表示蝶形计算的两个输入数据的组内索引值所相差的那一个比特位。
7.根据权利要求6所述的方法,其特征在于,当b?为0时代表该蝶形计算的输入A;当b?为1时代表该蝶形计算的输入B。
8.根据权利要求7所述的方法,其特征在于,所述第二部分(505)为第一部分(501)所描述的蝶形计算对应的旋转因子指数的二进制值。
9.根据权利要求1所述的方法,其特征在于,所述步骤4中的蝶形计算为原址运算,即基于输入数据A、B和旋转因子W的蝶形计算结果之一A+BW在输出数据中的序号为A在输入数据中的序号,另一蝶形计算结果A-BW在输出数据中的序号为B在输入数据中的序号。
10.根据权利要求1所述的方法,其特征在于,所述步骤5中的数据写回地址为递增的存储行序号,第i个存储块(804)的第j个存储行(805)对应的序号为:i×N/22B+j。
11.一种用于并行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)中,反之亦然。
CN201110460582.8A 2011-12-31 2011-12-31 一种用于并行fft计算的数据存取方法及装置 Active CN102411491B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110460582.8A CN102411491B (zh) 2011-12-31 2011-12-31 一种用于并行fft计算的数据存取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110460582.8A CN102411491B (zh) 2011-12-31 2011-12-31 一种用于并行fft计算的数据存取方法及装置

Publications (2)

Publication Number Publication Date
CN102411491A CN102411491A (zh) 2012-04-11
CN102411491B true CN102411491B (zh) 2014-01-29

Family

ID=45913580

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110460582.8A Active CN102411491B (zh) 2011-12-31 2011-12-31 一种用于并行fft计算的数据存取方法及装置

Country Status (1)

Country Link
CN (1) CN102411491B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9317481B2 (en) 2011-12-31 2016-04-19 Institute Of Automation, Chinese Academy Of Sciences Data access method and device for parallel FFT computation
WO2016086342A1 (zh) * 2014-12-01 2016-06-09 华为技术有限公司 数据写入的方法、装置、设备和存储系统
CN113569190B (zh) * 2021-07-02 2024-06-04 星思连接(上海)半导体有限公司 一种快速傅立叶变换旋转因子计算系统和方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1504890A (zh) * 2002-12-03 2004-06-16 中国科学院计算技术研究所 数据全并行的fft处理器地址映射方法和系统
CN102063411A (zh) * 2009-11-17 2011-05-18 中国科学院微电子研究所 一种基于802.11n的FFT/IFFT处理器

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8126953B2 (en) * 2006-04-28 2012-02-28 Qualcomm Incorporated Multi-port mixed-radix FFT
TWI396096B (zh) * 2008-12-31 2013-05-11 Ind Tech Res Inst 快速傅利葉轉換處理器

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1504890A (zh) * 2002-12-03 2004-06-16 中国科学院计算技术研究所 数据全并行的fft处理器地址映射方法和系统
CN102063411A (zh) * 2009-11-17 2011-05-18 中国科学院微电子研究所 一种基于802.11n的FFT/IFFT处理器

Also Published As

Publication number Publication date
CN102411491A (zh) 2012-04-11

Similar Documents

Publication Publication Date Title
US9317481B2 (en) Data access method and device for parallel FFT computation
CN101290613B (zh) Fft处理器的数据存储系统和方法
CN101847986B (zh) 一种实现fft/ifft变换的电路及方法
CN102541774B (zh) 多粒度并行存储系统与存储器
CN102541749B (zh) 多粒度并行存储系统
CN103914483B (zh) 文件存储方法、装置及文件读取方法、装置
CN101083643A (zh) 一种低存储器开销的混合基fft处理器及其方法
CN109726441B (zh) 体和面混合gpu并行的计算电磁学dgtd方法
CN102411491B (zh) 一种用于并行fft计算的数据存取方法及装置
CN100592285C (zh) 一种信号处理方法、装置和系统
CN105227259B (zh) 一种m序列并行产生方法和装置
US20140089369A1 (en) Multi-granularity parallel fft computation device
CN106933777B (zh) 基于国产申威26010处理器的基2一维fft的高性能实现方法
CN103034621B (zh) 基2×k并行fft架构的地址映射方法及系统
CN101082906A (zh) 一种低存储器开销的固定基fft处理器及其方法
CN110019184A (zh) 一种压缩和解压缩有序整数数组的方法
US9268744B2 (en) Parallel bit reversal devices and methods
CN104050148A (zh) 快速傅里叶变换加速器
CN102411557B (zh) 多粒度并行fft计算装置
CN105373497A (zh) 基于dsp芯片的矩阵转置装置
CN108920097B (zh) 一种基于交织存储的三维数据处理方法
CN102541813A (zh) 一种多粒度并行fft蝶形计算的方法及相应的装置
CN109271344B (zh) 基于申威芯片架构并行文件读取的数据预处理方法
CN108062289A (zh) 快速傅里叶变换fft地址换序方法、信号处理方法及装置
CN103493039A (zh) 数据处理方法和相关装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent of invention or patent application
CB03 Change of inventor or designer information

Inventor after: Xie Shaolin

Inventor after: Wang Donglin

Inventor after: Lin Xiao

Inventor after: Artemisia

Inventor after: Xue Xiaojun

Inventor after: Wang Tao

Inventor after: Yin Leizu

Inventor before: Xie Shaolin

Inventor before: Lin Xiao

Inventor before: Artemisia

Inventor before: Xue Xiaojun

Inventor before: Wang Tao

Inventor before: Yin Leizu

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: XIE SHAOLIN LIN XIAO HAO JIE XUE XIAOJUN WANG TAO YIN LEIZU TO: XIE SHAOLIN WANG DONGLIN LIN XIAO HAO JIE XUE XIAOJUN WANG TAO YIN LEIZU

C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20171130

Address after: 102412 Beijing City, Fangshan District Yan Village Yan Fu Road No. 1 No. 11 building 4 layer 402

Patentee after: Beijing Si Lang science and Technology Co.,Ltd.

Address before: 100190 Zhongguancun East Road, Beijing, No. 95, No.

Patentee before: Institute of Automation, Chinese Academy of Sciences

TR01 Transfer of patent right
CP03 Change of name, title or address

Address after: 201306 building C, No. 888, Huanhu West 2nd Road, Lingang New District, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai

Patentee after: Shanghai Silang Technology Co.,Ltd.

Address before: 102412 room 402, 4th floor, building 11, No. 1, Yanfu Road, Yancun Town, Fangshan District, Beijing

Patentee before: Beijing Si Lang science and Technology Co.,Ltd.

CP03 Change of name, title or address