CN109472355B - 卷积处理引擎及控制方法和相应的卷积神经网络加速器 - Google Patents
卷积处理引擎及控制方法和相应的卷积神经网络加速器 Download PDFInfo
- Publication number
- CN109472355B CN109472355B CN201811323140.7A CN201811323140A CN109472355B CN 109472355 B CN109472355 B CN 109472355B CN 201811323140 A CN201811323140 A CN 201811323140A CN 109472355 B CN109472355 B CN 109472355B
- Authority
- CN
- China
- Prior art keywords
- cache
- processing engine
- input
- convolution processing
- cache memory
- 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/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/04—Architecture, e.g. interconnection topology
-
- 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
Abstract
公开了一种卷积处理引擎及其控制方法以及包括该卷积处理引擎的卷积神经网络加速器。该卷积处理引擎包括串联的至少两个高速缓冲存储器和运算电路。该卷积处理引擎能够以较低的复杂度和功耗来实现高效率的卷积运算。
Description
技术领域
本公开总体上涉及人工智能的技术领域,并且具体地涉及一种卷积处理引擎及其控制方法以及包括该卷积处理引擎的卷积神经网络加速器。
背景技术
卷积神经网络已经成功地应用于图像处理、自动驾驶等诸多领域。随着应用需求的不断发展,卷积神经网络中涉及的乘加运算的运算量越来越多,对于用于卷积神经网络运算的卷积神经网络加速器的处理性能也提出越来越高的要求。
随着数据量和运算量的增加,卷积神经网络加速器消耗在存取(包括读取和写入)数据上的时间急剧增加,并且在很多情况下成为制约卷积神经网络加速器的处理性能的主要因素之一。
因此,期望提供一种低成本但高效率的卷积神经网络加速器。
发明内容
根据本公开的一方面,提供了一种卷积处理引擎。
该卷积处理引擎包括串联的至少两个高速缓冲存储器,其中,对于任何两个相邻的高速缓冲存储器中的在前高速缓冲存储器和在后高速缓冲存储器,在前高速缓冲存储器的输出端耦接到在后高速缓冲存储器的输入端,并且串联在最先位置处的第一高速缓冲存储器的输入端和串联在最后位置处的第二高速缓冲存储器的输出端分别对应于该卷积处理引擎的第一输入端和输出端。在前述的至少两个高速缓冲存储器中,前述的第一高速缓冲存储器用于接收和缓存来自该卷积处理引擎外部的数据,前述的第二高速缓冲存储器用于将所缓存的数据输出到该卷积处理引擎外部。
该卷积处理引擎还包括运算电路,其中,运算电路的输入端耦接到前述的至少两个高速缓冲存储器的每个高速缓冲存储器的输出端,并且运算电路的输出端耦接到前述的至少两个高速缓冲存储器的每个高速缓冲存储器的输入端。运算电路可以包括乘法累加器阵列。
根据本公开的另一方面,还提供了一种包括上述卷积处理引擎的卷积神经网络加速器。
根据本公开的另一方面,还提供了一种用于控制上述卷积处理引擎的方法。该方法包括:
确定待处理的卷积神经网络中的连续的至少两个层与前述的至少两个高速缓冲存储器之间的对应关系,对应高速缓冲存储器的对应部分将用于存储对应层的运算中所涉及的特征数据,其中,前述的至少两个层中的最先层的输入特征数据的对应高速缓冲存储器是前述的第一高速缓冲存储器,并且前述的至少两个层中的最后层的输出特征数据的对应高速缓冲存储器是前述的第二高速缓冲存储器;
从上述卷积处理引擎外部接收第一输入特征数据并存储到前述的第一高速缓冲存储器的第一对应部分中,前述的第一输入特征数据是前述的最先层的原始完整输入特征数据的第一部分数据;以及
控制前述的运算电路执行第一操作,前述的第一操作包括从前述的第一对应部分中读取前述的第一输入特征数据、基于前述的第一输入特征数据从前述的最先层开始依次执行每个层的运算以及将通过每个层的运算所获得的第一输出特征数据存储到对应高速缓冲存储器的对应部分中。
根据本公开的另一方面,还提供了一种计算机可读取的非临时性存储介质,其上存储有程序指令,该程序指令在被执行时至少执行上述用于控制卷积处理引擎的方法。
根据本公开的实施例的卷积处理引擎或包括该卷积处理引擎的卷积神经网络加速器能够以很低的硬件设计复杂度、控制复杂度、成本和功耗来高效率地实现卷积运算。
附图说明
通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同部件或步骤。另外,图中的箭头表示数据的流向,即,连接线的带箭头的一端与装置/电路/模块/单元的输入端相连,不带箭头的一端与装置/电路/模块/单元的输出端相连。在使用不带有箭头的连接线的情况下,表示不关注连接于该连接线两端的装置/电路/模块/单元之间的数据流向或者数据可以同时或异步地在两个方向上流动。
图1示出根据本公开的实施例的卷积处理引擎的示例。
图2示出根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器的示例。
图3示出根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器的示例。
图4示出根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器的示例。
图5示出根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器的示例。
图6示出根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器的示例。
图7示出根据本公开的实施例的卷积处理引擎的示例。
图8示出根据本公开的实施例的卷积处理引擎的一部分的示例。
图9示出根据本公开的实施例的卷积神经网络加速器的示例。
图10示出根据本公开的实施例的卷积神经网络加速器的示例。
图11示出根据本公开的实施例的卷积神经网络加速器的示例。
图12示出根据本公开的实施例的控制卷积处理引擎的方法的示例。
图13示出根据本公开的实施例的确定部分特征数据的大小的示例。
图14示出根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器的示例。
图15示出根据本公开的实施例的卷积神经网络的示例。
图16示出根据本公开的实施例的基于图14所示的高速缓冲存储器结构、针对图15所示的卷积神经网络的高速缓冲存储器的分配方式的示例。
图17示出根据本公开的实施例的在高速缓冲存储器的分配缓存区域的示例。
图18示出根据本公开的实施例的基于图14所示的高速缓冲存储器结构、针对图15所示的卷积神经网络的高速缓冲存储器的分配方式的示例。
图19示出根据本公开的实施例的方法的执行过程的示例。
图20示出根据本公开的实施例的卷积神经网络的另一示例。
图21示出根据本公开的实施例的基于图14所示的高速缓冲存储器结构、针对图20所示的卷积神经网络的高速缓冲存储器的分配方式的示例。
图22示出根据本公开的实施例的方法的执行过程的示例。
具体实施方式
下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
概述
为了提高卷积处理引擎或卷积神经网络加速器的处理效率,可以在卷积处理引擎中设置用于缓存输入数据的输入高速缓冲存储器和用于缓存输出数据的输出高速缓冲存储器。输入高速缓冲存储器和输出高速缓冲存储器中的每一个均可以包括一个或多个并联的高速缓冲存储器。
卷积神经网络加速器中的主控制器(Host Processor)可以例如经由片外数据传输管理器访问输入高速缓冲存储器和输出高速缓冲存储器中的每个高速缓冲存储器,并且卷积处理引擎可以经由例如交叉开关(Crossbar)访问分开设置的输入高速缓冲存储器和输出高速缓冲存储器中的每个高速缓冲存储器。
例如,由于一般的处理倾向于访问最近访问过的数据以及这些数据附近的数据,所以在主控制器决定需要从存储数据的低速存储器(例如,片外存储器)读取数据并指示卷积处理引擎执行运算时,主控制器可以控制(例如,可以经由诸如存取控制器或片外数据传输管理器这样的中间控制电路)将包括目标数据的若干数据一起从低速存储器中读取到输入高速缓冲存储器中,其中,如果高速缓冲存储器已满,则可以控制先将最不常访问的数据从输入高速缓冲存储器中弹出。
示例性卷积处理引擎
根据本公开的实施例的卷积处理引擎可以包括串联的至少两个高速缓冲存储器和运算电路。
在串联的至少两个高速缓冲存储器中,对于任何两个相邻的高速缓冲存储器中的在前高速缓冲存储器和在后高速缓冲存储器,在前高速缓冲存储器的输出端耦接到在后高速缓冲存储器的输入端,并且串联在最先位置处的第一高速缓冲存储器的输入端和串联在最后位置处的第二高速缓冲存储器的输出端分别对应于卷积处理引擎的第一输入端和输出端。另外,在前述的至少两个高速缓冲存储器中,第一高速缓冲存储器用于接收和缓存来自卷积处理引擎外部的数据,并且第二高速缓冲存储器用于将所缓存的数据输出到卷积处理引擎外部。
运算电路的输入端耦接到前述至少两个高速缓冲存储器的每个高速缓冲存储器的输出端,并且运算电路的输出端耦接到前述至少两个高速缓冲存储器的每个高速缓冲存储器的输入端。运算电路可以包括乘法累加器阵列。
图1示出根据本公开的实施例的卷积处理引擎的示例。如图1所示,根据本公开的实施例的卷积处理引擎CE可以包括串联的至少两个高速缓冲存储器C1至CN(N为大于或等于2的任意整数)和运算电路OC。
对于高速缓冲存储器C1至CN中的任何两个相邻的高速缓冲存储器Ci和Ci+1(i为大于或等于1且小于N的整数)中的在前高速缓冲存储器Ci和在后高速缓冲存储器Ci+1,在前高速缓冲存储器Ci的输出端耦接到在后高速缓冲存储器Ci+1的输入端。例如,高速缓冲存储器C1的输出端耦接到高速缓冲存储器C2的输入端。
在高速缓冲存储器C1至CN中,串联在最先位置处的高速缓冲存储器C1(即,前文所述的第一高速缓冲存储器)用于接收和缓存来自卷积处理引擎CE外部的数据,并且串联在最后位置处的高速缓冲存储器CN(即,前文所述的第二高速缓冲存储器)用于将所缓存的数据输出到卷积处理引擎CE外部。也就是说,高速缓冲存储器C1输入端和高速缓冲存储器CN的输出端可以分别对应于卷积处理引擎CE的输入端DIN(即,前文所述的卷积处理引擎的第一输入端)和输出端DOUT。
在一个实施例中,除了高速缓冲存储器C1和高速缓冲存储器CN之外,高速缓冲存储器C1至CN中的任何其他高速缓冲存储器可以被配置为不直接与卷积处理引擎CE外部交换数据。例如,对于在高速缓冲存储器C1至CN中任一高速缓冲存储器Cj(i为大于1且小于N的任一整数,在本文中,为了与在高速缓冲存储器C1即第一高速缓冲存储器和高速缓冲存储器CN即第二高速缓冲存储器区分开,高速缓冲存储器Cj也称为“第三高速缓冲存储器”),高速缓冲存储器Cj可以接收和缓存来自高速缓冲存储器C1至CN中的另外的一个或多个高速缓冲存储器的数据,也可以将所缓存的数据提供给高速缓冲存储器C1至CN中的另外的一个或多个高速缓冲存储器的数据,但是高速缓冲存储器Cj不直接从处理引擎CE的输入端接收数据,也不直接将所缓存的数据经由卷积处理引擎CE的输出端输出到卷积处理引擎CE的外部。
换句话说,在该实施例中,在高速缓冲存储器C1至CN中,仅高速缓冲存储器C1用于接收和缓存来自卷积处理引擎CE外部的数据,并且仅高速缓冲存储器CN用于将所缓存的数据输出到卷积处理引擎CE外部。
例如,在图1的示例中,串联在高速缓冲存储器C1至CN中的中间位置处的高速缓冲存储器C2只能接收并缓存来自高速缓冲存储器C1的数据,并且只能将缓存的数据输出给串联在高速缓冲存储器C2之后的高速缓冲存储器C3(未示出),而不能直接接收和缓存来自卷积处理引擎CE外部的数据,也不能直接将所缓存的数据输出到卷积处理引擎CE外部。
在图1的示例中,对于高速缓冲存储器C1至CN中的任何两个相邻的高速缓冲存储器Ci和Ci+1,在前高速缓冲存储器Ci的输出端只耦接到在后高速缓冲存储器Ci+1的输入端,并且在后高速缓冲存储器Ci+1的输入端只耦接到在前高速缓冲存储器Ci的输出端。
如图1所示,根据本公开的实施例的卷积处理引擎CE中的运算电路OC可以包括乘法累加器阵列MAC,如图1的示例中的虚线框部分所示,其中,圆圈可以表示乘法器(每个乘法器实际上可以具有两个或多个输入,在图1中简单地用一条连接线表示),六边形可以表示加法器。
如图1所示,运算电路OC的输入端(可以包括一个或多个实际的数据输入端口,例如可以包括运算电路OC中的乘法累加器阵列MAC中的每个乘法器的每个输入端)可以耦接到高速缓冲存储器C1至CN中的每个高速缓冲存储器的输出端,并且运算电路OC的输出端(可以包括一个或多个实际的数据输出端口,例如可以包括运算电路OC中的乘法累加器阵列MAC中的每个末端加法器的每个输出端)可以耦接到高速缓冲存储器C1至CN中的的每个高速缓冲存储器的输入端。
根据不同的实施例,可以采用不同的方式来实现运算电路OC和高速缓冲存储器C1至CN之间的互连,包括直接互连和间接互连。
例如,在图1的示例中,运算电路OC中的乘法累加器阵列MAC中的每个乘法器的每个输入端可以经由交叉开关CBIN耦接到高速缓冲存储器C1至CN中的每个高速缓冲存储器的输出端,并且运算电路OC中的乘法累加器阵列MAC中的每个末端加法器的输出端可以经由交叉开关CBOUT耦接到高速缓冲存储器C1至CN中的的每个高速缓冲存储器的输入端。
在另外的实施例中,还可以采用诸如共享总线等其他适当的方式来实现运算电路OC和高速缓冲存储器C1至CN之间的互连。
另外,也可以将运算电路OC的输入端直接耦接到高速缓冲存储器C1至CN中的每个高速缓冲存储器的输出端,并且将运算电路OC的输出端直接耦接到高速缓冲存储器C1至CN中的的每个高速缓冲存储器的输入端。
在另外的实施例中,根据本公开的实施例的卷积处理引擎CE中的运算电路OC还可以包括用于执行或加速诸如池化运算、激活处理、逐点加运算等卷积神经网络中可能涉及的其他运算的部件/模块/单元/子电路。而且,根据需要,这些部件/模块/单元/子电路的输入端和输出端也可以分别直接地或者例如经由交叉开关CBIN和CBOUT耦接到高速缓冲存储器C1至CN中的每个高速缓冲存储器的输出端和输入端。
在根据本公开的实施例的卷积处理引擎CE中,不需要针对运算电路OC分别设置输入高速缓冲存储器和输出高速缓冲存储器,只有一个高速缓冲存储器C1用于接收并缓存卷积处理引擎CE的外部数据,并且只有一个高速缓冲存储器CN用于向卷积处理引擎CE外部输出数据,因此能够减化每个高速缓冲存储器与卷积处理引擎CE中的其他部件以及卷积处理引擎CE的外部部件(例如,片外存储器)之间的连线,同时能够减化数据传输的控制逻辑,从而能够极大地降低硬件设置复杂度和软件控制复杂度并有利于降低功耗。例如,卷积处理引擎CE中的主控制器不需要访问和/或控制每个高速缓冲存储器。
在另外的实施例中,可以在图1的示例的基础上,在高速缓冲存储器C1至CN之间设置的更多的连接线路,以便提供更高的数据读取效率。
例如,在一个实施例中,第一高速缓冲存储器的输出端耦接到前述至少两个高速缓冲存储器中不同于第一高速缓冲存储器的一个或多个高速缓冲存储器的输入端。换句话说,高速缓冲存储器C1的输出端还可以耦接到高速缓冲存储器C1至CN中除高速缓冲存储器C1之外的任何一个或多个高速缓冲存储器的输入端,使得高速缓冲存储器C1能够将所缓存的数据(包括从卷积处理引擎CE的输入端DIN接收的外部数据)直接提供给高速缓冲存储器C1至CN中的任何其他一个或多个高速缓冲存储器。
例如,如图2所示,在图1的示例中的高速缓冲存储器C1至CN的连接方式的基础上,高速缓冲存储器C1的输出端还可以耦接到高速缓冲存储器C2至高速缓冲存储器CN中的每个高速缓冲存储器的输入端。
在另外的实施例中,第二高速缓冲存储器的输入端耦接到前述至少两个高速缓冲存储器中不同于第二高速缓冲存储器的一个或多个高速缓冲存储器的输出端。换句话说,高速缓冲存储器CN的输入端还可以耦接到高速缓冲存储器C1至CN中除高速缓冲存储器CN之外的任何一个或多个高速缓冲存储器的输出端,使得高速缓冲存储器CN能够直接从高速缓冲存储器C1至CN中的其他一个或多个高速缓冲存储器接收数据,这有利于减少通过卷积处理引擎CE的输出端DOUT向外部输出数据的环节。
例如,如图3所示,在图1的示例中的高速缓冲存储器C1至CN的连接方式的基础上,高速缓冲存储器CN的输入端还可以耦接到高速缓冲存储器C1至高速缓冲存储器CN-1(未示出)中的每个高速缓冲存储器的输出端。
在另外的实施例中,前述至少两个高速缓冲存储器还可以包括第三高速缓冲存储器,该第三高速缓冲存储器的输入端可以耦接到前述至少两个高速缓冲存储器中不同于第三高速缓冲存储器的一个或多个高速缓冲存储器的输出端。换句话说,高速缓冲存储器C1至CN中的高速缓冲存储器的数量大于或等于3,即,N为大于或等于3的整数,使得高速缓冲存储器C1至CN还可以包括不同于高速缓冲存储器C1和CN的另一高速缓冲存储器Cj(j为大于1且小于N的整数,即前述的第三高速缓冲存储器)。
在该实施例中,高速缓冲存储器Cj的输入端可以耦接到高速缓冲存储器C1至CN中不同于高速缓冲存储器Cj的任何一个或多个高速缓冲存储器的输出端。
例如,如图4所示,在图1的示例中的高速缓冲存储器C1至CN的连接方式的基础上,高速缓冲存储器C2的输入端还可以耦接到高速缓冲存储器C1至CN中的其他每个高速缓冲存储器的输出端。
在该实施例中,高速缓冲存储器Cj的输出端还可以耦接到高速缓冲存储器C1至CN中不同于高速缓冲存储器C1和高速缓冲存储器Cj的任何一个或多个高速缓冲存储器的输入端。
例如,如图5所示,高速缓冲存储器C2的输出端还可以耦接到高速缓冲存储器CN的输入端。
在该实施例中,高速缓冲存储器Cj的输出端也可以耦接到高速缓冲存储器C1的输入端。
例如,如图6所示,高速缓冲存储器C2的输出端也可以耦接到高速缓冲存储器C1的输入端。
在另外的实施例中,可以基于或结合图1至图6的一个或多个示例,将高速缓冲存储器C1至CN之间的连接方式设置为使高速缓冲存储器C1能够向高速缓冲存储器C1至CN中的任意一个或多个其他高速缓冲存储器提供/写入数据,以便使高速缓冲存储器CN能够从高速缓冲存储器C1至CN中的任意一个或多个其他高速缓冲存储器接收/读取数据,并且使高速缓冲存储器C1至CN中的任一高速缓冲存储器Cj(j为大于1且小于N的任一整数)能够向高速缓冲存储器C1至CN中的任意一个或多个其他高速缓冲存储器提供/写入数据和/或从高速缓冲存储器C1至CN中的任意一个或多个其他高速缓冲存储器接收/读取数据。
在不同的实施例中,可以根据需要来选择高速缓冲存储器C1至CN中的各个高速缓冲存储器的容量。例如,高速缓冲存储器C1至CN中的每个高速缓冲存储器的容量可以相同,以便能够以统一的方式分配和管理各个高速缓冲存储器中的缓存区域。
另外,在一个实施例中,高速缓冲存储器C1至CN中的每个高速缓冲存储器可以是支持循环寻址的高速缓冲存储器,从而提供无边界的逻辑地址空间。
另外,在一个实施例中,高速缓冲存储器C1至CN中的每个高速缓冲存储器还可以是支持同时/并行读写的高速缓冲存储器。也就是说,对于高速缓冲存储器C1至CN中的每个高速缓冲存储器,可以向该高速缓冲存储器同时发出针对该高速缓冲存储器中的一个缓存区域的读取指令以及针对该高速缓冲存储器中的另一个缓存区域的读取指令,并使得能够在与从该高速缓冲存储器中的一个缓存区域读取数据并行地或者同时地向该高速缓冲存储器中的另一个缓存区域写入数据。
在根据本公开的实施例的卷积处理引擎CE中,串联在一起的高速缓冲存储器C1至CN可以用于缓存来自卷积处理引擎CE外部的特征数据(更一般地被称为张量数据,例如,图像或图像片段)以及运算电路OC在执行相关运算的过程中产生的中间结果数据和最终结果数据。
例如,在图1的示例中,串联在一起的高速缓冲存储器C1至CN还可以用于缓存与运算电路OC要执行的运算相关且来自卷积处理引擎CE外部的运算参数(例如,卷积层的卷积核和/或偏置参数、池化层的池化核等)。
在另外的实施例中,卷积处理引擎CE还可以包括单独的高速缓冲存储器CW,其独立于高速缓冲存储器C1至CN并且专门用于缓存诸如卷积层的卷积核和/或偏置参数、池化层的池化核等与运算电路OC要执行的运算相关的运算参数。
例如,如图7所示,高速缓冲存储器CW的输入端可以对应于卷积处理引擎CE的另一个输入端WIN(在本文中也称为卷积处理引擎CE的第二输入端),并且专门用于接收来自卷积处理引擎CE外部的诸如卷积层的卷积核和/或偏置参数、池化层的池化核等运算参数。
根据不同的实施例,高速缓冲存储器CW的输出端可以直接地或者如图7所示那样经由诸如交叉开关CBlN这样的中介装置耦接到运算电路OC的输入端。
在卷积处理引擎CE还包括单独的高速缓冲存储器CW的情况下,运算电路OC可以包括两个输入端(每个输入端实际上可以包括或对应于一个或多个输入端口或输入引脚),其中,一个输入端可以耦接到高速缓冲存储器C1至CN中的每个高速缓冲存储器以便接收特征数据,另一个输入端可以耦接到高速缓冲存储器CW以便接收运算参数。
例如,如图8所示,运算电路OC(图8中仅示出乘法累加器阵列MAC的简单示例)的输入端OCD可以经由共同的交叉开关CBIN或者单独的交叉开关CBIN1耦接到高速缓冲存储器C1至CN中的每个高速缓冲存储器的输出端,并且运算电路OC的输入端OCW可以经由共同的交叉开关CBIN或者单独的交叉开关CBIN2耦接到高速缓冲存储器CW的输出端。
根据不同的实施例,高速缓冲存储器CW的容量可以与高速缓冲存储器C1至CN中的每个高速缓冲存储器的容量相同或不同。
另外,在一个实施例中,高速缓冲存储器CW可以是支持循环寻址的高速缓冲存储器,从而支持无边界地址空间。
在根据本公开的实施例的卷积处理引擎CE中,不需要针对运算电路OC分别设置输入高速缓冲存储器和输出高速缓冲存储器,只有一个高速缓冲存储器C1用于接收并缓存卷积处理引擎CE的外部数据,并且只有一个高速缓冲存储器CN用于向卷积处理引擎CE外部输出数据,因此能够减化每个高速缓冲存储器与卷积处理引擎CE中的其他部件以及卷积处理引擎CE的外部部件(例如,片外存储器)之间的连线,同时减化数据传输的控制逻辑,从而能够极大地降低硬件设置复杂度和软件控制复杂度并有利于降低功耗。
示例性卷积神经网络加速器
图9示出根据本公开的实施例的卷积神经网络加速器的示例。
在图9的示例中,卷积神经网络加速器可以包括例如图1(也可以结合图2至图6的示例)所示的卷积处理引擎CE,其中,例如,卷积处理引擎CE可以在主控制器HP的控制下经由输入端DIN和输出端DOUT与片外存储器(例如,片外动态随机存取存储器)DDR交换数据(包括特征数据和运算参数)和执行运算。
图10示出根据本公开的实施例的卷积神经网络加速器的另一个示例。
在图10的示例中,卷积神经网络加速器可以包括例如图7(也可以结合图2至图6的示例)所示的卷积处理引擎CE,其中,卷积处理引擎CE可以例如在主控制器HP的控制下,经由输入端DIN和输出端DOUT与片外存储器DDR交换特征数据,并经由输入端WIN从片外存储器DDR接收运算参数,然后基于缓存在高速缓冲存储器C1至CN中的特征数据和缓存在高速缓冲存储器CW中的运算参数执行运算。
在另外的实施例中,卷积神经网络加速器可以包括多个卷积处理引擎,并且还可以包括多个片外存储器。
例如,在图11的示例中,卷积神经网络加速器可以包括2个片外存储器DDR1和DDR2以及4个卷积处理引擎CE1至CE4,每个卷积处理引擎CEk(k为大于或等于1且小于或等4的任一整数)包括运算电路OCk、单独的用于缓存运算参数的高速缓冲存储器CWk以及3个串联在一起的高速缓冲存储器Ck-1至Ck-3,其中,高速缓冲存储器Ck-2的输入端还耦接到高速缓冲存储器Ck-3的输出端。
另外,在图11的示例中,交叉开关CB跨越4个卷积处理引擎CE1至CE4,由此能够被每个卷积处理引擎中的串联的3个高速缓冲存储器共用。这样的配置可以允许一个卷积处理引擎使用另一个卷积处理引擎的高速缓冲存储器。
例如,运算电路OC1可以使用卷积处理引擎CE2中的高速缓冲存储器C2-1至C2-3中的数据执行运算,并且可以将运算的结果缓存到卷积处理引擎CE3中的高速缓冲存储器C3-1至C3-3中的一个或多个中。
在另外的实施例中,图11中的交叉开关CB可以使用例如1个四选一多路选择器和4个二选一多路选择器这样的结构来代替。
另外,也可以不使用诸如交叉开关或多路选择器这样的中介部件,而是采用直接连接/耦接的方式。
应当理解,图9至图11仅为根据本公开的实施例的卷积神经网络加速器的示例。根据本公开的实施例的卷积神经网络加速器还可以包括诸如中断控制器、定时器等其他部件/元件/模块/电路,或者具有其他的结构或连接。
在根据本公开的实施例的卷积神经网络加速器中,只有一个高速缓冲存储器(即,卷积处理引擎中的高速缓冲存储器C1)或两个高速缓冲存储器(即,卷积处理引擎中的高速缓冲存储器C1和高速缓冲存储器CW)从片外存储器DDR输入/读取数据,并且只有一个高速缓冲存储器(即,卷积处理引擎中的高速缓冲存储器CN)向片外存储器DDR输出/写入数据。因此,从整体上看,根据本公开的实施例的卷积神经网络加速器的硬件设计复杂度和软件控制复杂度均相对较低。
另外,根据本公开的实施例的卷积神经网络加速器可以应用于人工智能芯片中。
示例性方法
图12示出根据本公开的实施例的用于控制上述任何一种卷积处理引擎的方法。如图12所示,根据本公开的实施例的方法可以包括步骤S10(分配存储区域)、S20(缓存数据)和S30(执行操作)。
在步骤S10中,根据本公开的一个实施例,可以确定待处理的卷积神经网络中的连续的至少两个层与根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器C1至CN之间的对应关系,即,针对前述的至少两个层中的每个层中的运算所涉及的特征数据或部分特征数据,从分配高速缓冲存储器C1至CN中分配相应的缓存区域,其中,前述的至少两个层中的最先层的输入特征数据可以与高速缓冲存储器C1相对应,并且前述的至少两个层中的最后层的输出特征数据可以与高速缓冲存储器CN相对应。
然后,在步骤S20中,根据本公开的一个实施例,可以从卷积处理引擎外部接收第一输入特征数据并存储到高速缓冲存储器C1的对应部分中,该第一输入特征数据可以是前述最先层的原始完整输入特征数据的第一部分数据。
然后,在步骤S30中,根据本公开的一个实施例,可以控制卷积处理引擎中的运算电路执行第一操作。
在一个实施例中,该第一操作可以包括:1.从高速缓冲存储器C1的对应部分中读取前述第一输入特征数据;2.基于所读取的第一输入特征数据,从前述最先层开始,依次执行每个层的运算;以及3.将通过每个层的运算所获得的第一输出特征数据存储到对应高速缓冲存储器的对应部分中。
例如,该第一操作可以对应于一个指令序列,该指令序列可以按照顺序执行的上述操作1至3。
在一个实施例中,根据本公开的实施例的方法还可以包括:在前述第一操作期间,从卷积处理引擎外部接收第二输入特征数据并存储到高速缓冲存储器C1的第二对应部分中,该第二输入特征数据是前述最先层的原始完整输入特征数据的第二部分数据;以及控制卷积处理引擎中的运算电路执行第二操作,其中,类似于前述的第一操作。
在一个实施例中,该第二操作可以包括:1’.从高速缓冲存储器C1的第二对应部分中读取前述第二输入特征数据;2’.基于所读取的第二输入特征数据从前述最先层开始依次执行每个层的运算;以及3’.将通过每个层的运算所获得的第二输出特征数据存储到对应高速缓冲存储器的对应部分中。
例如,该第二操作可以对应于一个指令序列,该指令序列可以按照顺序执行的上述操作1’至3’。
在一个实施例中,根据本公开的实施例的方法还可以包括:在前述第二操作期间,将在前述第一操作期间存储到高速缓冲存储器CN的对应部分中的最后层的第一输出特征数据输出到卷积处理引擎外部。
根据本公开的实施例的方法可以应用于卷积神经网络加速器中的主控制器(例如,图9至图10的示例中的主控制器HP),例如,由卷积神经网络加速器中的主控制器单独地或者在诸如定时器、中断控制器、存储控制器、片外数据传输控制器等其他部件的协助下执行。
相应地,根据本公开的实施例的方法以及方法中的每个步骤或子步骤均可以对应于能够由根据本公开的实施例的卷积神经网络加速器中的主控制器执行一个或多个程序指令序列。
因此,根据本公开的实施例的方法实际上也可以表征为一种指令调试方法,每个步骤或子步骤的处理中所涉及的各种输入数据可以对应于或转换成一个或多个指令的参数(例如,地址码部分),并且所涉及的指令例如可以包括针对存储器/缓冲存储器进行寻址、数据读取、数据写入等指令以及指示运算电路启动和执行运算等指令
根据本公开的方法的逻辑简单,有利于减化卷积神经网络加速器的控制逻辑,从而减化软件复杂度。
例如,由于可以在步骤S10中确定待处理的卷积神经网络中的连续的至少两个层与根据本公开的实施例的卷积处理引擎中的串联在一起的高速缓冲存储器C1至CN之间的对应关系,因此可以减化的高速缓冲存储器的控制,例如,可以减化甚至省略关于高速缓冲存储器的读取命中率等方面的控制。
另外,根据本公开的方法允许采用流水线式控制,从而能够充分地利用根据本公开的实施例的卷积处理引擎中的串联的高速缓冲存储器C1至CN,并使得卷积处理引擎中的运算电路无需等待针对卷积处理引擎外部的存储器的读写操作,而是始终保持高效率的运行,从而能够极大地提高卷积处理引擎的运行效率。
下面结合示例来描述根据本公开的实施例的方法中的更多细节。
关于步骤S10,在一个实施例中,由于卷积神经网络的设计过程中可以事先预测卷积神经网络中的每个层要处理的特征数据(可以是来自网络外部的原始特征数据,也可以是网络的前一层的输出数据)和将输出的特征(可以作为最终输出结果输出到网络外部,也可以作为网络的下一层的输入特征数据提供给网络的下一层)的大小和/或维度,所以可以在设计卷积神经网络的过程中确定卷积神经网络中的连续的至少两个层与高速缓冲存储器C1至CN之间的对应关系。
然后,卷积神经网络加速器中的主控制器可以在运行过程中根据事先确定的对应关系,对当前关注的每个层的每个特征数据(或部分特征数据),从高速缓冲存储器C1至CN中分配相应的缓存区域。
在另外的实施例中,可以由卷积神经网络加速器中的主控制器根据当前关注的每个层的特征数据的实际大小(例如,可以通过运行时程序并根据运行时数据来确定),对当前关注的每个层的每个特征数据(或部分特征数据),从高速缓冲存储器C1至CN中分配相应的缓存区域。
卷积神经网络处理的实际特征数据通常很大。例如,具有1280*720的分辨率的彩色图片通常需要至少2.6MB(兆字节)的存储空间。然而,为了使高速缓冲存储器的读取速度比较快,高速缓冲存储器的最大容量通常远小于特征数据的大小,例如,可能只有128KB(千字节)。
因此,在实际的操作过程中,可能需要将卷积神经网络的每层要处理的特征数据拆分成多个部分特征数据,使得每个部分特征数据需要的缓存空间小于或等于每个高速缓冲存储器的最大容量。
进一步地,可能要求所关注的多个层的中间结果的大小总和小于或等于高速缓冲存储器C1至CN的总容量,以便尽量提高高速缓冲存储器的利用率或者支持多层运算的融合处理。
在一个实施例中,可以将卷积神经网络中的至少两个层中的特征数据拆分成多个部分特征数据,然后在步骤S10中,对前述的至少两个层中的每个层中的特征数据,从高速缓冲存储器C1至CN中分配相应的缓存区域。
在另外的实施例中,也可以确定前述的至少两个层中的最先层的原始完整输入特征数据的至少一个部分数据,使得每个部分数据的大小均小于或等于高速缓冲存储器C1的容量的一半,并且使得在分别将每个部分数据提供给该最先层的情况下,前述的至少两个层的所有运算中所涉及的所有特征数据的大小的总和小于或等于高速缓冲存储器C1至CN的总容量。
例如,可以按照如图13所示的步骤a至e来确定卷积神经网络的至少两个层中的最先层的原始完整输入特征数据的至少一个部分数据的大小。
在步骤a中,可以使用M表示前述最先层的输入特征数据的至少一个部分数据的大小,该至少一个部分数据将缓存在高速缓冲存储器C1的一个连续的缓存区域中,并且M的初始值为高速缓冲存储器C1的容量的1/2。
然后,在步骤b中,可以根据当前的M值来确定前述至少两个层中的每个层的特征数据的大小。由于神经网络的结构是已知的,因此在给出输入特征数据的大小的情况下,可以推知各个层的特征数据的大小。
然后,在步骤c中,可以确定是否存在可行的高速缓冲存储器C1至CN的缓存区域的分配方式,其中,只要不引入冲突(例如,当前运算所需的两个特征数据或者当前运算所需的特征数据和后面运算所需的特征数据同时占用高速缓冲存储器C1至CN中的同一个缓存区域并导致数据的覆盖或丢失),同一个缓存区域可以分配给不同层的数据。
如果不存在可行的分配方式(步骤c的判断结果为“否”),则可以继续到步骤d,以将M的值变更为M/2(M=M/2)然后转到前述的步骤b;否则(步骤c的判断结果为“是”)可以继续到步骤e,其中,可以确定前述至少一个部分数据的大小为M的当前值,并结束处理。
在不同的实施例中,可以根据卷积神经网络的当前关注的至少两个层的结构(并且可能地,结合高速缓冲存储器C1至CN的结构),并使用诸如枚举法、首次适应法、最佳适应法、快速适应法、随机分配法等任何适当的方法,来确定前述至少两个层的特征数据与高速缓冲存储器C1至CN之间的对应关系或者可行的高速缓冲存储器C1至CN的缓存区域的分配方式,其中,可以使前述至少两个层中的最先层的输入特征数据的对应高速缓冲存储器是高速缓冲存储器C1,并且前述至少两个层中的最后层的输出特征数据的对应高速缓冲存储器是高速缓冲存储器CN。
例如,在根据本公开的实施例的卷积处理引擎中的串联的高速缓冲存储器C1至CN如图14所示并且要处理的卷积神经网络(可以是一个更大的卷积神经网络的一个片段)如图15所示的情况下,在根据本公开的实施例的控制方法的步骤S10中,所确定的图15中的每个卷积层所涉及的特征数据与图14中的高速缓冲存储器C1至CN之间的对应关系的一个示例可以如图16所示。
在图14的示例中,在根据本公开的实施例的卷积处理引擎中,3个高速缓冲存储器C1至C3串联在一起并用于缓存卷积神经网络的运算中的特征数据,其中,高速缓冲存储器C1至C3中每个高速缓冲存储器支持同时/并行读写,高速缓冲存储器C1至C3中的任何两个高速缓冲存储器均可以双向地交换数据(在图14中,简单地使用两端带箭头的连接线表示),仅高速缓冲存储器C1能够从该示例性高速缓冲存储器的外部接收数据,并且仅高速缓冲存储器C3能够向该示例性高速缓冲存储器的外部输出数据。
在图15所示的卷积神经网络(可以是一个更大的卷积神经网络的一个片段)中,卷积层CONV1和CONV3分别是最先层和最后层。卷积层CONV1的输入特征数据TIN为T0。特征数据T1是卷积层CONV1的输出特征数据,同时也是卷积层CONV2的输入特征数据。特征数据T2是卷积层CONV2的输出特征数据,同时也是卷积层CONV3的输入特征数据。卷积层CONV3的输出特征数据TOUT为T3。如前文所述,特征数据T0可以是原始完整输入特征数据,也可以是原始完整输入特征数据的一部分数据。
相应地,如图16所示,在高速缓冲存储器的一种可行的分配方式中,高速缓冲存储器C1中的一半容量的缓存区域可以用于缓存卷积层CONV1的输入特征数据T0,高速缓冲存储器C2中的至少一半容量的缓存区域可以用于缓存特征数据T1,高速缓冲存储器C3中的一半容量的缓存区域可以用于缓存特征数据T2,并且高速缓冲存储器C3中的另一半容量的缓存区域可以用于缓存卷积层CONV3的输出特征数据T3。
在图16的示例中,特征数据T’0表示继特征数据T0之后提供给卷积层CONV1的输入特征数据,特征数据T’0和特征数据T0可以分别对应于原本应当提供给卷积层CONV1的完整输入特征数据的不同部分,也可以对应于提供给卷积层CONV1的不同的特征数据。相应地,特征数据T’1至T’3分别表示在将特征数据T’0提供给卷积层CONV1的情况下,图15所示的示例卷积神经网络中所涉及的各个特征数据。
在一个实施例中,可以在每个高速缓冲存储器中,对每个相应的特征数据分配一段连续的缓存区域。
另外,在每个高速缓冲存储器支持循环寻址的情况下,例如,如图17中的(a)和(b)部分所示,如果在高速缓冲存储器C3中已经为输出特征数据T3分配了相应的缓存区域R1(如图17中的左斜阴影部分所示)并且从缓存区域R1的物理尾地址开始到高速缓冲存储器C3的物理尾地址的缓存区域R2不足以缓存特征数据T2,则可以将缓存区域R2以及从高速缓冲存储器C3的物理首地址开始的部分区域R3分配给特征数据T2,并分别用于缓存特征数据T2的一部分T2-1和T2-2。如图17中的(c)部分所示,这相当于在高速缓冲存储器C3的原来的缓存区域的基础扩充出一段缓存区域R3,从而实现无边界的逻辑地址空间或逻辑缓存区域。
应当理解,图16中所示的示例不是唯一的分配方式,例如,图18示出另一种可行的分配方式,其中,高速缓冲存储器C2中的一半容量的缓存区域可以用于缓存特征数据T1,另一半容量的缓存区域可以用于缓存特征数据T3,并且高速缓冲存储器C3中的至少一半容量的缓存区域可以用于缓存卷积层CONV3的输出特征数据T3。
然后,对于由图14至图16所示的示例,根据本公开的实施例的方法的步骤S10之后的步骤(包括步骤S20和S30)的执行过程的示例可以如图19所示。
在图19中,粗线框中的内容表示在某个时间段内执行的操作。如果两个粗线框对应的时间段有重叠部分,则意味着一个粗线框中的操作可以在另一个粗线框中的操作的执行期间并行地或同时地执行。
另外,在图19中,一个粗线框内可以包括一个或多个操作,每个操作使用一个细线框表示。一个粗线框内的多个细线框在图19中表示为彼此对齐,这表示一个粗线框内的多个操作之间的延时很小(至少远小于获得外部数据并将外部数据缓存到高速缓冲存储器C1中所需的时间或者将高速缓冲存储器C3中数据输出到外部所需的时间)或者没有延时或者可以被视为没有延时,也可以表示多个操作是融合在一起执行的,也可以表示多个操作是一个紧接一个地执行的。
在图19所示的示例中,例如,根据本公开的实施例的卷积神经网络加速器中的主控制器可以执行第一指令(步骤S20),其中,该第一指令的操作码可以指示将卷积神经网络加速器中的片外存储器中的特征数据读取到卷积处理引擎中的高速缓冲存储器C1的对应部分中,并且根据不同实施例,该第一指令的地址码(或参数)可以指示特征数据T0在片外存储器中的位置和高速缓冲存储器C1的对应部分的位置中的一个或多个信息。
然后,主控制器可以执行第二指令(步骤S30),其中,该第二指令的操作码可以指示卷积神经网络加速器中的卷积处理引擎根据指定的数据执行卷积层的运算,并且根据不同实施例,该第二指令的地址码(或参数)可以指示特征数据T0在高速缓冲存储器C1中的位置、与卷积层CONV1的运算相关的运算参数(例如,可以指示运算参数在高速缓冲存储器CW中的位置)以及特征数据T1在高速缓冲存储器C2中的位置中的一个或多个信息。
卷积处理引擎中的运算电路可以响应于接收到来自主控制器的第二指令,从高速缓冲存储器C1中读取特征数据T0,例如从高速缓冲存储器CW中读取与卷积层CONV1相关的运算参数。所读取的特征数据和运算参数将直接送入例如乘法累加器阵列的各个乘法器的对应的输入端,并且乘法累加器阵列的末端加法的输出将直接送入到高速缓冲存储器C2中的预定位置处。
然后,主控制器可以响应于检测到乘法累加器阵列的末端加法的输出而执行第三指令(步骤S30)。该第三指令的操作码可以与第二指令相同,但是地址码(或参数)可以指示特征数据T1在高速缓冲存储器C2中的位置、与卷积层CONV2的运算相关的运算参数(例如,可以指示运算参数在高速缓冲存储器CW中的位置)以及特征数据T2在高速缓冲存储器C3中的位置中的一个或多个信息。
运算电路可以响应于接收到来自主控制器的第三指令,从高速缓冲存储器C2中读取特征数据T1,例如从高速缓冲存储器CW中读取与卷积层CONV2相关的运算参数。所读取的特征数据和运算参数将直接送入例如乘法累加器阵列的各个乘法器的对应的输入端,并且乘法累加器阵列的末端加法的输出将直接送入到高速缓冲存储器C3中的预定位置处。
然后,类似地,主控制器可以响应于检测到乘法累加器阵列的末端加法的输出而执行第四指令(步骤S30)。该第四指令的操作码可以与第一指令或第二指令相同,但是地址码(或参数)可以指示特征数据T2在高速缓冲存储器C3中的位置、与卷积层CONV3的运算相关的运算参数(例如,可以指示运算参数在高速缓冲存储器CW中的位置)以及特征数据T3在高速缓冲存储器C3中的位置中的一个或多个信息。
运算电路可以响应于接收到来自主控制器的第四指令,从高速缓冲存储器C2中读取特征数据T1,从高速缓冲存储器C3中读取特征数据T2,例如从高速缓冲存储器CW中读取与卷积层CONV3相关的运算参数。所读取的特征数据和运算参数将直接送入例如乘法累加器阵列的各个乘法器的对应的输入端,并且乘法累加器阵列的末端加法的输出将直接送入到高速缓冲存储器C3中的预定位置处。
由此,卷积处理引擎中的运算电路可以响应于来自主控制器的第二至第四指令执行步骤S30中的第一操作。
如图19所示,运算电路执行第一操作(步骤S30)的过程中,主控制器可以执行第五指令(步骤S20)。该第五指令与第一指令的操作码相同,指示将卷积神经网络加速器中的片外存储器中的特征数据读取到卷积处理引擎中的高速缓冲存储器C1的对应部分中,但是该第五指令的地址码(或参数)可以指示特征数据T’0在片外存储器中的位置和高速缓冲存储器C1的对应部分的位置中的一个或多个信息。
如图19所示,运算电路可以在针对特征数据T0执行完处理并将所获得的特征数据T3写入到高速缓冲存储器C3的对应部分中之后立即开始针对特征数据T’0的处理(步骤S30,第二操作),其过程与前述的第一操作的过程相似,在此不再赘述。
如图19所示,主控制器可以在运行电路执行第二操作的过程中执行第六指令。该第六指令的操作码可以指示将高速缓冲存储器C3中的T3写入到卷积神经网络加速器中的片外存储器中,并且根据不同实施例,该第六指令的地址码(或参数)可以指示特征数据T3在高速缓冲存储器C3中的位置和要写入的片外存储器的地址中的一个或多个信息。
另外,如果片外存储器中还包括特征数据T”0(即,图19中的“其他数据”),主控制器可以在运行电路执行第一操作和/或第二操作的过程中,例如可以与执行第六指令相并行地,执行第七指令,该第七指令与第一指令的操作码相同,指示将卷积神经网络加速器中的片外存储器中的特征数据读取到卷积处理引擎中的高速缓冲存储器C1的对应部分中,但是该第七指令的地址码(或参数)可以指示特征数据T”0在片外存储器中的位置和高速缓冲存储器C1的对应部分的位置中的一个或多个信息。
如图19所示,通过根据本公开的实施例的方法,能够实现流水式控制,从而能够极大地提高卷积处理引擎的处理效率。而且,只要将特征数据从高速缓冲存储器C3输出到片外存储器的用时小于或等于第一操作或第二操作的执行时间,卷积处理引擎中的运算电路就可以在响应于主控制器的指令而开始运行之后,始终处于运行状态,而不必等待与片外存储器中之间的数据交换。
作为另外的示例,在根据本公开的实施例的卷积处理引擎中的串联的高速缓冲存储器C1至CN如图14所示并且要处理的卷积神经网络(可以是一个更大的卷积神经网络的一个片段)如图20所示的情况下,在根据本公开的实施例的控制方法的步骤S10中,图20中的每个卷积层所涉及的特征数据与图14中的高速缓冲存储器C1至CN之间的对应关系的一个示例可以如图21所示。
在图20所示的卷积神经网络(可以是一个更大的卷积神经网络的一个片段)中,卷积层CONV1的输入特征数据TIN为T0,特征数据T1是卷积层CONV1的输出特征数据和卷积层CONV2的输入特征数据,特征数据T2是卷积层CONV2的输出特征数据和卷积层CONV4的输入特征数据,特征数据T3是卷积层CONV3的输出特征数据,卷积层CONV4的输出特征数据和特征数据T3经过逐点加运行之后获得卷积层CONV5的输入特征数据T4,特征数据T5是卷积层CONV5的输出特征数据和卷积层CONV6的输入特征数据,并且卷积层CONV6的输出特征数据和特征数据T5经过逐点加运算之后获得输出特征数据TOUT,即T6。
相应地,在根据本公开的实施例的方法的步骤S10中,可以确定如图21所示的一种可能的缓存分配方式,其中,高速缓冲存储器C1中的一半容量的缓存区域可以用于缓存特征数据T0,高速缓冲存储器C2中的一半容量的缓存区域可以用于缓存特征数据T1或T4(即,特征数据T1和T4共用同一块缓存区域,并且允许后面的特征数据T4可以覆盖前面的特征数据T1),高速缓冲存储器C2中的另一半容量的缓存区域可以用于缓存缓存特征数据T2或T5(即,即,特征数据T2和T5共用同一块缓存区域,并且允许后面的特征数据T5可以覆盖前面的特征数据T2),高速缓冲存储器C3中的一半容量的缓存区域可以用于缓存特征数据T3,并且高速缓冲存储器C3中的另一半容量的缓存区域可以用于缓存特征数据T6。
然后,对于由图20至图21所示的示例,根据本公开的实施例的方法的步骤S10之后的步骤(包括步骤S20和S30)的执行过程的示例可以如图22所示。
在图22中,为了简单,未示出第二操作的细节,将第一操作中的各个框表示在同一行中,并且未使用粗线框和细线框区分在同一个时间段内执行的操作。然而,应当理解,可以与图19相类似地描述图12所示的操作过程,因此不再赘述。
同样,如图22所示,通过根据本公开的实施例的方法,能够实现流水式控制,从而能够极大地提高卷积处理引擎的处理效率。而且,只要将特征数据从高速缓冲存储器C3输出到片外存储器的用时小于或等于第一操作或第二操作的执行时间,卷积处理引擎中的运算电路就可以在响应于主控制器的指令而开始运行之后,始终处于运行状态,而不必等待与片外存储器中之间的数据交换。
应当理解,根据本公开的实施例的方法的执行过程不局限于上述示例以及上述示例中的示例性的指令形式和执行过程。
例如,在另外的实施例中,主控制器也可以在从片外存储器读取特征数据T0之后向卷积处理引擎或卷积处理引擎中的运算电路发出一条指令,并且卷积处理引擎或运算电路可以响应于接收到该指令而根据确定一个指令序列,并通过执行该指令序列来执行步骤S30中的第一操作。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括程序指令,该程序指令在被例如卷积神经网络加速器中的主控制器运行时使得主控制器执行本说明书上述“示例性方法”部分中描述的任何一种用于控制根据本公开的实施例的卷积处理引擎的方法中的步骤。
计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。
此外,本公开的实施例还可以是计算机可读存储介质,例如计算机可读取的非临时性存储介质,其上存储有程序指令,该程序指令在被例如卷积神经网络加速器中的主控制器运行时使得主控制器执行本说明书上述“示例性方法”部分中描述的任何一种用于控制根据本公开的实施例的卷积处理引擎的方法中的步骤。
计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的示例(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪速存储器)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光学存储器、磁性存储器或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的示例并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
还应当理解,取决于装置/部件/电路/模块/单元的实际的硬件规格/实现,在本文中提到的该装置/部件/电路/模块/单元的“输入端”实际上可以包括该装置/部件/电路/模块/单元的一个或多个写入/输入端口,并且该装置/部件/电路/模块/单元的“输出端”实际上可以包括该装置/部件/电路/模块/单元的一个或多个读取/输出端口。例如,一个高速缓冲存储器的输入端可以指该高速缓冲存储器的用于接收数据的一个或多个数据输入引脚。
另外,在本文中,“直接连接”或“直接耦接”用以强调作为连接对象的装置/部件/电路/模块/单元之间不存在另外的中介对象。本文中的“连接”或“耦接”一般表示“直接连接”或“直接耦接”,但是并不排除“间接连接”或“间接耦接”(即,两个或多个连接对象之间可以存在另外的一个或多个中介对象)的情况。在附图的示例中,为了简单,仅示出直接连接或直接耦接的情况,但是应当理解,在另外的实施例中,附图中示出的连接或耦接也可以采用间接连接或间接耦接的方式。
然而,在提及高速缓冲存储器C1至CN中的一个高速缓冲存储器Cm(m为大于或等于1且小于或等N的任一整数)的输入端或输出端连接或耦接到高速缓冲存储器C1至CN中的另一个高速缓冲存储器Cn(n为大于或等于1且小于或等N的任一整数,并且n不等于m)的输出端或输入端时,意味着高速缓冲存储器Cm的输入端或输出端直接连接或耦接到高速缓冲存储器Cn的输出端或输入端,或者高速缓冲存储器Cm的输入端或输出端经由某个中介装置/模块/电路/元件连接或耦接到高速缓冲存储器Cn的输出端或输入端,并且该中介装置/模块/电路/元件不是高速缓冲存储器C1至CN中的一个或多个高速缓冲存储器。
另外,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。然而,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (14)
1.一种卷积处理引擎,包括:
串联的至少两个高速缓冲存储器,其中,对于任何两个相邻的高速缓冲存储器中的在前高速缓冲存储器和在后高速缓冲存储器,所述在前高速缓冲存储器的输出端耦接到所述在后高速缓冲存储器的输入端,并且串联在最先位置处的第一高速缓冲存储器的输入端和串联在最后位置处的第二高速缓冲存储器的输出端分别对应于所述卷积处理引擎的第一输入端和输出端,在所述至少两个高速缓冲存储器中,第一高速缓冲存储器用于接收和缓存来自所述卷积处理引擎外部的数据,第二高速缓冲存储器用于将所缓存的数据输出到所述卷积处理引擎外部,其中,所述第一高速缓冲存储器的输出端耦接到所述至少两个高速缓冲存储器中不同于所述第一高速缓冲存储器的一个或多个高速缓冲存储器的输入端;以及
运算电路,包括乘法累加器阵列,其中,所述运算电路的输入端耦接到所述至少两个高速缓冲存储器的每个高速缓冲存储器的输出端,并且所述运算电路的输出端耦接到所述至少两个高速缓冲存储器的每个高速缓冲存储器的输入端。
2.根据权利要求1所述的卷积处理引擎,其中,所述第二高速缓冲存储器的输入端耦接到所述至少两个高速缓冲存储器中不同于所述第二高速缓冲存储器的一个或多个高速缓冲存储器的输出端。
3.根据权利要求1所述的卷积处理引擎,其中,所述至少两个高速缓冲存储器还包括第三高速缓冲存储器,所述第三高速缓冲存储器的输入端耦接到所述至少两个高速缓冲存储器中不同于所述第三高速缓冲存储器的一个或多个高速缓冲存储器的输出端。
4.根据权利要求3所述的卷积处理引擎,其中,所述第三高速缓冲存储器的输出端耦接到所述至少两个高速缓冲存储器中不同于所述第一高速缓冲存储器和所述第三高速缓冲存储器的一个或多个高速缓冲存储器的输入端。
5.根据权利要求4所述的卷积处理引擎,其中,所述第三高速缓冲存储器的输出端还耦接到所述第一高速缓冲存储器的输入端。
6.根据权利要求1至5中的任一项所述的卷积处理引擎,其中,所述至少两个高速缓冲存储器的每个高速缓冲存储器的容量相同。
7.根据权利要求1至5中的任一项所述的卷积处理引擎,其中,所述至少两个高速缓冲存储器中的每个高速缓冲存储器为循环寻址的高速缓冲存储器。
8.根据权利要求1至5中的任一项所述的卷积处理引擎,还包括:
独立于所述至少两个高速缓冲存储器的高速缓冲存储器,其输入端对应于所述卷积处理引擎的第二输入端,并且其输出端耦接到所述运算电路的另一输入端。
9.一种卷积神经网络加速器,包括至少一个根据权利要求1至8中的任一项所述的卷积处理引擎。
10.一种用于控制根据权利要求1至8中的任一项所述的卷积处理引擎的方法,包括:
确定待处理的卷积神经网络中的连续的至少两个层与所述至少两个高速缓冲存储器之间的对应关系,对应高速缓冲存储器的对应部分将用于存储对应层的运算中所涉及的特征数据,其中,所述至少两个层中的最先层的输入特征数据的对应高速缓冲存储器是所述第一高速缓冲存储器,并且所述至少两个层中的最后层的输出特征数据的对应高速缓冲存储器是所述第二高速缓冲存储器;
从所述卷积处理引擎外部接收第一输入特征数据并存储到所述第一高速缓冲存储器的第一对应部分中,所述第一输入特征数据是所述最先层的原始完整输入特征数据的第一部分数据;以及
控制所述运算电路执行第一操作,所述第一操作包括从所述第一对应部分中读取所述第一输入特征数据、基于所述第一输入特征数据从所述最先层开始依次执行每个层的运算以及将通过每个层的运算所获得的第一输出特征数据存储到对应高速缓冲存储器的对应部分中。
11.根据权利要求10所述的方法,还包括:
在所述第一操作期间,从所述卷积处理引擎外部接收第二输入特征数据并存储到所述第一高速缓冲存储器的第二对应部分中,所述第二输入特征数据是所述最先层的原始完整输入特征数据的第二部分数据;以及
控制所述运算电路执行第二操作,所述第二操作包括从所述第二对应部分中读取所述第二输入特征数据、基于所述第二输入特征数据从所述最先层开始依次执行每个层的运算以及将通过每个层的运算所获得的第二输出特征数据存储到对应高速缓冲存储器的对应部分中。
12.根据权利要求11所述的方法,还包括:
在所述第二操作期间,将在所述第一操作期间存储到所述第二高速缓冲存储器的对应部分中的最后层的第一输出特征数据输出到所述卷积处理引擎外部。
13.根据权利要求10至12中的任一项所述的方法,还包括:
确定所述最先层的原始完整输入特征数据的至少一个部分数据,每个部分数据的大小均小于或等于所述第一高速缓冲存储器的容量的一半,并且在分别将每个部分数据提供给所述最先层的情况下,所述至少两个层的所有运算中所涉及的所有特征数据的大小的总和小于或等于所述至少两个高速缓冲存储器的总容量。
14.一种计算机可读取的非临时性存储介质,其上存储有程序指令,所述程序指令在被执行时至少执行根据权利要求10至13中的任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811323140.7A CN109472355B (zh) | 2018-11-06 | 2018-11-06 | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 |
US17/290,519 US20220004855A1 (en) | 2018-11-06 | 2019-11-04 | Convolution processing engine and control method, and corresponding convolutional neural network accelerator |
PCT/CN2019/115341 WO2020093968A1 (zh) | 2018-11-06 | 2019-11-04 | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811323140.7A CN109472355B (zh) | 2018-11-06 | 2018-11-06 | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109472355A CN109472355A (zh) | 2019-03-15 |
CN109472355B true CN109472355B (zh) | 2021-01-01 |
Family
ID=65672253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811323140.7A Active CN109472355B (zh) | 2018-11-06 | 2018-11-06 | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220004855A1 (zh) |
CN (1) | CN109472355B (zh) |
WO (1) | WO2020093968A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109472355B (zh) * | 2018-11-06 | 2021-01-01 | 地平线(上海)人工智能技术有限公司 | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 |
CN110347487B (zh) * | 2019-07-05 | 2021-03-23 | 中国人民大学 | 一种面向数据库应用的数据搬移的能耗特征化方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105184366A (zh) * | 2015-09-15 | 2015-12-23 | 中国科学院计算技术研究所 | 一种时分复用的通用神经网络处理器 |
CN106779060A (zh) * | 2017-02-09 | 2017-05-31 | 武汉魅瞳科技有限公司 | 一种适于硬件设计实现的深度卷积神经网络的计算方法 |
CN106980264A (zh) * | 2017-05-12 | 2017-07-25 | 南京理工大学 | 基于神经网络的压电驱动器的动态迟滞建模方法 |
CN107239829A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种优化人工神经网络的方法 |
CN107862650A (zh) * | 2017-11-29 | 2018-03-30 | 中科亿海微电子科技(苏州)有限公司 | 加速计算二维图像cnn卷积的方法 |
CN108133267A (zh) * | 2016-12-01 | 2018-06-08 | 上海兆芯集成电路有限公司 | 具有可作为最后级高速缓存片或神经网络单元存储器操作的存储器阵列的处理器 |
CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
CN108629406A (zh) * | 2017-03-24 | 2018-10-09 | 展讯通信(上海)有限公司 | 用于卷积神经网络的运算装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9936040B2 (en) * | 2014-12-19 | 2018-04-03 | Citrix Systems, Inc. | Systems and methods for partial video caching |
US10497089B2 (en) * | 2016-01-29 | 2019-12-03 | Fotonation Limited | Convolutional neural network |
CN106844294B (zh) * | 2016-12-29 | 2019-05-03 | 华为机器有限公司 | 卷积运算芯片和通信设备 |
CN111680789B (zh) * | 2017-04-11 | 2023-04-28 | 上海兆芯集成电路有限公司 | 神经网络单元 |
CN108363559B (zh) * | 2018-02-13 | 2022-09-27 | 北京旷视科技有限公司 | 神经网络的乘法处理方法、设备和计算机可读介质 |
CN109472355B (zh) * | 2018-11-06 | 2021-01-01 | 地平线(上海)人工智能技术有限公司 | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 |
-
2018
- 2018-11-06 CN CN201811323140.7A patent/CN109472355B/zh active Active
-
2019
- 2019-11-04 US US17/290,519 patent/US20220004855A1/en active Pending
- 2019-11-04 WO PCT/CN2019/115341 patent/WO2020093968A1/zh active Application Filing
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105184366A (zh) * | 2015-09-15 | 2015-12-23 | 中国科学院计算技术研究所 | 一种时分复用的通用神经网络处理器 |
CN107239829A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种优化人工神经网络的方法 |
CN108133267A (zh) * | 2016-12-01 | 2018-06-08 | 上海兆芯集成电路有限公司 | 具有可作为最后级高速缓存片或神经网络单元存储器操作的存储器阵列的处理器 |
CN106779060A (zh) * | 2017-02-09 | 2017-05-31 | 武汉魅瞳科技有限公司 | 一种适于硬件设计实现的深度卷积神经网络的计算方法 |
CN108629406A (zh) * | 2017-03-24 | 2018-10-09 | 展讯通信(上海)有限公司 | 用于卷积神经网络的运算装置 |
CN106980264A (zh) * | 2017-05-12 | 2017-07-25 | 南京理工大学 | 基于神经网络的压电驱动器的动态迟滞建模方法 |
CN107862650A (zh) * | 2017-11-29 | 2018-03-30 | 中科亿海微电子科技(苏州)有限公司 | 加速计算二维图像cnn卷积的方法 |
CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
Non-Patent Citations (2)
Title |
---|
"卷积神经网络的FPGA实现及优化";王开宇,生梦林等;《实验室科学》;20180831;第21卷(第4期);第79-84页 * |
王开宇,生梦林等."卷积神经网络的FPGA实现及优化".《实验室科学》.2018,第21卷(第4期), * |
Also Published As
Publication number | Publication date |
---|---|
CN109472355A (zh) | 2019-03-15 |
US20220004855A1 (en) | 2022-01-06 |
WO2020093968A1 (zh) | 2020-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10768894B2 (en) | Processor, information processing apparatus and operation method for processor | |
CN109102065B (zh) | 一种基于PSoC的卷积神经网络加速器 | |
US6341318B1 (en) | DMA data streaming | |
US11809360B2 (en) | Network-on-chip data processing method and device | |
US11294599B1 (en) | Registers for restricted memory | |
CN111324294B (zh) | 存取张量数据的方法和装置 | |
CN109472355B (zh) | 卷积处理引擎及控制方法和相应的卷积神经网络加速器 | |
WO2006051780A1 (ja) | 同時アクセスするバンク数が異なるメモリコントローラに対応した不揮発性メモリ装置 | |
CN111183418A (zh) | 可配置硬件加速器 | |
US20060069897A1 (en) | Information processing device and information processing method | |
EP2132645B1 (en) | A data transfer network and control apparatus for a system with an array of processing elements each either self- or common controlled | |
KR20200138413A (ko) | 네트워크 온칩 데이터 처리 방법 및 장치 | |
KR20200138411A (ko) | 네트워크 온칩 데이터 처리 방법 및 장치 | |
US20060095637A1 (en) | Bus control device, arbitration device, integrated circuit device, bus control method, and arbitration method | |
CN111209244A (zh) | 数据处理装置及相关产品 | |
CN113792868A (zh) | 神经网络计算模块、方法和通信设备 | |
JP2008090455A (ja) | マルチプロセッサ信号処理装置 | |
US20150243259A1 (en) | Method and apparatus for transferring data in a computer | |
CN112631955A (zh) | 数据处理方法、装置、电子设备以及介质 | |
JP2008102599A (ja) | プロセッサ | |
KR20200139256A (ko) | 네트워크 온칩 데이터 처리 방법 및 장치 | |
KR20200138414A (ko) | 네트워크 온칩 데이터 처리 방법 및 장치 | |
JP4882116B2 (ja) | バッファ制御装置およびバッファ制御方法 | |
JP4723334B2 (ja) | Dma転送システム | |
CN111047030A (zh) | 运算方法、装置、计算机设备和存储介质 |
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 |