发明内容
为了解决循环任务在处理器上执行时间较长的问题,提高循环任务的运行速度,降低应用程序总的运行时间,本发明实施例提供了一种处理循环任务的方法、系统和设备,具体如下:。
本发明实施例提供了一种处理循环任务的方法,所述方法应用于可重构阵列协处理器,所述方法包括:
配置信息寄存器模块接收来自总线的配置信息,所述配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
循环控制器模块从所述配置信息寄存器模块获取所述配置信息,并将所述输入FIFO配置信息发送给所述输入FIFO模块、所述输出FIFO配置信息发送给所述输出FIFO模块、所述运算单元配置信息发送给所述运算单元;
所述输入FIFO模块根据所述输入FIFO配置信息读取数据;
所述输入选择模块根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组特定的位置;
所述可重构单元阵列根据运算单元配置信息执行循环任务,将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块中和通过路由模块输入到下一行可重构单元阵列,并将产生的运算结果输出;
所述输出选择模块根据运算单元配置信息将所述可重构单元阵列输出的运算结果按特定的顺序写入到所述输出FIFO模块;
所述输出FIFO模块根据所述输出FIFO配置信息发送数据。
其中,所述输入FIFO配置信息、所述输出FIFO配置信息、所述运算单元配置信息分别对所述输入FIFO模块、所述输出FIFO模块、所述运算单元配置,所述输入FIFO模块、所述输出FIFO模块、所述运算单元的控制相互独立且分别有多套配置信息寄存器。
其中,所述循环控制器模块从所述配置信息寄存器模块获取所述配置信息的步骤,还包括:
所述循环控制器模块根据可重构阵列协处理器的内部状态寄存器控制所述配置信息寄存器模块是否从总线上读取输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以及将读入的某一项配置信息写入所述配置信息寄存器模块中的第几套配置信息寄存器。
其中,所述可重构单元阵列根据运算单元配置信息执行循环任务,并将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块中和通过路由模块输入到下一行可重构单元阵列,具体包括:
所述运算单元执行循环任务时,以流水线的工作方式将多次循环同时在可重构单元阵列上执行,将每一行可重构单元阵列的运算结果通过路由模块输入到下一行,如果当前行为可重构单元阵列的最后一行,则通过路由模块将运算结果输入到可重构单元阵列的第一行;并根据运算单元配置信息将运算结果输入到所述临时数据模块缓存,以便于根据运算单元配置信息在某个执行步骤中获取所缓存的数据。
本发明实施例提供了一种处理循环任务的系统,所述系统包括:控制单元和运算单元,其中,
所述控制单元包括:配置信息寄存器模块、循环控制器模块、输入FIFO模块、输出FIFO模块、输入选择模块和输出选择模块;
所述配置信息寄存器模块,用于接收来自总线的配置信息,所述配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
循环控制器模块,用于从所述配置信息寄存器模块获取所述配置信息,并将所述输入FIFO配置信息发送给所述输入FIFO模块、所述输出FIFO配置信息发送给所述输出FIFO模块、所述运算单元配置信息发送给所述运算单元;
所述输入FIFO模块,用于根据所述输入FIFO配置信息读取数据;
所述输入选择模块,用于根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组特定的位置;
所述输出选择模块,用于根据运算单元配置信息将所述可重构单元阵列输出的运算结果按特定的顺序写入到所述输出FIFO模块;
所述输出FIFO模块,用于根据所述输出FIFO配置信息发送数据。
所述RC输入寄存器组,用于根据所述运算单元配置信息将存储的数据输入到所述运算单元中;
所述运算单元包括:可重构单元阵列、路由模块和临时数据模块,
所述可重构单元阵列,用于根据运算单元配置信息执行循环任务,将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块中和通过路由模块输入到下一行可重构单元阵列,并将产生的运算结果输出;
所述路由模块,用于将每一行可重构单元阵列产生的运算结果输入到下一行可重构单元阵列;
所述临时数据模块,用于根据运算单元配置信息缓存可重构单元阵列的运算结果,并根据运算单元配置信息将缓存的运算结果输入到指定的可重构单元阵列中。
其中,所述输入FIFO配置信息、所述输出FIFO配置信息、所述运算单元配置信息分别对所述输入FIFO模块、所述输出FIFO模块、所述运算单元配置,所述输入FIFO模块、所述输出FIFO模块、所述运算单元的控制相互独立且分别有多套配置信息寄存器。
本发明实施例还提供了一种可重构阵列协处理器设备,所述设备包括:控制单元和运算单元,
所述控制单元,用于控制所述运算单元同时执行多次循环任务,并将最后产生的输出结果输出;
所述运算单元,用于在所述控制单元的控制下执行多次循环任务。
其中,所述控制单元包括:配置信息寄存器模块、循环控制器模块、输入FIFO模块、输出FIFO模块、输入选择模块和输出选择模块,
所述配置信息寄存器模块,用于接收来自总线的配置信息,所述配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
循环控制器模块,用于从所述配置信息寄存器模块获取所述配置信息,并将所述输入FIFO配置信息发送给所述输入FIFO模块、所述输出FIFO配置信息发送给所述输出FIFO模块、所述运算单元配置信息发送给所述运算单元;
所述输入FIFO模块,用于根据所述输入FIFO配置信息读取数据;
所述输入选择模块,用于根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组特定的位置;
所述输出选择模块,用于根据运算单元配置信息将所述可重构单元阵列输出的运算结果按特定的顺序写入到所述输出FIFO模块;
所述输出FIFO模块,用于根据所述输出FIFO配置信息发送数据。
所述RC输入寄存器组,用于根据所述运算单元配置信息将存储的数据输入到所述运算单元中。
其中,所述运算单元包括:可重构单元阵列、路由模块和临时数据模块,
所述可重构单元阵列,用于根据运算单元配置信息执行循环任务,将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块中和通过路由模块输入到下一行可重构单元阵列,并将产生的运算结果输出;
所述路由模块,用于将每一行可重构单元阵列产生的运算结果输入到下一行可重构单元阵列;
所述临时数据模块,用于根据运算单元配置信息缓存可重构单元阵列的运算结果,并根据运算单元配置信息将缓存的运算结果输入到指定的可重构单元阵列中。
其中,所述配置信息寄存器模块,具体用于分别对所述输入FIFO模块、所述输出FIFO模块、所述运算单元配置所述输入FIFO配置信息、所述输出FIFO配置信息、所述运算单元配置信息,以使得所述输入FIFO模块、所述输出FIFO模块、所述运算单元的控制相互独立且分别有多套配置信息寄存器。
其中,所述循环控制器模块,还用于根据可重构阵列协处理器的内部状态寄存器控制所述配置信息寄存器模块是否从总线上读取输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以及将读入的某一项配置信息写入所述配置信息寄存器模块中的第几套配置信息寄存器。
其中,所述可重构单元阵列具体用于,执行循环任务时,以流水线的工作方式将多次循环同时在可重构单元阵列上执行,将每一行可重构单元阵列的运算结果通过路由模块输入到下一行,如果当前行为可重构单元阵列的最后一行,则通过路由模块将运算结果输入到可重构单元阵列的第一行;并根据运算单元配置信息将运算结果输入到所述临时数据模块缓存;并将最后产生的输出结果输出。
本发明实施例提供的方案的有益效果为:
通过本发明实施例提供的方案,通过可重构阵列协处理器的控制单元根据配置信息控制运算单元在可重构单元阵列上同时执行多次循环任务,并将最后产生的输出结果输出通过控制单元的输出,解决循环任务在处理器上执行时间较长的问题,提高循环任务的运行速度,降低应用程序总的运行时间,并且克服了现有的硬件加速模块处理任务单一的缺陷。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
本发明实施例提供了一种处理循环任务的方法,方法应用于可重构阵列协处理器,参见图1,该方法包括:
101:配置信息寄存器模块接收来自总线的配置信息,配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
102:循环控制器模块从配置信息寄存器模块获取配置信息,并将输入FIFO配置信息发送给输入FIFO模块、输出FIFO配置信息发送给输出FIFO模块、运算单元配置信息发送给运算单元;
103:输入FIFO模块根据输入FIFO配置信息读取数据;
104:输入选择模块根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组特定的位置;
105:可重构单元阵列根据运算单元配置信息执行循环任务,将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块中和通过路由模块输入到下一行可重构单元阵列,并将产生的运算结果输出;
106:输出选择模块根据运算单元配置信息将可重构单元阵列输出的运算结果按特定的顺序写入到输出FIFO模块;
107:输出FIFO模块根据输出FIFO配置信息发送数据。
其中,输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息分别对输入FIFO模块、输出FIFO模块、运算单元配置,输入FIFO模块、输出FIFO模块、运算单元的控制相互独立且分别有多套配置信息寄存器。
其中,循环控制器模块从配置信息寄存器模块获取配置信息的步骤,还包括:
循环控制器模块根据可重构阵列协处理器的内部状态寄存器控制配置信息寄存器模块是否从总线上读取输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以及将读入的某一项配置信息写入配置信息寄存器模块中的第几套配置信息寄存器。
其中,可重构单元阵列根据运算单元配置信息执行循环任务,并将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块中和通过路由模块输入到下一行可重构单元阵列,具体包括:
运算单元执行循环任务时,以流水线的工作方式将多次循环同时在可重构单元阵列上执行,将每一行可重构单元阵列的运算结果通过路由模块输入到下一行,如果当前行为可重构单元阵列的最后一行,则通过路由模块将运算结果输入到可重构单元阵列的第一行;并根据运算单元配置信息将运算结果输入到临时数据模块缓存,以便于根据运算单元配置信息在某个执行步骤中获取所缓存的数据。
本发明实施例提供的方法,通过可重构阵列协处理器的控制单元根据配置信息控制运算单元在可重构单元阵列上同时执行多次循环任务,并将最后产生的输出结果输出通过控制单元的输出,解决循环任务在处理器上执行时间较长的问题,提高循环任务的运行速度,降低应用程序总的运行时间,并且克服了现有的硬件加速模块处理任务单一的缺陷。
实施例2
本发明实施例提供了一种处理循环任务的方法,其中,本发明实施例首先提供了一种可重构阵列协处理器(Reconfigurable Cell Array CoProceseeor,RCACP),而本发明实施例提供的方法是基于该可重构阵列协处理器基础上实现的,具体内容如下:
首先以图2为例对在处理器上执行循环任务的过程简单介绍:
参见图2,循环任务的任务图的步数为5,循环需要执行2次。在处理器上执行循环任务的过程为:首先将任务图中并行的运算调整为串行的执行顺序,调整后的执行顺序为:1→2→3→4→5→6→7,任务图的步数增加为7;串行的执行2次循环,2次循环的执行顺序:
1.1→1.2→1.3→1.4→1.5→1.6→1.7→2.1→2.2→2.3→2.4→2.5→2.6→2.7其中“1.2”表示执行第1次循环的第2步。串行执行完2次循环总的步数为14。
由图2可以看出,在处理器上执行循环任务的时间较长。针对处理器与硬件加速模块的特点,在对应用程序进行划分时,首先,将应用程序中运算量大的部分划分到硬件加速模块上执行,称之为应用程序的硬件部分;其次,由处理器来执行应用中的控制部分以及运算量小的部分,称之为应用程序的软件部分。
本发明实施例提供的可重构阵列协处理器来执行循环任务,尤其是关键循环(运行时间大于程序总运行时间1%的循环),并且能与处理器进行高速的数据交互。参见图3,下面对可重构阵列协处理器的结构和功能进行具体说明:
图3中,可重构阵列协处理器分为运算单元和控制单元,下面分别对运算单元和控制单元进行详细说明:
(一)运算单元
运算单元由可重构单元阵列(Reconfigurable Cell Array,RCA)、路由模块、临时数据模块3部分构成;下面具体描述各个模块:
1、可重构单元阵列(RCA)
其中,可重构单元阵列RCA的规模可以根据循环任务的规模定制,典型的RCA的规模为8×8。本发明实施例中为了便于说明,图2的RCA的规模为4×4。RCA的说明如下:
(1)RCA内每个RC经配置后可实现算术运算功能和逻辑运算功能;
(2)RCA以行为单位,一行内的多个RC经配置后在一个时钟周期内并行的完成运算;
(3)RCA的行按从上至下的顺序对应于任务图内的时钟周期。
其中,以图2的循环任务为例:循环任务的步数为5,以图2(a)的前4个时钟周期为例,将其映射到图3的RCA的结果如图4所示:
节点“1”、“2”处于任务图的第1个时钟周期,被映射到RCA的第1行;
节点“3”处于任务图的第2个时钟周期,被映射到RCA的第2行;
节点“4”、“5”处于任务图的第3个时钟周期,被映射到RCA的第3行;
节点“6”处于任务图的第4个时钟周期,被映射到RCA的第4行;
节点“7”处于任务图的第5个时钟周期,被映射到RCA的第1行。因为之前任务图中处于第4个时钟周期的节点“6”被映射到RCA的第4行,本发明实施例中的RCA只有4行,所以节点“7”被映射到第1行,由RCA的第1行来执行任务图的第5个时钟周期。至于节点“7”被映射到第1行的第3列(右起),是因为第1、2列已被映射为任务图第1个时钟周期的节点“1”和节点“2”。
(4)RCA执行循环任务时,以流水线的工作方式将多次循环同时在RCA上执行,这将大幅提升可重构阵列协处理器执行循环任务时的性能。以任务图2(a)映射到图3的RCA上为例,映射的结果如图4所示,RCA以流水线的工作方式执行循环任务的时序图如图5所示,具体如下:
第1个时钟周期:
RCA的第1行执行第1次循环的第1步,记为“1.1”;
第2个时钟周期:
RCA的第1行执行第2次循环的第1步,记为“2.1”;
RCA的第2行执行第1次循环的第2步,记为“1.2”;
第3个时钟周期:
RCA的第1行执行第3次循环的第1步,记为“3.1”;
RCA的第2行执行第2次循环的第2步,记为“2.2”;
RCA的第3行执行第1次循环的第3步,记为“1.3”;
第4个时钟周期:
RCA的第1行执行第4次循环的第1步,记为“4.1”;
RCA的第2行执行第3次循环的第2步,记为“3.2”;
RCA的第3行执行第2次循环的第3步,记为“2.3”;
RCA的第4行执行第1次循环的第4步,记为“1.4”;
第5个时钟周期:
RCA的第1行执行第1次循环的第5步和第5次循环的第1步,记为“1.5 &5.1”;
RCA的第2行执行第4次循环的第2步,记为“4.2”;
RCA的第3行执行第3次循环的第3步,记为“3.3”;
RCA的第4行执行第2次循环的第4步,记为“2.4”;
第6个时钟周期:
RCA的第1行执行第2次循环的第5步和第6次循环的第1步,记为“2.5 &6.1”;
RCA的第2行执行第5次循环的第2步,记为“5.2”;
RCA的第3行执行第4次循环的第3步,记为“4.3”;
RCA的第4行执行第3次循环的第4步,记为“3.4”;
2、路由模块
其中,路由模块将每行RC连接起来,路由模块的输入来自三个方面:RC输入寄存器组、上一行RC的输出、临时数据模块;
(1)路由模块的功能是为RC选择输入,其选择RC输入寄存器组、上一行RC的输出、临时数据模块的输入输出给RC,作为RC的输入;
(2)最后一行RC的输出经路由模块选择后可作为第一行RC的输入,这一结构使得RCA可以映射关键路径长度大于自身行数的任务图。以任务图2(a)为例,其关键路径为5(大于图3的RCA的行数4),将其映射到图3的RCA的结果如图4所示:
节点“7”处于任务图的第5个时钟周期,被映射到RCA的第1行。这是因为之前任务图中处于第4个时钟周期的节点“6”被映射到RCA的第4行,在RCA执行完第4行后,即任务图的第4个时钟周期后,节点“6”将通过路由模块1将节点“6”的输出输入给RCA的第1行,由RCA的第1行来执行任务图的第5个时钟周期。所以节点“7”被映射到RCA的第1行。至于节点“7”被映射到第1行的第3列(右起),是因为第1、2列已被映射为任务图第1个时钟周期的节点“1”和节点“2”。
3、临时数据模块:
其中,临时数据模块的输入来自每个RC的输出;
临时数据模块的功能是将RC的输出延迟若干个时钟周期,并在需要的时钟周期输出给路由模块。然后,经路由模块选择后,输出给RC作为输入。以将任务图2(a)映射到图3的RCA上为例,映射结果如图4所示:
处于任务图第3周期的节点“5”的一个输入来自第1周期的节点“2”,所以节点“2”在第1个时钟周期运算完后,需要将其输出输入给临时数据模块,数据在临时数据模块中延迟1个时钟周期,即在第3个时钟周期输出给路由模块3,经路由模块3选择后将数据输入给节点“5”。
(二)控制单元
控制单元由配置信息寄存器模块、循环任务控制器、输入FIFO(First InputFirst Output,先入先出队列)模块、输出FIFO模块、输入选择模块、输出选择模块和RC输入寄存器组模块7个部分构成;下面具体描述各个模块:
1、配置信息寄存器模块
(1)配置信息分为三个部分:输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息(包括循环任务的配置信息),且每部分的配置信息有多套配置信息,说明如下:
首先,将配置信息分为三个部分,可以做到对输入FIFO、输出FIFO、运算单元这三个硬件模块控制的相互独立。即输入FIFO的配置信息传输完后输入FIFO模块即开始运行,无需等待运算单元的配置信息传输完后才开始运行。同理,运算单元的配置信息传输完后运算单元即开始运行,无需等待输出FIFO的配置信息传输完后才开始运行;
其次,每个模块享有多套配置信息寄存器,这可以提前存储之后的循环任务用到的配置信息,尽量保证硬件模块无需等待自己的配置信息传输完后才开始运行;
总的来说,配置信息分为三部分,且每部分享有多套配置信息,保证了输入FIFO模块、输出FIFO模块、运算单元这三个硬件模块相互独立且持续不断的运行,这对可重构阵列协处理器性能的提升是有益的。
(2)配置信息寄存器模块是“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的从设备(slave),即配置信息寄存器模块只能被动的接收来自总线上的主设备发出的数据。
2、循环控制器模块
循环控制器模块读入来自配置信息寄存器模块的循环任务的配置信息,依据读入的配置信息对协处理器中其余模块进行控制,协调其余模块共同完成循环任务;
首先,循环任务控制器模块不仅从配置信息寄存器模块读入配置信息。它还根据可重构阵列协处理器的内部状态寄存器控制配置信息寄存器模块是否从总线上读取输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以及将读入的某一项配置信息写入其自身的第几套配置信息寄存器;
其次,循环控制器模块根据读入的输入FIFO配置信息控制输入FIFO模块的读取数据;
再次,循环控制器模块根据读入的运算单元配置信息(包括循环任务的配置信息)控制运算单元的运行过程,这包括以下内容:
循环控制模块将RCA中选定的RC配置成与任务图中各节点对应的运算;
循环控制模块配置临时数据模块,控制临时数据模块在某一时钟周期读入某一行的RC的输出,延迟若干个时钟周期后,输出给某一行的RC作为输入;
循环控制模块通过配置路由模块建立选定的RC之间的连接关系,这一连接关系与任务图中各节点之间的连接关系相一致;
循环控制模块根据循环任务的配置信息,对一次循环内的读取输入FIFO模块、运算单元、写入输出FIFO模块这三个步骤的时钟周期进行计数:
首先,经过若干个时钟周期,读取输入FIFO模块中的数据存入RC输入寄存器组;
然后,经过若干个时钟周期,完成数据在运算单元中的运算,产生输出结果;
最后,经过若干个时钟周期,将运算单元的输出结果写入输出FIFO模块。
循环控制模块根据循环任务的配置信息,控制2次循环之间的时间间隔,使得多次循环同时在RCA上以流水线的工作方式运行;
循环控制模块根据循环任务的配置信息,对循环次数进行计数。当循环次数达到配置的次数时,当前循环任务执行完成。此外,循环控制模块还根据循环任务的配置信息,在当前循环任务完成之后,判断运算单元配置信息是否跳转到下一个循环任务的运算单元配置信息,以及下一个循环任务的运算单元配置信息是运算单元配置信息寄存器中的第几套,否则停止运算单元;
最后,循环控制器模块根据读入的输出FIFO配置信息控制输出FIFO的工作过程;
3、输入FIFO模块
输入FIFO模块可以被配置成为“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的从设备(slave),被动的接收连接在总线上的主设备发出的数据;
输入FIFO也可以被配置成为“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的主设备(master),主动的读取连接在总线上的存储器的数据;
输入FIFO采取不对称的结构,连接到可重构阵列协处理器内部一侧的数据的读取速度要大于连接到总线一侧的数据的写入速度。这是因为内部的数据读取速度快可减小将输入FIFO中的数据写入RC输入寄存器组的时间,提升可重构阵列协处理器的性能。
4、输出FIFO模块
输出FIFO模块可以被配置成为“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的从设备(slave),被动的被接收连接在总线上的主设备读取数据;
输出FIFO也可以被配置成为“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的主设备(master),主动的向连接在总线上的存储器写数据;
输出FIFO采取不对称的结构,连接到可重构阵列协处理器内部一侧的数据的写入速度要大于连接到总线一侧的数据的读取速度。这是因为内部的数据写入速度快可减小将RC的输出写入输出FIFO的时间,提升可重构阵列协处理器的性能。
5、输入选择模块
输入选择模块的功能是根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组特定的位置,即写入到特定的RC的输入寄存器,待运算时使用;
6、输出选择模块
输出选择模块的功能是根据运算单元配置信息将特定的RC的输出写入到输出FIFO中,完成运算结果的输出;
7、RC输入寄存器组
RC输入寄存器组的大小由RCA中RC的个数来决定,每个RC有两个输入寄存器,由RC的编号来确定其输入寄存器在RC输入寄存器组中的位置。
参见图6,下面以图3为例对上述可重构阵列协处理器处理循环任务的过程进行具体表述:
步骤201:配置信息寄存器模块接收来自总线的配置信息,该配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
其中,输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息分别针对输入FIFO模块、输出FIFO模块、运算单元三部分所配置,使得这三个模块的控制相互独立;其中,每个模块享有多套配置信息寄存器,这可以提前存储之后的循环任务用到的配置信息,尽量保证硬件模块无需等待自己的配置信息传输完后才开始运行;
配置信息分为三部分,且每部分享有多套配置信息,保证了输入FIFO模块、输出FIFO模块、运算单元这三个硬件模块相互独立且持续不断的运行,这对可重构阵列协处理器性能的提升是有益的。
步骤202:循环控制器模块读入来自配置信息寄存器模块的配置信息,依据读入的配置信息对可重构阵列协处理器中其余模块进行控制,协调其余模块共同完成循环任务;
其中,循环任务控制器模块不仅从配置信息寄存器模块读入配置信息。它还根据可重构阵列协处理器的内部状态寄存器控制配置信息寄存器模块是否从总线上读取输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以及将读入的某一项配置信息写入其自身的第几套配置信息寄存器;
步骤203:输入FIFO模块根据输入FIFO配置信息读取数据;
其中,由循环控制器模块根据读入的输入FIFO配置信息控制输入FIFO模块读取数据;
输入FIFO模块可以被配置成为“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的从设备(slave),被动的接收连接在总线上的主设备发出的数据;
输入FIFO也可以被配置成为“先进高性能总线”(AdvancedHigh-performance Bus,AHB)上的主设备(master),主动的读取连接在总线上的存储器的数据;
输入FIFO采取不对称的结构,连接到可重构阵列协处理器内部一侧的数据的读取速度要大于连接到总线一侧的数据的写入速度。这是因为内部的数据读取速度快可减小将输入FIFO中的数据写入RC输入寄存器组的时间,提升可重构阵列协处理器的性能。
步骤204:输入选择模块根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组特定的位置;
其中,由循环控制器模块根据读入的运算单元配置信息控制输入选择模块将输入FIFO中的数据写入到RC输入寄存器组特定的位置,即写入到特定的RC的输入寄存器,待运算时使用。
步骤205:运算单元根据运算单元配置信息执行循环任务,具体包括:
RCA执行循环任务时,以流水线的工作方式将多次循环同时在RCA上执行,仍以任务图2(a)映射到图3的RCA上为例,映射的结果如图4所示,RCA以流水线的工作方式执行循环任务的时序图如图5所示,具体如下:
第1个时钟周期:
RCA的第1行执行第1次循环的第1步,记为“1.1”;并将执行的结果通过路由模块2输入到第2行;
第2个时钟周期:
RCA的第1行执行第2次循环的第1步,记为“2.1”;并将执行的结果通过路由模块2输入到第2行;
RCA的第2行执行第1次循环的第2步,记为“1.2”;并将执行的结果通过路由模块3输入到第3行;
第3个时钟周期:
RCA的第1行执行第3次循环的第1步,记为“3.1”;并将执行的结果通过路由模块2输入到第2行;
RCA的第2行执行第2次循环的第2步,记为“2.2”;并将执行的结果通过路由模块3输入到第3行;
RCA的第3行执行第1次循环的第3步,记为“1.3”;并将执行的结果通过路由模块4输入到第4行;
第4个时钟周期:
RCA的第1行执行第4次循环的第1步,记为“4.1”;并将执行的结果通过路由模块2输入到第2行;
RCA的第2行执行第3次循环的第2步,记为“3.2”;并将执行的结果通过路由模块3输入到第3行;
RCA的第3行执行第2次循环的第3步,记为“2.3”;并将执行的结果通过路由模块4输入到第4行;
RCA的第4行执行第1次循环的第4步,记为“1.4”;并将执行的结果通过路由模块1输入到第1行;
第5个时钟周期:
RCA的第1行执行第1次循环的第5步和第5次循环的第1步,记为“1.5 &5.1”;并将执行的结果通过路由模块2输入到第2行;
RCA的第2行执行第4次循环的第2步,记为“4.2”;并将执行的结果通过路由模块3输入到第3行;
RCA的第3行执行第3次循环的第3步,记为“3.3”;并将执行的结果通过路由模块4输入到第24行;
RCA的第4行执行第2次循环的第4步,记为“2.4”;并将执行的结果通过路由模块1输入到第1行;
第6个时钟周期:
RCA的第1行执行第2次循环的第5步和第6次循环的第1步,记为“2.5 &6.1”;并将执行的结果通过路由模块2输入到第2行;
RCA的第2行执行第5次循环的第2步,记为“5.2”;并将执行的结果通过路由模块3输入到第3行;
RCA的第3行执行第4次循环的第3步,记为“4.3”;并将执行的结果通过路由模块4输入到第4行;
RCA的第4行执行第3次循环的第4步,记为“3.4”;并将执行的结果通过路由模块1输入到第1行;
其中,处于任务图第3周期的节点“5”的一个输入来自第1周期的节点“2”,所以节点“2”在第1个时钟周期运算完后,需要将其输出输入给临时数据模块,数据在临时数据模块中延迟1个时钟周期,即在第3个时钟周期输出给路由模块3,经路由模块3选择后将数据输入给节点“5”。
其中,由循环控制器模块根据读入的运算单元配置信息控制运算单元执行循环任务,具体为:循环控制器模块将RCA中选定的RC配置成与任务图中各节点对应的运算;配置临时数据模块,控制临时数据模块在某一时钟周期读入某一行的RC的输出,延迟若干个时钟周期后,输出给某一行的RC作为输入;通过配置路由模块建立选定的RC之间的连接关系,这一连接关系与任务图中各节点之间的连接关系相一致;另外,循环控制模块还根据循环任务的配置信息,对一次循环内的读取输入FIFO模块、运算单元、写入输出FIFO模块这三个步骤的时钟周期进行计数。
步骤206:运算单元完成循环任务中的运算,产生输出结果,将运算单元的输出结果通过输出选择模块写入输出FIFO模块。
循环控制模块根据循环任务的配置信息,控制2次循环之间的时间间隔,使得多次循环同时在RCA上以流水线的工作方式运行;
循环控制模块根据循环任务的配置信息,对循环次数进行计数。当循环次数达到配置的次数时,当前循环任务执行完成。此外,循环控制模块还根据循环任务的配置信息,在当前循环任务完成之后,判断运算单元配置信息是否跳转到下一个循环任务的运算单元配置信息,以及下一个循环任务的运算单元配置信息是运算单元配置信息寄存器中的第几套,否则停止运算单元;
其中,由循环控制器模块根据读入的输出FIFO配置信息控制输出FIFO模块对外输出数据。
本发明实施例提供的方法,通过可重构阵列协处理器的控制单元根据配置信息控制运算单元在可重构单元阵列上同时执行多次循环任务,并将最后产生的输出结果输出通过控制单元的输出,解决循环任务在处理器上执行时间较长的问题,提高循环任务的运行速度,降低应用程序总的运行时间,并且克服了现有的硬件加速模块处理任务单一的缺陷。
实施例3
本发明实施例提供了一种处理循环任务的系统,参见图7,该系统包括:控制单元701和运算单元702,其中,
控制单元701包括:配置信息寄存器模块7011、循环控制器模块7012、输入FIFO模块7013、输出FIFO模块7014、输入选择模块7015、输出选择模块7016和RC输入寄存器组7017;
配置信息寄存器模块7011,用于接收来自总线的配置信息,配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
循环控制器模块7012,用于从配置信息寄存器模块7011获取配置信息,并将输入FIFO配置信息发送给输入FIFO模块7013、输出FIFO配置信息发送给输出FIFO模块7014、运算单元配置信息发送给运算单元702;
输入FIFO模块7013,用于根据输入FIFO配置信息读取数据;
输入选择模块7015,用于根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器组7017特定的位置;
输出选择模块7014,用于根据运算单元配置信息将可重构单元阵列输出的运算结果按特定的顺序写入到输出FIFO模块7016;
输出FIFO模块7016,用于根据输出FIFO配置信息发送数据。
RC输入寄存器组7017,用于根据运算单元配置信息将存储的数据输入到运算单元中;
运算单元702包括:可重构单元阵列7021、路由模块7022和临时数据模块7023,
可重构单元阵列7021,用于根据运算单元702配置信息执行循环任务,将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块7023中和通过路由模块输入到下一行可重构单元阵列,并将产生的运算结果输出;
路由模块7022,用于将每一行可重构单元阵列7021产生的运算结果输入到下一行可重构单元阵列7021;
临时数据模块7023,用于根据运算单元配置信息缓存可重构单元阵列7021的运算结果,并根据运算单元配置信息将缓存的运算结果输入到指定的可重构单元阵列7021中。
其中,输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息分别对输入FIFO模块7013、输出FIFO模块7014、运算单元702配置,输入FIFO模块7013、输出FIFO模块7014、运算单元702的控制相互独立且分别有多套配置信息寄存器。
本发明实施例提供的系统,通过可重构阵列协处理器的控制单元根据配置信息控制运算单元在可重构单元阵列7021上同时执行多次循环任务,并将最后产生的输出结果输出通过控制单元的输出,解决循环任务在处理器上执行时间较长的问题,提高循环任务的运行速度,降低应用程序总的运行时间,并且克服了现有的硬件加速模块处理任务单一的缺陷。
实施例4
本发明实施例还提供了一种可重构阵列协处理器设备,参见图8,该设备包括:控制单元和运算单元,
控制单元801,用于控制运算单元802同时执行多次循环任务,并将最后产生的输出结果输出;
运算单元802,用于在控制单元801的控制下执行多次循环任务。
其中,该控制单元801包括:配置信息寄存器模块8011、循环控制器模块8012、输入FIFO模块8013、输出FIFO模块8014、输入选择模块8015、输出选择模块8016和RC输入寄存器组8017;
配置信息寄存器模块8011,用于接收来自总线的配置信息,配置信息包括输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息;
循环控制器模块8012,用于从配置信息寄存器模块获取配置信息,并将输入FIFO配置信息发送给输入FIFO模块8013、输出FIFO配置信息发送给输出FIFO模块8014、运算单元配置信息发送给运算单元;
输入FIFO模块8013,用于根据输入FIFO配置信息读取数据;
输入选择模块8015,用于根据运算单元配置信息将输入FIFO中的数据写入到RC输入寄存器8017组特定的位置。
输出选择模块8014,用于根据运算单元配置信息将可重构单元阵列输出的运算结果按特定的顺序写入到输出FIFO模块8016;
输出FIFO模块8016,用于根据输出FIFO配置信息发送数据。
RC输入寄存器组8017,用于根据运算单元配置信息将存储的数据输入到运算单元中;
其中,运算单元802包括:可重构单元阵列8021、路由模块8022和临时数据模块8023,
可重构单元阵列8021,用于根据运算单元802配置信息执行循环任务,将每一行可重构单元阵列产生的运算结果根据运算单元配置信息输入到临时数据模块8023中和通过路由模块输入到下一行可重构单元阵列,并将产生的运算结果输出;
路由模块8022,用于将每一行可重构单元阵列8021产生的运算结果输入到下一行可重构单元阵列8021;
临时数据模块8023,用于根据运算单元配置信息缓存可重构单元阵列8021的运算结果,并根据运算单元配置信息将缓存的运算结果输入到指定的可重构单元阵列8021中。
其中,配置信息寄存器模块,具体用于分别对输入FIFO模块8013、输出FIFO模块8014、运算单元配置输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以使得输入FIFO模块8013、输出FIFO模块8014、运算单元的控制相互独立且分别有多套配置信息寄存器。
其中,循环控制器模块8012,还用于根据可重构阵列协处理器的内部状态寄存器控制配置信息寄存器模块是否从总线上读取输入FIFO配置信息、输出FIFO配置信息、运算单元配置信息,以及将读入的某一项配置信息写入配置信息寄存器模块中的第几套配置信息寄存器。
其中,可重构单元阵列8021具体用于,执行循环任务时,以流水线的工作方式将多次循环同时在可重构单元阵列8021上执行,将每一行可重构单元阵列8021的运算结果通过路由模块8022输入到下一行,如果当前行为可重构单元阵列8021的最后一行,则通过路由模块8022将运算结果输入到可重构单元阵列8021的第一行;并根据运算单元配置信息将运算结果输入到临时数据模块8023缓存;并将最后产生的输出结果输出。
本发明实施例提供的设备,通过可重构阵列协处理器的控制单元根据配置信息控制运算单元在可重构单元阵列8021上同时执行多次循环任务,并将最后产生的输出结果输出通过控制单元的输出,解决循环任务在处理器上执行时间较长的问题,提高循环任务的运行速度,降低应用程序总的运行时间,并且克服了现有的硬件加速模块处理任务单一的缺陷。
本发明实施例可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,例如,路由器的硬盘、缓存或光盘中。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。