CN110738310B - 一种稀疏神经网络加速器及其实现方法 - Google Patents
一种稀疏神经网络加速器及其实现方法 Download PDFInfo
- Publication number
- CN110738310B CN110738310B CN201910950799.3A CN201910950799A CN110738310B CN 110738310 B CN110738310 B CN 110738310B CN 201910950799 A CN201910950799 A CN 201910950799A CN 110738310 B CN110738310 B CN 110738310B
- Authority
- CN
- China
- Prior art keywords
- output
- group
- scheduler module
- coordinate
- neural network
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
Abstract
本发明提供一种稀疏神经网络加速器及实现方法,加速器主要包括PE阵列、输出存储器和调度器模块,PE阵列被划分为多个PE组,每个PE组和对应的输出存储器组成一个关联组,关联组中PE的数量和输出存储器的数量相等;关联组中的每一个PE单元可访问关联组中的任一输出存储器;任一关联组中的PE单元,根据输入的激活值和权重值计算得到多个输出结果,并按预设规则写入对应多个输出存储器中;调度器模块调度输出激活值的顺序,降低哈希冲突的概率。本发明将原始PE阵列划分为多个PE组,与对应输出存储器形成关联组体系架构,大大降低输出内存的面积并降低功耗开销;调度器模块降低了哈希冲突的概率,极大提升了整个系统的计算性能。
Description
技术领域
本发明属于神经网络加速器技术领域,尤其涉及一种稀疏神经网络加速器及其实现方法。
背景技术
卷积神经网络(CNN)已在许多领域表现出良好的性能。然而,CNN网络具有相当大的计算和存储复杂度,因此需要设计专用集成电路(ASIC)加速器来加速CNN的计算。同时,现有的高效CNN具有很高的稀疏性(0在网络参数和中间结果中的占比很高),因此现有的加速器采用了不同的硬件设计来加速稀疏神经网络的计算。
现有的ASIC设计采用了不同方法来处理稀疏CNN。第一种方法是功率门控(powergating)方法,该方法通过在输入激活值或权重为零时关闭相应的计算单元(PE)来提高能效,可利用CNN中激活值和权重的稀疏性。然而,由于输出结果所需要的总时钟周期没有改变,因此功率门控方法无法提升加速器的计算性能。
第二种方法是零跳过(zero skipping)方法,该方法可以通过跳过零权重或激活来提高能量效率和性能。需要注意的是,这种方法只能跳过为零的权重或者为零的激活二者之一(无法两者同时跳过),如果要同时跳过两者,需要的硬件电路面积、功耗开销过大。
第三种方法是哈希方法,该方法通过压缩非零输入激活值和权重值,并且只计算激活值和权重值的笛卡尔积,并将计算结果散列写入不同的输出存储器。这种方法可以充分利用稀疏CNN的激活值和权重值的稀疏性来提高能量效率和性能,但是具有由哈希冲突引起的极大的存储器开销和性能损失的缺点。
发明内容
为克服上述现有输出内存功耗大的问题或者至少部分地解决上述问题,本发明实施例提供一种稀疏神经网络加速器及其实现方法。
根据本发明实施例的第一方面,提供一种稀疏神经网络加速器,包括PE阵列和输出存储器,所述PE阵列被划分为多个PE组,其中,每个PE组和对应的输出存储器组成一个关联组,每一个关联组中PE单元的数量和输出存储器的数量相等;对于任一关联组中的每一个PE单元通过交叉开关路由器访问所述任一关联组中的任一输出存储器;
每一个PE组,用于根据输入的激活值和权重值,计算得到多个输出结果,并将所述多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
在上述技术方案的基础上,本发明还可以作如下改进。
进一步的,每个激活值及其坐标被输入所述PE阵列中的一列PE单元中,每个权重值及其坐标被输入所述PE阵列的一行PE单元中,每一个PE组计算得到的输出结果的数量与PE组中的PE单元的数量相等;
每一个PE组,用于将计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
进一步的,每一个PE单元包括乘法器和加法器;
所述乘法器,用于根据输入的激活值和权重值,计算获得输出数据;
所述加法器,用于根据输入的激活值的坐标和权重值的坐标,计算获得输出坐标;
其中,所述输出数据和对应的输出坐标组成输出结果,所述输出坐标包括输出行坐标和输出列坐标。
进一步的,所述每一个PE组,用于将计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中包括:
对每一个输出坐标的列坐标对N取模得到i,则将所述输出坐标对应的输出数据存储到对应关联组的第i个输出存储器中,其中,N为每一个关联组中输出存储器的数量,i取非负整数,所述输出存储器从0开始计数。
进一步的,所述加速器还包括调度器模块,所述调度器模块支持原始输出模式和调度输出模式;
当所述调度器模块采用调度输出模式时,所述调度器模块,用于对每一个PE组的输出结果进行哈希负载均衡处理。
进一步的,所述调度器模块支持多种工作状态,通过不同的工作状态之间的切换,实现所述原始输出模式或所述调度输出模式,不同工作状态由2位控制信号crtl控制;
其中,所述多种工作状态为IDLE,PRE,STAGE0,STAGE1,STAGE2,OUT_SCHEDULE和OUT_RAW。
进一步的,所述调度器模块包括四个电路组件;
第一电路组件为N个64字节的坐标堆栈IS,用于存储所述PE阵列的输出结果中的输出坐标;
第二电路组件为N个6比特堆栈指针SP,用于存储N个坐标堆栈IS的当前空闲位置;
第三电路组件为256字节的输出队列OQ,用于存储经过调度后的输出坐标;
第四电路组件为32字节的输出标志OF,用于记录所述输出队列OQ的相应位置是否被占用;
其中,N为每一个PE组中PE单元的数量。
进一步的,当所述调度器模块工作在STAGE0状态时,所述调度器模块将PE组的所有输出坐标均存储于所述坐标堆栈IS中;
当所述调度器模块工作在STAGE1状态时,所述调度器模块用于调度不会引起哈希冲突的输出数据对应的输出坐标;
当所述调度器模块工作在STAGE2状态时,所述调度器模块用于调度会引起哈希冲突的输出数据对应的输出坐标。
进一步的,当所述调度器模块在OUT_SCHEDULE工作状态时,所述调度器模块还用于按照所述输出队列OQ中存储的所述输出坐标的顺序将每一个输出坐标对应的输出数据及所述输出坐标输出至芯片外部电路。
根据本发明实施例第二方面提供一种稀疏神经网络加速器的实现方法,所述稀疏神经网络加速器包括PE阵列和输出存储器,所述实现方法包括:
将所述PE阵列划分为多个PE组,其中,每个PE组和对应的输出存储器组成一个关联组,每一个关联组中PE单元的数量和输出存储器的数量相等;对于任一关联组中的每一个PE单元通过交叉开关路由器访问所述任一关联组中的任一输出存储器;
将激活值和权重值输入所述PE阵列中,将每一个PE组计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
本发明实施例提供一种稀疏神经网络加速器及其实现方法,将原始PE阵列划分为多个PE组,与对应的输出存储器形成关联组体系架构,整个PE阵列对应的输出存储器的总大小可以大大减少,节省输出内存的面积并降低功耗开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见的,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一个实施例提供的稀疏神经网络加速器结构示意图;
图2为本发明一个实施例提供的调度器模块的不同工作状态控控制示意图;
图3为本发明一个实施例提供的调度器模块结构示意图;
图4为本发明一个实施例的稀疏神经网络加速器的整体结构示意图。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见的,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
在本发明的一个实施例中提供一种稀疏神经网络加速器,图1为本发明实施例提供的稀疏神经网络加速器,该稀疏神经网络加速器包括PE阵列和输出存储器,所述PE阵列被划分为多个PE组,其中,每个PE组和对应的输出存储器组成一个关联组,每一个关联组中PE单元的数量和输出存储器的数量相等。对于任一关联组中的每一个PE单元通过交叉开关路由器访问所述任一关联组中的任一输出存储器;每一个PE组,用于根据输入的激活值和权重值,计算得到多个输出结果,并将所述多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
可以理解的是,为了降低输出内存消耗,本发明实施例将稀疏神经网络加速器中的PE阵列划分为多个PE组,每个PE组和对应的输出存储器组成一个关联组,关联组内的任一一个PE单元通过交叉开关路由器访问该关联组内的任一一个输出存储器。
其中,在计算的过程中,是将激活值及其坐标以及权重值及其坐标输入PE阵列中,每一个PE组根据输入的激活值和权重值,计算得到多个输出结果,并将多个输出结果按照预设规则写入PE组对应关联组的多个输出存储器中。
本发明实施例将原始PE阵列划分为多个PE组,与对应的输出存储器形成关联组体系架构,整个PE阵列对应的输出存储器的总大小可以大大减少,节省输出内存的面积并降低功耗开销。
在上述实施例的基础上,本发明实施例中,每个激活值及其坐标被输入PE阵列中的一列PE单元中,每个权重值及其坐标被输入PE阵列的一行PE单元中,每一个PE组计算得到的输出结果的数量与PE组中的PE单元的数量相等;每一个PE组,用于将计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
如图1所示,假设有一个K*A的PE阵列来计算结果(图1中所示K=A=4),其中K是输入权重值的数量,A是输入激活值的数量。每个激活值及其坐标被送入一列PE单元中,每个权重值及其坐标被送入一行PE单元中。通过这种方式,整个PE阵列每进行一次计算可以产生K*A个输出结果。如图1所示,一个关联组中有N个PE单元和对应的N个输出存储器(在图中N=2),它们通过一种交叉开关结构的路由器链接(以下称为交叉开关路由器)。每个关联组中的每个PE单元都可以通过交叉开关路由器访问对应关联组内的任何输出存储器。如图1中的(a)(b)(d)所示,将输入特征图的大小(即激活值的大小)表示为α^2,输入内核的大小(即权重值的大小)表示为β^2,引入C0=(α+β-1)^2,那么每个输出存储器的大小为C=C0/N,其中,N为每个关联组中PE单元的数量,N取正整数。因此,每个关联组中所有输出存储器的总大小为C0。由于每行PE单元都具有A/N个关联组,本发明实施例中按行对PE组进行划分,那么整个PE阵列对应的输出存储器的输出内存的总大小是K*A/N*C0。
已有的稀疏神经网络加速器的输出存储器的总大小是K*A*C0,比本发明实施例提供的稀疏神经网络加速器的输出存储器的总大小大N倍,已有的稀疏神经网络加速器具有很大的额外输出存储器开销。通过使用本发明实施例提出的组关联体系结构(即对整个PE阵列进行关联组的划分并将其对应于组相联的输出存储器),随着每一个关联组中PE单元的数量N的增加,输出存储器的总大小可以大大减少,这会节省硬件输出内存的面积并降低功耗开销。
在上述各实施例的基础上,本发明实施例中,每一个PE单元包括乘法器和加法器;
所述乘法器,用于根据输入的激活值和权重值,计算获得输出数据;
所述加法器,用于根据输入的激活值的坐标和权重值的坐标,计算获得输出坐标;
其中,所述输出数据和对应的输出坐标组成输出结果,所述输出坐标包括输出行坐标和输出列坐标。
可以理解的是,本发明实施例中,每一个PE单元包括乘法器和加法器,上述已经说明,向PE阵列中的每一列PE单元中输入激活值及其坐标,向PE阵列中的每一行PE单元中输入权重值及其坐标。
当激活值及其坐标以及权重值及其坐标输入PE单元后,PE单元中的乘法器根据输入的激活值和权重值,对激活值和权重值进行计算得到输出数据;PE单元中的加法器根据输入的激活值的坐标和输入的权重值的坐标,计算得到输出坐标。
其中,激活值的坐标包括行坐标和列坐标,权重值的坐标包括行坐标和列坐标,那么每一个PE单元计算得到的输出坐标也包括行坐标和列坐标。
每个PE单元使用两个输入对(激活值和坐标,权重值和坐标),然后输出计算结果对(以下称为输出结果,输出结果包括输出数据和输出坐标)。PE单元中的乘法器通过处理两个输入数据来获得输出数据,而加法器通过处理两个输入坐标来获得输出坐标。例如一个输入对为(1,21),另一个输入对为(3,53),则输出对为(3,74),代表一个第2行第1列的激活值为1的输入,以及一个第5行第3列的权重值为3的输入,计算的结果为第7行第4列的数值为3的输出。
在上述各实施例的基础上,本发明实施例中,所述每一个PE组,将计算得到的多个输出结果按照以下规则写入对应关联组的多个输出存储器中,包括:
对每一个输出坐标的列坐标对N取模得到i,则将所述输出坐标对应的输出数据存储到对应关联组的第i个输出存储器中,其中,N为每一个关联组中输出存储器的数量,i取非负整数,所述输出存储器从0开始计数。
可以理解的是,在本发明实施例中采用了哈希坐标算法,对于任意一个PE组,将该PE组计算得到的多个输出结果存储到该PE组对应关联组中的多个输出存储器中时,每一个输出结果会被写入到关联组内的第(输出结果中的输出坐标中的列坐标对N取模)个输出存储器。例如,如果输出坐标的列坐标为8,N=3,则该输出数据会被哈希到关联组中的第(8模3=2)个输出存储器,比如,输出坐标的行坐标为7,则该输出数据存储于第2个输出存储器的第7行第8列的位置,其中,N为每一个关联组中PE单元的数量,每一个关联组中的N个输出存储器从0开始计数。
可以理解的是,虽然组关联体系结构减少了输出存储器的开销,但是这种结构的性能会受到哈希冲突的严重影响,这可能会导致明显的性能下降。当关联组中的任何两个或更多PE单元输出到同一个输出存储器时就会发生哈希冲突。
在上述各实施例的基础上,本发明实施例中,稀疏神经网络加速器还包括调度器模块,调度器模块支持原始输出模式和调度输出模式;
当所述调度器模块支持调度输出模式时,所述调度器模块,用于对每一个PE组的输出结果进行哈希负载均衡处理。
为了解决上述的哈希冲突问题,本发明实施例在稀疏神经网络加速器中设计调度器模块,调度器模块支持原始输出模式和调度输出模式;当调度器模块支持调度输出模式时,调度器模块用于对每一个PE组的输出结果进行哈希负载均衡处理。
其中,采用的哈希负载均衡算法如下,假设PE阵列每一行中关联组的数量为G,组关联大小(每个关联组中的PE个数和存储器个数)为N,输出坐标中的列坐标对N取模为i-1的激活值的数量为ωi,根据这些数据分别计算在PE阵列第i次计算中,每一行中的第j个关联组的第m个输出的坐标对N取模的值cijm以及在PE阵列第i次计算中,每一行中的第j个关联组中,输出坐标中的列坐标对N取模为m-1的输出的数量xijm。
其中,对于稀疏神经网络中的每一层神经网络,输入的所有激活值需要PE阵列进行多次计算才能够得到一层的结果。对于K*A的PE阵列(在上面的叙述中为A=G*N),每一次计算需要输入K个权重值和A个激活值,那么如果激活值的总量为则需要的总的计算数为ω/A。对于每一次计算,每个关联组的每个输入位置输入的列坐标的对N取模的值会对输出的冲突数量造成影响。因此,只有得到第i次计算中,每一行中的第j个关联组的第m个输出坐标的列坐标对N取模的值cijm,就可以按照这个方法来安排实际硬件的输入的情况,其中xijm可以由cijm直接转化而来,按照该种方式来解决哈希冲突的问题其中具体得到cijm以及xijm的方法如以下算法伪代码所示:
哈希负载均衡算法,输入:
G,Z∈Z+,ωi∈N,i=1,2,…,N;
输出:
cijm,xijm,i=1,2,…,N,j=1,2,…,G,m=1,2,…,N;
//算法开始
//算法第一部分:调度不会引起哈希冲突的输入。
For m=1;m≤N;m=m+1do
im=H+1;jm=G+1;
For i=1;i≤H;i=i+1do
For j=1;i≤G;j=j+1do
If ωm>0then
cijm=m;ωm=ωm-1;
Else
im=i;jm=j;i=H+1;j=G+1;
//算法第二部分:调度会不可避免地引起哈希冲突的输入,并最小化冲突的影响。
M=1;
For p=1;p≤N;p=p+1do
For m=M;m≤N;m=m+1do
For i=im;i≤H;i=i+1do
For j=jm;j≤G;j=j+1do
If ωp>0then
cijm=p;ωp=ωp-1;
Else
M=m;im=i;jm=j;i=H+1;j=G+1;m=N+1;
//算法结束
其中,调度器模块支持原始输出模式(RAW)和调度输出模式(SCHEDULE),原始输出模式直接将计算结果进行输出,对计算结果不做任何输出,而调度输出模式会先对计算的输出结果进行正确调度,降低哈希冲突数后再进行输出。具体为,当调度器模块工作在调度输出模块时,调度器模块对每一个PE组的输出结果进行哈希负载均衡处理,将处理后的输出结果进行输出。
参见图2,在上述各实施例的基础上,本发明实施例中,调度器模块支持多种工作状态,不同工作状态由2位控制信号crtl控制;其中,所述多种工作状态为IDLE,PRE,STAGE0,STAGE1,STAGE2,OUT_SCHEDULE和OUT_RAW。
可以理解的是,为了实现原始输出模式和调度输出模式两种工作模式,参见图2,调度器模块被设计为七状态Mealy有限状态机(FSM)。所谓有限状态机指的是在不同状态具有不同的输出与表现的一种设计模型,通过状态之间的转换形成不同功能之间的转换以及电路复杂功能的实现。在调度器模块的实际中,七种状态分别是IDLE,PRE,STAGE0,STAGE1,STAGE2,OUT_SCHEDULE和OUT_RAW,状态之间的转移由2位控制信号ctrl控制,该控制信号由控制器模块给出。
在调度器模块工作在调度输出模式中,调度器模块对输出数据先进行调度,之后输出结果。通过这种调度的方法,可以减少下一层神经网络在加速时的哈希冲突率。为了实现这一功能,在此状态前调度器模块要经历三种不同的状态。在STAGE0状态下,调度器模块遍历输出数据以填充四个坐标堆栈(关联度为4,每一个关联组中有4个PE单元),其中每个坐标堆栈大小为64字节,总大小为256字节。在STAGE0状态之后,所有输出数据的坐标都存储在四个坐标堆栈中以供进一步使用。在STAGE1状态中,调度器模块会最大程度地调度不会引起哈希冲突的数据。在STAGE2状态中,调度器模块会调度引起哈希冲突的输出数据,以此来最小化哈希冲突对加速器性能造成的不良影响。通过这三种状态(STAGE0状态、STAGE1状态和STAGE2状态),调度器模块可以很好地安排数据流以降低冲哈希突率,并且进一步提高系统性能。最后在OUT_SCHEDULE状态中,调度器模块输出经过调度后的输出数据及其输出坐标。
参见图3,在上述各实施例的基础上,本发明实施例中,所述调度器模块包括四个电路组件;
第一电路组件为N个64字节的坐标堆栈IS,用于存储所述PE阵列的输出结果中的输出坐标;
第二电路组件为N个6比特堆栈指针SP,用于存储N个坐标堆栈IS的当前空闲位置;
第三电路组件为256字节的输出队列OQ,用于存储经过调度后的输出坐标;
第四电路组件为32字节的输出标志OF,用于记录所述输出队列OQ的相应位置是否被占用;
其中,N为每一个PE组中PE单元的数量。
可以理解的是,如图3所示,调度器模块有四个主要电路组件,第一个组件是四个(假设一个关联组中有4个PE单元,也就是有4个输出存储器)64字节坐标堆栈IS,它们可以存储多达256个非零值的坐标;第二个组件是四个6比特堆栈指针SP,它们存储四个坐标堆栈IS的当前空闲位置(1字节等于8比特);第三个组件是一个256字节的输出队列OQ,它存储经过调度后的输出数据的坐标。在最后进行输出时,输出的顺序将按照坐标在OQ中储存的顺序进行。调度器模块的第四部分是一个32字节的输出标志(OF),它记录OQ的相应位置是否已被分配相应的输出。四个不同的组件协作完成输出结果的调度。
在上述各实施例的基础上,本发明实施例中,当调度器模块工作在STAGE0状态时,调度器模块将PE组的所有输出坐标存储于坐标堆栈IS中;当调度器模块工作在STAGE1状态时,调度器模块用于调度不会引起哈希冲突的输出数据对应的输出坐标;当调度器模块工作在STAGE2状态时,调度器模块用于调度会引起哈希冲突的输出数据对应的输出坐标。
当调度器模块工作在STAGE0状态时,调度器模块遍历PE组中的每一个PE单元计算得到的输出结果以将非零输出数据的坐标复制到IS中。其中,将每一个输出坐标的列坐标模4,得到的数值即为存储的IS的位置。例如输出坐标的行列坐标为0xAF=10,15,则将该坐标存储到第(15模4=3)个IS中。当所有输出坐标被存储在四个IS时,调度器模块将自动转移到STAGE1状态。
在STAGE1状态中,调度器模块将IS中存储的输出坐标通过调度存储到输出队列OQ中,调度器模块对输出队列OQ的位置进行遍历,当OQ的位置到达x时,它将检查第(x模4)个IS是否为空,如果为空,则调度器模块将跳过OQ的第x个位置;如果不为空,这个IS将弹栈(输出栈顶的一个坐标)到OQ的这个位置。同时,相同位置的输出标志OF将被设置,标记OQ的第x个位置已被占用,并且相应的堆栈指针SP将减少1,标记OQ最新的空闲位置。如上图3(b)中所示,首先检查OQ第0个位置,由于第0个IS非空,则其弹栈,输出栈顶的坐标0x84到OQ的第0个位置,同时设置OF的第0个位置为1,说明此位置已被占据。通过这种方式,四个IS中的部分输出坐标将会被发送到OQ中,这部分的输出坐标对应的输出数据为不会引起哈希冲突的输出数据。
在STAGE2状态中,调度器模块遍历所有IS以将其中未分配的输出坐标分配到OQ的未占用位置。如果某个IS不为空,调度器模块将以步长为4检查OF,确定OQ的对应位置是否已被占用,例如依次检查OQ的第0,4,8个位置。当到达OF中的最大位置时,将返回OF的开始,然后递增1后再次以步长为4的方式检查其他位置,例如以此检查第1,5,9个位置。此过程将重复多次,直到IS中的所有输出坐标都被分配到OQ中,这部分的输出坐标对应的输出数据为会引起哈希冲突的输出数据。当此状态完成时,所有输出坐标都将被分配到OQ中,并且调度器模块会自动进入OUT_SCHEDULE状态。
在本发明的一个实施例中,调度器模块还用于按照输出队列OQ中存储的输出坐标的顺序将每一个输出坐标对应的输出数据输出至芯片外部电路。
当调度器模块工作在OUT_SCHEDULE状态中,调度器模块通过遍历OQ中的坐标来输出数据到芯片外。其中,经过调度后存储到输出对了OQ中的输出坐标是进行了排序的,在将数据输出到芯片外部电路时,按照OQ中存储的输出坐标的顺序将对应的输出数据及坐标输出到芯片外部电路。通过使用这种调度方式,可以很好地调度输出到片外的输出数据,这可以降低下一层神经网络计算的冲突率并且提高系统的整体性能。
在本发明的另一个实施例中提供一种稀疏神经网络加速器的实现方法,稀疏神经网络加速器包括PE阵列和输出存储器,稀疏神经网络加速器的实现方法包括:将PE阵列划分为多个PE组,其中,每个PE组和对应的输出存储器组成一个关联组,每一个关联组中PE单元的数量和输出存储器的数量相等;对于任一关联组中的每一个PE单元通过交叉开关路由器访问所述任一关联组中的任一输出存储器;
将激活值和权重值输入所述PE阵列中,将每一个PE组计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
参见图4,图4示出了稀疏神经网络加速器的整体结构,下面根据加速器的整体结构来叙述神经网络中的其中一层网络的计算流程。首先,将芯片的指令从片外DRAM加载到片上指令cache,其中,片上指令Cache的大小为4KB,并将数据从片外DRAM加载到芯片上的数据预处理模块。在数据预处理模块中,数值为零的输入激活值和权重值将被去除,同时非零的激活值和权重值将被转换为(数据,坐标)对,并分别存储到数据Cache和坐标cache中,其中,数据Cache的大小为8KB*2,坐标Cache的大小为8KB*2。在预处理之后,在一次计算中使用的非零数据及其坐标值将被加载到PE阵列(比如,PE阵列的大小为16*16,即16行PE单元和16列PE单元)进行计算(一层神经网络中的全部数据需要多次计算)。PE阵列的部分计算结果被哈希到组相关的输出存储器(输出存储器的大小为48KB)中,并在一次计算完成后被累加到输出SRAM(输出SRAM的大小为4.5KB)。因此,在完成一层神经网络的所有计算后最终的输出结果即存储在输出SRAM中。当一层神经网络的全部计算完成时,输出SRAM中的最终输出结果会被发送到调度器模块。调度器模块对输出结果的顺序进行调度后将其输出到芯片外DRAM中,以降低下一层的冲突率,在下一层神经网络的计算中,这些被调度后的计算结果会作为输入被重新输入加速器上,因此下一层的计算过程会被优化,以提升整个神经网络系统的整体性能。
本发明实施例提供一种稀疏神经网络加速器的实现方法,将整个PE阵列划分为多个关联组,每一个关联组中包括多个PE单元和对应的多个输出存储器,能够降低整个PE阵列的输出存储器的输出内存的开销和功耗。该实现方法还通过哈希负载均衡算法对哈希冲突问题进行解决,其相关技术特征可参见上述各实施例提供的稀疏神经网络加速器的相关技术特征,在此不再赘述。
本发明实施例提供的稀疏神经网络加速器与现有的稀疏神经网络加速器相比,通过创新地使用组关联体系架构,可以将输出存储器的开销降低50%;通过使用哈希负载均衡算法,可以将已有稀疏神经网络加速器在不同稀疏度的神经网络上的性能提升为1.65倍到1.87倍;以及通过使用调度器模块,与目前国际领先的加速器相比,本发明实施例提供的整体硬件架构可以分别在常用的神经网络模型AlexNet,VGG16,ResNet18,MobileNet上分别达到1.53倍,1.62倍,1.46倍,以及1.55倍的性能。
本发明实施例提供的稀疏神经网络加速器及实现方法,将原始PE阵列划分为多个PE组,与对应输出存储器形成关联组体系架构,大大降低输出内存的面积并降低功耗开销;调度器模块降低了哈希冲突的概率,极大提升了整个系统的计算性能。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种稀疏神经网络加速器,其特征在于,包括PE阵列和输出存储器,所述PE阵列被划分为多个PE组,其中,每个PE组和对应的输出存储器组成一个关联组,每一个关联组中PE单元的数量和输出存储器的数量相等;对于任一关联组中的每一个PE单元通过交叉开关路由器访问所述任一关联组中的任一输出存储器;
每一个PE组,用于根据输入的激活值和权重值,计算得到多个输出结果,并将所述多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
2.根据权利要求1所述的稀疏神经网络加速器,其特征在于,每个激活值及其坐标被输入所述PE阵列中的一列PE单元中,每个权重值及其坐标被输入所述PE阵列的一行PE单元中,每一个PE组计算得到的输出结果的数量与PE组中的PE单元的数量相等;
每一个PE组,用于将计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
3.根据权利要求2所述的稀疏神经网络加速器,其特征在于,每一个PE单元包括乘法器和加法器;
所述乘法器,用于根据输入的激活值和权重值,计算获得输出数据;
所述加法器,用于根据输入的激活值的坐标和权重值的坐标,计算获得输出坐标;
其中,所述输出数据和对应的输出坐标组成输出结果,所述输出坐标包括输出行坐标和输出列坐标。
4.根据权利要求3所述的稀疏神经网络加速器,其特征在于,所述每一个PE组,用于将计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中包括:
对每一个输出坐标的列坐标对N取模得到i,则将所述输出坐标对应的输出数据存储到对应关联组的第i个输出存储器中,其中,N为每一个关联组中输出存储器的数量,i取非负整数,所述输出存储器从0开始计数。
5.根据权利要求1所述的稀疏神经网络加速器,其特征在于,所述加速器还包括调度器模块,所述调度器模块支持原始输出模式和调度输出模式;
当所述调度器模块采用调度输出模式时,所述调度器模块,用于对每一个PE组的输出结果进行哈希负载均衡处理。
6.根据权利要求5所述的稀疏神经网络加速器,其特征在于,所述调度器模块支持多种工作状态,通过不同的工作状态之间的切换,实现所述原始输出模式或所述调度输出模式,不同工作状态由2位控制信号crtl控制;
其中,所述多种工作状态为IDLE,PRE,STAGE0,STAGE1,STAGE2,OUT_SCHEDULE和OUT_RAW。
7.根据权利要求6所述的稀疏神经网络加速器,其特征在于,所述调度器模块包括四个电路组件;
第一电路组件为N个64字节的坐标堆栈IS,用于存储所述PE阵列的输出结果中的输出坐标;
第二电路组件为N个6比特堆栈指针SP,用于存储N个坐标堆栈IS的当前空闲位置;
第三电路组件为256字节的输出队列OQ,用于存储经过调度后的输出坐标;
第四电路组件为32字节的输出标志OF,用于记录所述输出队列OQ的相应位置是否被占用;
其中,N为每一个PE组中PE单元的数量。
8.根据权利要求7所述的稀疏神经网络加速器,其特征在于,当所述调度器模块工作在STAGE0状态时,所述调度器模块将PE组的所有输出坐标均存储于所述坐标堆栈IS中;
当所述调度器模块工作在STAGE1状态时,所述调度器模块用于调度不会引起哈希冲突的输出数据对应的输出坐标;
当所述调度器模块工作在STAGE2状态时,所述调度器模块用于调度会引起哈希冲突的输出数据对应的输出坐标。
9.根据权利要求8所述的稀疏神经网络加速器,其特征在于,当所述调度器模块在OUT_SCHEDULE工作状态时,所述调度器模块还用于按照所述输出队列OQ中存储的所述输出坐标的顺序将每一个输出坐标对应的输出数据及所述输出坐标输出至芯片外部电路。
10.一种稀疏神经网络加速器的实现方法,所述稀疏神经网络加速器包括PE阵列和输出存储器,其特征在于,所述实现方法包括:
将所述PE阵列划分为多个PE组,其中,每个PE组和对应的输出存储器组成一个关联组,每一个关联组中PE单元的数量和输出存储器的数量相等;对于任一关联组中的每一个PE单元通过交叉开关路由器访问所述任一关联组中的任一输出存储器;
将激活值和权重值输入所述PE阵列中,将每一个PE组计算得到的多个输出结果按照预设规则写入对应关联组的多个输出存储器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910950799.3A CN110738310B (zh) | 2019-10-08 | 2019-10-08 | 一种稀疏神经网络加速器及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910950799.3A CN110738310B (zh) | 2019-10-08 | 2019-10-08 | 一种稀疏神经网络加速器及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110738310A CN110738310A (zh) | 2020-01-31 |
CN110738310B true CN110738310B (zh) | 2022-02-01 |
Family
ID=69268561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910950799.3A Active CN110738310B (zh) | 2019-10-08 | 2019-10-08 | 一种稀疏神经网络加速器及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110738310B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019656A (zh) * | 2012-12-04 | 2013-04-03 | 中国科学院半导体研究所 | 可动态重构的多级并行单指令多数据阵列处理系统 |
CN106650924A (zh) * | 2016-10-27 | 2017-05-10 | 中国科学院计算技术研究所 | 一种基于时间维和空间维数据流压缩的处理器、设计方法 |
CN107590533A (zh) * | 2017-08-29 | 2018-01-16 | 中国科学院计算技术研究所 | 一种用于深度神经网络的压缩装置 |
CN108280514A (zh) * | 2018-01-05 | 2018-07-13 | 中国科学技术大学 | 基于fpga的稀疏神经网络加速系统和设计方法 |
CN108898216A (zh) * | 2018-05-04 | 2018-11-27 | 中国科学院计算技术研究所 | 应用于神经网络的激活处理装置 |
CN109635944A (zh) * | 2018-12-24 | 2019-04-16 | 西安交通大学 | 一种稀疏卷积神经网络加速器及实现方法 |
CN109993297A (zh) * | 2019-04-02 | 2019-07-09 | 南京吉相传感成像技术研究院有限公司 | 一种负载均衡的稀疏卷积神经网络加速器及其加速方法 |
CN110110851A (zh) * | 2019-04-30 | 2019-08-09 | 南京大学 | 一种lstm神经网络的fpga加速器及其加速方法 |
WO2019165316A1 (en) * | 2018-02-23 | 2019-08-29 | The Regents Of The University Of California | Architecture to compute sparse neural network |
CN110222818A (zh) * | 2019-05-13 | 2019-09-10 | 西安交通大学 | 一种用于卷积神经网络数据存储的多bank行列交织读写方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11507429B2 (en) * | 2017-09-14 | 2022-11-22 | Electronics And Telecommunications Research Institute | Neural network accelerator including bidirectional processing element array |
-
2019
- 2019-10-08 CN CN201910950799.3A patent/CN110738310B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019656A (zh) * | 2012-12-04 | 2013-04-03 | 中国科学院半导体研究所 | 可动态重构的多级并行单指令多数据阵列处理系统 |
CN106650924A (zh) * | 2016-10-27 | 2017-05-10 | 中国科学院计算技术研究所 | 一种基于时间维和空间维数据流压缩的处理器、设计方法 |
CN107590533A (zh) * | 2017-08-29 | 2018-01-16 | 中国科学院计算技术研究所 | 一种用于深度神经网络的压缩装置 |
CN108280514A (zh) * | 2018-01-05 | 2018-07-13 | 中国科学技术大学 | 基于fpga的稀疏神经网络加速系统和设计方法 |
WO2019165316A1 (en) * | 2018-02-23 | 2019-08-29 | The Regents Of The University Of California | Architecture to compute sparse neural network |
CN108898216A (zh) * | 2018-05-04 | 2018-11-27 | 中国科学院计算技术研究所 | 应用于神经网络的激活处理装置 |
CN109635944A (zh) * | 2018-12-24 | 2019-04-16 | 西安交通大学 | 一种稀疏卷积神经网络加速器及实现方法 |
CN109993297A (zh) * | 2019-04-02 | 2019-07-09 | 南京吉相传感成像技术研究院有限公司 | 一种负载均衡的稀疏卷积神经网络加速器及其加速方法 |
CN110110851A (zh) * | 2019-04-30 | 2019-08-09 | 南京大学 | 一种lstm神经网络的fpga加速器及其加速方法 |
CN110222818A (zh) * | 2019-05-13 | 2019-09-10 | 西安交通大学 | 一种用于卷积神经网络数据存储的多bank行列交织读写方法 |
Non-Patent Citations (3)
Title |
---|
SCNN: An accelerator for compressed-sparse convolutional neural networks;Angshuman Parashar 等;《2017 ACM/IEEE 44th Annual International Symposium on Computer Architecture (ISCA)》;20180628;全文 * |
STICKER: A 0.41-62.1 TOPS/W 8bit Neural Network Processor with Multi-Sparsity Compatible Convolution Arrays and Online Tuning Acceleration for Fully Connected Layers;Zhe Yuan 等;《2018 IEEE Symposium on VLSI Circuits》;20180622;全文 * |
基于NOC结构的卷积神经网络加速器建模;周华坤;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20190115;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110738310A (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107689948B (zh) | 应用于神经网络硬件加速系统的高效数据访存管理装置 | |
EP3757901A1 (en) | Schedule-aware tensor distribution module | |
US8819359B2 (en) | Hybrid interleaving in memory modules by interleaving physical addresses for a page across ranks in a memory module | |
US9189389B2 (en) | Memory controller and memory system | |
CN110222818B (zh) | 一种用于卷积神经网络数据存储的多bank行列交织读写方法 | |
CN109840585B (zh) | 一种面向稀疏二维卷积的运算方法和系统 | |
CN113128675B (zh) | 一种基于脉冲神经网络的无乘法卷积调度器及其硬件实现方法 | |
CN111124675A (zh) | 一种面向图计算的异构存内计算设备及其运行方法 | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
CN113313244B (zh) | 面向加法网络的近存储神经网络加速器及其加速方法 | |
CN110738310B (zh) | 一种稀疏神经网络加速器及其实现方法 | |
CN117273099A (zh) | 一种可重构阵列下Transformer网络模型数据复用方案与实现方法 | |
Wang et al. | SPCIM: Sparsity-Balanced Practical CIM Accelerator With Optimized Spatial-Temporal Multi-Macro Utilization | |
CN114429214A (zh) | 运算单元、相关装置和方法 | |
CN117234720A (zh) | 动态可配置的存算融合数据缓存结构、处理器及电子设备 | |
CN111898752A (zh) | 执行lstm神经网络运算的装置和方法 | |
US11816025B2 (en) | Hardware acceleration | |
CN110766133B (zh) | 嵌入式设备中的数据处理方法、装置、设备和存储介质 | |
CN111078589B (zh) | 一种应用于深度学习计算的数据读取系统、方法及芯片 | |
US20210117100A1 (en) | Hybrid first-fit k-choice insertions for hash tables, hash sets, approximate set membership data structures, and caches | |
CN110490312A (zh) | 一种池化计算方法和电路 | |
CN115719088B (zh) | 一种支持存内cnn的中间缓存调度电路装置 | |
CN111709872B (zh) | 一种图三角形计数算法的自旋存内计算架构 | |
Wu et al. | Edge-Side Fine-Grained Sparse CNN Accelerator With Efficient Dynamic Pruning Scheme | |
Wu et al. | Efficient inference of large-scale and lightweight convolutional neural networks on FPGA |
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 |