CN110673824B - 矩阵向量乘电路以及循环神经网络硬件加速器 - Google Patents
矩阵向量乘电路以及循环神经网络硬件加速器 Download PDFInfo
- Publication number
- CN110673824B CN110673824B CN201810719332.3A CN201810719332A CN110673824B CN 110673824 B CN110673824 B CN 110673824B CN 201810719332 A CN201810719332 A CN 201810719332A CN 110673824 B CN110673824 B CN 110673824B
- Authority
- CN
- China
- Prior art keywords
- input
- matrix
- vector
- data
- arithmetic unit
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/386—Special constructional features
- G06F2207/3884—Pipelining
- G06F2207/3892—Systolic array
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种矩阵向量乘电路和循环神经网络硬件加速器。一种矩阵向量乘电路,包括至少一个运算单元组,每组包含多个运算单元;该电路的矩阵输入部分用于使得输入矩阵的各列的元素在每个循环按照时钟周期依次逐个输入给对应运算单元;该电路的向量输入部分用于使得输入向量的各元素按照时钟周期被输入到对应运算单元;该电路的部分和输入部分用于将一个运算单元的计算结果输出给下一个作为其输入;最后一个运算单元的输出数据将被作为新输入向量的元素数据按照时钟周期依次串行传输给向量输入部分。通过使输入数据和输出数据均脉动地流动,本发明的矩阵向量乘电路的布线大大减少,电路结构简洁规整,大大减少了电路设计和实现的复杂性。
Description
技术领域
本发明涉及深度神经网络计算领域,尤其涉及矩阵向量乘电路以及循环神经网络硬件加速器。
背景技术
循环神经网络(RNN,也称时间递归神经网络)可以描述动态时间行为,被广泛应用于处理时间序列数据。其中,RNN网络中的矩阵向量乘(即,矩阵和向量相乘)是计算密集、时间开销大的操作。矩阵向量乘在神经网络中有广泛的应用,例如,图1给出了RNN、GRU(GatedRecurrent Uni)、LSTM(Long Short Term Memory networks)三类循环神经网络的公式以及通用的计算流程。
使用脉动阵列(Systolic Array)能够实现矩阵向量乘电路。脉动阵列的目的是让数据在运算单元的阵列中流动,减少访存的次数,并且使得结构更加规整,布线更加统一。
美国专利US8924455提出了一种使用脉动阵列的矩阵向量乘电路,其中脉动阵列的结构如图2所示,用于实现矩阵A和B相乘得到矩阵C,图2中示出了矩阵A与矩阵B的第1列相乘得到矩阵C的第1列的情形。
从图2可以看出,该美国专利的矩阵向量乘的脉动阵列需要较多的布线连接,由此导致复杂的电路结构,使得硬件设计和实现上具有很高的难度。
因此,如何设计一个布线简洁规整、电路结构简单的矩阵向量乘电路,成为亟待解决的技术问题。
发明内容
鉴于上述技术问题,本发明提供了一种矩阵向量乘电路、硬件加速器及循环神经网络系统。
本发明提出一种可用于循环神经网络计算的脉动阵列矩阵向量乘电路,在该电路中,输入输出均是脉动的,利于电路规整,易于电路设计和布局布线。
根据一个实施例,本发明提供一种脉动阵列矩阵向量乘电路,用于计算输入矩阵与输入向量的乘积,所述脉动阵列矩阵向量乘电路包括矩阵输入部分、向量输入部分、部分和输入部分、以及计算部分,其中,所述计算部分包括至少一个运算单元组,每个运算单元组中包含多个依次相连的运算单元;所述矩阵输入部分包括与至少一个运算单元组中的相对应的运算单元相连的第一输入线路,用于使得输入矩阵的各列上的元素数据在每个循环按照时钟周期依次逐个串行输入给至少一个运算单元组中的相对应的运算单元;所述向量输入部分包括与至少一个运算单元组中的相对应的运算单元相连的第二输入线路,用于使得输入向量的各元素数据按照时钟周期被输入到至少一个运算单元组中相对应的运算单元;所述部分和输入部分包括用于将运算单元组中的一个运算单元得到的计算结果输出给该运算单元组中的下一个运算单元作为该下一个运算单元的输入的输入线路,其中,最后一个运算单元的输出数据作为新的输入向量的元素数据按照时钟周期依次串行传输给所述向量输入部分,从而使得所述脉动阵列矩阵向量乘电路的输入数据和输出数据均在脉动阵列中串行地流动。
可选地,向量输入部分的第二输入线路上的输入数量与矩阵输入部分的第一输入线路上的输入数量相同。
可选地,当一个运算单元组的运算单元数量与向量输入部分的第二输入线路上的输入数量相同时,所述矩阵输入部分按照以下规律向运算单元输入数据:从第一个循环的第j+1个时钟周期开始,逐个时钟周期地将输入矩阵的第j+1列元素依次输入给运算单元组中的第j+1个运算单元,其中,j为大于等于零的整数。
可选地,当一个运算单元组的运算单元数量与第一和第二输入线路上的输入数量相同时,从所述和输入部分输入给该运算单元组的第一个运算单元的数据为0;以及当一个运算单元组的运算单元数量小于第一和第二输入线路上的输入数量时,将该运算单元组的最后一个运算单元的在当前时钟周期的计算结果输出到所述部分和输入部分,并且所述和输入部分将所述计算结果输入给该运算单元组的第一个运算单元,以供该第一个运算单元在下一个时钟周期进行运算时使用。
可选地,所述运算单元包括乘加计算单元。
可选地,从运算单元组中的最后一个运算单元输出的运算结果存储在输入向量存储器中作为新的输入向量的元素数据,通过移位存储电路将新的输入向量的元素数据串行地输送至向量输入部分的第二输入线路,以通过第二输入线路进一步输入给运算单元组的相应运算单元。
可选地,矩阵输入部分包括用于存储作为权重矩阵的输入矩阵的列数据的各权重存储器,所述向量输入部分包括耦接到相应的运算单元的用于更新输入向量的各移位存储电路,其中从运算单元组的最后一个运算单元输出的运算结果将被作为新的输入向量的元素数据在移位存储电路中依次串行传送,其中,输入矩阵按列存储到各权重存储器,对于每一列,对应的权重存储器通过第一输入线路将该列的元素数据逐个依次输入到相应的运算单元,并且,在移位存储电路更新输入向量的同时,通过将权重存储器中的各列数据切换为新的权重矩阵的对应列的数据,更新输入矩阵。
可选地,权重存储器为高位宽存储器,用于存储输入矩阵的多列数据。
可选地,不同的运算单元组共享相同的输入矩阵数据。
根据本发明的一个实施例,提供一种用于循环神经网络的硬件加速器,包括:控制器,用于控制数据输入和输出;存储器,用于存储数据;以及至少一个上述的矩阵向量乘电路。
通过如上所述的脉动阵列结构及其独特的数据传输方式,本发明的矩阵向量乘电路的布线大大减少,整个电路结构简洁规整,大大减少了电路设计和实现的复杂性。
本发明提供的基于脉动阵列的循环神经网络硬件加速器和循环神经网络系统能够有效地实现RNN、GRU、LSTM等针对序列的深度神经网络计算。
另外,本发明的矩阵向量乘电路可以使多个脉动运算阵列共用相同的输入矩阵数据来并行地处理多组输入向量数据(每组输入向量数据对应于每个运算单元组),即,执行同一个输入矩阵与多个输入向量组中的每一个组的向量乘运算,由此可以容易地扩展为多维脉动,减少布线,同时提高资源利用率。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了RNN、GRU、LSTM三类循环神经网络的公式以及通用的计算流程。
图2示出了现有技术的脉动阵列。
图3示出了根据本发明的一个实施例的矩阵向量乘电路及其运算过程的示例。
图4(A)示出了第一个乘加计算单元(运算单元)在第1拍的示例性计算过程。
图4(B)示出了第一个和第二个乘加计算单元(运算单元)在第2拍的示例性计算过程。
图4(C)示出了m+1个乘加计算单元(运算单元)在第n+1拍的示例性计算过程。
图5示出了根据本发明的一个实施例的矩阵向量乘电路的一个示例性的输入向量部分实现方式。
图6示出了根据本发明的一个实施例的矩阵向量乘电路的一个示例性的实现方式。
图7示出了根据本发明的一个实施例的可并行运算的矩阵向量乘电路的一个示例性的实现方式。
图8示出了根据本发明的一个实施例的循环神经网络硬件加速器。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开,而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。这里需要说明的是,本申请中的附图标记和数字以及序号仅是为了方便描述而给出的,对于本发明的步骤、顺序等等均不构成任何限制,除非在说明书中明确指出了步骤的先后顺序。
首先,对于一个矩阵向量乘计算,假设输入矩阵W为一个(m+1)×(n+1)的矩阵(m和n都为大于等于0的整数),输入向量X与输出向量H均有(m+1)个元素,则输入矩阵W×输入向量X=输出向量H的运算如下式(1)所示。
为了减少电路上的运算处理节点与用于存储数据的存储单元之间的较多的布线连接,简化电路结构,使得电路更加简洁规整,本发明提出了一种新的矩阵向量乘电路。
如图3所示,根据本发明的实施例的矩阵向量乘电路100避免了现有技术中矩阵向量乘电路导致的繁杂的布线连接和电路结构的复杂性,因为根据本发明的实施例的矩阵向量乘电路100具有独特的数据流方向,其输入向量的元素数据和输出向量的元素数据均作脉动前进,直接避免了复杂的布线,而现有技术的输出是每个运算单元都需要单独的输出端口,导致电路布线较多且复杂,而本发明的矩阵向量乘电路更有利于简化电路布局布线。因此,本发明的矩阵向量乘电路的脉动阵列结构大大简化了电路结构的复杂性,使得电路非常的简洁规整。
根据本发明的实施例的矩阵向量乘电路100包括矩阵输入部分、向量输入部分、“部分和”输入部分、以及计算部分。
其中,计算部分包括至少一个运算单元组,每个运算单元组中包含多个依次相连的运算单元101。
矩阵输入部分包括与至少一个运算单元组中的相对应的运算单元101相连的第一输入线路,用于使得输入矩阵的各列上的元素数据在每个循环按照时钟周期(本文中也称为“拍”)依次逐个串行输入给至少一个运算单元组中的相对应的运算单元101。
向量输入部分包括与至少一个运算单元组中的相对应的运算单元101相连的第二输入线路,用于使得输入向量的各元素数据按照时钟周期被输入到至少一个运算单元组中相对应的运算单元101。
部分和输入部分包括用于将运算单元组中的一个运算单元得到的计算结果输出给该运算单元组中的下一个运算单元作为该下一个运算单元的输入的输入线路。
在本发明中,最后一个运算单元的输出数据将被作为新的输入向量的元素数据按照时钟周期依次串行传输给所述向量输入部分,从而使得所述脉动阵列矩阵向量乘电路的输入数据和输出数据均在脉动阵列中串行地流动。
这里,需要注意,存储在输入向量存储器中的新的输入向量的元素数据可以经过一个时间间隔被彼此相连的移位存储电路逐个串行地输送至向量输入部分的第二输入线路。
例如,最后一个运算单元的输出数据(将被作为更新的输入向量的元素数据)也可以先存储到缓存(例如输入向量存储器)中,之后通过控制器在控制信号作用下在某个时刻从缓存(例如输入向量存储器)输出给与本运算单元组的最后一个运算单元相对应的最后一个移位存储电路,并且,从最后一个移位存储电路依次像前面的移位存储电路串行传送。即,输入向量的更新可以有间隔,即本运算单元组的最后一个运算单元的输出数据可以先存到某个缓存中,等待一段时间再传输给向量输入部分。
从图3可以看出,在本发明的脉动阵列矩阵向量乘电路100中,输入向量X的每个元素数据作为相对应的运算单元101的输入(来自向量输入部分的输入),这里,运算单元101的数量可以与输入向量X的元素的数量相等,但是也可以不相等,对于不相等的情况将在后续进行描述。为了容易描述和理解,这里将先以运算单元101的数量与输入向量X的元素的数量相等的情况为例进行说明。
在本发明的一维脉动阵列中,各运算单元101依次相连(例如成排,按行或列),每一个运算单元在每一拍将其运算结果输出给下一个运算单元作为该下一个运算单元的在下一拍的一个输入(本文将来自上一个运算单元在上一拍的运算结果的输入称为上一拍“部分和”输入,即来自上述部分和输入部分的输入),即,每个运算单元有三个输入:输入向量的元素数据与输入矩阵的元素数据(每一拍变化)以及上一个运算单元的上一拍运算结果(上一拍“部分和”输入)。
在本发明中,输入向量的元素数据作为一个输入,在该输入向量的计算过程中保持不变,但是当向量更新时将发生改变。在本发明中,通过采用输出向量作为新的输入向量替换原输入向量的的方式来实现向量更新,即,在一个输入向量的矩阵向量乘计算完成之后,输出向量将可以作为一个新的输入向量再次进行矩阵向量乘计算,由此实现循环神经网络的深度计算。这里,如上所述,输入向量的更新可以是有间隔的,即,输出向量可以先存储在一个存储器中,按时更新输入向量,而不一定是输出向量直接立即更新为输入向量。
进一步地,从该脉动阵列的最后一个运算单元输出的运算结果将沿与运算单元的输出传送方向相反的方向依次进行传送,以作为该矩阵向量电路的进一步的输入向量(即更新的输入向量数据,循环神经网络的下一个输入向量)。
在本发明中,运算单元101可以是用于进行乘加计算的乘加计算单元。
以下,将以乘加计算单元作为运算单元101为例来详细描述本发明的一个示例性的实施例。这里,乘加计算单元的三个输入分别为输入矩阵的元素数据(来自矩阵输入部分的输入)、输入向量的元素数据、来自上一个乘加计算单元的上一拍“部分和”输入,所进行的“乘加计算”为“输入矩阵的元素数据×输入向量的元素数据+来自上一个乘加计算单元的上一拍‘部分和’输入”。
如图4(A)-4(C)所示,输入向量X的第一个元素x0将输入到第一个运算单元(这里为例示的乘加计算单元),输入向量X的第二个元素x1将输入到第二个乘加计算单元,以此类推,即上面提及过的输入向量X的每个元素数据作为相对应的运算单元101的输入,也就是说,输入向量的各元素数据依次输入到相对应的运算单元。
如图4(A)所示,在第一个循环的第1拍(也可称为第1个时钟周期),仅在第一个乘加计算单元上进行运算(在该初始状态,其它乘加运算单元不进行运算,而当最后一个运算单元也开始运算之后,所有运算单元可以都在运行状态,此时可以存在以下情况:部分运算单元进行一个矩阵向量乘运算,另一部分运算单元在进行另一个矩阵向量乘运算,该情况将在后续进行描述。),除了向量X的第1个元素x0(来自向量输入部分的输入)作为输入之外,将矩阵W的第1行第1列元素w0,0(来自矩阵输入部分的输入)也输入到第一个乘加计算单元,另外,此时,第一个乘加计算单元的另一个输入,即上一拍“部分和”(来自部分和输入部分的输入)输入为0,则第一个乘加计算单元进行如下式(2)的乘加计算,然后该乘加运算的结果作为上一拍“部分和”输入被输入到第二个乘加计算单元,供第二个乘加计算单元在第二拍进行乘加计算时使用。
w0,0×x0+0=w0,0x0 (2)
如图4(B)所示,在该循环的第二拍(也称为第二个时钟周期),在第一个和第二个乘加计算单元上进行运算(在该初始状态,其它乘加运算单元不进行运算,而当最后一个运算单元也开始运算之后,所有运算单元可以都在运行状态,此时可以存在以下情况:部分运算单元进行一个矩阵向量乘运算,另一部分运算单元在进行另一个矩阵向量乘运算,该情况将在后续进行描述。)。
在第一个乘加计算单元上,除了向量X的第一个元素x0作为固定的输入之外,这次依序将矩阵W的第2行第1列的元素W1,0也输入到第一个乘加计算单元(矩阵元素数据依序输入),另外,此时,第一个乘加计算单元的另一个输入,即上一拍“部分和”输入仍然为0(固定),则第一个乘加计算单元进行如下式(3)的乘加计算,然后该乘加运算的结果将作为上一拍“部分和”输入被输入到第二个乘加计算单元。
w1,0×x0+0=w1,0x0 (3)
在第二个乘加计算单元上,除了向量X的第二个元素x1作为输入之外,依序将矩阵W的第1行第2列的元素W0,1也输入到第二个乘加计算单元,另外,此时,第二个乘加计算单元还有另一个输入,即上面所述的来自第一乘加计算单元的上一拍(第1拍)“部分和”输入w0, 0x0,这时,第二个乘加计算单元进行如下式(4)的乘加计算。
w0,0x0+w0,1×x1=w0,0x0+w0,1x1 (4)
以此类推,如图4(C)所示,在该循环的第n+1拍(也可称为第n+1个时钟周期),在第一个、第二个、......、第m+1个乘加计算单元(本例中假设共有m+1个乘加计算单元)上进行运算。
在第一个乘加计算单元上,除了向量X的第一个元素x0作为输入之外,这次依序将矩阵W的第n+1行第1列的元素Wn,0也输入到第一个乘加计算单元,另外,此时,第一个乘加计算单元的另一个输入,即上一拍“部分和”输入为0(固定),则第一个乘加计算单元进行如下式(5)的乘加计算,该乘加运算的结果将作为上一拍“部分和”输入被输入到第二个乘加计算单元。
wn,0×x0+0=wn,0x0 (5)
在第二个乘加计算单元上,除了向量X的第二个元素x1作为固定输入之外,依序将矩阵W的第n行第2列元素Wn-1,1也输入到第二个乘加计算单元,另外,此时,第二个乘加计算单元还有一个输入,即上面所述的来自第一乘加计算单元的上一拍(第n拍)“部分和”输入wn-1,0x0,这时,第二个乘加计算单元进行如下式(6)的乘加计算,然后,该乘加计算的结果作为上一拍“部分和”输入被输入到第三个乘加计算单元供第三乘加计算单元在第三拍时进行乘加计算使用。
wn-1,0x0+wn-1,1×x1=wn-1,0x0+wn-1,1x1 (6)
在第三个乘加计算单元上,除了向量X的第三个元素x2作为输入之外,依序将矩阵W的第n-1行第3列元素Wn-2,2也输入到第三个乘加计算单元,另外,此时,第三个乘加计算单元还有一个输入,即来自第二乘加计算单元的上一拍(第n拍)“部分和”输入(wn-2,0x0+wn-2, 1x1),这时,第三个乘加计算单元进行如下式(7)的乘加计算。
(wn-2,0x0+wn-2,1x1)+wn-2,2×x2=wn-2,0x0+wn-2,1x1+wn-2,2x2 (7)
后面的乘加计算单元的运算方式以此类推。
然后,在第m+1个乘加计算单元上,除了向量X的第m+1个元素xm作为输入之外,依序将矩阵W的第n-m+1行第m+1列元素Wn-m,m也输入到第m+1个乘加计算单元,另外,此时,第m+1个乘加计算单元还有一个输入,即来自第m个乘加计算单元的上一拍(第n拍)“部分和”输入这时,第m+1个乘加计算单元进行如下式(8)的乘加计算。
简而言之,对于上述所示例出的运算单元数量与输入向量的元素数量相同的一维脉动阵列的矩阵向量乘电路来说,各运算单元的输入具有以下规律:
1)从第一个节拍开始,按照周期的每个节拍,将输入矩阵的第一列元素依次输入给第一运算单元(即,如上所述,第1拍:w0,0;第2拍:w1,0;第3拍:w2,0;......;第n+1拍:wn,0)。
2)从第二个节拍开始,按照每个节拍,将输入矩阵的第二列元素依次输入给第二运算单元(即,如上所述,第1拍:不输入或“NONE”(无);第2拍:w0,1;第3拍:w1,1;......;第n+2拍:wn,1)。
3)从第j+1(j为大于等于2的整数)个节拍开始,按照周期的每个节拍,将输入矩阵的第j+1列元素依次输入给第j+1运算单元(即,如上所述,前j个拍:不输入或“NONE”(无);第j+1拍:w0,j;第j+2拍:w1,j;......;第n+j+1拍:wn,j)。
总结来说,对于上述所示例出的运算单元数量与输入向量的元素数量相同的脉动阵列的矩阵向量乘电路来说,各运算单元的输入具有以下规律:
从第j+1(j为大于等于零的整数)拍开始,按照时钟周期(也称为“拍”),将输入矩阵的第j+1列元素依次输入给第j+1运算单元(即,如上所述,前j个拍:不输入或“NONE”(无);第j+1拍:w0,j;第j+2拍:w1,j;......;第n+j+1拍:wn,j)。
通过如上所述的一维脉动阵列及其独特的数据传输方式,本发明的矩阵向量乘电路的布线大大减少,整个电路结构简洁规整,大大减少了电路设计和实现的复杂性。
进一步地,由最后一个乘加计算单元得到的输出(累计乘加的结果)将可以再作为输入被依次传输给相应的各乘加计算电路,如图4(A)和图4(C)所示,以实现循环神经网络。
另外,根据本发明的一种实施方式,可以通过移位存储电路来实现输入向量的输入控制,如图5所示。
在图5中,移位控制器与分别连接到各运算单元(例如上述的各乘加计算单元)的各移位存储电路连接,用于按照上面描述的方式进行输入向量控制。同时,这些移位存储电路还连接向量输入部分的第二输入线路,以将输入向量的元素数据输送给对应的运算单元。对于本领域技术人员而言,在理解了上面描述的输入向量的输入次序的基础上,便能够基于图5给出的结构实施实际的输入向量控制,因此,本文对此不再多加描述,以免混淆本发明的实质。
另外,如上面所描述的,从运算单元组中的最后一个运算单元输出的运算结果可以存储在用于存储输入向量的输入向量存储器中作为新的输入向量的元素数据,通过上述的移位存储电路将新的输入向量的元素数据串行地输送至向量输入部分的第二输入线路,以通过第二输入线路进一步输入给运算单元组的相应运算单元,如图6所示。
另外,在计算时,从每个移位存储电路输出的输入向量元素数据会稳定一定的周期(例如,可以是权重的列维度),然后更新下一个输入向量元素数据。
另外,根据本发明的实施例,输入矩阵(也可称为“权重矩阵”)可按列存储到不同的权重存储器里,在恒定向量单元的多时钟周期计算过程中,权重会不断切换到该列的下一个,直到最后一个(如上面所描述的那样);然后移位存储电路更新作为其输出的输入向量的元素数据(即运算单元的输入)的同时,切换到新的一列权重数据。
也就是说,矩阵输入部分包括用于存储作为权重矩阵的输入矩阵的列数据的各权重存储器,向量输入部分包括耦接到相应的运算单元的用于更新输入向量的各移位存储电路,其中从运算单元组的最后一个运算单元输出的运算结果作为新的输入向量的元素数据在移位存储电路中依次串行传送。并且,输入矩阵按列存储到各权重存储器,对于每一列,对应的权重存储器通过第一输入线路将该列的元素数据逐个依次输入到相应的运算单元,并且,在移位存储电路更新输入向量的同时,通过将权重存储器中的各列数据切换为新的权重矩阵的对应列的数据,更新输入矩阵,如图5和6所示。
进一步地,为了更加有效地利用存储资源,可将权重矩阵的多列权重向量进行重组,从而成为更高位宽的数据,存储到一个高位宽存储器里。由此,权重数据可以具有如下表1所示的结构。
(address:表示存储地址)
表1
在表1给出的示例中,假定存储器位宽是权重单元位宽的四倍。浅灰色区域是另一组矩阵向量乘所需要的权重数据(也可以认为是上一个循环的权重数据),这样就提高了运算单元的利用效率,例如,可以实现矩阵向量乘电路的部分运算单元计算一个矩阵向量乘,而其余的运算单元计算另一个矩阵向量乘。
另外,若上所述,根据本发明的矩阵向量乘电路的运算单元的数量可以等于输入向量的元素数量,也即等于输入矩阵的列维度(输入矩阵的列的数量),也可以不等于它们,例如可以少于输入向量的元素数量,也即少于输入矩阵的列维度(输入矩阵的列的数量),从而得到根据本发明的实施例的多维脉动阵列矩阵向量乘电路。
此时,也就是说,矩阵的列维度大于矩阵向量乘电路中运算单元的数量,那么此时,可以将该矩阵向量乘电路中最后一个运算单元的部分和输出再作为第一个运算单元的输入,如图6中虚线所示。需要注意,图6给出的是根据本发明的一个实施例的非常具体的示例性实施方式,其对本发明不构成不必要的限制。
通过本发明的发明人所提出的上述构造,在根据本发明的脉动阵列矩阵向量乘电路中,输入向量是一个接一个输入(脉动传输),计算结果是一个接一个输出(脉动传输),即,输入向量和输出向量均进行脉动传输,而且,输出向量可以即时地或者经过一段时间脉动传输到用于输出输入向量的移位存储电路以作为新的输入向量将被输入到运算单元),将当前帧的计算结果一个接一个输入到脉动阵列的移位存储电路(脉动阵列的输入部分)中,以便于在下一帧计算时使用当前帧的结果。而且,本发明所提出的这样的使输入和输出数据均串行流动的方式(即,脉动阵列)有利于硬件电路的布局布线,减小硬件设计难度。
另外,当需要支持多路向量计算,即共享相同的权重数据时,可以使用图7所示的电路结构。在图7中,可以看出,由多个运算单元(运算单元可以例如为用乘法器实现的乘加计算单元)组成一个运算单元组,多个运算单元组中的每个相对应的运算单元连接到用于输出输入矩阵的列元素数据的输入线路(例如可以为图7所示的权重存储器等),从而实现了输入矩阵数据的共享利用,从而能够实现多路向量计算,由此提高计算效率,简化电路结构。
请注意,对于共享相同的输入矩阵数据的多个运算单元组,一个运算单元组的输入矩阵数据比紧接在前面的运算单元组的输入矩阵数据晚特定的时间(例如一个或多个时钟周期)。即,仅通过简单地控制输入矩阵的元素数据的输出时间,便可以使输入矩阵数据为多个运算单元组共用,从而大大减少了布线数量,简化了电路结构。
当有更多并行度时,本发明提出的脉动阵列电路也很容易这样扩展。
图8给出了根据本发明的一个实施例的循环神经网络硬件加速器200的系统结构框图。根据本发明的循环神经网络硬件加速器可以包括用于控制数据输入和输出的控制器110、用于存储数据的存储器120以及根据本发明的上述的矩阵向量乘电路100。还可以进一步包括其它部件或组件,例如加法器、点乘单元、非线性单元等等。
需要注意,本发明不局限于图8的系统结构,而是也可以使用多个矩阵向量乘电路。
另外,需要注意,对于本发明提出的矩阵向量乘电路的具体的实现方法,本发明不作限制。例如,可以使用DSP、FPGA、ASIC等来实现根据本发明的实施例的矩阵向量乘电路。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (12)
1.一种脉动阵列矩阵向量乘电路,用于计算输入矩阵与输入向量的乘积,其特征在于:
所述脉动阵列矩阵向量乘电路包括矩阵输入部分、向量输入部分、部分和输入部分、以及计算部分,其中,
所述计算部分包括至少一个运算单元组,每个运算单元组中包含多个依次相连的运算单元;
所述矩阵输入部分包括与至少一个运算单元组中的相对应的运算单元相连的第一输入线路,用于使得输入矩阵的各列上的元素数据在每个循环按照时钟周期依次逐个串行输入给至少一个运算单元组中的相对应的运算单元;
所述向量输入部分包括与至少一个运算单元组中的相对应的运算单元相连的第二输入线路,用于使得输入向量的各元素数据按照时钟周期被输入到至少一个运算单元组中相对应的运算单元;
所述部分和输入部分包括输入线路,所述输入线路用于将运算单元组中的一个运算单元得到的计算结果输出给该运算单元组中的下一个运算单元作为该下一个运算单元的输入,
其中,最后一个运算单元的输出数据作为新的输入向量的元素数据按照时钟周期依次串行传输给所述向量输入部分,从而使得所述脉动阵列矩阵向量乘电路的输入数据和输出数据均在脉动阵列中串行地流动。
2.如权利要求1所述的矩阵向量乘电路,其特征在于,向量输入部分的第二输入线路上的输入数量与矩阵输入部分的第一输入线路上的输入数量相同。
3.如权利要求1所述的矩阵向量乘电路,其特征在于,当一个运算单元组的运算单元数量与向量输入部分的第二输入线路上的输入数量相同时,所述矩阵输入部分按照以下规律向运算单元输入数据:
从第一个循环的第j+1个时钟周期开始,逐个时钟周期地将输入矩阵的第j+1列元素依次输入给运算单元组中的第j+1个运算单元,其中,j为大于等于零的整数。
4.如权利要求2所述的矩阵向量乘电路,其特征在于,当一个运算单元组的运算单元数量与第一和第二输入线路上的输入数量相同时,从所述部分和输入部分输入给该运算单元组的第一个运算单元的数据为0;以及
当一个运算单元组的运算单元数量小于第一和第二输入线路上的输入数量时,将该运算单元组的最后一个运算单元的在当前时钟周期的计算结果输出到所述部分和输入部分,并且所述部分和输入部分将所述计算结果输入给该运算单元组的第一个运算单元,以供该第一个运算单元在下一个时钟周期进行运算时使用。
5.如权利要求1~4中的任何一项所述的矩阵向量乘电路,其特征在于,所述运算单元包括乘加计算单元。
6.如权利要求1~4中的任何一项所述的矩阵向量乘电路,其特征在于,从运算单元组中的最后一个运算单元输出的运算结果存储在输入向量存储器中作为新的输入向量的元素数据,通过移位存储电路将新的输入向量的元素数据串行地输送至向量输入部分的第二输入线路,以通过第二输入线路进一步输入给运算单元组的相应运算单元。
7.如权利要求6所述的矩阵向量乘电路,其特征在于,所述矩阵输入部分包括用于存储作为权重矩阵的输入矩阵的列数据的各权重存储器,所述向量输入部分包括耦接到相应的运算单元的用于更新输入向量的各移位存储电路,其中从运算单元组的最后一个运算单元输出的运算结果作为新的输入向量的元素数据在移位存储电路中依次串行传送,
其中,输入矩阵按列存储到各权重存储器,对于每一列,对应的权重存储器通过第一输入线路将该列的元素数据逐个依次输入到相应的运算单元,并且,在移位存储电路更新输入向量的同时,通过将权重存储器中的各列数据切换为新的权重矩阵的对应列的数据,更新输入矩阵。
8.如权利要求7所述的矩阵向量乘电路,其特征在于,所述权重存储器为高位宽存储器,用于存储输入矩阵的多列数据。
9.如权利要求6所述的矩阵向量乘电路,其特征在于,存储在输入向量存储器中的新的输入向量的元素数据经过一个时间间隔被彼此相连的移位存储电路逐个串行地输送至向量输入部分的第二输入线路。
10.如权利要求1~4中的任何一项所述的矩阵向量乘电路,其特征在于,多个运算单元组共享相同的输入矩阵数据。
11.如权利要求10所述的矩阵向量乘电路,其特征在于,对于共享相同的输入矩阵数据的所述多个运算单元组,一个运算单元组的输入矩阵数据比紧接在前面的运算单元组的输入矩阵数据晚一个或多个时钟周期。
12.一种用于循环神经网络的硬件加速器,包括:
控制器,用于控制数据输入和输出;
存储器,用于存储数据;以及
至少一个根据权利要求1~11中的任何一项所述的矩阵向量乘电路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810719332.3A CN110673824B (zh) | 2018-07-03 | 2018-07-03 | 矩阵向量乘电路以及循环神经网络硬件加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810719332.3A CN110673824B (zh) | 2018-07-03 | 2018-07-03 | 矩阵向量乘电路以及循环神经网络硬件加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110673824A CN110673824A (zh) | 2020-01-10 |
CN110673824B true CN110673824B (zh) | 2022-08-19 |
Family
ID=69065826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810719332.3A Active CN110673824B (zh) | 2018-07-03 | 2018-07-03 | 矩阵向量乘电路以及循环神经网络硬件加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110673824B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113919489A (zh) * | 2020-07-08 | 2022-01-11 | 第四范式(北京)技术有限公司 | 提高fpga的片上乘加器资源使用率的方法和装置 |
US20220019407A1 (en) * | 2020-07-14 | 2022-01-20 | Taiwan Semiconductor Manufacturing Company, Ltd. | In-memory computation circuit and method |
CN115756384B (zh) * | 2022-11-22 | 2024-05-17 | 海光信息技术股份有限公司 | 张量计算单元及使用方法、数据处理装置及操作方法 |
CN116136752B (zh) * | 2023-04-19 | 2023-06-30 | 上海登临科技有限公司 | 阵列输入策略的确定方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4493048A (en) * | 1982-02-26 | 1985-01-08 | Carnegie-Mellon University | Systolic array apparatuses for matrix computations |
CN101038582B (zh) * | 2007-04-02 | 2010-05-12 | 中国科学院光电技术研究所 | 用于自适应光学波前复原运算的脉动阵列处理方法及电路 |
CN101968732B (zh) * | 2010-10-09 | 2012-12-19 | 中国人民解放军信息工程大学 | 检错比特并行脉动阵列移位多项式基乘法器及其构造方法 |
TWI525558B (zh) * | 2011-01-17 | 2016-03-11 | Univ Nat Taipei Technology | Resilient high - speed hardware reverse transfer and feedback type neural network system |
CN105589677A (zh) * | 2014-11-17 | 2016-05-18 | 沈阳高精数控智能技术股份有限公司 | 一种基于fpga的脉动结构矩阵乘法器及其实现方法 |
US10515307B2 (en) * | 2015-06-05 | 2019-12-24 | Google Llc | Compressed recurrent neural network models |
US10621486B2 (en) * | 2016-08-12 | 2020-04-14 | Beijing Deephi Intelligent Technology Co., Ltd. | Method for optimizing an artificial neural network (ANN) |
-
2018
- 2018-07-03 CN CN201810719332.3A patent/CN110673824B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110673824A (zh) | 2020-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110673824B (zh) | 矩阵向量乘电路以及循环神经网络硬件加速器 | |
US5542026A (en) | Triangular scalable neural array processor | |
US5506998A (en) | Parallel data processing system using a plurality of processing elements to process data and a plurality of trays connected to some of the processing elements to store and transfer data | |
EP0479102A2 (en) | Multidimensional systolic array processing apparatus and method | |
EP2017743B1 (en) | High speed and efficient matrix multiplication hardware module | |
US4601006A (en) | Architecture for two dimensional fast fourier transform | |
JPH04290155A (ja) | 並列データ処理方式 | |
CN110826710B (zh) | 基于横向脉动阵列的rnn前向传播模型的硬件加速实现方法 | |
CN110580519B (zh) | 一种卷积运算装置及其方法 | |
EP0459222A2 (en) | Neural network | |
CN111581595A (zh) | 一种矩阵乘法计算方法及计算电路 | |
CN1685309B (zh) | 计算上高效数学引擎 | |
KR0175733B1 (ko) | 비트-시리얼 메트릭스 전치를 위한 초대규모 집적회로 | |
CN107368459B (zh) | 基于任意维数矩阵乘法的可重构计算结构的调度方法 | |
CN110457648B (zh) | 一种用于lu分解的脉动阵列结构的实现方法 | |
JP2002328915A (ja) | 時分割方式の行列演算器 | |
CN110232289A (zh) | 椭圆曲线密码的高速倍点运算方法 | |
CN112639836A (zh) | 数据处理装置、电子设备和数据处理方法 | |
CN111985628B (zh) | 计算装置及包括所述计算装置的神经网络处理器 | |
KR100444729B1 (ko) | 레딕스-8 단일 경로 지연 전달 구조의 고속 퓨리에 변환장치 및 그 방법 | |
JP2825133B2 (ja) | 並列データ処理方式 | |
Lin | Parallel generation of permutations on systolic arrays | |
US5309385A (en) | Vector division processing method and system | |
JP2000029864A (ja) | ベクトル・コンピュ―タにおける演算方法、及び記録媒体 | |
JPH04233062A (ja) | ベクトルの処理方法およびその回路 |
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 |