动态瓦片并行神经网络加速器

文档序号:1879201 发布日期:2021-11-23 浏览:8次 >En<

阅读说明:本技术 动态瓦片并行神经网络加速器 (Dynamic tile parallel neural network accelerator ) 是由 李涛 单晓勍 黄嘉隆 刘雪娇 刘瑜 于 2021-07-12 设计创作,主要内容包括:动态瓦片神经网络加速器允许重新配置计算瓦片的数量和大小。每个计算单元子阵列的最左列是边缘单元,这些边缘单元有一个增加的矢量复用器,将单元输出反馈到加法器-比较器,以允许整流线性单元(ReLU)和池化操作,将从其他单元移入的输出结合起来。边缘单元驱动外部输出寄存器并接收外部权重。权重和输出在单元之间以相反的方向水平移位,而控制和输入数据在单元之间以相同的方向垂直移位。在子阵列之间插入一列行数据选择器以绕过子阵列周围的权重和输出数据,而在子阵列之间插入一行列数据选择器以绕过控制和输入数据。较大的瓦片是通过将数据直接通过这些选择器而不绕过来配置的。(The dynamic tile neural network accelerator allows for reconfiguration of the number and size of the computing tiles. The leftmost column of each sub-array of compute units is the edge unit, which has an added vector multiplexer that feeds the unit output back to the adder-comparator to allow the rectifying linear unit (ReLU) and pooling operations to combine the outputs shifted in from other units. The edge unit drives the external output register and receives the external weight. The weights and outputs are shifted horizontally in opposite directions between cells, while the control and input data are shifted vertically in the same direction between cells. A column of row data selectors is inserted between the sub-arrays to bypass the weights and output data around the sub-arrays, and a row of column data selectors is inserted between the sub-arrays to bypass the control and input data. Larger tiles are configured by passing data directly through the selectors without bypassing.)

具体实施方式

本发明涉及对神经网络加速器的改进。下面的描述是为了使本领域普通技术人员能够在特定应用及其要求的背景下制造和使用本发明。对优选实施例的各种修改对于本领域的技术人员来说将是显而易见的,并且本文所定义的一般原则可应用于其它实施例。因此,本发明并不打算局限于所示和所述的特定实施例,而是要给予符合本文所公开的原则和新颖特征的最广泛的范围。

图1是一个具有动态平铺(tiling)的神经网络加速器的框图。一个处理引擎阵列由计算单元10和边缘单元12组成。计算单元10可以执行二维乘法,而边缘单元12可以执行二维乘法和矢量处理。边缘单元12具有计算单元10的所有功能,还可以执行矢量运算。

在这个例子中,单元阵列被分成4个子阵列,每个子阵列是一个4×4的单元阵列。单元的左边或第一列由边缘单元12组成,而单元的其余3列由计算单元10组成。因此边缘单元12构成了4×4子阵列的左边缘。

来自输入寄存器28的输入数据和来自控制寄存器24的控制信息位于阵列的顶部,并将数据和控制信息向下馈送到计算单元10和边缘单元12的阵列中。

来自权重寄存器22的权重位于阵列的左边,并将权重向右馈送到计算单元10和边缘单元12的阵列中。

发明人没有把输出寄存器26放置在阵列的右边,而是将输出寄存器26放置在阵列的左边,与权重寄存器22位于同一侧。将输出寄存器26放置在阵列的左边,允许激活单元重复使用,因为当输出寄存器26在左边时,输出可以一个一个地发送,因此不需要额外的激活单元硬件资源。

四个子阵列通过行数据选择器14水平连接,通过列数据选择器16垂直连接。行数据选择器14向右传递权重,向左输出数据。列数据选择器16向下传递控制信息和输入数据。

配置控制器20控制行数据选择器14和列数据选择器16。配置控制器20可以控制列数据选择器16从第四行计算单元10选择控制信息和输入数据,或直接从控制寄存器24和输入寄存器28选择控制信息和输入数据,允许控制和输入数据绕过上部4×4子阵列,从而减少到下部4×4子阵列的延迟。

控制和数据的选择方式相同,因此,列数据选择器16的输入取自控制寄存器24、输入寄存器28,或两个输入取自计算单元10。

配置控制器20还控制行数据选择器14,以从第四列计算单元10选择权重,或直接从权重寄存器22选择权重。配置控制器20还可以将右部子阵列的边缘单元12产生的输出发送到左部子阵列的第四列计算单元10,或者绕过左部子阵列,直接将输出发送到输出寄存器26。每个列数据选择器16可以有两个2:1复用器。每个行数据选择器14可以是两个复用器,一个是正向复用器,一个是反向的解复用器(de-mux)。

这种绕过4×4子阵列的做法减少了延迟。行数据选择器14和列数据选择器16可以调整瓦片(tile)大小,以减少延迟并提高计算单元10和边缘单元12的处理引擎利用率。通过控制行数据选择器14和列数据选择器16,配置控制器20可以控制来自输入分区和层的流数据,并根据正在进行的操作,配置阵列连接。这种绕过可以将输入数据广播到每个瓦片中。

图2更详细地显示了多功能计算单元。计算单元10从输入寄存器28、上游的计算单元10、或从列数据选择器16接收输入数据,这取决于计算单元10在阵列内的位置。该输入数据存储在单元输入寄存器104中,并可以传递到下游的计算单元10或列数据选择器16。

类似地,计算单元10从控制寄存器24、上游的计算单元10、或从列数据选择器16接收控制信息,这取决于计算单元10在阵列中的位置。该控制信息存储在单元控制寄存器120中,并可以传递到下游的计算单元10或列数据选择器16。存储在单元控制寄存器120中的控制信息比特由计算单元10内部使用,以控制加法器-比较器112、累加器寄存器114和输出寄存器118的操作。

计算单元10也从上游的(左边的)计算单元10或边缘单元12接收权重。该权重存储在单元权重寄存器102中,并可传递到下游的(右边的)计算单元10或行数据选择器14。

可以通过乘法器110将来自单元权重寄存器102的权重与来自单元输入寄存器104的输入相乘,以产生由该实例的计算单元10实施的神经网络节点的部分和。然后,由乘法器110产生的部分和可以使用加法器-比较器112加到存储在累加器寄存器114中的累积值上,并且新的累积值存储到累加器寄存器114中。

加法器-比较器112也可以将乘法器110产生的部分和、来自累加器寄存器114的累积值、或来自单元输入寄存器104的输入与一个预设目标例如零或与来自单元输入寄存器104或累加器寄存器114的一个值进行比较,并将结果存储到累加器寄存器114中。来自单元控制寄存器120的控制比特可以选择加法器-比较器112的加法器或比较器功能,并选择来自输出寄存器118、乘法器110或单元输入寄存器104的输入。

存储在累加器寄存器114中的累积值可以被复制到输出寄存器118中,然后移位到当前计算单元10左边的下一个计算单元10或边缘单元12。或者,来自右边的计算单元10的输出或来自行数据选择器14的输出可以存储到输出寄存器118中,然后向左移位。来自单元控制寄存器120的控制比特可以控制输出寄存器118的时钟和数据选择。

图3更详细地显示了多功能计算边缘单元。边缘单元12是计算单元10的超集(super-set),在单元权重寄存器102和乘法器110之间增加了矢量复用器130。当来自单元控制寄存器120的比特使矢量复用器130从单元权重寄存器102中选择其输入以传递到乘法器110时,矢量复用器130允许边缘单元12作为计算单元10运行。

当来自单元控制寄存器120的控制比特使矢量复用器130选择存储在输出寄存器118中的输出值以反馈给乘法器110时,可以进行矢量运算。单元的输出可以与来自单元输入寄存器104的单元的输入相乘,进行矢量运算。输出寄存器118可以包含一个从右边移入的输出值,而不是由单元产生的累积值,从而允许各种有用的运算。示例运算包括Prelu(参数整流(修正)线性单元函数,Parametric Rectified Linear Unit),它找到f(yi)=yi如果yi>0,f(yi)=(ai*yi)如果yi<=0,其中yi可以是单元的输出,而ai可以是单元输入寄存器104的输入。

边缘单元12形成每个4×4子阵列的左列,允许来自右边的上游单元的输出移入边缘单元12,并通过反馈路径从输出寄存器118累积到矢量复用器130。当单元输入寄存器104中的输入为1时,乘法器110通过反馈输出由加法器-比较器112累积并存储到累加器寄存器114中。在所有来自右边的单元的输出都被累积后,来自累加器寄存器114的最终累积值可以被复制到输出寄存器118,并从边缘单元12左移到输出寄存器26。

如果没有通过矢量复用器130的反馈,来自先前单元的输出就不容易被池化(pooled)。边缘单元12提供了一个方便的机制,以在输出到输出寄存器26之前在4×4子阵列的边缘池化(pool)单元结果。这种池化机制只需要使用边缘单元12,这样其他中心计算单元10就不需要矢量复用器130的附加硬件。这样,就不需要在输出寄存器26之前有一列单独的池化引擎,因为边缘单元12可以执行单元池化功能,以及计算单元10的其他功能。

边缘单元12从权重寄存器22或从行数据选择器14接收权重,这取决于计算单元10在阵列内的位置。该控制信息存储在单元控制寄存器120中,并可传递到下游的计算单元10。

在执行最大池化操作时,可以启用比较功能。对于单元12,在执行最大池化或Relu计算时,比较功能被启用。最大池化找到最大值。Relu计算f(x)=max(0,x),其中输出为0或x。单元10和单元12都可以进行最大池化和平均池化计算;然而,单元12可以在一个卷积层完成后立即处理池化计算,将CNN输出作为池化输入。

执行最大池化的单元12(1)没有权重,因此没有从权重寄存器102中获取权重,(2)从输出寄存器118获得前一个CNN输出,绕过乘法器110并存储在加法器-比较器112中,(3)输出寄存器118的第二个CNN输出来到加法器-比较器112,与第一个输入比较,然后得到较大的那个,并存储在累加器寄存器114中。(4)第三个CNN输出来自输出寄存器118,累加器寄存器114将前一个较大的发送到加法器-比较器112,然后进行比较,得到较大的。以此类推……

对于Relu操作:(1)没有权重,因此没有来自单元权重寄存器102的权重,(2)矢量复用器130从输出寄存器118获得输出,(3)绕过乘法器110,因此加法器-比较器112的输入是矢量复用器130的输出,(4)刷新单元输入寄存器104输入=x,(5)累加器寄存器114从加法器-比较器112获得max(0,x)输出。

对于执行最大池化操作的单元10:(1)没有权重,因此没有来自单元权重寄存器102的权重,(2)来自单元输入寄存器104的第一个输入被存储在加法器-比较器112中,(3)来自单元输入寄存器104的第二个输入来到加法器-比较器112,并与第一个输入进行比较,然后将较大的那个存储在累加器寄存器114中。(4)第三个输入来自单元输入寄存器104,累加器寄存器114将前一个较大的发送到加法器-比较器112,比较它们,得到较大的那个。以此类推。

由于输出寄存器在阵列的左侧,单元12可以充当Relu/Prelu引擎,所以每个输出都必须通过单元12才能获得Relu/Prelu结果。因此,边缘单元12位于每个4×4子阵列的左边,而不是右边。

图4显示了一个为4×4瓦片尺寸配置的动态瓦片神经网络加速器。每个4×4子阵列是一个瓦片,因此在此配置中有4个瓦片可用。配置控制器20使列数据选择器16从控制寄存器24和输入寄存器28选择输入,绕过上部瓦片的计算单元10、12周围的控制和输入数据。上部和下部4×4瓦片被并行配置为每个直接从输入寄存器28接收数据和直接从控制寄存器24接收控制比特。上部和下部瓦片通过列数据选择器16彼此分开。

配置控制器20也使行数据选择器14选择旁路路径。来自权重寄存器22的权重同时施加到左和右4×4瓦片中的边缘单元12,因为行数据选择器14从权重寄存器22选择权重,而不是从左4×4瓦片中的最后一列计算单元10中选择权重。由右4×4瓦片中的边缘单元12产生的输出数据通过行数据选择器14直接传递到输出寄存器26,绕过左4×4瓦片中的计算单元10。

4×4计算单元10、12的四个瓦片中的每一个都可以单独加载输入数据、权重和控制,并可以独立于其他瓦片产生输出。四个独立的进程流可以同时在四个瓦片上运行。

图5显示了一个为8×8瓦片尺寸配置的动态瓦片神经网络加速器。四个4×4子阵列组合形成一个瓦片,因此在此配置中只有1个4瓦片可用。

配置控制器20使列数据选择器16从紧靠列数据选择器16上方(上游)的一行边缘单元12和计算单元10选择控制和输入。控制寄存器24和输入寄存器28只向最上面一行的边缘单元12、计算单元10提供控制和数据。该控制和输入数据可以向下移位以到达下游单元。需要八个移位周期才能到达8行中的所有计算单元10。

配置控制器20也使行数据选择器14选择相邻的单元路径。来自第四列的计算单元10的权重由行数据选择器14选择并应用到8×8瓦片的第五列的边缘单元12。第五列的边缘单元12产生的输出由行数据选择器14选择并应用到第四行的计算单元10,在行数据选择器14的左边。

来自权重寄存器22的权重只应用到左4×4子阵列中的边缘单元12。输出寄存器26只收集由最左列的边缘单元12产生或左移的输出数据。来自控制寄存器24的控制比特和来自输入寄存器28的输入数据只应用到最上面一行的边缘单元12、计算单元10,并且必须向下移位到其他行的单元。在八个移位周期之后,控制和输入数据到达最底行的计算单元10、边缘单元12。

所有四个4×4子阵列通过行数据选择器14和列数据选择器16选择相邻路径而不是旁路路径而连接在一起。整个阵列作为一个单一的8×8瓦片。该瓦片的处理资源是图4中每个4×4瓦片的四倍,可以进行更复杂的计算,效率可能更高。但是,只有一个独立的进程流可以同时在单个8×8瓦片上运行。

图6显示了一个为8×4瓦片尺寸配置的动态瓦片神经网络加速器。顶部的两个4×4子阵列水平组合成一个瓦片,底部的两个4×4子阵列水平组合成第二个瓦片,因此该配置中有2个瓦片可用。

配置控制器20使列数据选择器16从控制寄存器24和输入寄存器28选择输入,绕过上部8×4瓦片的计算单元10、12周围的控制和输入数据。上部和下部8×4瓦片被并行配置为每个直接从输入寄存器28接收数据和直接从控制寄存器24接收控制比特。上部和下部瓦片通过列数据选择器16彼此分开。

配置控制器20也使行数据选择器14选择相邻的单元路径。来自第四列的计算单元10的权重由行数据选择器14选择并应用到8×4瓦片的第五列中的边缘单元12。第五列中的边缘单元12产生的输出被行数据选择器14选择并应用到第四行的计算单元10,在行数据选择器14的左边。

来自权重寄存器22的权重只应用到左4×4子阵列中的边缘单元12。输出寄存器26只收集由最左列的边缘单元12产生或左移的输出数据。

8×4计算单元10、12的两个瓦片的每一个都可以单独加载输入数据、权重和控制,并可以独立于另一块瓦片产生输出。两个独立的进程流可以同时在两个瓦片上运行。每个瓦片的处理能力是图中4×4瓦片的两倍。

图7显示了一个为4×8瓦片尺寸配置的动态瓦片神经网络加速器。左边的两个4×4子阵列垂直组合成一个瓦片,右边的两个4×4子阵列垂直组合成第二个瓦片,因此在此配置中有2个瓦片可用。

配置控制器20使列数据选择器16从紧靠列数据选择器16上方(上游)的一行边缘单元12和计算单元10选择控制和输入。控制寄存器24和输入寄存器28只向最上面一行的边缘单元12、计算单元10提供控制和数据。该控制和输入数据可以向下移位以到达下游单元。需要八个移位周期才能到达8行中的所有计算单元10。

配置控制器20也使行数据选择器14选择旁路路径。来自权重寄存器22的权重同时应用到左4×8瓦片中的边缘单元12,因为行数据选择器14从权重寄存器22选择权重,而不是从左4×8瓦片的最后一列计算单元10选择权重。由右4×8瓦片中的边缘单元12产生的输出数据通过行数据选择器14直接传递到输出寄存器26,绕过左4×8瓦片中的计算单元10。

来自控制寄存器24的控制比特和来自输入寄存器28的输入数据只应用到最上面一行的边缘单元12和计算单元10,因此控制和输入数据必须向下移位到其他行的单元。在八个移位周期之后,控制和输入数据到达最底行的计算单元10和边缘单元12。

4×8计算单元10、12的两个瓦片的每一个都可以单独加载输入数据、权重和控制,并可以独立于另一块瓦片产生输出。两个独立的进程流可以同时在两个瓦片上运行。每个瓦片的处理能力是图4中4×4瓦片的两倍。

图8A-8B突出显示了用于卷积和整流线性单元(ReLU)运算操作的单元的动态调度。可以在动态瓦片神经网络加速器上集成和执行多种运算操作,例如卷积和ReLU。运算可以流水线化,并在计算单元的阵列中并行执行,减少整体处理时间。图8A-8B描述了使用动态瓦片神经网络加速器执行集成卷积和ReLU操作运算的一个示例。图中显示了一行相邻的四个单元,左边是边缘单元12,后面是三个计算单元10。

在图8A中,进行了卷积运算。控制比特、输入数据和权重值每个周期都可以改变。

输入IN和控制CTL被应用到每一列,一系列权重WGT从权重寄存器22连续移入边缘单元12,并在接下来的3个循环周期内右移到计算单元10,直到时间T0+N。在此期间,边缘单元12和计算单元10一样,作为一个2D乘法单元运行。每个单元10、12将其输入IN与从左移入的权重相乘,以形成一个部分和。每个单元随着时间推移累积加权输入。

在图8B中,对卷积的移位结果执行ReLU运算。对于从时间T0+N到T0+2N的每个周期,来自计算单元10的累积结果从右边的计算单元10的输出寄存器118左移到左边的下一个计算单元10的输出寄存器118。

最后,累积的结果被左移到边缘单元12,它执行ReLU运算。来自计算单元10的累积结果(被左移到边缘单元12的输出寄存器118)通过矢量复用器130反馈到边缘单元12中的乘法器110和加法器-比较器112以进一步运行。例如,通过比较矢量复用器130反馈到加法器-比较器112的每个累积结果,并且仅累积超过应用到边缘单元12的输入IN的最大值的结果,可以由边缘单元12执行最大池化。

在图8A中,边缘单元12-1作为一个2D乘法器运行,其功能与计算单元10相同。矢量复用器130将权重从单元输入寄存器104传递到乘法器110(SRC=IN_REG)。

在图8B中,边缘单元12-1作为一个ReLU引擎运行,具有超出计算单元10的额外功能。矢量复用器130将存储在输出寄存器118中的左移累积结果反馈给乘法器110和加法器-比较器112(SRC=OUT_REG)。然后,边缘单元12-1可以将ReLU池化结果从其输出寄存器118移出到输出寄存器26。

图9A-9B更详细地突出显示了图8A-8B的卷积和ReLU运算的时序。最左边的边缘单元12-1和计算单元10-2、10-3和10-4在同一行,如图8A所示。

在图9A,在时间T0,存储在边缘单元12-1的单元控制寄存器120中的控制比特使边缘单元12-1执行清零操作,清零输出寄存器118、累加器寄存器114、乘法器110和加法器-比较器112。来自输入寄存器28的输入A01被存储到单元输入寄存器104中,而来自权重寄存器22的权重W01被存储到单元权重寄存器102中。

在时间T0+1,存储在计算单元10-2的单元控制寄存器120中的控制比特使计算单元10-2执行清零操作,清零输出寄存器118、累加器寄存器114、乘法器110和加法器-比较器112。来自输入寄存器28的输入A11被存储到单元输入寄存器104中,而从边缘单元12-1右移的权重W01被存储到单元10-2的单元权重寄存器102中。

同样在时间T0+1,禁用比较器的控制比特(CMP_EN=1’B0)存储在边缘单元12-1的单元控制寄存器120中,并使边缘单元12-1执行乘法和累加运算。在先前循环中存储到单元权重寄存器102的值W01和存储在单元输入寄存器104的值A01,被乘法器110相乘,并累积和存储到累加器寄存器114中,作为A01×W01。来自输入寄存器28的输入A02被存储到单元输入寄存器104中,而来自权重寄存器22的权重W02被存储到单元权重寄存器102中。

在时间T0+2,存储在下一个计算单元10-3的单元控制寄存器120中的控制比特使计算单元10-3执行清零操作,清零其输出寄存器118、累加器寄存器114、乘法器110、和加法器-比较器112。来自输入寄存器28的输入A21被存储到单元输入寄存器104中,而从单元10-2右移的权重W01被存储到单元权重寄存器102中。

同样在时间T0+2,存储在计算单元10-2的单元控制寄存器120中的控制比特(CMP_EN=1’B0)使单元10-2执行乘法和累加运算。在先前循环中存储到单元权重寄存器102的值W01和存储在单元输入寄存器104的值A11,被乘法器110相乘,并累加和存储到累加器寄存器114中,作为A11×W01。来自输入寄存器28的输入A12被存储到单元输入寄存器104中,而来自权重寄存器22的权重W02被存储到单元权重寄存器102中。

进一步地,在时间T0+2,先前应用到并存储在边缘单元12-1中的控制比特使边缘单元12-1再次执行乘法和累加运算。在先前循环中存储到单元权重寄存器102的值W02和存储在单元输入寄存器104的值A02,被乘法器110相乘,并累加和存储到累加器寄存器114中,作为A02×W02+A01×W01。来自输入寄存器28的输入A03被存储到单元输入寄存器104中,而来自权重寄存器22的权重W03被存储到单元权重寄存器102中。

在时间T0+3,存储在下一个计算单元10-4的单元控制寄存器120中的控制比特使计算单元10-4执行清零操作,清零其输出寄存器118、累加器寄存器114、乘法器110、和加法器-比较器112。来自输入寄存器28的输入A31被存储到单元输入寄存器104中,而从单元10-3右移的权重W01被存储到单元权重寄存器102中。

同样在时间T0+3,存储在计算单元10-3的单元控制寄存器120中的控制比特(CMP_EN=1’B0)使单元10-3执行乘法和累加运算。先前循环周期中存储到单元权重寄存器102的值W01和存储在单元输入寄存器104的值A21,被乘法器110相乘,并累加和存储到累加器寄存器114中,作为A21×W01。

由于时间T0+3是最后一个循环周期(一行四个单元N=4),相同的输入和权重值应用到单元12-1、10-2、10-3、10-4,因为这些值从未被使用。

此外,在时间T0+3,先前应用到边缘单元12-1并存储在其中的控制比特使边缘单元12-1再次执行乘法和累加运算。在先前循环中存储到单元权重寄存器102的值W03和存储在单元输入寄存器104的值A03,被乘法器110相乘,并累加和存储到累加器寄存器114中,作为A03×W03+A02×W02+A01×W01。

当瓦片的行中的单元的数量N大于4时,该过程可以继续直到在时间T0+N-1时达到N。在时间T0+N之前,来自累加器寄存器114的累积值被复制到输出寄存器118,分别作为单元12-1、10-2、10-3和10-4的输出O01、O02、O03和O04。

在图9B,在时间T0+N,启用比较器的控制比特(CMP_EN=1’B1)被存储在边缘单元12-1中的单元控制寄存器120中,并使边缘单元12-1执行ReLU操作。矢量复用器130选择来自输出寄存器118的反馈O01,并通过乘法器110将O01施加到加法器-比较器112,其将O01与零进行比较。当O01大于零时,对存储在输出寄存器118中的O01不做任何改变。然而,当O01小于零时,单元12-1清零输出寄存器118。因此,ReLU操作修正了存储在输出寄存器118中的值,消除任何负值。

在时间T0+N+1,存储在边缘单元12-1的单元控制寄存器120中的控制比特使边缘单元12-1将存储在单元12-1的输出寄存器118中的整流(修正)的O01左移到输出寄存器26。存储在计算单元10-2、10-3、10-4的单元控制寄存器120中的控制比特使单元10-2、10-3、10-4左移它们存储在它们的输出寄存器118中的值O02、O03、O04。因此所有输出值都被左移,使单元12-1、10-2、10-3、10-4的输出寄存器118在时间T0+N+1的左移循环结束时存储O02、O03、O04、XX。

在时间T0+N+2,存储在边缘单元12-1的单元控制寄存器120中的控制比特(CMP_EN=1’B1)使边缘单元12-1执行另一个ReLU操作。矢量复用器130选择来自输出寄存器118的反馈O02,并通过乘法器110将O02施加到加法器-比较器112,其将O02与零进行比较。当O02大于零时,对存储在输出寄存器118中的O02不做任何改变。然而,当O02小于零时,单元12-1清零输出寄存器118。ReLU操作修正了存储在输出寄存器118中的值,消除任何负值。

在时间T0+N+3,存储在边缘单元12-1的单元控制寄存器120中的控制比特使边缘单元12-1将存储在单元12-1的输出寄存器118中的整流(修正)的O02左移到输出寄存器26。存储在计算单元10-2、10-3、10-4的单元控制寄存器120中的控制比特使单元10-2、10-3、10-4左移存储在它们的输出寄存器118中的值O03、O04、XX。因此所有输出值都被左移,使单元12-1、10-2、10-3、10-4的输出寄存器118在时间T0+N+3的左移循环结束时存储O03、O04、XX、XX。

在时间T0+N+4期间,单元12-1对输出值O03执行另一个ReLU操作,在时间T0+N+5期间,其从阵列左移到输出寄存器26,那时O04被左移到单元12-1的输出寄存器118。然后在时间T0+N+6,单元12-1产生ReLU(O04),其存储在输出寄存器118中,并在时间T0+N+7移出到输出寄存器26。每一个循环周期,单元12-1在左移之后都执行ReLU操作,直到所有N个累积值O01、O02、O03、O04、...O0N都被处理。

图10显示了使用池化的卷积和ReLU的时序。在这个变化中,池化被添加到ReLU操作中。

该过程如前面对图8A-8B和9A所述的那样进行,来自卷积的累积值被存储在单元12-1、10-2、10-3、10-4的输出寄存器118中。当池化与ReLU操作集成时,图10取代了图9B。

在图10中,在时间T0+N,禁用比较器的控制比特(CMP_EN=1’B0)被存储在边缘单元12-1的单元控制寄存器120中,并使边缘单元12-1执行具有最大池化的ReLU操作。

所有先前的ReLU操作的先前最大值被存储在累加器寄存器114中。最初,在第一次ReLU操作之前,将累加器寄存器114清零。因此,对于第一次ReLU操作,将O01与零进行比较。累加器寄存器114的所有后续值将大于或等于零,因此对所有后续的ReLU操作循环都完成了整流(修正)。

前面对图9B描述的循环操作和左移适用于图11,除了单元12-1在时间T0+N对O01、在时间T0+N+2对O02进行的ReLU操作被修改。

例如,在时间T0+N+2,最近左移到输出寄存器118的输出O02,通过矢量复用器130和乘法器110反馈到加法器-比较器112,该比较器将O02与先前存储在累加器寄存器114中的最大值进行比较。当O02大于存储在累加器寄存器114中的先前最大值时,则O02覆盖存储在累加器寄存器114中的先前最大值,并且不会对存储在输出寄存器118中的O02进行改变。但是,当O02小于存储在累加器寄存器114中的先前最大值时,单元12-1就从累加器寄存器114中复制先前最大值以覆盖输出寄存器118。因此,具有最大池化的ReLU操作校正了存储在输出寄存器118中的值,消除任何负值。

平均池化也可以与ReLU集成。对于平均池化,所有输入都被累加,然后使用一个移位器来计算平均值。单元10、12(图2、3)没有移位器,但如果需要,可以添加一个移位器以支持平均池化。

图11显示了训练一个神经网络,如图1的神经网络加速器。测量数据如电压测量被用作训练数据34,V_MEAS。与V_MEAS值对应的测量结果数据被记录为目标数据38,OC_MEAS。每个OC_MEAS值都对应于一个一起测量的V_MEAS值。许多输入数据和输出结果的示例可以被替代。

神经网络36接收训练数据34和当前权重集合Aij、Bij、Wij,并对训练数据34进行操作以产生一个结果。这个生成的结果是OC的模型值,OC_CALC。来自神经网络36的生成结果OC_CALC通过损失函数42与目标数据38,OC_MEAS,进行比较,损失函数42产生一个损失值,其是生成结果离目标有多远的一个函数。损失函数42产生的损失值用于调整应用到神经网络36的权重。损失函数42可以将多次权重迭代应用到训练数据34上,直到找到一个最小损失值,最后一组权重用于建模校准曲线。

神经网络36可以有多个输出节点60,以便从V_MEAS的并行输入并行地生成多个OC_CALC值,而不是生成OC_CALC的单一值。损失函数42可以并行比较多个OC_CALC值与多个OC_MEAS值,以生成损失函数值。

替代实施例

发明人还补充了若干其他实施例。例如,虽然在简化示例中显示了4×4子阵列,但实际的神经网络可能要大得多。可能有4个以上的子阵列,可以组合在一起形成更大的瓦片。除矩形外,瓦片还可以有其他形状。在一些示例中,瓦片内的一行的单元数量N被描述为4,但N可以大得多,如1K。

可以有不止一列的数据选择器14,例如3列的行数据选择器14在水平方向上分隔出4个子阵列。同样,也可以有不止一行的列数据选择器16。一个动态瓦片神经网络加速器可以有16个子阵列,每个N×N,由3列行数据选择器14和3行列数据选择器16分隔。N可以是更大的值,例如64,这样就有16个子阵列,每个有64×64个单元,动态瓦片的尺寸大小范围可以从64×64到1K×1K。许多其他安排都是可能的。

已经描述了一个包括与ReLU集成的卷积的复杂操作,但可以替换或合并其他操作类型。对操作的许多修改都是可能的,例如全局ReLU、PreLU等。卷积广泛用于神经网络,尤其是在图像处理中,其中滤波器在图像数据上被多次应用以产生激活,形成一个特征图。可以选择这些特征进行进一步或更专门的处理。ReLU操作也被广泛使用,有助于消除可能混淆数据分析的负值或负斜率效应。

当许多较小的瓦片用于卷积以生成具有大量输出通道的特征图时,动态瓦片尺寸的灵活性可以提高效率。可以提高硬件效率,减少处理时间。

这些集成操作的总处理时间可以通过拥有一个并行引擎来执行这些多个操作而减少。可以减少芯片面积、成本和功耗。不需要添加专用硬件,例如用于求和层。简单地增加矢量复用器130和输出寄存器118的反馈路径,就可以使用基本的计算单元进行ReLU和池化操作,单元硬件的增加相对较少。只有边缘的单元需要矢量复用器130的额外硬件,中心的单元不需要添加矢量复用器130。

图2和图3所示的计算单元10和边缘单元12的功能,可以以各种方式实施或修改。乘法器110不必与加法器-比较器112分开,而是可以一起集成到单个算术逻辑单元(ALU)或其他处理引擎(PE)中。额外的控制、比较和测试电路可能存在,在图2、3未示出。控制比特可以是一个操作码,可以由单元解码成各种控制信号。计算单元10、边缘单元12内的数据流和操作的排序可以以各种方式和时序来实施。

数据和控制可以流水线化。例如,控制比特可以在乘法器110和加法器-比较器112等单元部件执行这些控制比特所指示的操作之前,从控制寄存器24发送到单元控制寄存器120。可以添加额外的流水线缓冲器和锁存器。

单元权重寄存器102、单元输入寄存器104、单元控制寄存器120、累加器寄存器114和输出寄存器118可以是寄存器文件或存储器的一部分,而不是离散的寄存器。或者,这些寄存器可以通过随机逻辑或计算机生成的逻辑门或宏布局单元来实现。

一些实施例可能没有使用所有组件。可以添加额外的组件。损失函数42可以使用各种误差/损失和成本生成器,如防止权重在许多训练优化周期中增长过大的权重衰减项,鼓励节点将其权重归零的稀疏惩罚,以便只使用总节点的一小部分。许多替换、组合和变化都是可能的。损失或成本项的其他变化和种类可以添加到损失函数42。不同成本函数的相对比例因子的值可以被调整,以平衡各种函数的影响。神经网络的训练终点可以针对各种条件组合设置,例如所需的最终精度、精度-硬件成本乘积、目标硬件成本等。

神经网络36、损失函数42和其他组件可以用各种技术实现,使用软件、硬件、固件、例程、模块、功能等的各种组合。最终结果可以从神经网络36中得到最终权重,并可能以程序模块实现,或者在专用集成电路(ASIC)或其他硬件中实现,以提高处理速度和降低功耗。

左、右、上、下等术语是相对的,可以以各种方式进行翻转、旋转、变换或转置。可以使用阵列的镜像,其中将左移替换为右移。虽然控制寄存器24和输入寄存器28被显示在阵列的顶部,但它们可以在阵列的底部,或者控制寄存器24可以在阵列的顶部而输入寄存器28在阵列的底部。权重寄存器22和输出寄存器26可以位于阵列的右边而不是左边。这些寄存器也可以位于阵列之间。可以有一个以上的阵列。

本发明的背景部分可以包含关于本发明问题或环境的背景资料,而不是描述他人的现有技术。因此,在背景技术部分中包含的材料并不是申请人对现有技术的承认。

本文描述的任何方法或过程都是机器实施的或计算机实施的,旨在由机器、计算机或其他设备来执行,而不打算在没有机器辅助的情况下仅由人类执行。产生的有形结果可以包括报告或其他机器生成的显示在诸如计算机显示器、投影设备、音频生成设备和相关媒体设备的显示设备上,可以包括也是机器生成的硬拷贝打印输出。其他机器的计算机控制是另一个有形的结果。

所述的任何优点和好处不一定适用于本发明的所有实施例。当“装置”一词出现在权利要求元素中时,申请人意在该权利要求元素落入35 USC第112节第6款的规定。通常,在“装置”一词之前有一个或多个词的标签。在“装置”一词前面的一个或多个词是一个标签,目的是为了便于权利要求元素的引用,而不是为了表达结构上的限制。这种装置加功能的权利要求不仅要涵盖本文所述的用于执行该功能的结构及其结构等同物,而且要涵盖等效结构。例如,虽然钉子和螺钉具有不同的构造,但它们是等效结构,因为它们都执行紧固功能。未使用“装置”一词的权利要求不落入35 USC第112节第6款的规定。信号通常是电子信号,但也可以是光信号,例如可以通过光纤线路传输。

对本发明实施例的上述描述是为了说明和描述的目的而提出的。它并不打算是详尽的,也不打算将本发明限制在所公开的精确形式中。根据上述教学,许多修改和变化是可能的。其目的是本发明的范围不受本详细说明的限制,而是受附于权利要求书的限制。

26页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:执行量子傅里叶-克拉夫丘克变换(QKT)的方法及实施该方法的设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!