首页 / 一种动态可重构处理器

一种动态可重构处理器有效专利 发明

技术领域

[0001] 本发明涉及嵌入式系统的技术领域,特别涉及一种动态可重构处理器。

相关背景技术

[0002] 动态可重构处理器是一种新型的处理器构架,其结合了软件的灵活性和硬件的高效性。和传统单核微处理器相比,不仅可以改变控制流,还可以改变数据通路,具有高性能、低功耗、灵活性好、扩展性好的优点,尤其适合于处理计算密集型的算法,例如媒体处理、模式识别、基带处理等。因此动态可重构处理器也成为目前处理器结构的一个重要发展方向,如欧洲微电子中心(IMEC)的ADRES处理器和惠普(HP)的CHESS处理器,前者由紧耦合的超长指令字(Very Long Instruction Word,VLIW)处理器内核和粗颗粒度并行矩阵计算的可重构硬件构成,后者由大量可重构算术计算单元阵列构成。
[0003] 动态可重构处理器的核心一般为一个二维的可重构算术逻辑单元(ALU)阵列,该结构是并行计算以提高处理能力的基础。同时,可重构算术逻辑单元间必须拥有较为灵活的互联结构以保证运算通用性,这种可配置的互联结构使得动态可重构处理器可以改变数据流,实现了对数据流的高速并行处理,相对于传统单核、少核处理器大大的提升了计算性能。另一方面,相对于传统的静态可重构电路,如用大部分的现场可编程逻辑阵列(FPGA)来实现处理器功能时,动态的可重构特性使得处理器能够通过时分复用以大大减少所需的电路面积。
[0004] 对于大部分算法流图,其结构都是不规则的,当把它们布局到一个规则的可重构算术逻辑阵列时,由于阵列的规模限制,很容易出现算法的部分结构无法布局进阵列,如图1所示的算法就是不可能布局进一个4x4的阵列当中,所以必然需要分割成两次配置顺序执行,而这两次配置之间的数据相关,包括图1中圆块1所示的纵向边界数据和圆块2所示的横向边界数据,这些边界数据是需要缓存的。
[0005] 其中,横向的边界数据传递可以通过阵列内部的旁路结构传递至输出端口,和纵向的边界数据一样进入数据输出通路,写到存储器。在它们被下次配置调用时再从外部存储器中读取。这样做的优点是系统配置简单而且规则,但其缺点也在于,第一,由于外部存储器的读写速度比较慢,使得运算切换效率不高。第二,由于通常的可重构阵列没有纵向的互联线,所以横向的边界数据需要旁路很多运算单元以传递至下方的输出端口,浪费了可重构硬件的资源。
[0006] 因此,目前需要本领域技术人员迫切解决的一个技术问题就是:提供一种动态可重构处理器系统中批量数据缓存的装置,以提高动态可重构处理器对于算法流图切割后的切换效率,节省可重构硬件资源。

具体实施方式

[0039] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0040] 为使本领域技术人员更好地理解本发明,以下对算法流图的布局原理进一步说明。
[0041] 算法或者应用,最终都可以划归成图的表示形式。可重构处理器内计算单元一般采用阵列的结构,参考图2表示一个计算资源;方框和方框之间有路由逻辑,实现之间的数据传递。算法流图可以由可重构单元阵列来实现,如图3中,圆圈表示运算或者操作,连线表示数据传递。圆圈可以用方框实现,联系可以用阵列的路由实现,体现“图即电路,电路即图”的思想,这种实现方式叫做算法流图到可重构单元阵列的映射。图4即为一次映射后的示意图。
[0042] 在具体实现中,不是所有的图都可以直接向一个具体的可重构单元阵列映射。当图的宽度(并行度)或者深度(关键路径)大于可重构单元阵列的宽度或者深度时,则无法直接映射(资源不够了)。需要将图分解成两个或者多个子图再分别进行映射。
[0043] 当图被分解成多个子图,子图之间有连线(即数据传递)时,需要保存边界上的数据(即运算的中间数据)到缓存结构中。边界数据可能同时有多个输入、多个输出。均需要考虑到缓存结构的实现中来。公知的是,处理器由计算单元和存储单元两部分组成。计算单元的数据按照被使用的频度划分,连续使用的数据(频度最高)存储在寄存器堆中,间歇使用的数据存放在片上的memory中,很长时间也不使用的数据放置在片外(比如硬盘中),这里和计算单元配合使用的存储装置就称为缓存。在具体实现中,通用处理器和动态可重构处理器都需要缓存装置。
[0044] 具体而言,通用处理器内部的数据缓存结构主要包括缓存(Cache Memory)和寄存器堆。
[0045] Cache是处理器和内存间的临时存储器,容量较小但是读写速度快于内存,可以缓解内存读写速度和处理器的不匹配。缓存中的所有数据都是内存中的一小部分,而且该部分较大可能即将被处理器访问,所以当处理器调用大量数据时,内存被避开,读取速度被加快。
[0046] 寄存器堆是处理器的重要组成部分,用于高速暂存指令、数据和地址,是系统获取资料最快捷的途径。寄存器的读写速度也非常快,是处理器的架构单元,是一条指令的输出和输入能够索引到的寄存器群组。
[0047] 通用处理器是单一运算单元,串行运算,单次运算一般需要两到三个输入,一个输出。动态可重构处理器,通常是阵列形式,并行运算,一般需要较多的输入输出。对于动态可重构处理器的现有结构而言,由于动态可重构处理器的运算逻辑单元阵列减少了很多数据缓存的必要,运算的中间数据都可以直接传输到下一级运算逻辑单元的输入寄存器。而阵列的整体计算结果通常可以直接写入外部的存储器。因而,本领域技术人员通常认为不需要在动态可重构处理器中设置批量数据缓存装置,而本专利发明人发现这种现有动态可重构处理器的设计将极大的影响运算切换效率。以通用处理器举例而言,如果计算输出数据很久以后才需要使用(数据使用频度低),或者,片内寄存器堆已满(已经用完),则需要将数据保存到缓存(cache)或者片上sdram(同步动态随机存储器),甚至片外memory(如u盘、硬盘等)。
[0048] 对于通用处理器而言,计算时间可能只要1个周期,但是到cache的保存需要两个周期,sdram需要~10个周期,片外的ddr需要~100周期,硬盘需要~1000周期。下一次计算的时候同样需要花费很多时间读入计算单元,并进行计算。其中,这里定义的运算切换效率=1-(数据切换时间/数据计算时间)。数据切换时间包括上一次计算完成之后数据保存到缓存装置的时间,加上,下一次计算开始之前数据从缓存装置中读取的时间。数据计算时间指,当前读入数据要进行的计算周期数。
[0049] 可以看出,对于通用处理器,数据保存到外部memory再读入的情况下,运算切换效率很低。
[0050] 由于memory通常带宽有限(比如8bit、16bit、32bit等);加上动态可重构处理器的子图边界数据很多,可能同时有多个输出结果(比如10个32bit,20个32bit等)。则可重构处理器的运算切换效率要比通用处理器来的恶化很多(比如10倍,20倍)。
[0051] 正是由于本专利发明人发现了以上问题,因而创造性地提出本发明的核心构思之一在于,提出了动态可重构处理器内批量数据缓存的结构,在动态可重构阵列内部添加通用寄存器堆,主要用于缓存算法流图切割时的边界数据,以提高动态可重构处理器对于算法流图切割后的切换效率,并节省可重构硬件资源。
[0052] 参考图5,示出了本发明的一种动态可重构处理器实施例1的一个结构框图,具体可以包括以下单元:
[0053] 可重构单元阵列501;
[0054] 与所述可重构单元阵列501相连的寄存器堆502;
[0055] 其中,所述可重构单元阵列是动态可重构处理器的核心,用于根据配置信息执行数据运算。在本发明实施例中,可重构单元阵列还可以根据配置信息向所述寄存器堆写入输出数据,以及,从所述寄存器堆读取输入数据。
[0056] 在本发明的一种优选实施例中,所述寄存器堆可以用于缓存算法流图分割时的边界数据。并且,所述寄存器堆可以设置在可重构单元阵列内部。
[0057] 现有技术中,运算切换时,数据需要从输出FIFO输出,然后等再次使用时从输入FIFO输入,数据切换效率不高。因此在设计可重构处理器的缓存装置时尽可能不使用外部存储器,使用寄存器堆的时候也要仔细设计,尽可能设计成访问速度快、访问带宽大的结构。
[0058] 在本发明实施例的结构中,寄存器堆位于可重构运算逻辑阵列内部,因此数据不用再通过外部存储器,而是使用通用寄存器堆来批量存储动态可重构处理器的中间数据,对于阵列而言拥有极高的读写速度。
[0059] 同时寄存器堆与可重构运算逻辑阵列是全互联的,即是说,阵列中所有的运算逻辑单元都能从该寄存器堆读取输入数据,也可以将其输出数据写入该寄存器堆,一次运算的结果即中间数据可以直接保存到内部寄存器堆中,避免了浪费硬件资源将该结果传递至输出端口,下一次运算输入直接从内部寄存器堆读取,从而方便配置的切换,提高数据切换的效率,节省了硬件开销。
[0060] 当需要对可重构阵列进行流水线设计时,阵列内部的缓存寄存器堆可以提高流水的效率。因为如果两次配置间存在数据相关性,全互联的寄存器堆能够提早将下一拍的数据准备好,避免插入空泡,提高流水的效率。
[0061] 参考图6,示出了本发明的一种动态可重构处理器实施例2的一个结构框图,具体可以包括以下单元:
[0062] 输入FIFO601、输出FIFO606、可重构单元阵列603;
[0063] 连接在所述输入FIFO与可重构单元阵列之间的预输入单元602;
[0064] 连接在所述可重构单元阵列与输出FIFO之间的输出选择单元604;
[0065] 与所述可重构单元阵列相连的寄存器堆605,所述寄存器堆还与所述预输入单元和输出选择单元相连;
[0066] 其中,所述输出选择单元根据配置信息向所述寄存器堆写入可重构单元阵列的运算结果数据,所述预输入单元根据配置信息从所述寄存器堆读取可重构单元阵列运算所需的数据。
[0067] 在具体实现中,所述动态可重构处理器可以与外部存储器相连。在本发明的一种优选实施例中,所述输入FIFO501可以用于外部数据的输入;所述预输入单元还可以根据配置信息从所述输入FIFO501读取可重构单元阵列运算所需的数据;所述输出选择单元504还可以根据配置信息向所述输出FIFO输出运算结果数据;
[0068] 所述输出FIFO可以向外部存储器输出数据。
[0069] 更具体而言,所述配置信息可以包括所述预输入单元读取数据的寄存器堆地址,以及,输出选择单元写入数据的寄存器堆地址。
[0070] 输入FIFO读入外部数据,将数据传递给预输入单元处理,预输入单元根据配置信息中读取数据的寄存器堆地址,从对应地址中提取数据,可重构单元阵列预输入单元提取的数据进行运算,然后输出运算结果,运算结果数据将由输出选择单元根据配置信息中写入数据的寄存器堆地址,写入寄存器堆的对应地址。或者,所述输出选择单元根据配置信息向所述输出FIFO输出运算结果数据。
[0071] 当需要对可重构阵列进行流水线设计时,阵列内部的缓存寄存器堆可以提高流水的效率。因为如果两次配置间存在数据相关性,全互联的寄存器堆能够提早将下一拍的数据准备好,避免插入空泡,提高流水的效率。
[0072] 在本发明的一种优选实施例中,所述动态可重构处理器还可以包括与所述寄存器堆相连的常数存储器;所述可重构单元阵列在执行运算前,从所述常数存储器中读取常数更新其内部寄存器堆的内容。
[0073] 在具体实现中,所述寄存器堆与输入FIFO、输出FIFO具有相同的接口宽度。
[0074] 为使本领域技术人员更好地理解本发明,以下结合图7所示的动态可重构处理器的结构图,通过一个具体示例进一步说明本发明。
[0075] 在本例中,所述动态可重构处理器具体可以包括以下单元:
[0076] 输入FIFO(INPUT_FIFO)701;
[0077] 预输入单元(PRE_INPUT_x88)702;
[0078] 可重构单元阵列(RC_LINEx8)703;
[0079] 输出选择单元(Output_Select)704;
[0080] 寄存器堆(Constant Reg Group)705;
[0081] 输出FIFO(OUTPUT_FIFO)706;
[0082] 因为图分割的边界数据和常数等效,本示例中,所述动态可重构处理器还可以包括与所述寄存器堆相连的常数存储器。
[0083] 所述预输入单元根据配置信息从所述输入FIFO和寄存器堆读取可重构单元阵列运算所需的数据,将数据传递给可重构单元阵列。其中,配置信息为预输入单元读取数据的寄存器堆地址,读取的数据包括输出选择单元上一次向所述寄存器堆写入的运算结果数据。
[0084] 本示例中可重构单元阵列,是一个8x8 RCA阵列,用于根据配置信息执行运算,向输出选择单元输入数据。所述8x8 RCA每次根据配置信息进行计算前,从与所述寄存器堆相连的常数存储器中读取常数更新可重构单元阵列8x8 RCA内容。
[0085] 数据进入输出选择单元后,输出选择单元根据配置信息将RC_LINE_x8的数据输出,包括:根据配置信息向所述输出FIFO输出运算结果数据,还根据配置信息向寄存器堆写入可重构单元阵列的运算结果数据,这是使用通用寄存器堆批量缓存数据的比较好的一种实现方法,节省了硬件开销,易于实现。
[0086] 其中输入FIFO,输出FIFO是整个计算单元的IO buffer,用来隔离外部数据和阵列数据,使得可重构单元阵列可以独立、流畅的进行并行运算,外部数据是进入输入FIFO,再由输入FIFO进入预输入单元的。
[0087] 本示例中,输出选择单元提供64个RC结果寄存器到输出FIFO或者内部缓存(常数寄存器组)的通路。
[0088] 该示例中寄存器堆与输入FIFO、输出FIFO具有相同的接口宽度。
[0089] 接下来对本示例的技术效果进行说明,假设运算1输出16个数,运算2输入其中8个数据,输出FIFO和输入FIFO的宽度均为4,寄存器堆宽度等同FIFO宽度。
[0090] 原本可重构单元阵列的数据结果经过从输出FIFO输出需要4个周期,保存到外部存储器需要16个周期,从外部存储器读出需要8个周期,输入FIFO输入2个周期,数据切换时间总计30个周期;利用本专利结构将数据保存到可重构单元阵列内部的寄存器堆中,保存到寄存器堆需要4个周期,寄存器堆从读出需要2个周期,数据切换时间总共6个周期。由此可见,本专利的结构通过在动态可重构处理器的可重构单元阵列中添加寄存器堆,使得数据不需要经过外部存储器,直接写入寄存器堆,下次运算时可以直接从常数存储器读取常数更新其内部寄存器堆的内容,从而提高了数据切换效率,节省了硬件资源。
[0091] 本发明在动态可重构处理器的可重构单元阵列中添加寄存器堆,所述可重构单元阵列根据配置信息向所述寄存器堆写入输出数据,以及,从所述寄存器堆读取输入数据。所述寄存器堆位于可重构单元阵列的内部,因此数据不用再通过外部存储器,提高了数据切换效率,节省了硬件资源。
[0092] 需要说明的是,所述内部寄存器堆,可以选择用也可以选择不用。依据数据使用的频度。数据频繁使用,则尽可能放置到内部寄存器堆。另外,这种缓存装置,同时也可以用于其他数据类别的管理。比如,如果寄存器堆可以由可重构单元阵列外部的接口改写,则通过此接口可以快速写入立即数或者常数。这和cache的强制更新特性是相似的。
[0093] 本说明书中的各个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0094] 以上对本发明所提供的一种动态可重构处理器进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页 第1页 第2页 第3页