支持卷积运算的处理器电路系统及其卷积运算控制方法
技术领域
本发明涉及处理器技术领域,尤其涉及一种支持卷积运算的处理器电路系统及其卷积运算控制方法。
背景技术
随着卷积神经网络的发展,以及卷积作为神经网络的基本计算,一些嵌入式设备处于对图像、语音等的处理要求,需要完成大量的卷积运算。为了更好的支持卷积运算,现有的实现方案普遍采用以下两种方式:一种是,选用具有矢量数据处理能力的处理器,以提高数据并行处理能力,从而缩短卷积运算的时间;另一种是,采用通用处理器、加卷积加速引擎作为协处理器的双核结构,通用处理器用于完成常规运算,而卷积加速引擎用于完成卷积运算。
但是,采用具有数据并行处理能力的通用处理器来实现卷积运算,需要将卷积运算拆分成大量的乘法指令、加法指令和访存指令,整个运算过程需要不断的取指,大量的访问内存操作会造成整个运算时间较长,能效差。采用通用处理器加卷积加速引擎作为协处理器的双核结构,通用处理器和卷积运算的协处理器无法实现硬件资源的共享,面积开销大。
因此,如何优化用于实现卷积运算的处理器结构,减少面积,并提高能效,是目前亟待解决的技术问题。
发明内容
本发明提供了一种支持卷积运算的处理器电路系统及其卷积运算控制方法,用于优化用于实现卷积运算的处理器电路结构,减少面积,并提高能效。
为了解决上述问题,本发明提供了一种支持卷积运算的处理器电路系统,包括:
指令发射模块,用于接收处理器指令,并将卷积指令并发送给卷积运算模块;
卷积运算模块,包括卷积控制器以及均与所述卷积控制器连接的算术逻辑运算单元、装载存储单元、卷积核数据缓存、卷积数据缓存和临时数据缓存;所述卷积控制器连接所述指令发射模块;所述算术逻辑运算单元,包括乘加器,所述乘加器由乘法器和加法器串联形成,用于进行卷积运算中所需的乘加操作;所述装载存储单元用于处理卷积核数据的装载和卷积数据的装载;所述卷积核数据缓存用于存放卷积核数据;所述卷积数据缓存用于存放卷积数据;所述临时数据缓存用于缓存卷积运算产生的中间结果数据;
指令提交模块,连接所述卷积运算模块,用于提交完成卷积运算的卷积指令,更新架构寄存器。
可选的,所述乘加器的数量为多个。
可选的,还包括:
数据存储模块,连接所述装载存储单元、所述卷积核数据缓存和所述卷积数据缓存,用于向所述卷积核数据缓存装载所述卷积核数据,并用于向所述卷积数据缓存装载所述卷积数据。
可选的,所述乘加器的数据处理速率与小于或者等于所述数据存储模块装载所述卷积核数据和所述卷积数据的速率。
可选的,所述卷积数据缓存的大小为两倍的所述数据存储模块向所述卷积数据缓存装载的所述卷积数据的位宽。
可选的,所述卷积核数据缓存的深度小于或者等于所述卷积核数据中的卷积核列数。
不仅如此,本发明还提供了一种如上述任一项所述的支持卷积运算的处理器电路系统的卷积运算控制方法,包括如下步骤:
获取卷积指令;
读取所述卷积核数据缓存中的卷积核数据,作为所述乘加器的乘数输入;
读取所述卷积数据缓存中的卷积数据,作为所述乘加器的被乘数输入;
读取所述临时数据缓存中的中间结果数据,作为所述乘加器的加数输入,所述中间结果数据为前一次所述乘加器的乘加运算得到,所述中间结果数据的初始值为0;
根据所述乘数、所述被乘数和所述加数进行卷积运算。
可选的,获取卷积指令之前,还包括如下步骤:
将所述临时数据缓存中的数据清零。
可选的,所述乘加器的数量为X;所述卷积运算控制方法还包括如下步骤:
读取所述卷积核数据缓存中的一个卷积核数据,同时作为Y个所述乘加器的乘数输入,其中,X、Y均为正整数,且X≥Y;
读取所述卷积数据缓存中的Y个所述卷积数据,分别作为Y个所述乘法器的被乘数输入;
读取所述临时数据缓存中的Y个中间结果数据,分别作为Y个所述乘加器的加数输入;
Y个所述乘加器分别根据各自的所述乘数、所述被乘数和所述加数进行乘加运算。
可选的,还包括如下步骤:
将所述卷积数据顺序划分为多组,每组包括Y个所述卷积数据,针对每一组进行如下步骤:
读取所述卷积数据缓存中的一组所述卷积数据,分别作为Y个所述乘法器的被乘数输入;
读取所述临时数据缓存中的Y个中间结果数据,分别作为Y个所述乘加器的加数输入,Y个所述中间结果数据为上一组所述卷积数据进行乘加运算得到的结果;
Y个所述乘加器分别根据各自的所述乘数、所述被乘数和所述加数进行乘加运算。
本发明提供的支持卷积运算的处理器电路系统及其卷积运算控制方法,通过复用处理器原有的算术逻辑运算单元来实现卷积运算中的乘法与加法,从而可以大幅度节省卷积运算的电路面积。同时,通过复用通用处理器原有的通用寄存器作为临时数据缓存来存储卷积运算过程中的中间数据,从而可以进一步精简电路结构,减少了装载操作,减少了访存带宽要求,提高了卷积运算时算术逻辑运算单元的利用率,能效性高。
附图说明
附图1是本发明具体实施方式中支持卷积运算的处理器电路系统的结构框图;
附图2是本发明具体实施方式中支持卷积运算的处理器电路系统的卷积运算控制方法流程图。
具体实施方式
下面结合附图对本发明提供的支持卷积运算的处理器电路系统及其卷积运算控制方法的具体实施方式做详细说明。
本具体实施方式提供了一种支持卷积运算的处理器电路系统,附图1是本发明具体实施方式中支持卷积运算的处理器电路系统的结构框图。如图1所示,本具体实施方式提供的支持卷积运算的处理器电路系统,包括:
指令发射模块10,用于接收处理器指令,并将卷积指令并发送给卷积运算模块;
卷积运算模块11,包括卷积控制器111以及均与所述卷积控制器111连接的算术逻辑运算单元112、装载存储单元113、卷积核数据缓存114、卷积数据缓存115和临时数据缓存116;所述卷积控制器111连接所述指令发射模块10;所述算术逻辑运算单元112,包括乘加器,所述乘加器由乘法器和加法器串联形成,用于进行卷积运算中所需的乘加操作;所述装载存储单元113用于处理卷积核数据的装载和卷积数据的装载;所述卷积核数据缓存114用于存放卷积核数据;所述卷积数据缓存115用于存放卷积数据;所述临时数据缓存116用于缓存卷积运算产生的中间结果数据;
指令提交模块12,连接所述卷积运算模块11,用于提交完成卷积运算的卷积指令,更新架构寄存器。
具体来说,所述指令发射模块10与现有处理器内的指令发射模块的功能相同,都是根据接收到的指令的功能类型,发射给对应的执行模块。所述指令提交模块12也与现有处理器内的指令提交模块的功能相同,即在执行模块执行完所述指令发射模块10发射的所述指令、并写回数据结果后,将指令进行提交,更新架构寄存器,这也标志着所述指令的生命周期结束。本具体实施方式中的所述卷积运算模块11是位于所述指令发射模块10与所述指令提交模块12之间的一个指令执行模块,用于执行所述指令发射模块10发射的卷积指令。所述卷积运算模块11属于处理器的一部分,而不是另外的协处理器,即本具体实施方式提供的所述处理器仍为一个单核的处理器。本具体实施方式中所述的处理器可以是但不限于嵌入式处理器。
所述卷积控制器11在接收到所述指令发射模块10发射的卷积指令之后,控制卷积运算的所有过程,包括:发起卷积核数据、卷积数据的装载请求;读取所述卷积核数据缓存114中的卷积核数据、读取所述卷积数据缓存115中的卷积数据、以及读取所述临时数据缓存116中的中间结果数据(即临时数据),并将读取的所述卷积核数据、所述卷积数据和所述中间结果数据发送至所述算术逻辑运算单元112,以在所述算术逻辑运算单元112中进行基本的乘加运算;将获取的所述算术逻辑运算单元112的运算结果写入所述临时数据缓存116;如果已经获得卷积核窗口对应的卷积运算结果数据,则将所述卷积运算结果数据的存储请求发送至所述装载存储单元113。
所述算术逻辑运算单元112可以直接复用所述处理器中原有的算术逻辑计算单元。所述算术逻辑运算单元112包括若干个乘加器,所述乘加器由乘法器与加法器串联构成。
为了提高卷积运算的并行度,可选的,所述乘加器的数量为多个。本具体实施方式中所述的“多个”是指两个以上。
可选的,所述支持卷积运算的处理器电路系统还包括:
数据存储模块13,连接所述装载存储单元113、所述卷积核数据缓存114和所述卷积数据缓存115,用于向所述卷积核数据缓存114装载所述卷积核数据,并用于向所述卷积数据缓存115装载所述卷积数据。
具体来说,所述数据存储模块13可以为所述处理器中原有的数据缓存,用于存放所述处理器运行所需要的所有数据。
所述装载存储单元113可以复用所述处理器原有的装载存储单元,除了处理所述处理器正常的装载、存储操作指令,还能够处理所述卷积控制器111发起的卷积核数据的装载、卷积数据的装载、以及所述卷积运算结果数据的存储操作请求。
所述卷积核数据缓存114用于存放所述数据存储模块13装载进来的所述卷积核数据。可选的,所述卷积核数据缓存114的深度小于或者等于所述卷积核数据中的卷积核列数。这是因为,容量较大的所述卷积核数据缓存114可以有效减少卷积运算过程中的装载操作,从而降低功耗。
所述卷积数据缓存115用于存放所述数据存储模块13装载进来的所述卷积数据。可选的,所述卷积数据缓存115的大小为两倍的所述数据存储模块13向所述卷积数据缓存115装载的所述卷积数据的位宽。
为了最大化提高乘法器与加法器的使用效率,可选的,所述乘加器的数据处理速率小于或者等于所述数据存储模块13装载所述卷积数据的速率。
所述临时数据缓存116用于缓存所述卷积运算过程中产生的中间结果数据。由于本具体实施方式是复用所述处理器中的算术逻辑计算单元,因此无法一次完成卷积核窗口对应卷积数据的全部乘加运算,故需要将中间累加结果临时存放在所述临时数据缓存16中。所述临时数据缓存116可以复用所述处理器原有的通用寄存器电路资源,也可以增加新的寄存器电路资源。本具体实施方式提供的支持卷积运算的处理器电路系统在进行卷积运算的过程中,所支持的最大卷积核的列数据受所述临时数据缓存116容量大小的限制,即支持卷积运算的卷积核的列数小于等效临时数据缓存的容量。
在其他具体实施方式中,还可以选择具有点积运算、矩阵乘法运算等功能的处理器,将完整的卷积运算拆分为多条点积、矩阵乘法运算,复用处理器原本具有的点积运算单元完成相应的点积运算、复用所述处理器原本具有的矩阵乘法单元完成矩阵乘法运算。
不仅如此,本具体实施方式还提供了一种如上述任一项所述的支持卷积运算的处理器电路系统的卷积运算控制方法,附图2是本发明具体实施方式中支持卷积运算的处理器电路系统的卷积运算控制方法流程图。如图1、图2所示,本具体实施方式提供的支持卷积运算的处理器电路系统的卷积运算控制方法,包括如下步骤:
步骤S21,获取卷积指令;
步骤S22,读取所述卷积核数据缓存中的卷积核数据,作为所述乘加器的乘数输入;
步骤S23,读取所述卷积数据缓存中的卷积数据,作为所述乘加器的被乘数输入;
步骤S24,读取所述临时数据缓存中的中间结果数据,作为所述乘加器的加数输入,所述中间结果数据为前一次所述乘加器的乘加运算得到,所述中间结果数据的初始值为0;
步骤S25,根据所述乘数、所述被乘数和所述加数进行卷积运算。
为了防止污染卷积运算,可选的,获取卷积指令之前,还包括如下步骤:
将所述临时数据缓存中的数据清零。
可选的,所述乘加器的数量为X个;所述卷积运算控制方法还包括如下步骤:
读取所述卷积核数据缓存中的一个卷积核数据,同时作为Y个所述乘加器的乘数输入,其中,X、Y均为正整数,且X≥Y;
读取所述卷积数据缓存中的Y个所述卷积数据,分别作为Y个所述乘法器的被乘数输入;
读取所述临时数据缓存中的Y个中间结果数据,分别作为Y个所述乘加器的加数输入;
Y个所述乘加器分别根据各自的所述乘数、所述被乘数和所述加数进行乘加运算。
具体来说,所述支持卷积运算的处理器电路系统中所述乘加器的数量可以为多个,在进行实际的卷积运算的过程中,可以仅使用部分的所述乘加器,也可以使用全部的所述乘加器,具体根据实际情况进行选择。本具体实施方式中所述的“多个”是指两个以上。
可选的,所述卷积运算控制方法还包括如下步骤:
将所述卷积数据顺序划分为多组,每组包括Y个所述卷积数据,针对每一组进行如下步骤:
读取所述卷积数据缓存中的一组所述卷积数据,分别作为Y个所述乘法器的被乘数输入;
读取所述临时数据缓存中的Y个中间结果数据,分别作为Y个所述乘加器的加数输入,Y个所述中间结果数据为上一组所述卷积数据进行乘加运算得到的结果;
Y个所述乘加器分别根据各自的所述乘数、所述被乘数和所述加数进行乘加运算。
以下如表1所示的卷积数据、表2所示的卷积核数据、表3所示的卷积运算结果数据、以及表4所示的卷积运算详细步骤为例进行说明。如表1所述,所述卷积数据为8行8列的二维数据,所述卷积核数据为3行3列的二维数据,所述卷积运算结构数据为6行6列的二维数据,卷积核滑动窗口步长为1。
表1卷积数据
a00 |
a01 |
a02 |
a03 |
a04 |
a05 |
a06 |
a07 |
a10 |
a11 |
a12 |
a13 |
a14 |
a15 |
a16 |
a17 |
a20 |
a21 |
a22 |
a23 |
a24 |
a25 |
a26 |
a27 |
a30 |
a31 |
a32 |
a33 |
a34 |
a35 |
a36 |
a37 |
a40 |
a41 |
a42 |
a43 |
a44 |
a45 |
a46 |
a47 |
a50 |
a51 |
a52 |
a53 |
a54 |
a55 |
a56 |
a57 |
a60 |
a61 |
a62 |
a63 |
a64 |
a65 |
a66 |
a67 |
a70 |
a71 |
a72 |
a73 |
a74 |
a75 |
a76 |
a77 |
表2卷积核数据
b00 |
b01 |
b02 |
b10 |
b11 |
b12 |
b20 |
b21 |
b22 |
表3卷积运算结果数据
表4卷积运算详细步骤
如表1、表2、表3和表4所示,所述算术逻辑运算单元中具有四个乘加器,即乘加器0、乘加器1、乘加器2和乘加器3,以上仅是举例说明,本领域技术人员可以根据实际需要调整乘加器的数量。所述临时数据缓存116中具有四个临时寄存器,即第一寄存器v0、第二寄存器v1、第三寄存器v2、第四寄存器v3、第五寄存器v4、第六寄存器v5、第七寄存器v6、第八寄存器v7。表4中的v0、v1、v2、v3、v4、v5、v6、v7表示对应的寄存器中的值。
周期0:读取所述卷积核数据缓存114中的卷积核数据b00,同时作为四个所述乘加器的乘数输入;读取所述卷积数据缓存115中的卷积数据a00、a01、a02、a03,分别作为乘加器0、乘加器1、乘加器2、乘加器3的被乘数输入;读取所述临时数据缓存116中四个所述临时寄存器v0、v1、v2、v3中的值分别作为乘加器0、乘加器1、乘加器2、乘加器3的加数输入,由于周期0刚刚开始卷积运算,故v0、v1、v2、v3中的值均为0。经过一次乘加运算,乘加器0得到的计算结果a00*b00+v0作为一个中间结果写入所述第一寄存器v0,并覆盖前次所述第一寄存器v0中的值;乘加器1得到的计算结果a01*b00+v1作为一个中间结果写入所述第二寄存器v1,并覆盖前次所述第二寄存器v1中的值;乘加器2得到的计算结果a02*b00+v2作为一个中间结果写入所述第三寄存器v2,并覆盖前次所述第三寄存器v2中的值;乘加器3得到的计算结果a03*b00+v3作为一个中间结果写入所述第四寄存器v3,并覆盖前次所述第四寄存器v3中的值。
周期1:读取所述卷积核数据缓存114中的卷积核数据b00,同时作为四个所述乘加器的乘数输入;读取所述卷积数据缓存115中的卷积数据a04、a05、a06、a07,分别作为乘加器0、乘加器1、乘加器2、乘加器3的被乘数输入;读取所述临时数据缓存116中第五寄存器v4、第六寄存器v5、第七寄存器v6、第八寄存器v7中的值分别作为乘加器0、乘加器1、乘加器2、乘加器3的加数输入,在本周期中第五寄存器v4、第六寄存器v5、第七寄存器v6、第八寄存器v7中的值均为0。乘加器0得到a04*b00+v4的结果,将结果以覆盖的方式写入第五寄存器v4;乘法器1得到a05*b00+v5的结果,将结果以覆盖的方式写入第六寄存器v5;乘法器2得到a06*b00+v6的结果,将结果以覆盖的方式写入第七寄存器v6;乘法器3得到a07*b00+v7的结果,将结果以覆盖的方式写入第八寄存器v7。
周期0和周期1完成了卷积核数据b00与卷积数据第0行所有数据的乘加运算。
类似的,周期2和周期3完成卷积核b01与卷积数据第0行所有数据的乘加运算,其中卷积运算过程不需要a00*b01。
周期4和周期5完成卷积核数据b02与卷积数据第0行所有数据的乘加运算,其中卷积运算过程中不需要a00*b02,a01*b02的结果。
周期0~周期5的六个周期完成了卷积核数据第0行和卷积数据第0行所有卷积运算中所需要的乘加运算。
类似的,周6~周期11的六个周期完成卷积核数据第1行和卷积数据第1行所有卷积运算中所需要的乘加运算。
周12~周期17的六个周期完成卷积核第2行和卷积数据第2行所有卷积运算中所需要的乘加运算。
周期16结束后,第一寄存器v0、第二寄存器v1中已经获得了c00与c01卷积结果:
c00=a00*b00+a01*b01+a02*b02+a10*b10+a11*b11+a12*b12+a20*b20+a21*b21+a22*b22;
c01=a01*b00+a02*b01+a03*b02+a11*b10+a12*b11+a13*b12+a21*b20+a22*b21+a23*b22。
所述卷积控制器111可以将所述第一寄存器v0和所述第二寄存器v1中结果数据存储至所述数据存储模块13,完成存储后需要将所述第一寄存器v0和所述第二寄存器v1中的数据清零,以便被重新使用。
周期17结束后,第三寄存器v2、第四寄存器v3、第五寄存器v4和第六寄存器v5中已经分别获得了c02、c03、c04、c05的卷积结果:
c02=a02*b00+a03*b01+a04*b02+a12*b10+a13*b11+a14*b12+a22*b20+a23*b21+a24*b22;c03=a03*b00+a04*b01+a05*b02+a13*b10+a14*b11+a15*b12+a23*b20+a24*b21+a25*b22;c04=a04*b00+a05*b01+a06*b02+a14*b10+a15*b11+a16*b12+a24*b20+a25*b21+a26*b22;c05=a05*b00+a06*b01+a07*b02+a15*b10+a16*b11+a17*b12+a25*b20+a26*b21+a27*b22。
所述卷积控制器111可以将第三寄存器v2、第四寄存器v3、第五寄存器v4和第六寄存器v5中结果数据存储至所述数据存储模块13,完成存储后需要将第三寄存器v2、第四寄存器v3、第五寄存器v4和第六寄存器v5中的数据清零,以便被重新使用。
周期17结束后卷积结果第0行的数据已经全部产生,周期18开始计算卷积结果第2行的数据。一直到周期143得到了所有的卷积结果数据。
本具体实施方式提供的支持卷积运算的处理器电路系统及其卷积运算控制方法,通过复用处理器原有的算术逻辑运算单元来实现卷积运算中的乘法与加法,从而可以大幅度节省卷积运算电路面积。同时,通过复用处理器原有的寄存器作为临时数据缓存来存储卷积运算过程中的中间数据,从而可以进一步精简电路结构,减少了装载操作,减少了访存带宽要求,提高了卷积运算时算术逻辑运算单元的利用率,能效性高。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。