CN112487352B - 可重构处理器上快速傅里叶变换运算方法及可重构处理器 - Google Patents
可重构处理器上快速傅里叶变换运算方法及可重构处理器 Download PDFInfo
- Publication number
- CN112487352B CN112487352B CN202011503222.7A CN202011503222A CN112487352B CN 112487352 B CN112487352 B CN 112487352B CN 202011503222 A CN202011503222 A CN 202011503222A CN 112487352 B CN112487352 B CN 112487352B
- Authority
- CN
- China
- Prior art keywords
- address
- shared memory
- address segment
- control information
- layer operation
- 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
Links
Images
Classifications
-
- 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
- G06F17/141—Discrete Fourier transforms
- G06F17/142—Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
-
- 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
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7871—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Discrete Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明实施例提供了一种可重构处理器上快速傅里叶变换运算方法及可重构处理器,其中,该方法包括:将共享存储器中的bank按照地址由低到高分为第一共享存储器和第二共享存储器;将第一层运算的初始数据存入第一共享存储器,将第一层运算的控制信息存入第二共享存储器,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤:读取并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,将当前层运算的计算结果存入第一共享存储器,在处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入第二共享存储器,以当前层运算的计算结果作为下一层运算的初始数据,将下一层运算视为新的当前层运算。
Description
技术领域
本发明涉及可重构处理器技术领域,特别涉及一种可重构处理器上快速傅里叶变换运算方法及可重构处理器。
背景技术
粗粒度可重构计算架构是一种综合了通用处理器的灵活性和专用集成电路的高性能计算架构,非常适用于对于数据和计算密集型等并行度非常高的应用的处理,将可重构处理器运用到FFT的运算中十分适用。
但是,现有技术中,在可重构处理器上进行FFT(快速傅里叶变换)运算的过程中,进行每层计算时,都需要与主控交互来获取控制参数,使得相邻层计算之间需要耗费时间来等待控制参数的获取和就绪,使得相邻层计算之间的间隔时间较长,使得影响运算效率。
发明内容
本发明实施例提供了一种可重构处理器上快速傅里叶变换运算方法,以解决现有技术中可重构处理器上FFT运算存在的运算效率低的技术问题。该方法包括:
将快速傅里叶变换分为多层运算;
将可重构处理器的共享存储器中的bank(即存储体)按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;
将第一层运算所需计算的初始数据存入所述第一共享存储器,将第一层运算的控制信息存入所述第二共享存储器,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤,依次实现从第一层运算至最后一层运算的计算:
从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中;
所述当前层运算的控制信息包括蝶形运算的权重、输入数据的地址顺序和输出数据的地址顺序,通过所述处理单元阵列根据所述输入数据的地址顺序从所述第一共享存储器中获取当前层运算所需计算的初始数据,根据当前层运算所需计算的初始数据和所述蝶形运算的权重进行计算得到当前层运算的计算结果,根据所述输出数据的地址顺序将当前层运算的计算结果输出至所述第二共享存储器中存储。
本发明实施例还提供了一种用于快速傅里叶变换运算的可重构处理器,以解决现有技术中可重构处理器上FFT运算存在的运算效率低的技术问题。该装置包括:
共享存储器,所述共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;
处理单元阵列,用于在将第一层运算所需计算的初始数据存入所述第一共享存储器且将第一层运算的控制信息存入所述第二共享存储器后,以第一层运算为当前层运算开始循环执行以下步骤,依次实现快速傅里叶变换的第一层运算至最后一层运算的计算:
从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中;
所述当前层运算的控制信息包括蝶形运算的权重、输入数据的地址顺序和输出数据的地址顺序,通过所述处理单元阵列根据所述输入数据的地址顺序从所述第一共享存储器中获取当前层运算所需计算的初始数据,根据当前层运算所需计算的初始数据和所述蝶形运算的权重进行计算得到当前层运算的计算结果,根据所述输出数据的地址顺序将当前层运算的计算结果输出至所述第二共享存储器中存储。
在本发明实施例中,提出了将可重构处理器的共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;将第一层运算所需计算的初始数据存入所述第一共享存储器,将第一层运算的控制信息存入所述第二共享存储器后,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤,依次实现从第一层运算至最后一层运算的计算:从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中。实现了第一共享存储器和第二共享存储器采用乒乓预取的原理来存储各层运算的初始数据和各层运算的控制信息,有利于实现数据的高效存储;同时,在进行当前层运算的计算的同时将下一层运算的控制信息存入第二共享存储器中,以便在当前层运算的计算结束后,直接读取下一层运算的控制信息并将其与当前层运算的计算结果进行计算,与现有技术相比,使得可以在进行下一层运算的计算前不必再与主控交互获取控制信息,使得有利于更快速地进入下一层运算的计算,可以视为零缓冲流水执行,进而有利于提高运算的效率,此外,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中,避免当前层运算的计算结果提前覆盖住了当前层运算中还没有参与运算的输入数据,有利于确保运算顺利、正确、高效地进行。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
图1是本发明实施例提供的一种可重构处理器上快速傅里叶变换运算方法的流程图;
图2是本发明实施例提供的一种共享存储器和处理单元阵列的示意图;
图3是本发明实施例提供的一种共享存储器地址分组的示意图;
图4是本发明实施例提供的一种将第一层运算所需计算的初始数据和控制信息存入共享存储器的示意图;
图5是本发明实施例提供的一种进行第一层运算的数据存储过程的示意图;
图6是本发明实施例提供的一种第一层运算的计算结束时共享存储器存储数据状况的示意图;
图7是本发明实施例提供的一种进行第二层运算的数据存储过程的示意图;
图8是本发明实施例提供的一种第二层运算的计算结束时共享存储器存储数据状况的示意图;
图9是本发明实施例提供的一种最终运算时共享存储器存储数据状况的示意图;
图10是本发明实施例提供的一种两层运算的控制信息对应的地址示意图;
图11是本发明实施例提供的一种第一层运算控制信息对应的起始地址计算得到第二层运算控制信息对应的起始地址的示意图;
图12是本发明实施例提供的一种用于快速傅里叶变换运算的可重构处理器的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在本发明实施例中,提供了一种可重构处理器上快速傅里叶变换运算方法,如图1所示,该方法包括:
步骤102:将快速傅里叶变换分为多层运算;
步骤104:将可重构处理器的共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;
步骤106:将第一层运算所需计算的初始数据存入所述第一共享存储器,将第一层运算的控制信息存入所述第二共享存储器,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤,依次实现从第一层运算至最后一层运算的计算:
从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中。
由图1所示的流程可知,在本发明实施例中,提出了将可重构处理器的共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;将第一层运算所需计算的初始数据存入所述第一共享存储器,将第一层运算的控制信息存入所述第二共享存储器后,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤,依次实现从第一层运算至最后一层运算的计算:从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中。实现了第一共享存储器和第二共享存储器采用乒乓预取的原理来存储各层运算的初始数据和各层运算的控制信息,使得在运算过程中处理单元阵列无需使用先入先出队列FIFO,有利于实现数据的高效存储;同时,在进行当前层运算的计算的同时将下一层运算的控制信息存入第二共享存储器中,以便在当前层运算的计算结束后,直接读取下一层运算的控制信息并将其与当前层运算的计算结果进行计算,与现有技术相比,使得可以在进行下一层运算的计算前不必再与主控交互获取控制信息,使得有利于更快速地进入下一层运算的计算,可以视为零缓冲流水执行,进而有利于提高运算的效率,此外,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中,避免当前层运算的计算结果提前覆盖住了当前层运算中还没有参与运算的输入数据,有利于确保运算顺利、正确、高效地进行。
具体实施时,将快速傅里叶变换分为多层运算的过程本申请不做具体限定,采用现有技术实现即可。
具体实施时,上述可重构处理器上快速傅里叶变换运算方法可以视为零缓冲流水执行的可扩展且支持乒乓模式的FFT(快速傅里叶变换)实现方法。该可扩展指的是上述可重构处理器上快速傅里叶变换运算方法对应的配置信息可以支持256个点、512个点、1024个点等不同的快速傅里叶变换的运算,具体实施时,针对不同点的快速傅里叶变换,需要改变的只是快速傅里叶变换的层数即处理单元阵列PEA的迭代次数。
具体实施时,为了实现在运算过程中通过乒乓预取模式存储数据,在本实施例中,提出了将可重构处理器的共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器。具体的,采用的是多Bank的PEA阵列设计,如图2所示,为多bank的PEA(处理单元阵列)共享存储器(ShareMemory,简称为SM)的结构图和空间地址分配,即共有16个bank,每个bank规格是256*32双端SRAM,Cache(即高速缓冲存储器)访问共享存储器SM的地址为0到511,对共享存储器SM的16个bank进行分组,根据地址由低到高,将较低地址的左8个bank分为一组(即加粗黑框内的一组bank),即组成上述组成第一共享存储器,较高地址的右8个bank分为一组,即组成上述第二共享存储器,即可往第一共享存储器和第二共享存储器中写入数据包,实现乒乓结构。
具体实施时,采用共享存储器SM双端的SRAM(即第一共享存储器和第二共享存储器),共享存储器SM中数据乒乓预取的原理为,先将第一套数据包从Cache写入共享存储器SM的低8个bank(即上述第一共享存储器),当第一套数据包的最后一个数据从Cache返回写入低8个bank时,再将第二套数据包从Cache写入共享存储器SM的高8个bank(即上述第二共享存储器),当第二套数据包的最后一个数据从Cache中返回写入高8个bank时,再将下一套数据包从Cache中写入到共享存储器SM的低8个bank中,以此类推,从而实现乒乓结构。
具体实施时,上述可重构处理器的处理单元阵列可以是不同尺寸结构的,如图2所示,以8*8的处理单元阵列(PEA)为例,其中,处理单元阵列周围边缘上的处理单元PE在执行流水环节执行访存操作,如图2示出的实线和虚线框内的PE即为在执行流水环节执行访存操作的PE,其中,虚线框内的PE可以访问本PEA和相邻PEA的共享存储器,实线框内的PE可以访问本PEA的共享存储器,PEA内除了边缘PE之外的其他PE在执行流水环节执行运算操作,如图2中未示出该运算PE。
具体实施时,各层运算的控制信息包括蝶形运算的权重、输入数据的地址顺序和输出数据的地址顺序,在进行各层运算的过程中,通过所述处理单元阵列根据所述输入数据的地址顺序从所述第一共享存储器中获取当前层运算所需计算的初始数据,根据当前层运算所需计算的初始数据和所述蝶形运算的权重进行计算得到当前层运算的计算结果,根据所述输出数据的地址顺序将当前层运算的计算结果输出至所述第二共享存储器中存储。
具体实施时,在通过乒乓预取模式进行运算的过程中,如果输出地址为输入数据的地址位置,即输入数据、输出数据可以使用同一块地址。但如果使用同一块地址,会导致当前层运算的计算结果提前盖住了本层中还没有参与运算的输入数据,例如,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中。
具体实施时,为了进一步提高运算效率,在本实施例中,提出了将所述第一共享存储器按照地址由低到高划分为第一地址段和第二地址段,将所述第二共享存储器按照地址由低到高划分为第三地址段和第四地址段,将第一层运算所需计算的初始数据存入所述第一共享存储器的第一地址段中,将第一层运算的计算结果存入所述第一共享存储器的第二地址段中,将下一层运算的计算结果存入所述第一共享存储器中的第一地址段中,采用乒乓模式依次将各层运算的计算结果存入所述第一共享存储器的第一地址段或第二地址段中;将第一层运算的控制信息存入所述第二共享存储器中的第三地址段中,将下一层运算的控制信息存入所述第二共享存储器中的第四地址段中,采用乒乓模式依次将各层运算的控制信息存入所述第二共享存储器的第三地址段或第四地址段中其中,所述第一地址段、第二地址段、第三地址段以及第四地址段均为预设地址长度。
具体的,如图3所示,以上述16个bank的共享存储器为例,第一共享存储器SM-0由低地址的8个bank B0到B7组成,地址为0到2047,第二共享存储器SM-1由高地址的8个bankB8到B15组成,地址为2048到4095,为了实现第一共享存储器SM-0中输出数据和输入数据占用不同的地址,即将第一共享存储器SM-0的地址分为第一地址段和第二地址段,如图4所示,第一地址段的地址为0到1023,第二地址段的地址为1024到2047,同样,将即将第二共享存储器SM-1的地址分为第三地址段和第四地址段,如图4所示,第三地址段的地址为2048到3071,第四地址段的地址为3072到4095,在进行第一层运算之前,将第一层运算所需计算的初始数据存入所述第一共享存储器的第一地址段中,第一层运算的控制信息存入所述第二共享存储器中的第三地址段中。
具体实施时,需要注意的是,存入各个地址段的数据的长度都要小于等于预设地址长度,如图4所示,存入各个地址段的数据的长度都要小于等于256。具体的,各个地址段的预设地址长度可以根据具体运算来确定,如果数据长度较长,可以考虑增加FFT的分层,以减小数据的长度。
具体实施时,在进行第一层运算的计算过程,当第一层运算的计算结果数据发生时,根据第一层运算的控制信息中的输出数据的地址顺序将第一层运算的计算结果数据存入第一共享存储器的第二地址段中,如图5所示,即放在地址从哪1024开始的第一共享存储器SM-0的第二地址段中,若输入输出使用的是同一块地址则从0开始,这里使用乒乓模式故从1024开始;在进行第一层运算的计算过程中,同时,PEA主控控制主动从cache中将第二层运算的控制信息搬运到第二共享存储器的第四地址段中存储,当第一层运算的计算完成时,两块SM上的数据存储状况如图6所示。
具体实施时,在进行第二层FFT运算的计算过程中,将第一层运算的计算结果作为第二层运算所需计算的原始数据,即将第一层运算的计算结果和第二层运算的控制信息进行计算,如图7所示,进而将第二层运算的计算结果输出写入到地址从0开始的第一共享存储器SM-0的第一地址段中。同时,当第二层运算的计算发生的同时,主控控制PEA主动从cache中将第三层运算的控制信息搬运到地址从2048开始的第二共享存储器SM-1的第三地址段中,如图8所示,以此类推,一直实现到第八层FFT运算的计算结束,当最终层运算结束时,即第八层运算结束时,两块SM上的数据分布为计算结果最终分布在地址从0开始的第一共享存储器SM-0的第一地址段中,如图9所示。
具体实施时,乒乓预取的难点在于所有的控制信息的输入包括蝶形运算的权重、输入数据的地址顺序、输出数据的地址顺序都需要在固定配置下去取,也就是说,以八层运算FFT为例,八层运算中不同的蝶形运算权重以及8次不同变换的地址都是在相同的可重构配置信息下生成的。为了解决这一难点。首先,明确所有的输入包括了蝶形运算的输入1的地址Load A1、蝶形运算的输入2的地址Load A2、蝶形运算输出1的地址Load A3、蝶形运算输出2的地址Load A4、蝶形运算的权重值的实部的地址Load D3和虚部的地址Load D4。由上述所述的运算过程可知,所有的控制信息均在高8个bank组成的第二共享存储器SM-1中,起始地址为2048或者3072,为此,提出了在所述第二共享存储器的第三地址段和第四地址段中,划分出用于存储控制信息中蝶形运算的权重的地址段,称为权重地址段,划分出用于存储控制信息中输入数据的地址顺序的地址段,称为输入地址段,划分出用于存储控制信息中输出数据的地址顺序的地址段,称为输出地址段,将各层运算的控制信息按照权重地址段、输入地址段以及输出地址段存储在所述第二共享存储器的第三地址段或第四地址段中。
具体的,例如,将每层控制信息中的三个数据按照如下顺序进行划分(假设起始地址为0)蝶形运算权重的地址为[0,255]、蝶形运算输入数据的地址顺序为[256,511]、蝶形运算输出数据的地址顺序为[512,767],则对应到第二共享存储器的第三地址段或第四地址段中,当起始地址分别为2048和3072时,第一层运算的控制信息和第二层运算的控制信息按照权重地址段、输入地址段以及输出地址段存储在所述第二共享存储器的第三地址段或第四地址段中,如图10所示,第一层运算的控制信息的权重地址段为2048到2302,第一层运算的控制信息的输入地址段为2304到2559,第一层运算的控制信息的输出地址段为2560到2815。
具体实施时,为了进一步提高运算的效率,在本实施例中,提出了将第一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址写入可重构处理器的全局寄存器中后,在每层运算的计算结束后,通过处理单元阵列根据全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址计算出下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,以便快速根据启示地址去第二共享存储器中读取下一层运算的控制信息。例如,将第一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址写入可重构处理器的全局寄存器中,在第一层运算的计算结束时,通过所述处理单元阵列将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址并存储在所述全局寄存器中,依次在每层运算的计算结束后,通过所述处理单元阵列将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,并根据下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址从所述第二共享存储器中读取下一层运算的控制信息。
具体的,因为取数字的长度可以通过迭代次数进行控制,所以只需要配置好各层运算的控制信息对应的首地址即可,需要进行转换的所有的起始地址可以通过计算方式得到,例如,如图11所示,左边的数据可以表示为第1、3、5、7层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,右边的数据可以表示为第2、4、6、8层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址。以下如图11所示中左边的数据以第1层运算的控制信息对应的权重地址段的起始地址(其中蝶形运算权重包括实部和虚部,故权重地址段包括两段,有两个权重地址段的起始地址)、输入地址段的起始地址(其中蝶形运算的输入数据为两路数据,故输入地址段包括两段,有两个输入地址段的起始地址)以及输出地址段的起始地址(其中蝶形运算的输出数据为两路数据,故输出地址段包括两段,有两个输出地址段的起始地址)为例,通过将左边的所有的起始地址通过异或1024,即可得到第2层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,以实现两个地址之间进行跳转。具体的实现方法可以是将左边第一层运算的控制信息的6个起始地址提前写入全局寄存器GR,访存的PE起始地址通过访问全局寄存器GR进行读取,每计算完一层FFT运算即每次处理单元阵列PEA迭代结束之后,使用阵列中的部分处于空闲状态的PE对记录了起始地址的全局寄存器GR异或1024,以此来变换起始地址。
基于同一发明构思,本发明实施例中还提供了一种用于快速傅里叶变换运算的可重构处理器,如下面的实施例所述。由于用于快速傅里叶变换运算的可重构处理器解决问题的原理与可重构处理器上快速傅里叶变换运算方法相似,因此用于快速傅里叶变换运算的可重构处理器的实施可以参见可重构处理器上快速傅里叶变换运算方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
在本实施例中,如图12所示,用于快速傅里叶变换运算的可重构处理器,包括:
共享存储器1202,所述共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;
处理单元阵列1204,用于在将第一层运算所需计算的初始数据存入所述第一共享存储器且将第一层运算的控制信息存入所述第二共享存储器后,以第一层运算为当前层运算开始循环执行以下步骤,依次实现快速傅里叶变换的第一层运算至最后一层运算的计算:
从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中。
在一个实施例中,所述当前层运算的控制信息包括蝶形运算的权重、输入数据的地址顺序和输出数据的地址顺序,所述处理单元阵列具体用于根据所述输入数据的地址顺序从所述第一共享存储器中获取当前层运算所需计算的初始数据,根据当前层运算所需计算的初始数据和所述蝶形运算的权重进行计算得到当前层运算的计算结果,根据所述输出数据的地址顺序将当前层运算的计算结果输出至所述第二共享存储器中存储。
在一个实施例中,所述第一共享存储器按照地址由低到高划分为第一地址段和第二地址段,所述第二共享存储器按照地址由低到高划分为第三地址段和第四地址段,第一层运算所需计算的初始数据存入所述第一共享存储器的第一地址段中,第一层运算的计算结果存入所述第一共享存储器的第二地址段中,下一层运算的计算结果存入所述第一共享存储器中的第一地址段中,各层运算的计算结果采用乒乓模式依次存入所述第一共享存储器的第一地址段或第二地址段中;第一层运算的控制信息存入所述第二共享存储器中的第三地址段中,下一层运算的控制信息存入所述第二共享存储器中的第四地址段中,各层运算的控制信息采用乒乓模式依次存入所述第二共享存储器的第三地址段或第四地址段中其中,所述第一地址段、第二地址段、第三地址段以及第四地址段均为预设地址长度。
在一个实施例中,在所述第二共享存储器的第三地址段和第四地址段中,划分有用于存储控制信息中蝶形运算的权重的地址段,称为权重地址段,划分有用于存储控制信息中输入数据的地址顺序的地址段,称为输入地址段,划分有用于存储控制信息中输出数据的地址顺序的地址段,称为输出地址段,各层运算的控制信息按照权重地址段、输入地址段以及输出地址段存储在所述第二共享存储器的第三地址段或第四地址段中。
在一个实施例中,还包括:全局寄存器,用于存储第一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址;
所述处理单元阵列还用于在第一层运算的计算结束时,将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址并存储在所述全局寄存器中,依次在每层运算的计算结束后,将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,根据下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址从所述第二共享存储器中读取下一层运算的控制信息。
本发明实施例实现了如下技术效果:提出了将可重构处理器的共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;将第一层运算所需计算的初始数据存入所述第一共享存储器,将第一层运算的控制信息存入所述第二共享存储器后,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤,依次实现从第一层运算至最后一层运算的计算:从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中。实现了第一共享存储器和第二共享存储器采用乒乓预取的原理来存储各层运算的初始数据和各层运算的控制信息,有利于实现数据的高效存储;同时,在进行当前层运算的计算的同时将下一层运算的控制信息存入第二共享存储器中,以便在当前层运算的计算结束后,直接读取下一层运算的控制信息并将其与当前层运算的计算结果进行计算,与现有技术相比,使得可以在进行下一层运算的计算前不必再与主控交互获取控制信息,使得有利于更快速地进入下一层运算的计算,可以视为零缓冲流水执行,进而有利于提高运算的效率,此外,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中,避免当前层运算的计算结果提前覆盖住了当前层运算中还没有参与运算的输入数据,有利于确保运算顺利、正确、高效地进行。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种可重构处理器上快速傅里叶变换运算方法,其特征在于,包括:
将快速傅里叶变换分为多层运算;
将可重构处理器的共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;
将第一层运算所需计算的初始数据存入所述第一共享存储器,将第一层运算的控制信息存入所述第二共享存储器,通过可重构处理器中的处理单元阵列以第一层运算为当前层运算开始循环执行以下步骤,依次实现从第一层运算至最后一层运算的计算:
从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中;
所述当前层运算的控制信息包括蝶形运算的权重、输入数据的地址顺序和输出数据的地址顺序,通过所述处理单元阵列根据所述输入数据的地址顺序从所述第一共享存储器中获取当前层运算所需计算的初始数据,根据当前层运算所需计算的初始数据和所述蝶形运算的权重进行计算得到当前层运算的计算结果,根据所述输出数据的地址顺序将当前层运算的计算结果输出至所述第二共享存储器中存储。
2.如权利要求1所述的可重构处理器上快速傅里叶变换运算方法,其特征在于,还包括:
将所述第一共享存储器按照地址由低到高划分为第一地址段和第二地址段,将所述第二共享存储器按照地址由低到高划分为第三地址段和第四地址段,将第一层运算所需计算的初始数据存入所述第一共享存储器的第一地址段中,将第一层运算的计算结果存入所述第一共享存储器的第二地址段中,将下一层运算的计算结果存入所述第一共享存储器中的第一地址段中,采用乒乓模式依次将各层运算的计算结果存入所述第一共享存储器的第一地址段或第二地址段中;将第一层运算的控制信息存入所述第二共享存储器中的第三地址段中,将下一层运算的控制信息存入所述第二共享存储器中的第四地址段中,采用乒乓模式依次将各层运算的控制信息存入所述第二共享存储器的第三地址段或第四地址段中其中,所述第一地址段、第二地址段、第三地址段以及第四地址段均为预设地址长度。
3.如权利要求2所述的可重构处理器上快速傅里叶变换运算方法,其特征在于,还包括:
在所述第二共享存储器的第三地址段和第四地址段中,划分出用于存储控制信息中蝶形运算的权重的地址段,称为权重地址段,划分出用于存储控制信息中输入数据的地址顺序的地址段,称为输入地址段,划分出用于存储控制信息中输出数据的地址顺序的地址段,称为输出地址段,将各层运算的控制信息按照权重地址段、输入地址段以及输出地址段存储在所述第二共享存储器的第三地址段或第四地址段中。
4.如权利要求3所述的可重构处理器上快速傅里叶变换运算方法,其特征在于,还包括:
将第一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址写入可重构处理器的全局寄存器中,在第一层运算的计算结束时,通过所述处理单元阵列将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址并存储在所述全局寄存器中,依次在每层运算的计算结束后,通过所述处理单元阵列将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,并根据下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址从所述第二共享存储器中读取下一层运算的控制信息。
5.一种用于快速傅里叶变换运算的可重构处理器,其特征在于,包括:
共享存储器,所述共享存储器中的bank按照地址由低到高划分为两组,低地址的一组bank组成第一共享存储器,高地址的一组bank组成第二共享存储器;
处理单元阵列,用于在将第一层运算所需计算的初始数据存入所述第一共享存储器且将第一层运算的控制信息存入所述第二共享存储器后,以第一层运算为当前层运算开始循环执行以下步骤,依次实现快速傅里叶变换的第一层运算至最后一层运算的计算:
从所述第一共享存储器中读取当前层运算所需计算的初始数据,从所述第二共享存储器中读取当前层运算的控制信息,并根据当前层运算所需计算的初始数据和当前层运算的控制信息进行计算,通过所述处理单元阵列将当前层运算的计算结果输出至所述第一共享存储器中进行存储,在所述处理单元阵列进行当前层运算的同时,将下一层运算的控制信息存入所述第二共享存储器中,以当前层运算的计算结果作为下一层运算所需计算的初始数据,将下一层运算视为新的当前层运算,将下一层运算的控制信息视为新的当前层运算的控制信息,其中,在所述第一共享存储器中当前层运算所需计算的初始数据和当前层运算的计算结果存储在不同的地址中,在所述第二共享存储器中当前层运算的控制信息和下一层运算的控制信息存储在不同的地址中;
所述当前层运算的控制信息包括蝶形运算的权重、输入数据的地址顺序和输出数据的地址顺序,所述处理单元阵列具体用于根据所述输入数据的地址顺序从所述第一共享存储器中获取当前层运算所需计算的初始数据,根据当前层运算所需计算的初始数据和所述蝶形运算的权重进行计算得到当前层运算的计算结果,根据所述输出数据的地址顺序将当前层运算的计算结果输出至所述第二共享存储器中存储。
6.如权利要求5所述的用于快速傅里叶变换运算的可重构处理器,其特征在于,所述第一共享存储器按照地址由低到高划分为第一地址段和第二地址段,所述第二共享存储器按照地址由低到高划分为第三地址段和第四地址段,第一层运算所需计算的初始数据存入所述第一共享存储器的第一地址段中,第一层运算的计算结果存入所述第一共享存储器的第二地址段中,下一层运算的计算结果存入所述第一共享存储器中的第一地址段中,各层运算的计算结果采用乒乓模式依次存入所述第一共享存储器的第一地址段或第二地址段中;第一层运算的控制信息存入所述第二共享存储器中的第三地址段中,下一层运算的控制信息存入所述第二共享存储器中的第四地址段中,各层运算的控制信息采用乒乓模式依次存入所述第二共享存储器的第三地址段或第四地址段中其中,所述第一地址段、第二地址段、第三地址段以及第四地址段均为预设地址长度。
7.如权利要求6所述的用于快速傅里叶变换运算的可重构处理器,其特征在于,
在所述第二共享存储器的第三地址段和第四地址段中,划分有用于存储控制信息中蝶形运算的权重的地址段,称为权重地址段,划分有用于存储控制信息中输入数据的地址顺序的地址段,称为输入地址段,划分有用于存储控制信息中输出数据的地址顺序的地址段,称为输出地址段,各层运算的控制信息按照权重地址段、输入地址段以及输出地址段存储在所述第二共享存储器的第三地址段或第四地址段中。
8.如权利要求7所述的用于快速傅里叶变换运算的可重构处理器,其特征在于,还包括:全局寄存器,用于存储第一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址;
所述处理单元阵列还用于在第一层运算的计算结束时,将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址并存储在所述全局寄存器中,依次在每层运算的计算结束后,将所述全局寄存器中的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址分别与预设地址长度进行异或计算,得到下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址,根据下一层运算的控制信息对应的权重地址段的起始地址、输入地址段的起始地址以及输出地址段的起始地址从所述第二共享存储器中读取下一层运算的控制信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011503222.7A CN112487352B (zh) | 2020-12-18 | 2020-12-18 | 可重构处理器上快速傅里叶变换运算方法及可重构处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011503222.7A CN112487352B (zh) | 2020-12-18 | 2020-12-18 | 可重构处理器上快速傅里叶变换运算方法及可重构处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112487352A CN112487352A (zh) | 2021-03-12 |
CN112487352B true CN112487352B (zh) | 2022-06-10 |
Family
ID=74914661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011503222.7A Active CN112487352B (zh) | 2020-12-18 | 2020-12-18 | 可重构处理器上快速傅里叶变换运算方法及可重构处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112487352B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679670A (zh) * | 2015-03-10 | 2015-06-03 | 东南大学 | 一种面向fft和fir的共享数据缓存结构及管理方法 |
WO2018129930A1 (zh) * | 2017-01-12 | 2018-07-19 | 深圳市中兴微电子技术有限公司 | 快速傅里叶变换处理方法、装置和计算机存储介质 |
CN111581148A (zh) * | 2020-04-16 | 2020-08-25 | 清华大学 | 基于粗粒度可重构架构的处理器 |
-
2020
- 2020-12-18 CN CN202011503222.7A patent/CN112487352B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679670A (zh) * | 2015-03-10 | 2015-06-03 | 东南大学 | 一种面向fft和fir的共享数据缓存结构及管理方法 |
WO2018129930A1 (zh) * | 2017-01-12 | 2018-07-19 | 深圳市中兴微电子技术有限公司 | 快速傅里叶变换处理方法、装置和计算机存储介质 |
CN111581148A (zh) * | 2020-04-16 | 2020-08-25 | 清华大学 | 基于粗粒度可重构架构的处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN112487352A (zh) | 2021-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mittal et al. | A survey of techniques for optimizing deep learning on GPUs | |
US20210397451A1 (en) | Streaming engine with cache-like stream data storage and lifetime tracking | |
US11573847B2 (en) | Streaming engine with deferred exception reporting | |
US11099933B2 (en) | Streaming engine with error detection, correction and restart | |
US11704548B2 (en) | Multicast network and memory transfer optimizations for neural network hardware acceleration | |
Dang et al. | CUDA-enabled Sparse Matrix–Vector Multiplication on GPUs using atomic operations | |
US11068164B2 (en) | Streaming engine with fetch ahead hysteresis | |
CN111124675A (zh) | 一种面向图计算的异构存内计算设备及其运行方法 | |
US20200401526A1 (en) | Streaming engine with early and late address and loop count registers to track architectural state | |
Cui et al. | Auto-tuning dense matrix multiplication for GPGPU with cache | |
WO2016024508A1 (ja) | マルチプロセッサ装置 | |
CN112487352B (zh) | 可重构处理器上快速傅里叶变换运算方法及可重构处理器 | |
Ries et al. | Triangular matrix inversion on graphics processing unit | |
CN114064560B (zh) | 一种面向粗粒度可重构阵列的可配置便笺式缓存设计方法 | |
CN114996647A (zh) | 运算单元、相关装置和方法 | |
Cheng et al. | Alleviating bottlenecks for dnn execution on gpus via opportunistic computing | |
CN115481721B (zh) | 一种针对卷积神经网络的Psum计算电路 | |
CN113313251B (zh) | 一种基于数据流架构的深度可分离卷积融合方法及系统 | |
WO2023287756A9 (en) | Nested loop optimization with vector memory instructions | |
Neves et al. | Representing sparse binary matrices as straight-line programs for fast matrix-vector multiplication | |
Milani et al. | Exploiting fine grained parallelism on the spe | |
CN117851738A (zh) | 一种基于昇腾910平台的复数矩阵向量乘法计算方案 | |
Strey | On the Efficient Implementation of Reductions on the Cell Broadband Engine | |
Chen et al. | Dataflow Optimization with Layer-Wise Design Variables Estimation | |
Schwinn et al. | Geometric algebra computing on the CUDA platform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |