CN115859003A - 执行fft的方法、装置及设备 - Google Patents
执行fft的方法、装置及设备 Download PDFInfo
- Publication number
- CN115859003A CN115859003A CN202111617811.2A CN202111617811A CN115859003A CN 115859003 A CN115859003 A CN 115859003A CN 202111617811 A CN202111617811 A CN 202111617811A CN 115859003 A CN115859003 A CN 115859003A
- Authority
- CN
- China
- Prior art keywords
- calculation
- matrix
- dft
- twiddle factor
- stage
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computer Hardware Design (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
本申请实施例公开了一种执行FFT的方法、装置及设备,属于计算机技术领域。该方法包括:接收应用程序发送的快速傅里叶变换FFT的执行请求;获取需要执行FFT计算的第一输入数据;根据FFT计算的基数将FFT计算分解为多个计算阶段,每个计算阶段包括DFT计算;确定每个计算阶段中DFT计算对应的DFT计算矩阵;在执行每个计算阶段的计算时,根据对应计算阶段的输入数据确定与DFT计算矩阵进行矩阵运算的第一数据矩阵;通过对DFT计算矩阵和第一数据矩阵执行矩阵乘法计算实现DFT计算,并在多个计算阶段完成后,将计算结果返回给应用程序。采用本申请能够通过矩阵运算单元实现FFT中的计算,可以提高执行FFT的效率。
Description
本申请要求于2021年09月27日提交的申请号为202111132603.3、发明名称为“一种快速傅里叶变换的实现方法及装置”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及计算机技术领域,特别涉及一种执行FFT的方法、装置及设备。
背景技术
离散傅里叶变换(Discrete Fourier Transform,DFT)是计算机领域一种常用的技术,用于对离散的时域数据和离散的频域数据进行转换。一般在进行DFT时,会采用快速傅里叶变换(Fast Fourier Transform,FFT)技术,以提高处理效率。
在相关技术中,可以通过带有标量计算单元和/或矢量(向量)计算单元的片上系统(System on Chip,SOC)实现FFT,即可以通过标量运算和/或矢量运算实现FFT。但通过标量运算和/或矢量运算实现FFT的效率仍然不高。
发明内容
本申请实施例提供了一种执行FFT的方法、装置及设备,能够提高执行FFT的效率。所述技术方案如下:
第一方面,提供了一种执行FFT的方法,该方法包括:接收应用程序发送的快速傅里叶变换FFT的执行请求;获取FFT执行请求所指示的需要执行FFT计算的第一输入数据;根据FFT计算的基数将FFT计算分解为多个计算阶段,多个计算阶段中的第一计算阶段的输入数据为第一输入数据,第一计算阶段之后的第二计算阶段的输入数据为第二计算阶段的前一计算阶段的输出数据,多个计算阶段中的第三计算阶段包括DFT计算,其中第三计算阶段为该多个计算阶段中的任意一个计算阶段;确定第三计算阶段中DFT计算对应的DFT计算矩阵;在执行第三计算阶段的计算时,根据第三计算阶段的输入数据确定与DFT计算矩阵进行矩阵运算的第一数据矩阵;通过对DFT计算矩阵和第一数据矩阵执行矩阵乘法计算实现DFT计算,并在多个计算阶段完成后,将计算结果返回给应用程序。
本申请实施例所示的方案,处理器在接收到应用程序发送的FFT的执行请求后,可以根据FFT计算的基数将FFT计算分解为多个计算阶段,并可以确定每个计算阶段内的DFT计算的DFT计算矩阵。在执行DFT计算时,可以通过矩阵运算单元对第一数据矩阵和DFT计算矩阵执行矩阵乘法计算,进而实现DFT计算。这样,将各计算阶段中的DFT计算转化为矩阵运算,可以通过矩阵运算单元实现矩阵运算,如此,一次矩阵运算就可完成对第一数据矩阵中多个数据元素的DFT计算,能够提高执行各计算阶段中DFT计算的效率,进而可以提高执行FFT计算的效率。
在一种可能的实现方式中,确定第三计算阶段中DFT计算对应的DFT计算矩阵,包括:将第三计算阶段中DFT计算对应的DFT系数转化为DFT计算矩阵。
第三计算阶段是FFT计算中的任意一个计算阶段,每个计算阶段中的DFT计算由一组对输入数据进行复数加法和复数乘法的计算公式构成,DFT系数是指该组计算公式中各项输入数据的系数。可以将该组计算公式中复数的实部和虚部分开,并通过矩阵与向量相乘的形式对该组计算公式进行表示。其中得到的矩阵即为DFT计算矩阵。这样,通过将DFT系数转化为DFT计算矩阵,进而能够通过矩阵实现DFT计算,能够提高执行各计算阶段中DFT计算效率。
在一种可能的实现方式中,确定第三计算阶段中DFT计算对应的DFT计算矩阵,包括:根据第三计算阶段对应的基数,以及预设的基数与DFT计算矩阵的对应关系,确定第三计算阶段中DFT计算对应的DFT计算矩阵。
第三计算阶段是FFT计算中的任意一个计算阶段。技术人员可以预先设置每个基数与DFT计算矩阵的对应关系。这样在确定FFT计算中各计算阶段对应的基数后,可直接根据该对应关系确定各计算阶段中DFT计算对应的DFT计算矩阵,能够提高确定各计算阶段对应的DFT计算矩阵的效率,进而提高执行DFT计算的效率。
在一种可能的实现方式中,第三计算阶段还包括旋转因子计算;根据第三计算阶段的输入数据确定与DFT计算矩阵进行矩阵运算的第一数据矩阵,包括:根据第三计算阶段中旋转因子计算对应的旋转因子以及第三计算阶段的输入数据,执行旋转因子计算,得到DFT计算的输入数据;将DFT计算的输入数据转换为与DFT计算矩阵进行矩阵运算的第一数据矩阵。
在每个第三计算阶段中包括DFT计算和旋转因子计算。其中,当FFT计算是基于时域抽取方法实现时,每个计算阶段中的旋转因子计算在DFT计算之前,旋转因子计算的输入数据为对应计算阶段的输入数据,旋转因子计算的输出数据为DFT计算的输入数据。这样,对于DFT的输入数据可以通过对第三计算阶段的输入数据执行旋转因子计算后得到,在得到旋转因子计算的输出数据(也就是DFT计算的输入数据)后,可以将DFT计算的输入数据组成第一数据矩阵,进而可以通过对第一数据矩阵与DFT计算矩阵进行矩阵运算,以实现各计算阶段中的DFT计算,进而可以提高每个计算阶段的执行效率。
在一种可能的实现方式中,根据第三计算阶段中旋转因子计算对应的旋转因子以及第三计算阶段的输入数据,执行旋转因子计算,包括:如果在旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定旋转因子计算中各旋转因子对应的旋转因子矩阵;将第三计算阶段的输入数据转化为第二数据矩阵;通过对旋转因子矩阵和第二数据矩阵执行进行矩阵乘法计算实现该旋转因子计算,以得到第一数据矩阵。
在每个第三计算阶段中包括DFT计算和旋转因子计算。当FFT计算是基于时域抽取方法实现时,每个计算阶段中的旋转因子计算在DFT计算之前,旋转因子计算的输入数据为所属计算阶段的输入数据,旋转因子计算的输出数据为对应DFT计算的输入数据。如果确定旋转因子计算满足矩阵运算条件,则可以将第三计算阶段的输入数据转化为第二数据矩阵,并将旋转因子计算中的旋转因子转化为旋转因子矩阵,进而通过对第二数据矩阵和旋转因子矩阵进行矩阵运算,实现对旋转因子计算,进而得到DFT计算的输入数据,然后可以将DFT计算的输入数据转化为第一数据矩阵。如此,对于计算阶段中的DFT计算和旋转因子计算均可以通过矩阵运算实现,可以提高FFT计算中计算阶段的执行效率。
在一种可能的实现方式中,第三计算阶段还包括旋转因子计算,第一数据矩阵为根据第三计算阶段的输入数据转化的矩阵;通过对DFT计算矩阵和第一数据矩阵执行矩阵乘法计算实现DFT计算之后,还包括:如果在旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定该旋转因子计算中各旋转因子对应的旋转因子矩阵;对执行所述DFT计算得到的第三数据矩阵与旋转因子矩阵执行矩阵乘法计算实现所述旋转因子计算。
在每个第三计算阶段中包括DFT计算和旋转因子计算。当FFT计算是基于频域抽取方法实现时,每个计算阶段中的旋转因子计算在DFT计算之后,旋转因子计算的输入数据为DFT计算的输出数据,旋转因子计算的输出数据为所属计算阶段的输出数据。这样,得到DFT的输出数据之后,如果确定旋转因子计算满足矩阵运算条件,则可以将DFT计算的输出数据转换为第三数据矩阵,并将旋转因子计算中的旋转因子转化为旋转因子矩阵,进而通过对第三数据矩阵和旋转因子矩阵进行矩阵运算,实现旋转因子计算。如此,对于计算阶段中的DFT计算和旋转因子计算均可以通过矩阵运算实现,可以提高FFT计算中计算阶段的执行效率。
其中,对于上述矩阵运算条件,可以是旋转因子计算中的同一旋转因子参与计算的次数大于或等于预设的第一次数阈值。对于旋转因子计算,如果确定旋转因子计算中每个旋转因子参与计算的次数较多,也就说明旋转因子计算的输入数据中与每个旋转因子相乘数据元素有多个。因此可以将一个旋转因子对应的多个数据元素可以组成一个输入数据向量,多个旋转因子对应的输入数据向量可以组成数据矩阵,将多个旋转因子转化旋转因子矩阵,如此可以能够通过矩阵运算单元对数据矩阵和旋转因子矩阵执行矩阵乘法计算,以实现该旋转因子计算。对于第一次数阈值可以由技术人员预先设置。
在一种可能的实现方式中,第三计算阶段还包括旋转因子计算;通过对DFT计算矩阵和第一数据矩阵执行矩阵乘法计算实现DFT计算,包括:确定旋转因子计算中各旋转因子对应的旋转因子矩阵;如果确定旋转因子矩阵和DFT计算矩阵满足矩阵合并条件,则将旋转因子矩阵和DFT计算矩阵相乘,得到合并计算矩阵;对合并计算矩阵及第一数据矩阵进行矩阵乘法计算。
其中,矩阵合并条件包括旋转因子计算中同一旋转因子矩阵参与矩阵运算的次数大于预设的第二次数阈值。在计算阶段中DFT计算和旋转因子计算都可以转换为矩阵运算,如果DFT计算和旋转因子计算满足矩阵合并条件,则可以将DFT计算和旋转因子计算对应矩阵运算进行合并运算,即可以将旋转因子矩阵和DFT计算矩阵相乘,得到合并计算矩阵,对合并计算矩阵及第一数据矩阵进行矩阵乘法计算,以实现对计算阶段中的旋转因子计算和DFT计算。如此通过对矩阵运算的合并,能够减少矩阵运算的次数,提高执行DFT计算和旋转因子计算的效率。
在一种可能的实现方式中,第三计算阶段对应一个基数M,第三计算阶段的输入数据的个数为N,第三计算阶段按照基数M划分为N/M个蝶形结,每个蝶形结包括至少一个旋转因子,其中M<N,且M和N为自然数;确定旋转因子计算中各旋转因子对应的旋转因子矩阵,包括:将N/M个蝶形结的旋转因子转换为旋转因子矩阵。
对于每个计算阶段对应有唯一的基数,计算阶段的基数等计算阶段中每个蝶形结对应的输入数据中数据元素个数。所以对于一个计算阶段的输入数据中包括数据元素的个数为N,对应的基数为M,则该计算阶段种包括有N/M个蝶形结。对于每个蝶形结对应有至少一个旋转因子。在将旋转因子组成矩阵时,可以将N/M个蝶形结的旋转因子转换为至少一个旋转因子矩阵,进而可以通过对至少一个旋转因子矩阵进行矩阵运算实现旋转因子计算,能够提高执行旋转因子计算的效率。
在一种可能的实现方式中,将N/M个蝶形结的旋转因子转换为旋转因子矩阵,包括:根据N/M个蝶形结的旋转因子,确定至少一个旋转因子集合,其中,该至少一个旋转因子集合包括的旋转因子个数相同;对于每个旋转因子集合,基于旋转因子集合中的旋转因子构建旋转因子矩阵。
通过将旋转因子划分到至少一个旋转因子集合中,每个旋转因子集合中包括有相同数目的旋转因子。这样将每个集合中的旋转因子转化为旋转因子矩阵后,组成的旋转因子矩阵的尺寸相同。进一步,可以通过矩阵运算实现每个计算阶段中的旋转因子计算,能够提高执行旋转因子计算的效率。
在一种可能的实现方式中,基于旋转因子集合中的旋转因子构建旋转因子矩阵,包括:确定旋转因子集合中每个旋转因子对应的单元矩阵;将每个旋转因子对应的单元矩阵,按对角线排列,以构建旋转因子矩阵。
在旋转因子计算中包括不同的旋转因子与对应的输入数据中至少一个数据元素相乘。如果将旋转因子与数据元素中的实部和虚部分开,并将旋转因子与数据元素的计算通过矩阵与向量相乘的形式表示。其中得到矩阵为该旋转因子对应的旋转因子矩阵,一个旋转因子对应的旋转因子矩阵可称为单元矩阵。在将多个旋转因子组成旋转因子矩阵时,可以将多个旋转因子对应的单元矩阵对角线排列,并通过补零的方式构建旋转因子矩阵。这样得到一个旋转因子矩阵中包括多个旋转因子,如此通过对旋转因子矩阵与对应的数据矩阵进行一次矩阵运算,就可以完成对多个旋转因子与数据元素相乘的计算,能够提高执行旋转因子计算的效率。
在一种可能的实现方式中,根据第三计算阶段的输入数据确定与DFT计算矩阵进行矩阵运算的第一数据矩阵,包括:根据第三计算阶段的输入数据中的数据元素的排列顺序,确定由第三计算阶段的输入数据中的数据元素组成的至少一个第一尺寸的第一数据矩阵。
其中,为了实现矩阵运算,第一数据矩阵的第一尺寸等于与第一数据矩阵进行矩阵运算的DFT计算矩阵的尺寸。每个蝶形结中的DFT计算的输入数据可组成一个输入数据向量。可以按照输入数据中的数据元素的排列顺序,将各蝶形结中的DFT计算对应的输入数据向量组成至少一个第一数据矩阵。这样一个第一数据矩阵中包括多个蝶形结的DFT计算对应的输入数据向量,如此可以通过执行一次第一数据矩阵与DFT计算矩阵的矩阵运算,可以完成多个蝶形结中的DFT计算,能够提高执行DFT计算的效率。
在一种可能的实现方式中,根据第三计算阶段的输入数据中的数据元素的排列顺序,确定由第三计算阶段的输入数据中的数据元素组成的至少一个第一尺寸的第一数据矩阵,包括:根据该第三计算阶段的输入数据中的数据元素的排列顺序、以及矩阵压缩算法,确定由该第三计算阶段的输入数据中的数据元素组成的至少一个第一尺寸的第一数据矩阵。
在组成第一数据矩阵的过程中,可以通过矩阵压缩算法对第一数据矩阵进行压缩处理,能够减少得到的第一数据矩阵的个数,减少DFT计算中矩阵运算的次数,进而能提高执行DFT计算的效率。
在一种可能的实现方式中,将第三计算阶段的输入数据转化为第二数据矩阵,包括:对于每个旋转因子矩阵,根据第三计算阶段的输入数据中与旋转因子矩阵包括的旋转因子相对应的数据元素的排列顺序,确定与该旋转因子矩阵包括的旋转因子相对应的数据元素组成的至少一个第二尺寸的第二数据矩阵。
其中,为了实现矩阵运算,第二数据矩阵的第二尺寸等于与第二数据矩阵运算的旋转因子矩阵的尺寸。在组成第二数据矩阵时,根据旋转因子计算的输入数据中与旋转因子矩阵包括的旋转因子相乘的数据元素,在输入数据中的排列顺序,依次组成第二数据矩阵。这样在一个第二数据矩阵中包括多个旋转因子,如此可以通过执行依次第二数据矩阵与旋转因子矩阵的矩阵运算,可以完成多个旋转因子的计算,可以提高执行旋转因子计算的效率。
在一种可能的实现方式中,根据该第三计算阶段的输入数据中与该旋转因子矩阵包括的旋转因子相对应的数据元素的排列顺序,确定与旋转因子矩阵包括的旋转因子相对应的数据元素组成的至少一个第二尺寸的第二数据矩阵,包括:根据第三计算阶段的输入数据中与旋转因子矩阵包括的旋转因子相对应的数据元素的排列顺序、以及矩阵压缩算法,确定与旋转因子矩阵包括的旋转因子相对应的数据元素组成的至少一个第二尺寸的第二数据矩阵。
在组成第二数据矩阵的过程中,可以通过矩阵压缩算法对第二数据矩阵进行压缩处理,能够减少得到的第二数据矩阵的个数,减少旋转因子计算中矩阵运算的次数,进而能提高执行旋转因子计算的效率。
其中,对于上述的矩阵运算通过矩阵运算单元进行运算,矩阵运算单元实现矩阵运算的效率要高于通过处理器、向量运算单元等实现矩阵运算的效率,进而可以提高执行FFT计算的效率。
第二方面,提供了一种执行FFT的装置,该装置包括至少一个模块,该至少一个模块用于实现上述第一方面及第一方面可能的实现方式中所提供的执行FFT的方法。
第三方面,提供了一种执行FFT的计算机设备,该计算机设备包括处理器和矩阵运算单元,其中,该处理器,用于执行上述第一方面及第一方面可能的实现方式中所提供的方法;该矩阵运算单元,用于执行上述第一方面中的矩阵乘法计算。
第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序代码,当计算机程序代码被计算机设备执行时,使得计算机设备执行上述第一方面及第一方面可能的实现方式中所提供的执行FFT的方法。
第五方面,提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机设备上运行时,使得计算机设备执行上述第一方面及第一方面可能的实现方式中所提供的执行FFT的方法。
附图说明
图1是本申请实施例提供的一种计算机设备的结构示意图;
图2是本申请实施例提供的一种计算机设备的结构示意图;
图3是本申请实施例提供的一种矩阵运算单元进行矩阵运算的示意图;
图4是本申请实施例提供的一种8点FFT的蝶形图;
图5是本申请实施例提供的一种8点FFT的蝶形图;
图6是本申请实施例提供的一种执行FFT的方法的流程示意图;
图7是本申请实施例提供的一种执行FFT的方法的流程示意图;
图8是本申请实施例提供的一种执行FFT的方法的流程示意图;
图9是本申请实施例提供的一种执行FFT的方法的流程示意图;
图10是本申请实施例提供的一种执行FFT的方法的流程示意图;
图11是本申请实施例提供的一种执行FFT的装置结构示意图。
具体实施方式
本申请实施例提供了执行FFT的方法,该方法可以由计算机设备实现,计算机设备可以是嵌入式设备、通用计算机、服务器等。
如图1所示,在一种可能的情况中,该计算机设备的片上系统(System on Chip,SOC)100中包括处理器110、矩阵运算单元120以及存储器130。该计算机设备可运行涉及FFT计算的应用程序。例如该应用程序可以是应用在量子力学领域中的大尺度原子分子并行模拟工具(Large-scale Atomic/Molecular Massively Parallel Simulator,LAMMPS)或原子尺度材料模拟的计算机程序包(Vienna Ab-initio Simulation Package,VASP),或者可以是应用在流体力学领域中的开源的场运算和处理软件(Open source Field Operationand Manipulation,OpenFOAM)等。
当图1所示计算机设备运行涉及FFT计算的应用程序的过程中,如果应用程序中需要进行FFT计算,可以向处理器110发送FFT的执行请求。处理器110可以接收应用程序发送的FFT的执行请求,之后可以从存储器130中获取待进行FFT的输入数据,对待进行FFT的输入数据进行FFT计算处理,当处理过程中如果需要进行矩阵运算时,处理器110可以向矩阵运算单元120发送矩阵运算指令,其中,该处理器110可以是中央处理器(centralprocessing unit,CPU)。矩阵运算单元120在接收到处理器110发送的矩阵运算指令后,可以从存储器130中获取待进行矩阵运算的矩阵,并对获取的矩阵进行矩阵运算,然后可以将矩阵运算结果存储至存储器130。存储器130可用于存储待进行FFT的输入数据以及处理器110和矩阵运算单元120在执行FFT计算的过程中产生的数据,例如需要进行矩阵运算的矩阵以及矩阵运算结果等,其中,存储器130可以SOC上的寄存器、缓存等。
如图2所示,在另一种可能的情况中,该计算机设备中至少包括SOC 200和SOC300。在SOC 200中包括处理器210以及存储器220,在SOC 300中包括处理器310、存储器320以及矩阵运算单元320。
当图2所示计算机设备运行涉及FFT计算的应用程序的过程中,SOC 200中的处理器210可用于执行应用程序中涉及的除FFT计算之外的计算,存储器220可存储有应用程序中待进行各种计算的数据。如果应用程序中需要进行FFT计算,则可以向处理器210发送FFT的执行请求。SOC 200中的处理器210在接收应用程序到发送的FFT的执行请求后,可将该FFT的执行请求转发至SOC 300中的处理器310,并将待进行FFT的输入数据存储至存储器330中。SOC 300中的处理器310在接收到FFT执行指令后,可以从存储器330中获取待进行FFT的输入数据,对待进行FFT的输入数据执行FFT计算处理,当处理过程中如果需要进行矩阵运算时,可以向矩阵运算单元320发送矩阵运算指令。矩阵运算单元320在接收到处理器310发送的矩阵运算指令后,可以从存储器330中待进行矩阵运算的矩阵,并对获取的矩阵进行矩阵运算,然后可以将矩阵运算结果存储至存储器330。存储器330可用于存储待进行矩阵运算的矩阵、矩阵运算结果等。
其中,对于上述矩阵运算单元120或矩阵运算单元320,可以是基于外积架构实现的矩阵运算单元,也可以是基于内积架构实现的矩阵运算单元。矩阵运算单元120或矩阵运算单元320可支持至少两个矩阵的输入,对输入的两个矩阵进行矩阵运算。在一种可能实现方式中,上述矩阵运算单元120或矩阵运算单元320可支持三个矩阵的输入,可对输入的三个矩阵乘法和加法运算。如图3所示,输入的三个矩阵包括矩阵A、矩阵B和矩阵C,输出的矩阵为矩阵D,矩阵运算单元120可实现“矩阵D=矩阵A*矩阵B+矩阵C”的运算,其中,矩阵A的大小为N*K,矩阵B为K*M,矩阵C为N*M。如果只需要计算矩阵A和矩阵B的乘法时,可以将矩阵C设置为0矩阵,如果只需要计算矩阵A(或矩阵B)和矩阵C的加法时,可以将矩阵A(或矩阵B)设置为单位矩阵。对于上述SOC 100、SOC 200、SOC 300还可以集成有标量运算单元和向量运算单元等,以用于执行标量运算和向量运算等。
下面对本申请实施例的相关概念进行介绍:
离散傅里叶变换(Discrete Fourier Transform,DFT),是傅里叶变换在时域数据和频域数据上都呈现离散的形式,用于将离散的时域采样数据变换为离散的频域采样数据。在数据形式上,DFT的输入数据(离散的时域采样数据)和输出数据(离散的频域数据)为有限长度的复数序列,且两个复数序列的长度相等。
快速傅里叶变换(Fast Fourier Transform,FFT),是一种快速计算DFT或DFT逆变换的方法,相比于DFT,FFT的计算复杂度更低。
库利-图基算法(Cooley-Tukey)是一种常用的FFT算法,该算法基于分治策略,可将复数序列长度为N的DFT,分解为长度分别为N1和N2的DFT以及与旋转因子的复数乘法,其中,N=N1*N2。
基2-FFT(radix-2FFT)是一种较为经典的库利-图基算法。该算法可应用于长度为N=2L的复数序列(L为正整数)。如对于复数序列长度为8的DFT计算(8点DFT),可以分解先分解为两个4点DFT,然后再将两个4点DFT继续分解为两个2点DFT。
下面以基2-FFT为例,对库利-图基算法做进一步介绍:
根据离散傅里叶变换的定义可知,对于长度为N的复数序列x,进行DFT后可得到长度为N的复数序列X,对应的DFT计算公式(1)如下:
其中,k∈[0,N-1],n∈[0,N-1]。x(n)为复数序列x中的任一数据元素,X(k)为对复数序列x进行DFT后得到长度为N的复数序列X中任一数据元素。为旋转因子,为了提高计算DFT的计算效率,可以使用FFT对DFT的计算过程进行简化。当复数序列x的规模值(即复数序列x中包括数据元素的个数)N=2L时,可以将x(n)按n的奇偶性分为两组,得到如下公式(2):/>
利用旋转因子的周期性和对称性等,对公式(2)进行一些系列变形之后,可得到如下公式(3)和公式(4):
其中,k∈[0,N/2),X1(k)为对x(n)中n为偶数时,对应的N/2个数据元素进行N/2点DFT的结果,X2(k)为对x(n)中n为奇数时,对应的N/2个数据元素进行N/2点DFT的结果。由公式(3)和公式(4)可知,只需要得到两个N/2点DFT,即X1(k)和X2(k),再对两个N/2点DFT的结果进行复数乘法运算和加法运算,便可以得到N点DFT的结果。进一步,对于X1(k)和X2(k),也可以基于上述公式(1)-公式(4)的思想进行再次划分,通过计算2个N/4点DFT,得到N/2点DFT的计算结果。以此类推,对于N点DFT可以进行L次划分,其中N=2L。
下面以8点FFT为例,对基2-FFT算法进行说明,对于X(0)-X(7)的计算公式可分别如下:
其中,X(0)-X(7)是对输入数据x(0)-x(7)进行FFT之后得到的结果数据。X1(0)-X1(3)是由分别x(n)中n为偶数时,对应的N/2个数据元素进行N/2点DFT的结果,也就是x(0)、x(2)、x(4)、x(6)进行4点DFT得到的,X2(0)-X2(3)是由分别x(n)中n为奇数时,对应的N/2个数据元素进行N/2点DFT的结果,也就是x(1)、x(3)、x(5)、x(7)进行4点DFT得到的。据上述对X(0)-X(7)的计算公式,可得到根据两个4点DFT的计算结果计算8点FFT的计算流程图,如图4所示。
进一步,对于N/2点DFT的计算结果,还可以根据两个N/4点DFT的计算结果计算得到,也就是对于X1(0)-X1(3),可以通过两个2点DFT的计算得到,对于X2(0)-X2(3),也可以通过两个2点DFT的计算结构计算得到,对应的计算公式如下:
其中,X3(0)-X3(1)就是x(0)、x(2)、x(4)、x(6)对应的序列中,偶数位的数据元素进行2点DFT计算得到的计算结果,也就是x(0)和x(4)进行DFT计算得到的计算结果。
X4(0)-X4(1)就是x(0)、x(2)、x(4)、x(6)对应的序列中,奇数位的数据元素进行2点DFT计算得到的计算结果,也就是x(2)和x(6)进行DFT计算得到的计算结果。
X5(0)-X5(1)就是x(1)、x(3)、x(5)、x(7)对应的序列中,偶数位的数据元素进行2点DFT计算得到的计算结果,也就是x(1)和x(5)进行DFT计算得到的计算结果。
X6(0)-X6(1)就是x(1)、x(3)、x(5)、x(7)对应的序列中,奇数位的数据元素进行2点DFT计算得到的计算结果,也就是x(3)和x(7)进行DFT计算得到的计算结果。
对于两点DFT无法再进行化简,因此可以通过x(0)-x(7)分别计算X3(0)、X3(1)、X4(0)、X4(1)、X5(0)、X5(1)、X6(0)、X6(1),对应的计算公式如下:
这样,在实际计算8点FFT时,可以包括三个计算阶段,其中:
第一个计算阶段:根据x(0)-x(7)计算分别计算X3(0)、X3(1)、X4(0)、X4(1)、X5(0)、X5(1)、X6(0)、X6(1);
第二个计算阶段:根据X3(0)、X3(1)、X4(0)、X4(1)、X5(0)、X5(1)、X6(0)、X6(1)计算X1(0)-X1(3)以及X2(0)-X2(3);
第三个计算阶段:根据X1(0)-X1(3)以及X2(0)-X2(3)计算X(0)-X(7)。
对于8点FFT的计算流程,可参见图5所示的蝶形图,在8点FFT中包括三个计算阶段(stage),在每个计算阶段中包括四个蝶形结,每个蝶形结中包括旋转因子计算和DFT计算。其中,旋转因子计算是指将计算阶段的输入数据或者DFT计算的输出数据与对应的旋转因子进行相乘的计算。DFT计算是指对蝶形结中的DFT单元进行的计算,即对DFT单元的输入数据进行DFT计算。每个蝶形结中包括一个DFT单元,对于蝶形结和DFT单元,可参照图5中的第一个计算阶段。
另外,需要说明的是,进行FFT时存在两种抽取方法,包括时域抽取方法(Decimation-in-timeDIT)和频域抽取方法(Decimation-in-frequency,DFT)。时域抽取方法是指将进行DFT的输入数据进行划分,进而实现FFT计算的方法。频域抽取方法是指将DFT的输出数据(即结果数据)进行划分,进而实现FFT计算的方法。在基于时域抽取方法实现的FFT计算中,蝶形结中的旋转因子计算在DFT计算之前,在基于频域抽取方法实现的FFT计算中,蝶形结中的旋转因子计算在DFT计算之后。上述基2-FFT的介绍是基于时域抽取方法实现的,对于频域抽取对应的8点FFT,其具体此处不再进行详细介绍。
无论是基于时域抽取方法还是基于频域抽取方法实现的FFT计算,对于N点的FFT计算,假设可将N分解为N1、N2、...、Ni,则在N点的FFT的计算过程中可包括i个计算阶段,每个计算阶段都包括旋转因子的乘法计算和DFT计算。其中,N=N1*N2*...*Ni,N1、N2、...、Ni可称为基数。N1为第一个计算阶段对应的基数,N2为第二个计算阶段对应的基数,Ni为第i个计算阶段基数。对于i个计算阶段中的第j个计算阶段,第j个计算阶段中包括的蝶形结的个数为N/M,M为第i个计算阶段对应的基数。每个计算阶段中各旋转因子的值,可以根据输入数据中包括数据元素的个数N以及当前计算阶段的顺序计算得到,其中M<N,且M和N为自然数。
可见,对于任一FFT计算,都可以分为若干个计算阶段,对于每个计算阶段中可包括旋转因子计算和DFT计算。其中,在基于时域抽取方法实现的FFT计算中,在同一计算阶段中可以先执行旋转因子计算再执行DFT计算,旋转因子计算对应的计算结果为DFT计算输入数据;在基于频域抽取方法实现的FFT计算中,在同一计算阶段中可以先执行DFT计算再执行旋转因子计算,DFT计算对应的计算结果为旋转因子计算的输入数据。
下面对本申请实施例的执行原理进行介绍:
本申请提供的执行FFT的方法,可以FFT中各计算阶段的计算转换为矩阵计算,在软件上提供通过矩阵运算实现FFT计算的方法,在硬件上可通过包括矩阵运算单元的SOC实现FFT计算。
在上述对基2-FFT的介绍中可知,对于8点DFT的计算,可以将8点DFT先分为两个4点DFT的计算,再将两个4点DFT分别分为两个2点DFT,具体计算流程可参见图5,这样,对于8点DFT的计算可以分为三个计算阶段(stage),在每个计算阶段中包括旋转因子计算和DFT计算。
(1)将DFT计算转换为矩阵运算
如图5所示,在对8点DFT的计算可以分为3个计算阶段,在每个计算阶段中包括4个蝶形结,在每个蝶形结中包括一个DFT单元。其中,假任一个DFT单元的输入为x[0]、x[1],输出为X[0]、X[1],则对应的计算公式可如下公式(5)和公式(6)。
X[0]=x[0]+x[1] 公式(5)
X[1]=x[0]-x[1] 公式(6)
将上述公式(5)和公式(6)转换为矩阵乘向量的格式可如下公式(7):
由于在DFT中,输入数据和输出数据均为复数,即X[0]、X[1]、x[0]、x[1]均为复数,且在计算机设备中实数和复数是分开存储的,如果将X[0]、X[1]、x[0]、x[1]的实部和虚部分开计算,则上述矩阵乘向量的公式可写为如下公式(8):
其中,X[0].r表示X[0]的实部,X[0].i表示X[0]的虚部;X[1].r表示X[1]的实部,X[1].i表示X[1]的虚部;x[0].r表示x[0]的实部,x[0].i表示x[0]的虚部,x[1].r表示x[1]的实部,x[1].i表示x[1]的虚部。
在上述公式(8)中与输入数据组成的输入数据向量相乘的矩阵中不存在与输入数据相关的变量,即该矩阵不会随着输入数据的不同而改变。也就是说,对于任意计算阶段中的2点DFT计算,都可以将输入数据的实部和虚部分开组成输入数据向量,将该矩阵与输入数据向量的乘积确定为2点DFT计算的输出。其中,该矩阵可以称为DFT计算矩阵。
同理,对于计算阶段中的3点DFT计算、4点DFT计算、5点DFT计算等都对应有唯一的DFT计算矩阵,此处不再将推理过程一一列举。
又由于在FFT的同一计算阶段中包括的各DFT计算对应的DFT计算矩阵相同,如在8点的FFT中每个计算阶段中都包括4个2点DFT计算。所以可以将同一计算阶段中每个DFT计算对应的矩阵乘向量的计算合并为矩阵乘矩阵的计算。
依次类推,对于任一FFT过程中的任一计算阶段,其中的DFT计算都可以转化为矩阵运算。
(2)将旋转因子计算转换为矩阵运算
在FFT中的每个计算阶段中,还包括旋转因子的乘法运算。一次旋转因子的乘法运算可表示为y=W*x,其中,W为旋转因子,x为与旋转因子相乘的数据元素,y为计算结果。如果将x、y、W的实部和虚部分开,则y=W*x可表示为如下公式(10):
y.r+j*y.i=(W.r+j*W.i)*(x.r+j*x.i) 公式(10)
如果将上式转换为矩阵乘向量的形式,则可以表示为公式(11):
根据公式(11)可以看出对于任一旋转因子局可以通过一个2×2的矩阵进行表示,该矩阵可称为旋转因子矩阵,对于由一个旋转因子转化的矩阵还可以称为单元矩阵。其中,W.r表示旋转因子W的实部,W.i表示旋转因子W的虚部。x.r表示与旋转因子W进行乘法运算的数据元素的实部,x.i表示该数据元素的虚部。y.r表示进行旋转因子计算后得到的结果数据的实部,y.i表示该结果数据的虚部。如此对于任一旋转因子计算都可以转换为矩阵乘向量的运算。
假设在一个旋转因子计算中,有两个数据元素与同一个旋转因子W进行乘法运算,分别对应x1和x2,则根据公式(11)可以得到旋转因子W分别与y1和y2乘法运算可表示为如下公式(12)和公式(13)。
对于上述公式(12)和公式(13),可以合并为一个矩阵乘法计算,如下公式(14)。
再假设在同一计算阶段需要进行4次旋转因子的计算,且每次旋转因子的计算对应的旋转因子不同,则可以分别表示为:
对于上述4个矩阵乘向量的运算合并为1个矩阵乘向量的运算,如下公式(15):
其中,对于至少一个旋转因子对应的单元矩阵组成的矩阵,可称为旋转因子矩阵。
如果在同一计算阶段中,需要进行32次旋转因子计算,且在该计算阶段中一共有4个旋转因子、每个旋转因子参与8次旋转因子的计算。也就是会存在8次类似于公式(15)的矩阵乘向量的运算,且每次计算对应的旋转因子矩阵相同,因此对于该8次矩阵乘向量的计算可合并为一个矩阵乘矩阵的计算,如下公式(16):
其中,x1.r-x31.r为分别与4个旋转因子进行乘法运算的数据元素的实部,x1.i-x31.i为分别与4个旋转因子进行乘法运算的数据元素的虚部。
由上述推理可知,对于任一FFT过程中的任一计算阶段,如果在该任一计算阶段中,存在相同的旋转因子参与了多次旋转因子的乘法运算,则该计算阶段中的旋转因子的乘法可以转换为矩阵乘法计算。
下面开始对本申请实施例提供的执行FFT的方法进行介绍:
图6是本申请实施例提供的一种执行FFT的方法流程图,该方法实施例可在图1或图2提供的计算机设备中执行,参见图6,该方法包括:
步骤601、处理器接收应用程序发送的FFT的执行请求。
其中,应用程序可以是上述涉及FFT计算的应用程序。在图1或图2的计算机设备在运行应用程序的过程中,当应用程序中需要对数据进行FFT计算时,可以向计算机设备中的处理器发送FFT的执行请求。例如,应用程序可以是VASP,当VASP中需要求解波函数时,可以向处理器发送波函数求解请求,该波函数求解请求即为FFT的执行请求。其中,波函数是量子力学领域中常见的一种函数,波函数的求解可以通过对波函数的输入数据进行FFT计算,得到波函数的求解结果。
对于本申请提供的执行FFT的方法,技术人员可以将对应处理程序编写为FFT处理函数,添加到应用程序的数学库中,其中,在该数学库中可存储在执行对应应用程序的计算机设备中,包括有大量的处理函数,该处理函数可用于实现应用程序中涉及的各种数学计算。当应用程序中需要执行FFT计算时,可以向处理器发送FFT的执行请求,之后处理器可通过调用执行该FFT处理函数,以实现以下步骤的处理。
步骤602、处理器获取待进行FFT的第一输入数据。
其中,第一输入数据是FFT执行请求指示的需要执行FFT计算的输入数据。例如当FFT执行请求为波函数求解请求时,第一输入数据可以是波函数的初始数据。
处理器在接收到应用程序发送的FFT的执行请求后,可以根据FFT的执行请求,将存储在计算机设备的内存中待进行FFT的第一输入数据加载至SOC的存储器,例如该存储器可以是SOC的缓存,以用于进一步对第一输入数据进行处理。
步骤603,处理器确定执行FFT计算的各计算阶段。
其中,需要进行FFT计算的输入数据中数据元素的个数不同时,在对输入数据执行FFT计算时,包括的计算阶段的个数可能不同,每个计算阶段对应的基数也可能不同。因此在对输入数据执行FFT计算之前,可以根据输入数据中包括数据元素的个数,将FFT计算分解为多个计算阶段,并确定每个计算阶段对应的基数。
在一种可能的情况中,用户可以根据需要进行FFT计算的输入数据中包括数据元素的个数,在应用程序对设置对输入数据进行FFT计算时计算阶段的个数以及每个计算阶段对应的基数。这样在FFT的执行求请求中可以携带有用户设置的各计算阶段的基数,进一步处理器根据用户设置的各计算阶段的基数对FFT计算的各计算阶段进行划分。其中,对于设置的各计算阶段对应的基数的乘积等于输入数据中包括的数据元素的个数。
在另一种可能的情况中,在应用程序发送的FFT的执行请求中可以携带有输入数据中包括的数据元素的个数,或者处理器可以对输入数据中包括数据元素的个数进行计算。在处理器确定输入数据中包括的数据元素的个数后,可以根据库利-图基算法,确定对输入数据执行FFT计算的各计算阶段以及各计算阶段对应的基数。例如输入数据中数据元素的个数为8时,可以将8分解为2*2*2,则对输入数据进行FFT的过程中包括三个计算阶段,各计算阶段对应的基数均为2。例如输入数据中数据元素的个数为27时,可以将27分解为3*3*3,则对输入数据进行FFT的过程中包括三个计算阶段,各计算阶段对应的基数均为3。又例如输入数据的规模值为30时,可以将30分解为2*3*5,则对输入数据进行FFT的过程中包括三个计算阶段,各计算阶段对应的基数可分别为2、3、5。
步骤604,处理器根据每个计算阶段对应的基数确定每个计算阶段中DFT计算对应的DFT计算矩阵。
在一种可能的情况中,由于任一计算阶段中DFT计算对应的DFT计算矩阵与该计算阶段的基数相关。因此技术人员可以预先设定基数与DFT计算矩阵的对应关系,例如基数为2对应的DFT计算矩阵,基数为3对应的DFT计算矩阵,基数为4对应的DFT计算矩阵等等。在确定各计算阶段对应的基数后,对于DFT计算对应的DFT计算矩阵,可以确定DFT计算所属的计算阶段对应的基数,以及基数与DFT计算矩阵的对应关系,确定DFT计算对应的DFT计算矩阵。
在另一种可能的情况中,处理器可以根据DFT计算所属的计算阶段对应的基数,确定DFT系数,然后将DFT系数转化为DFT计算矩阵。FFT计算中每个计算阶段的DFT计算由一组对输入数据进行复数加法和复数乘法的计算公式构成。当DFT计算所属的计算阶段对应的基数确定后,该组计算公式即可确定,具体可参照上述执行原理介绍内容。DFT系数是指该组计算公式中各项输入数据的系数。可以将该组计算公式中复数的实部和虚部分开,并通过矩阵与向量相乘的形式对该组计算公式进行表示,其中得到的矩阵即为DFT计算矩阵。
步骤605,处理器确定计算阶段中DFT计算对应的第一数据矩阵。
对于FFT计算的各计算阶段中的第一个计算阶段的输入数据为待进行FFT的输入数据。对于除第一个计算阶段之外的其他计算阶段,每个计算阶段的输入数据为上一个计算阶段的输出数据。最后一个计算阶段的输出数据即为对待进行FFT的输入数据进行FFT之后的结果数据。在确定各计算阶段中DFT计算对应的DFT计算矩阵之后,可以按照各计算阶段的顺序,各计算阶段对应的输入数据,依次执行各计算阶段中的DFT计算和旋转因子计算。
如果在本方法流程中FFT计算是基于时域抽取方法的实现的,那么该计算阶段中的旋转因子计算在DFT计算之前,也就是对于任一计算阶段,可以先对该计算阶段的输入数据进行旋转因子计算,之后可以将旋转因子计算的计算结果作为DFT计算的输入数据,再对DFT计算的输入数据进行DFT计算,得到的DFT计算的计算结果即为该计算阶段的输出数据。
如果在本方法流程中FFT基于是基于频域抽取的实现的,那么该计算阶段中的旋转因子计算在DFT计算之后,也就是对于任一计算阶段,可以先对该计算阶段的输入数据进行DFT计算,之后可以将DFT计算的计算结果作为旋转因子计算的输入数据,再对旋转因子计算的输入数据进行旋转因子计算,得到的旋转因子计算的计算结果即为该计算阶段的输出数据。在一种可能的情况中,在旋转因子计算中旋转因子的值可能全为1,当旋转因子计算中旋转因子的值全为1时,可以不对该旋转因子计算进行计算,可直接将该旋转因子计算对应的输入数据作为该旋转因子计算对应的输出数据。
在本步骤中在进行DFT计算时,处理器可以将DFT计算对应的输入数据转化为至少一个第一数据矩阵,其具体处理此处先不进行介绍。另外,在本方法流程中还可以进行旋转因子计算,可以将根据矢量运算单元或标量运算单元实现对旋转因子与旋转因子对应的输入数据中的数据元素进行乘法运算,得到旋转因子计算的计算结果,其中根据矢量运算单元或标量运算单元实现对旋转因子的计算属于现有技术,此处不再详细介绍。在本方法流程中进行旋转因子计算时,还可以将旋转因子计算转化为矩阵计算,通过矩阵运算单元实现旋转因子计算。对于通过矩阵运算单元实现旋转因子计算的处理此处先不进行介绍。
步骤606,处理器向矩阵运算单元发送矩阵运算指令。
处理器将DFT计算对应的输入数据转化为至少一个第一数据矩阵后,可以向矩阵运算单元发送矩阵运算指令,并可以依次将第一数据矩阵以及DFT计算矩阵存储至矩阵运算单元对应寄存器中,以使矩阵运算单元对第一数据矩阵以及DFT计算矩阵进行矩阵乘法计算。
步骤607,矩阵运算单元根据矩阵运算指令执行矩阵运算。
矩阵运算单元在接收到矩阵运算指令之后,可以从寄存器中依次获取第一数据矩阵以及DFT计算矩阵,并对第一数据矩阵以及DFT计算矩阵进行矩阵乘法计算,得到DFT计算的计算结果。
步骤608,矩阵运算向处理器发送矩阵运算完成通知。
矩阵运算单元在矩阵运算之后,可以将计算结果可以存储在矩阵运算单元对应的寄存器中,并向处理器发送矩阵运算完成通知。
步骤609,处理器确定执行各计算阶段之后,将执行FFT的计算结果返回给应用程序。
处理器在接收到矩阵运算单元发送的矩阵运算完成指令之后,可以从矩阵运算单元对应的寄存器中获取DFT计算对应的结果矩阵,之后可以该结果矩阵中包括的各数据元素即为执行DFT计算的输出数据。如果确定已经完成了FFT计算的所有计算阶段,可以将FFT计算结果返回给应用程序。例如应用程序可以是VASP,对应的计算结果为对波函数的初始数据进行FFT计算的结果。
如果确定当前还未完成FFT计算的所有计算阶段处理,可以继续根据获取的DFT计算的计算结果,执行当前计算阶段的旋转因子计算,或者下一个计算阶段的计算。如图7所示,图7是本申请处理器与矩阵运算单元执行矩阵运算的流程示意图。在执行矩阵运算的过程中,处理器可以从内存中获取需要待进行矩阵运算的输入数据,如待进行FFT计算的第一输入数据,将输入数据转化成数据矩阵,之后可向矩阵运算单元对应的寄存器发送矩阵LOAD(载入)指令,以将内存中的数据矩阵和计算矩阵(如DFT计算矩阵)存在寄存器中。例如图7中的矩阵A和矩阵B为待计算的两个矩阵。由于矩阵运算单元实现的矩阵计算为矩阵D=矩阵A*矩阵B+矩阵C。所以如果需要实现矩阵A*矩阵B,则可以将矩阵C设置为0矩阵。然后可以向矩阵运算单元发送矩阵运算指令,以使矩阵运算单元从寄存器中加载矩阵A、B、C,进而实现矩阵D=矩阵A*矩阵B+矩阵C运算。矩阵运算单元可以将得到的计算结果(即矩阵D),存在寄存器中,并向处理器发送矩阵运算完成通知。之后处理器可以向寄存器发送矩阵STORE(存储)指令,进而将得到的矩阵D存储在内存中。CPU可从内存中加载矩阵D中的数据元素,进而组成下一个矩阵运算的数据矩阵,再次控制矩阵运算单元执行矩阵运算,直到处理器确定完成对FFT计算的各计算阶段的处理。在处理器确定完成对FFT计算的各计算阶段的处理后,可以将执行FFT计算结果返回给应用程序。
本申请实施例,在处理器执行FFT计算的过程中,可以将各计算阶段中的DFT计算转化为矩阵运算,并通过矩阵运算单元实现矩阵运算,。这样一次矩阵运算就可完成对第一数据矩阵中多个数据元素的DFT计算,能够提高执行各计算阶段中DFT计算的效率,进而可以提高执行FFT计算的效率。
在一种可能的实现方式中,上述步骤605中,处理器将DFT计算的输入数据转化为第一数据矩阵的处理如下:根据DFT计算对应的输入数据中数据元素的排列顺序,确定DFT计算对应的输入数据组成的至少一个第一尺寸的第一数据矩阵。
其中,第一数据矩阵是指与DFT计算矩阵进行矩阵运算的数据矩阵,为了实现矩阵运算,组成的第一数据矩阵的第一尺寸可与DFT计算矩阵的尺寸相同。对于DFT计算的输入数据,可以由前一计算阶段的输出数据或同一计算阶段的旋转因子计算的输出数据进行排序后得到。在排序后得到的DFT计算的输入数据中各数据元素可以按照DFT计算中各DFT单元的顺序进行排列。例如一个DFT单元对应N个数据元素的输入,则在DFT计算的输入数据中前N个数据元素为第一个DFT单元对应的数据元素,第N+1到第2N个元素对应的为第二个DFT单元对应的数据元素,第mN+1到第(m+1)N个数据元素为第m+1个DFT单元对应的数据元素。其中对前一计算阶段的输出数据或同一计算阶段的旋转因子计算的输出数据进行排序属于现有技术,可通过FFT算法实现,此处不再进行详细介绍。
DFT计算矩阵的尺寸与所属计算阶段对应的基数相关,当基数为N时,对应的每个DFT单元的输入数据中的数据元素为N,DFT计算矩阵的尺寸为2N×2N。将DFT单元的输入数据中的数据元素的实部虚部分开,可以得到一个数据元素个数为2N的输入数据向量。因此可以将DFT计算中每2N个DFT单元对应的输入数据依次组成2N×2N的第一数据矩阵。如果存在DFT单元的个数p小于2N的情况,则可以将p个DFT单元的输入数据向量,组成2N×p的矩阵,然后通过补零,得到2N×2N的第一数据矩阵。
以256点FFT举例,在256点FFT可包括四个计算阶段,每个计算阶段对应的基数为4,即256=4*4*4*4。对于四个计算阶段中的任一DFT计算中,包括64个4点DFT单元。4点DFT单元对应的DFT计算矩阵为8×8的矩阵,4点DFT单元的输入为4个数据元素,将4个数据元素的实部和虚部分开后,可组成具有8个数据元素的向量。也就是说,对于每个4点DFT单元的计算,可转换为8×8的DFT计算矩阵与包括8个数据元素的输入数据向量相乘。由于64个4点DFT单元对应的DFT计算矩阵相同,因此可以将64个DFT单元分别对应的输入数据向量依次合并为8个第一数据矩阵。
这样将DFT计算对应的输入数据转换为第一数据矩阵,再通过矩阵运算单元分别对各第一数据矩阵与对应的DFT计算矩阵进行矩阵乘法计算,进而可以提高执行各计算阶段中DFT计算的效率。
在另一种可能的情况中,对与上述步骤604中,处理器确定每个计算阶段中DFT计算对应的DFT计算矩阵的处理还可以如下:处理器可以根据矩阵运算单元单次执行矩阵运算支持的最大矩阵尺寸,对DFT计算进行化简。例如当矩阵运算单元单次执行矩阵运算支持的最大矩阵尺寸为2N×2N,且当计算阶段中的DFT计算为N+1点DFT计算时,则可以将N+1点的DFT计算化简为N点的DFT计算。例如当DFT单元为5点DFT,且矩阵运算单元单次执行矩阵运算支持的最大矩阵尺寸为8×8时,可以根据威诺格拉德快速傅里叶算法,将5点DFT转化为4点DFT进行计算。如果直接计算5点DFT,则矩阵运算单元只能将5点DFT对应的10×10的DFT计算矩阵和数据矩阵拆分为多个尺寸更小的矩阵进行计算,而如果将5点DFT化简为4点DFT进行计算,矩阵运算单元只需要计算一次尺寸为8×8的矩阵对应的矩阵运算,便可以得到5点DFT对应的结果数据。对于化简后的5点DFT对应的DFT计算矩阵可以由技术人员预先存储。该DFT计算矩阵对应的数据矩阵可根据诺格拉德快速傅里叶算法得到。
本申请实施例,在处理器执行FFT计算的过程中,可以将FFT计算的各计算阶段中的DFT计算转化为矩阵运算,并通过矩阵运算单元进行相应的矩阵运算,能够提高执行FFT计算的计算效率。
图8是将DFT计算的输入数据转化为第一数据矩阵的方法流程图,在该方法中加入了矩阵压缩算法,通过处理器对由输入数据组成的矩阵进行压缩处理,能够减少组成的第一数据矩阵的个数,进而减少矩阵运算的次数,相应的处理如下:
步骤801、获取DFT计算的输入数据。
步骤802、根据DFT计算的输入数据中数据元素的排列顺序,在DFT计算的输入数据中选取第一数目个数据元素,组成第一尺寸的第一矩阵,并确定第一矩阵的稀疏度。
其中,第一数目为第一尺寸的第一数据矩阵中包括的数据元素的个数的二分之一。
在获取第一数目个数据元素后,可以将第一数目个数据元素的实部和虚部组成第一矩阵。在组成第一矩阵后,可以对第一矩阵的稀疏度进行检测。对于稀疏度可以通过确定第一矩阵中值为0的数据元素分别在各行数据元素中的占比,将各行对应的最低占比确定为第一矩阵的稀疏度。
步骤803、如果第一矩阵的稀疏度小于预设的稀疏度阈值,则将第一矩阵确定为第一数据矩阵。
其中,对于稀疏度阈值可以技术人员预先设置,例如该稀疏度阈值可以是50%或75%等。如果确定第一矩阵的稀疏度小于预设的稀疏度阈值,则可以不对第一矩阵进行矩阵压缩处理,直接将第一矩阵确定为第一数据矩阵。
步骤804、如果第一矩阵的稀疏度大于或等于稀疏度阈值,则将第一矩阵确定为中间矩阵。
步骤805、对中间矩阵进行压缩处理,得到第二矩阵。
如果第一矩阵的稀疏度大于或等于预设的稀疏度阈值,则将可以第一矩阵确定为中间矩阵,对中间矩阵进行压缩处理。其中,压缩处理是指去除中间矩阵中包括的部分值为0的数据元素。例如对于稀疏性指示值为50%时,则可以去除第一矩阵中50%的0值,如果第一矩阵的尺寸为8×8,则按行进行压缩后,得到的压缩处理后的第二矩阵的尺寸为4×8。
步骤806、根据DFT计算的输入数据中的数据元素的排列顺序,在DFT计算的输入数据中未被选取的数据元素中,选取第二数目个数据元素,补充到第二矩阵中,得到目标尺寸的第三矩阵。
其中,第二数目等于第一数据矩阵对应的数据元素个数与第二矩阵对应的数据元素个数的差值的二分之一。在得到压缩处理后的第二矩阵后,可以将再次向第二矩阵中添加数据元素。例如,压缩处理后的第二矩阵的尺寸为5×8,包括的数据元素个数为40,第一数据矩阵的尺寸为8×8,包括的数据元素的个数为64,则可以确定第二数目为12。
在将第二数目个数据元素的实部和虚部补充到第二矩阵后,可得到目标尺寸的第三矩阵。
需要说明的是,如果DFT计算的输入数据中未被选取的数据元素的个数不够第二数目,则可以将未被选取的数据元素全部补充到第二矩阵中,并对第二矩阵进行补零处理得到尺寸与第一数据矩阵相同的第四矩阵,并将第四矩阵确定为第一数据矩阵。
步骤807、如果第三矩阵的稀疏度大于或等于稀疏度阈值,则将第三矩阵确定为中间矩阵,并转至步骤805的处理。
在组成第三矩阵之后,可以对第三矩阵的稀疏度进行检测,如果第三矩阵的稀疏度仍然大于或等于稀疏度阈值,则说明第三矩阵还可以继续压缩,因此可以再次将第三矩阵再次作为中间矩阵,并转至步骤805的处理,再次对中间矩阵进行压缩处理。
步骤808、如果第三矩阵的稀疏度小于稀疏度阈值,则将第三矩阵确定为第一数据矩阵。
如果第三矩阵的稀疏度小于稀疏度阈值,则将可以第三矩阵确定为第一数据矩阵。
需要说明的是,在执行步骤801-步骤808的过程中,每当确定一个第一数据矩阵后,如果DFT计算中仍存在未组成第一数据矩阵的数据元素,则可以再次按照顺序从未被选取的数据元素中选取第一数目个数据元素,组成第一尺寸的第一矩阵,并转至执行步骤803的处理。如果DFT计算的输入数据中未被选取的数据元素的个数不够第一数目,则可以通过补零的方式将剩余的未被选取的数据元素组成与第一数据矩阵相同的第五矩阵,然后将第五矩阵确定为第一数据矩阵。
另外,对于进行压缩处理后得到的第一数据矩阵,还可以生成对应该第一数据矩阵对应的位置矩阵。在位置矩阵中包括对应的第一数据矩阵中的每个数据元素在未压缩之前的矩阵中位置信息。在对压缩处理后得到的第一数据矩阵与对应的DFT计算矩阵进行矩阵运算时,可以根据第一数据矩阵对应的位置矩阵,确定将第一数据矩阵与对应的DFT计算矩阵进行矩阵乘法计算后得到的输出数据矩阵,然后根据输出数据矩阵得到DFT计算结果数据。
这样在DFT计算对应的输入数据中包括值为0数据元素较多时,可以通过矩阵压缩处理,降低第一数据矩阵的稀疏度,减少第一数据矩阵的个数,进而减少在执行DFT计算时进行矩阵运算的次数,可以提高执行DFT计算的效率。
图9是本申请实施例提供的通过矩阵运算实现旋转因子计算的方法流程图,参见图9,该方法包括:
步骤901、处理器确定满足矩阵运算的条件的旋转因子计算。
由上述执行原理的内容可知,当旋转因子计算中的旋转因子参与旋转因子计算的次数较多时,可以将旋转因子计算转化为矩阵运算,因此在执行各计算阶段之前,可以确定每个计算阶段的旋转因子计算中,旋转因子参与旋转因子计算的次数。如果在旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则说明旋转因子计算满足矩阵运算的条件。
例如,在基于频域抽取实现的256点FFT的第二个计算阶段中,存在4个64点DFT。在每个64点DFT中,有64个不同的旋转因子参与旋转因子的乘法运算。但由于存在4个64点DFT,这样对于一个旋转因子就可以参与4次旋转因子的乘法运算。如果设置第一次数阈值设置为4,则可以确定该第二个计算阶段的旋转因子计算满足矩阵运算条件。
步骤902、处理器确定满足矩阵运算的条件的旋转因子计算对应的旋转因子矩阵。
在一种可实现的方式中,由于当输入数据中数据元素的个数确定之后,对应的FFT计算中的计算阶段的个数、各计算阶段对应的基数、旋转因子都随之确定。因此,对于实际处理中,可以预先存储对应数据元素的个数与各计算阶段的旋转因子矩阵的对应关系。在实施中,当确定输入数据中数据元素的个数后,可以根据上述对应关系,确定在该FFT计算中,每个计算阶段的旋转因子计算对应的旋转因子矩阵。
在另一种可实现的方式中,在确定满足矩阵运算的条件的旋转因子计算后,可以将满足矩阵运算的条件的旋转因子计算中的旋转因子转化为旋转因子矩阵。将旋转因子转化为旋转因子矩阵之前,可以先根据旋转因子矩阵的尺寸,确定每个旋转因子矩阵包括旋转因子的个数。
其中,对于旋转因子矩阵的尺寸可以由技术人员预先设定,例如可以将旋转因子矩阵的尺寸设置为同一计算阶段对应的DFT计算矩阵的尺寸。或者,为了提高对旋转因子矩阵与对应数据矩阵执行矩阵运算的效率,旋转因子矩阵的尺寸可以设置为矩阵运算单元单次执行矩阵运算支持的最大矩阵的尺寸。
由上述执行原理的内容可知,一个旋转因子可转换为一个2×2的旋转因子矩阵,该旋转因子矩阵也可称为单元矩阵。当由多个旋转因子转换旋转因子矩阵时,可以将多个旋转因子分别对应的单元矩阵按照斜对角线进行排列,并通过补零组成旋转因子矩阵。这样N个旋转因子可转换为尺寸为2N×2N的旋转因子矩阵。
如此,可以根据设定的旋转因子矩阵的尺寸,确定组成每个旋转因子矩阵的旋转因子的目标数目。这样将旋转因子计算中包括的多个旋转因子,划分为至少一个旋转因子集合,每个旋转因子集合中包括的目标数目个旋转因子。然后可以将每个旋转因子集合中的旋转因子转化为对应的单元矩阵,再将多个旋转因子分别对应的单元矩阵按照斜对角线进行排列,并通过补零组成旋转因子矩阵。
步骤903、在通过矩阵运算执行旋转因子计算时,将旋转因子计算的输入数据转化为数据矩阵。
其中,当FFT算法基于时域抽取方法实现时,旋转因子计算对应的输入数据为旋转因子计算所属的计算阶段的输入数据,在此情况下,将旋转因子计算对应的输入数据转化为的数据矩阵可称为第二数据矩阵。当FFT算法基于频域抽取实现时,旋转因子计算对应的输入数据为同一计算阶段的中DFT计算的输出数据,在此情况下,将旋转因子计算对应的输入数据转化为的数据矩阵可称为第三数据矩阵。为实现第二数据矩阵或第三数据矩阵与旋转因子矩阵的矩阵运算,第二数据矩阵或第三数据矩阵的第二尺寸等于旋转因子矩阵的尺寸,也就是第二数据矩阵或第三数据矩阵的尺寸与对应的旋转因子矩阵的尺寸相同。
对于将旋转因子计算的输入数据转化为第二数据矩阵或第三数据矩阵的处理,可以从旋转因子计算的输入数据中获取与组成旋转因子矩阵的旋转因子进行乘法运算的数据元素,根据获取的数据元素在输入数据中的顺序,依次构建第二数据矩阵或第三数据矩阵。
下面以将旋转因子计算对应的输入数据转化为第二数据矩阵为例进行说明,将旋转因子计算对应的输入数据转化为第三数据矩阵的处理与之相同,不再赘述。
一个旋转因子矩阵是由一个或多个旋转因子的单元矩阵构成。如果旋转因子计算中的各旋转因子矩阵是由一个旋转因子对应的单元矩阵构成,则旋转因子矩阵对应的第二数据矩阵可分别由与该旋转因子进行相乘的数据元素构成。由于旋转因子矩阵的尺寸为2×2,因此可以通过两个数据元素的实部和虚部组成与该旋转因子矩阵的尺寸相同的第二数据矩阵。所以对于每个旋转因子矩阵可以获取与构成该旋转因子矩阵的旋转因子进行乘法运算的数据元素,根据获取的数据元素在输入数据中的顺序,两两构成第二数据矩阵。
如果旋转因子矩阵计算中的各旋转因子矩阵是由多个旋转因子对应的单元矩阵构成,则旋转因子矩阵对应的第二数据矩阵可分别由构成该旋转因子矩阵的旋转因子进行乘法运算的数据元素构成。假设旋转因子矩阵由N个旋转因子组成,则组成的旋转因子矩阵的尺寸为2N×2N。对于组成旋转因子矩阵的任一旋转因子,可以获取与该旋转因子进行乘法运算的2N数据元素,进而通过N个旋转因对应的2N数据元素的实部和虚部,组成尺寸为2N×2N第二数据矩阵。
所以对于每个旋转因子矩阵,可以分别获取与构成该旋转因子矩阵的旋转因子进行乘法运算的数据元素。根据每个旋转因子对应的单元矩阵在旋转因子矩阵中的位置,确定与旋转因子进行乘法运算的2N个数据元素的实部和虚部在组成的第二数据矩阵中的位置。例如旋转因子的单元矩阵在旋转因子矩阵中的前两行,则该旋转因子对应的数据元素的实部和虚部分别在第二数据矩阵中的第一行和第二行。每个输入数据的实部和虚部位于同一列,同一行的数据元素的实部或虚部可按照数据元素在输入数据中的顺序进行排列。如果旋转因子对应的数据元素的个数不够2N个,则可以通过补零的方式,将旋转因子矩阵中旋转因子对应的数据元素组成尺寸为2N×2N第二数据矩阵。
例如,对于旋转因子W0、W1、W2、W3分别对应的单元矩阵组成如下旋转因子矩阵:
其中,W0.r为W0的实部、W0.i为W0的虚部,W1.r为W1的实部、W1.i为W1的虚部,W2.r为W2的实部、W2.i为W2的虚部,W3.r为W3的实部、W3.i为W3的虚部。
假设与旋转因子W0、W1、W2、W3中每个旋转因子进行乘法运算的数据元素包括8个,则可以将每个旋转因子的实部和虚部分开,并根据旋转因子在旋转因子矩阵中的位置,确定的每个旋转因子对应的数据元素在第二数据矩阵中的位置。例如旋转因子W0对应的单元矩阵在旋转因子矩阵的第一行和第二行,则旋转因子W0对应的数据元素的实部和虚部可分别在数据矩阵的第一行和第二行,进而对旋转因子矩阵和第二数据矩阵进行乘法运算时,旋转因子W0对应的数据元素的实部和虚部可分别与旋转因子W0对应的单元矩阵相乘。如此,对于上述旋转因子矩阵可组成的第二数据矩阵如下:
其中,x0.r-x7.r-为W0对应的各数据元素的实部、x0.i-x7.i-为W0对应的各数据元素的虚部,x8.r-x15.r-为W1对应的各数据元素的实部、x8.i-x15.i-为W1对应的各数据元素的虚部,x16.r-x23.r-为W2对应的各数据元素的实部、x16.i-x23.i-为W3对应的各数据元素的虚部,x24.r-x31.r-为W3对应的各数据元素的实部、x24.i-x31.i-为W0对应的各数据元素的虚部。
在一种可能的情况中,还可以根据矩阵压缩算法生成第二数据矩阵或第三数据矩阵,进一步的处理与参照上述图8所示的处理,此处不再进行赘述。如此在在组成第二数据矩阵或第三数据矩阵的过程中,通过矩阵压缩算法对第二数据矩阵或第三数据矩阵进行压缩处理,能够减少得到的第二数据矩阵或第三数据矩阵的个数,减少矩阵运算的次数,进而能提高执行DFT计算的效率。
步骤904、处理器向矩阵运算单元发送矩阵运算指令。
处理器在得到数据矩阵与旋转因子矩阵后,可以将数据矩阵与旋转因子矩阵向存储至矩阵运算单元对应的寄存器,并向矩阵运算单元发送矩阵运算指令。
步骤905、矩阵运算单元执行数据矩阵与旋转因子矩阵对应矩阵乘法计算。
矩阵运算单元在接收到处理器发送的矩阵运算指令后,可以从寄存器中获取第二数据矩阵与旋转因子矩阵,对数据矩阵与旋转因子矩阵进行矩阵乘法计算,并将计算结果存储至寄存器中。之后处理器可以获取寄存器中存储的计算结果,进而得到执行旋转因子计算的结果。进一步可进行之后的处理,如将旋转因子的计算结果转化为下一个DFT计算的数据矩阵等。
本申请实施例,在处理器执行FFT计算的过程中,可以将FFT计算的各计算阶段中的选旋转因子计算转化为矩阵运算,并通过矩阵运算单元进行相应的矩阵运算,能够提高执行FFT计算的计算效率。
图10是本申请实施例提供的一种对DFT计算和旋转因子计算进行合并计算的方法,参见图10,该方法包括:
步骤1001、处理器确定各计算阶段中是否存在满足合并计算条件的目标计算阶段。
如果在一个计算阶段中,旋转因子计算中一个旋转因子矩阵只与一个第三数据矩阵进行矩阵乘法计算,DFT计算中至包括的一个DFT计算矩阵与第一数据矩阵进行矩阵乘法计算,则该计算阶段,可通过如下计算公式计算:
输出数据矩阵=旋转因子矩阵*DFT计算矩阵*第一数据矩阵
对于上式,可以先计算“旋转因子矩阵*DFT计算矩阵”,对应的计算结果可称为合并计算矩阵,或称为蝶形结计算矩阵。因此,对于该旋转因子计算所属的计算阶段,可通过如下两步计算公式计算:
蝶形结计算矩阵=旋转因子矩阵*DFT计算矩阵
输出数据矩阵=蝶形结计算矩阵*第一数据矩阵
如果在旋转因子计算中,如果参与矩阵运算的旋转因子矩阵包括多个,则在对应的计算阶段需要计算多个蝶形结计算矩阵,根据多个蝶形结计算矩阵计算多个输出数据矩阵。假设参与矩阵运输算的旋转因子矩阵为N个,则需要计算N个蝶形结计算矩阵以及N个输出数据矩阵。如此需要进行2N次矩阵乘法计算。但如果参与矩阵运算的N个旋转因子矩阵相同,且由于每个计算阶段中DFT矩阵有且只有一个,那么对于蝶形结计算矩阵的计算只需要计算一次即可,然后再根据得到的蝶形结计算矩阵与N个第一数据矩阵计算N个输出数据矩阵。这样就只需要进行N+1次矩阵运算。如果参与矩阵运输算的N个旋转因子矩阵中,有m个旋转因子矩阵分别参与了q次矩阵运算,其中N=m*q。则只需要计算q个蝶形结计算矩阵,然后再根据q个蝶形结计算矩阵分别计算N个输出数据矩阵,这样就只需要进行N+q次的矩阵运算。
显然,当同一旋转因子矩阵参与矩阵运算的次数越多,通过先计算蝶形结计算矩阵,再对对应计算阶段的DFT计算和旋转因子计算进行合并计算,能够降低计算同一计算阶段中需要进行矩阵运算的次数可以提高FFT的执行效率。因此在开始执行各计算阶段之前,可以确定每个计算阶段中旋转因子计算对应的同一旋转因子矩阵参与矩阵运算的次数,如果存在同一旋转因子矩阵需要参与矩阵运算的次数大于预设的第二次数阈值时,则可以确定该计算阶段满足合并计算条件。
对于旋转因子矩阵参与矩阵运算的次数,可以根据对应旋转因子计算中同一旋转因子参与乘法运算的次数以及旋转因子矩阵的尺寸确定。如果旋转因子参与乘法运算的次数为X,旋转因子矩阵的尺寸为Y×Y。则旋转因子矩阵的参与矩阵运算的次数可以为Y/X。需要说明是,将旋转因子计算和DFT计算进行合并的前提是同一计算阶段中旋转因子矩阵和DFT计算矩阵具有相同的矩阵尺寸。
步骤1002、处理器向矩阵运算单元发送矩阵运算指令。
处理器在确定可以满足合并计算条件的目标计算阶段后,可以将该目标计算矩阵对应的DFT计算矩阵和旋转因子矩阵分别存储至矩阵运算单元对应的寄存中,并向矩阵运算单元发送矩阵运算指令。
步骤1003、矩阵运算单元对DFT计算矩阵和旋转因子矩阵进行矩阵乘法计算得到目标计算阶段对应的合并计算矩阵。
矩阵运算单元在接收到矩阵运算指令后,可以从寄存器中获取DFT计算矩阵和旋转因子矩阵,并对DFT计算矩阵和旋转因子矩阵进行矩阵乘法计算得到目标计算阶段对应的合并计算矩阵。
步骤1004、矩阵运算单元向处理器发送矩阵运算完成通知。
矩阵运算单元在计算得到合并计算矩阵后,可以将合并计算矩阵存储至寄存器中,并向处理器发送矩阵运算完成通知。
对于步骤1003和步骤1004可以执行多次,以得到目标计算阶段中的至少一个合并计算矩阵。
步骤1005、处理器确定对目标计算阶段对应的第一数据矩阵。
当处理器执行目标计算阶段时,可以直接将目标计算阶段的输入数据转化为第一数据矩阵,进而通过第一数据矩阵与合并计算矩阵进行矩阵相乘,对DFT计算和旋转因子计算进行合并计算,得到目标计算阶段的输出数据。
其中,可参照上述对于生成旋转因子矩阵对应的第二数据矩阵或第三数据矩阵的方法,生成目标计算阶段对应合并计算矩阵对应的第一数据矩阵。
步骤1006、处理器向矩阵运算单元发送矩阵运算指令。
处理器在得到第一数据矩阵与旋转因子矩阵后,可以将第一数据矩阵与合并计算矩阵向存储至存储器,并向矩阵运算单元发送矩阵运算指令。
步骤1007、矩阵运算单元执行第一数据矩阵与合并计算矩阵对应矩阵乘法计算。
矩阵运算单元在接收到处理器发送的矩阵运算指令后,可以从寄存器中获取第一数据矩阵与合并计算矩阵,对第一数据矩阵与合并计算矩阵进行矩阵乘法计算,并将计算结果存储至寄存器中。之后处理器可以获取寄存器中存储的计算结果,进而得到执行合并计算的结果。进一步可进行之后的处理,如将合并计算的结果转化为下一个计算阶段的输入数据等。
本申请实施例,在处理器执行FFT计算的过程中,通过将FFT计算的各计算阶段中的DFT计算和旋转因子计算通过矩阵进行合并计算,能够减少矩阵运算的次数,进而可以提高执行FFT计算的计算效率。应理解的,本申请实施例提供的各执行FFT的方法,同样适用于快速傅里叶逆变换(Inverse Fast Fourier Transform,IFFT)。IFFT计算的实现原理与计算流程与FFT计算的实现原理与计算流程一致,在本申请中不再赘述。
基于相同的技术构思,本申请实施例还提供了一种执行FFT的装置,该装置可以是上述实施例中的计算机设备,参见图11,该装置包括:
接收模块1110,用于接收应用程序发送的快速傅里叶变换FFT的执行请求;具体可以实现上述提到的接收功能,以及其他隐含步骤。
获取模块1120,用于获取FFT执行请求所指示的需要执行FFT计算的第一输入数据;具体可以实现上述提到的获取功能,以及其他隐含步骤。
分解模块1130,用于根据FFT计算的基数将FFT计算分解为多个计算阶段,多个计算阶段中的第一计算阶段的输入数据为第一输入数据,第一计算阶段之后的第二计算阶段的输入数据为第二计算阶段的前一计算阶段的输出数据,多个计算阶段中的第三计算阶段包括DFT计算,其中第三计算阶段为多个计算阶段中的任意一个计算阶段;具体可以实现上述提到的分解功能,以及其他隐含步骤。
确定模块1140,用于确定第三计算阶段中DFT计算对应的DFT计算矩阵;具体可以实现上述提到的确定功能,以及其他隐含步骤。
执行模块1150,用于在执行第三计算阶段的计算时,根据第三计算阶段的输入数据确定与DFT计算矩阵进行矩阵运算的第一数据矩阵;具体可以实现上述提到的执行功能,以及其他隐含步骤。
计算模块1160,用于通过对DFT计算矩阵和第一数据矩阵执行矩阵乘法计算实现DFT计算,并在多个计算阶段完成后,将计算结果返回给应用程序;具体可以实现上述提到的计算功能,以及其他隐含步骤。
在一种可能的实现方式中,该确定模块1140,用于:根据第三计算阶段对应的基数,以及预设的基数与DFT计算矩阵的对应关系,确定第三计算阶段中DFT计算对应的DFT计算矩阵。
在一种可能的实现方式中,该确定模块1140,用于:将第三计算阶段中DFT计算对应的DFT系数转化为DFT计算矩阵。
在一种可能的实现方式中,该计算模块1160,用于:根据数据矩阵第三计算阶段中旋转因子计算对应的旋转因子以及数据矩阵第三计算阶段的输入数据,执行数据矩阵旋转因子计算,得到数据矩阵DFT计算的输入数据;
该执行模块1150,用于:将数据矩阵DFT计算的输入数据转换为与数据矩阵DFT计算矩阵进行矩阵运算的第一数据矩阵。
在一种可能的实现方式中,该执行模块1150,用于:如果在数据矩阵旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定数据矩阵旋转因子计算中各旋转因子对应的旋转因子矩阵;将数据矩阵第三计算阶段的输入数据转化为第二数据矩阵;
该计算模块1160,用于:通过对数据矩阵旋转因子矩阵和数据矩阵第二数据矩阵执行进行矩阵乘法计算实现数据矩阵旋转因子计算,以得到数据矩阵第一数据矩阵。
在一种可能的实现方式中,第三计算阶段还包括旋转因子计算,数据矩阵第一数据矩阵为根据数据矩阵第三计算阶段的输入数据转化的矩阵;
该执行模块1150,还用于:如果在数据矩阵旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定数据矩阵旋转因子计算中各旋转因子对应的旋转因子矩阵;
该计算模块1160,用于:对执行数据矩阵DFT计算得到的第三数据矩阵与数据矩阵旋转因子矩阵执行矩阵乘法计算实现数据矩阵旋转因子计算。
在一种可能的实现方式中,数据矩阵第三计算阶段还包括旋转因子计算;
该执行模块1150,用于:确定数据矩阵旋转因子计算中各旋转因子对应的旋转因子矩阵;如果确定数据矩阵旋转因子矩阵和数据矩阵DFT计算矩阵满足矩阵合并条件,则将数据矩阵旋转因子矩阵和数据矩阵DFT计算矩阵相乘,得到合并计算矩阵;
该计算模块1160,用于:对数据矩阵合并计算矩阵及数据矩阵第一数据矩阵进行矩阵乘法计算。
在一种可能的实现方式中,数据矩阵第三计算阶段对应一个基数M,数据矩阵第三计算阶段的输入数据的个数为N,数据矩阵第三计算阶段按照数据矩阵基数M划分为N/M个蝶形结,每个蝶形结包括至少一个旋转因子,其中M<N,且M和N为自然数;
该执行模块1150,用于:将数据矩阵N/M个蝶形结的旋转因子转换为旋转因子矩阵。
在一种可能的实现方式中,该执行模块1150,用于:
根据数据矩阵N/M个蝶形结的旋转因子,确定至少一个旋转因子集合,其中,数据矩阵至少一个旋转因子集合包括的旋转因子个数相同;对于数据矩阵每个旋转因子集合,基于数据矩阵旋转因子集合中的旋转因子构建旋转因子矩阵。
在一种可能的实现方式中,上述矩阵乘法计算通过矩阵运算单元进行运算。
需要说明的是,上述接收模块1110、获取模块1120、分解模块1130、确定模块1140、执行模块1150、可以由处理器实现,或者,由处理器配合存储器来实现,计算模块1160可以由矩阵运算单元实现,或者,由矩阵运算单元配合存储器来实现。
本申请实施例中,处理器在接收到应用程序发送的FFT的执行请求后,可以根据FFT计算的基数将FFT计算分解为多个计算阶段,并可以确定每个计算阶段内的DFT计算的DFT计算矩阵。在执行DFT计算时,可以通过矩阵运算单元对第一数据矩阵和DFT计算矩阵执行矩阵乘法计算,进而实现DFT计算。这样,将各计算阶段中的DFT计算转化为矩阵运算,可以通过矩阵运算单元实现矩阵运算,一次矩阵运算就可完成对第一数据矩阵中多个数据元素的DFT计算,能够提高执行各计算阶段中DFT计算的效率,进而可以提高执行FFT计算的效率。
需要说明的是:上述实施例提供的执行FFT的装置在执行FFT时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即执行FFT的装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的执行FFT的装置与执行FFT的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现,当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在设备上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴光缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是设备能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(如软盘、硬盘和磁带等),也可以是光介质(如数字视盘(Digital Video Disk,DVD)等),或者半导体介质(如固态硬盘等)。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
本申请实施例中,还提供了一种计算机程序产品,该计算机程序产品包括在计算机可读存储介质中存储的计算机程序,计算程序通过处理器加载以实现上述所提供的执行FFT的方法,或者实现上述提供的执行FFT的装置的功能。
以上所述仅为本申请一个实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (23)
1.一种执行FFT的方法,其特征在于,所述方法包括:
接收应用程序发送的快速傅里叶变换FFT的执行请求;
获取所述FFT执行请求所指示的需要执行FFT计算的第一输入数据;
根据所述FFT计算的基数将所述FFT计算分解为多个计算阶段,所述多个计算阶段中的第一计算阶段的输入数据为所述第一输入数据,所述第一计算阶段之后的第二计算阶段的输入数据为所述第二计算阶段的前一计算阶段的输出数据,所述多个计算阶段中的第三计算阶段包括DFT计算,其中所述第三计算阶段为所述多个计算阶段中的任意一个计算阶段;
确定所述第三计算阶段中DFT计算对应的DFT计算矩阵;
在执行所述第三计算阶段的计算时,根据所述第三计算阶段的输入数据确定与所述DFT计算矩阵进行矩阵运算的第一数据矩阵;
通过对所述DFT计算矩阵和所述第一数据矩阵执行矩阵乘法计算实现所述DFT计算,并在所述多个计算阶段完成后,将计算结果返回给所述应用程序。
2.根据权利要求1所述的方法,其特征在于,所述确定所述第三计算阶段中DFT计算对应的DFT计算矩阵,包括:
根据所述第三计算阶段对应的基数,以及预设的基数与DFT计算矩阵的对应关系,确定所述第三计算阶段中DFT计算对应的DFT计算矩阵。
3.根据权利要求1所述的方法,其特征在于,所述确定所述第三计算阶段中DFT计算对应的DFT计算矩阵,包括:
将所述第三计算阶段中DFT计算对应的DFT系数转化为DFT计算矩阵。
4.根据权利要求1所述的方法,其特征在于,所述第三计算阶段还包括旋转因子计算;
所述根据所述第三计算阶段的输入数据确定与所述DFT计算矩阵进行矩阵运算的第一数据矩阵,包括:
根据所述第三计算阶段中旋转因子计算对应的旋转因子以及所述第三计算阶段的输入数据,执行所述旋转因子计算,得到所述DFT计算的输入数据;
将所述DFT计算的输入数据转换为与所述DFT计算矩阵进行矩阵运算的第一数据矩阵。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第三计算阶段中旋转因子计算对应的旋转因子以及所述第三计算阶段的输入数据,执行所述旋转因子计算,包括:
如果在所述旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵;
将所述第三计算阶段的输入数据转化为第二数据矩阵;
通过对所述旋转因子矩阵和所述第二数据矩阵执行进行矩阵乘法计算实现所述旋转因子计算,以得到所述第一数据矩阵。
6.根据权利要求1所述的方法,其特征在于,所述第三计算阶段还包括旋转因子计算,所述第一数据矩阵为根据所述第三计算阶段的输入数据转化的矩阵;
所述通过对所述DFT计算矩阵和所述第一数据矩阵执行矩阵乘法计算实现所述DFT计算之后,所述方法还包括:
如果在所述旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵;
对执行所述DFT计算得到的第三数据矩阵与所述旋转因子矩阵执行矩阵乘法计算实现所述旋转因子计算。
7.根据权利要求1所述的方法,其特征在于,所述第三计算阶段还包括旋转因子计算;
所述通过对所述DFT计算矩阵和所述第一数据矩阵执行矩阵乘法计算实现所述DFT计算,包括:
确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵;
如果确定所述旋转因子矩阵和所述DFT计算矩阵满足矩阵合并条件,则将所述旋转因子矩阵和所述DFT计算矩阵相乘,得到合并计算矩阵;
对所述合并计算矩阵及所述第一数据矩阵进行矩阵乘法计算。
8.根据权利要求5-7任一项所述的方法,其特征在于,所述第三计算阶段对应一个基数M,所述第三计算阶段的输入数据的个数为N,所述第三计算阶段按照所述基数M划分为N/M个蝶形结,每个蝶形结包括至少一个旋转因子,其中M<N,且M和N为自然数;
所述确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵,包括:
将所述N/M个蝶形结的旋转因子转换为旋转因子矩阵。
9.根据权利要求8所述的方法,其特征在于,所述将所述N/M个蝶形结的旋转因子转换为旋转因子矩阵,包括:
根据所述N/M个蝶形结的旋转因子,确定至少一个旋转因子集合,其中,所述至少一个旋转因子集合包括的旋转因子个数相同;
对于所述每个旋转因子集合,基于所述旋转因子集合中的旋转因子构建旋转因子矩阵。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述矩阵乘法计算通过矩阵运算单元进行运算。
11.一种执行FFT的装置,其特征在于,所述装置包括:
接收模块,用于接收应用程序发送的快速傅里叶变换FFT的执行请求;
获取模块,用于获取所述FFT执行请求所指示的需要执行FFT计算的第一输入数据;
分解模块,用于根据所述FFT计算的基数将所述FFT计算分解为多个计算阶段,所述多个计算阶段中的第一计算阶段的输入数据为所述第一输入数据,所述第一计算阶段之后的第二计算阶段的输入数据为所述第二计算阶段的前一计算阶段的输出数据,所述多个计算阶段中的第三计算阶段包括DFT计算,其中所述第三计算阶段为所述多个计算阶段中的任意一个计算阶段;
确定模块,用于确定所述第三计算阶段中DFT计算对应的DFT计算矩阵;
执行模块,用于在执行所述第三计算阶段的计算时,根据所述第三计算阶段的输入数据确定与所述DFT计算矩阵进行矩阵运算的第一数据矩阵;
计算模块,用于通过对所述DFT计算矩阵和所述第一数据矩阵执行矩阵乘法计算实现所述DFT计算,并在所述多个计算阶段完成后,将计算结果返回给所述应用程序。
12.根据权利要求11所述的装置,其特征在于,所述确定模块,用于:
根据所述第三计算阶段对应的基数,以及预设的基数与DFT计算矩阵的对应关系,确定所述第三计算阶段中DFT计算对应的DFT计算矩阵。
13.根据权利要求11所述的装置,其特征在于,所述确定模块,用于:
将所述第三计算阶段中DFT计算对应的DFT系数转化为DFT计算矩阵。
14.根据权利要求11所述的装置,其特征在于,所述计算模块,用于:
根据所述第三计算阶段中旋转因子计算对应的旋转因子以及所述第三计算阶段的输入数据,执行所述旋转因子计算,得到所述DFT计算的输入数据;
所述执行模块,用于:将所述DFT计算的输入数据转换为与所述DFT计算矩阵进行矩阵运算的第一数据矩阵。
15.根据权利要求14所述的装置,其特征在于,所述执行模块,用于:
如果在所述旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵;将所述第三计算阶段的输入数据转化为第二数据矩阵;
所述计算模块,用于:通过对所述旋转因子矩阵和所述第二数据矩阵执行进行矩阵乘法计算实现所述旋转因子计算,以得到所述第一数据矩阵。
16.根据权利要求11所述的装置,其特征在于,所述第三计算阶段还包括旋转因子计算,所述第一数据矩阵为根据所述第三计算阶段的输入数据转化的矩阵;
所述执行模块,还用于:如果在所述旋转因子计算中的同一旋转因子参与计算的次数大于或等于第一次数阈值,则确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵;
所述计算模块,用于:对执行所述DFT计算得到的第三数据矩阵与所述旋转因子矩阵执行矩阵乘法计算实现所述旋转因子计算。
17.根据权利要求11所述的装置,其特征在于,所述第三计算阶段还包括旋转因子计算;
所述执行模块,用于:确定所述旋转因子计算中各旋转因子对应的旋转因子矩阵;如果确定所述旋转因子矩阵和所述DFT计算矩阵满足矩阵合并条件,则将所述旋转因子矩阵和所述DFT计算矩阵相乘,得到合并计算矩阵;
所述计算模块,用于:对所述合并计算矩阵及所述第一数据矩阵进行矩阵乘法计算。
18.根据权利要求15-17任一项所述的装置,其特征在于,所述第三计算阶段对应一个基数M,所述第三计算阶段的输入数据的个数为N,所述第三计算阶段按照所述基数M划分为N/M个蝶形结,每个蝶形结包括至少一个旋转因子,其中M<N,且M和N为自然数;
所述执行模块,用于:将所述N/M个蝶形结的旋转因子转换为旋转因子矩阵。
19.根据权利要求18所述的装置,其特征在于,所述执行模块,用于:
根据所述N/M个蝶形结的旋转因子,确定至少一个旋转因子集合,其中,所述至少一个旋转因子集合包括的旋转因子个数相同;
对于所述每个旋转因子集合,基于所述旋转因子集合中的旋转因子构建旋转因子矩阵。
20.根据权利要求11-19任一项所述的装置,其特征在于,所述矩阵乘法计算通过矩阵运算单元进行运算。
21.一种执行FFT的计算机设备,其特征在于,所述计算机设备包括处理器和矩阵运算单元,其中:
所述处理器,用于执行权利要求1-9任意一项所述的方法;所述矩阵运算单元,用于执行所述矩阵乘法计算。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序代码,当所述计算机程序代码被计算机设备执行时,使得所述计算机设备执行所述权利要求1-10中任一权利要求所述的方法。
23.一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在计算机设备上运行时,使得所述计算机设备执行所述权利要求1-10中任一权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2022/105490 WO2023045516A1 (zh) | 2021-09-27 | 2022-07-13 | 执行fft的方法、装置及设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111132603 | 2021-09-27 | ||
CN2021111326033 | 2021-09-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115859003A true CN115859003A (zh) | 2023-03-28 |
Family
ID=85652785
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111617811.2A Pending CN115859003A (zh) | 2021-09-27 | 2021-12-27 | 执行fft的方法、装置及设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115859003A (zh) |
WO (1) | WO2023045516A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431219A (zh) * | 2023-06-13 | 2023-07-14 | 无锡国芯微高新技术有限公司 | 用于fft计算的risc-v扩展架构 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7702712B2 (en) * | 2003-12-05 | 2010-04-20 | Qualcomm Incorporated | FFT architecture and method |
JP4295777B2 (ja) * | 2006-09-26 | 2009-07-15 | Okiセミコンダクタ株式会社 | 高速フーリエ変換回路及び高速フーリエ変換方法 |
US7856465B2 (en) * | 2006-12-21 | 2010-12-21 | Intel Corporation | Combined fast fourier transforms and matrix operations |
EP2144172A1 (en) * | 2008-07-07 | 2010-01-13 | Mitsubishi Electric R&D Centre Europe B.V. | Computation module to compute a multi radix butterfly to be used in DTF computation |
US10853446B2 (en) * | 2018-06-15 | 2020-12-01 | Apple Inc. | Methods and systems for complexity reduction in discrete Fourier transform computations |
CN110532510B (zh) * | 2019-09-06 | 2022-10-11 | 合肥工业大学 | 一种生成旋转因子和校正因子的生成器 |
-
2021
- 2021-12-27 CN CN202111617811.2A patent/CN115859003A/zh active Pending
-
2022
- 2022-07-13 WO PCT/CN2022/105490 patent/WO2023045516A1/zh active Application Filing
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431219A (zh) * | 2023-06-13 | 2023-07-14 | 无锡国芯微高新技术有限公司 | 用于fft计算的risc-v扩展架构 |
CN116431219B (zh) * | 2023-06-13 | 2023-08-22 | 无锡国芯微高新技术有限公司 | 用于fft计算的risc-v扩展架构 |
Also Published As
Publication number | Publication date |
---|---|
WO2023045516A1 (zh) | 2023-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9767074B2 (en) | Method and device for fast fourier transform | |
Bouguezel et al. | A new radix-2/8 FFT algorithm for length-q/spl times/2/sup m/DFTs | |
US8880575B2 (en) | Fast fourier transform using a small capacity memory | |
CN107451097B (zh) | 国产申威26010众核处理器上多维fft的高性能实现方法 | |
US20100191791A1 (en) | Method and apparatus for evaluation of multi-dimensional discrete fourier transforms | |
US7761495B2 (en) | Fourier transform processor | |
EP3789891A1 (en) | Number-theoretic transform hardware | |
Hu et al. | A novel generic fast Fourier transform pruning technique and complexity analysis | |
US20180373677A1 (en) | Apparatus and Methods of Providing Efficient Data Parallelization for Multi-Dimensional FFTs | |
Maslen et al. | The efficient computation of Fourier transforms on semisimple algebras | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
CN115859003A (zh) | 执行fft的方法、装置及设备 | |
KR102376492B1 (ko) | 실수값을 입력으로 하는 고속푸리에 변환장치 및 방법 | |
US6728742B1 (en) | Data storage patterns for fast fourier transforms | |
Yang et al. | A new theoretical derivation of NFFT and its implementation on GPU | |
CN115480919A (zh) | 卷积优化运算方法、装置、计算机设备及存储介质 | |
CN115033840A (zh) | 调制信号处理、装置和电子设备 | |
US20180373676A1 (en) | Apparatus and Methods of Providing an Efficient Radix-R Fast Fourier Transform | |
JP7058810B2 (ja) | 信号処理システム | |
US6438568B1 (en) | Method and apparatus for optimizing conversion of input data to output data | |
JP3088472B2 (ja) | フーリエ変換装置 | |
CN114116012B (zh) | 基于混洗操作的fft码位反序算法向量化实现方法及装置 | |
CN115242592A (zh) | 处理数据的方法及装置 | |
US20230169143A1 (en) | Method and apparatus for efficient multidimensional fast fourier transforms | |
CN117633418A (zh) | 基于矩阵运算的多维快速傅立叶变换加速方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |