低时延矩阵乘法部件的制作方法

未命名 07-15 阅读:174 评论:0

低时延矩阵乘法部件
1.分案说明
2.本技术属于申请日为2018年5月17日的中国发明专利申请no.201880004328.7的分案申请。
技术领域
3.本说明书涉及在硬件中执行神经网络计算。


背景技术:

4.神经网络是采用一个或者多个模型层来生成接收到的输入的输出例如分类的机器学习模型。除了输出层之外,一些神经网络还包括一个或者多个隐藏层。每个隐藏层的输出用作网络中的下一层即网络的下一隐藏层或者输出层的输入。网络的每个层根据相应参数集合的当前值来从接收到的输入生成输出。


技术实现要素:

5.本说明书描述了各种技术,涉及训练神经网络、计算神经网络推断或者两者的专用硬件电路,并且具体涉及通过增加将权重值加载到矩阵乘法部件内的权重矩阵寄存器中的速率来减少在矩阵乘法部件上的时延的专用硬件电路。
6.连接脉动阵列以执行矩阵乘法,并且脉动阵列通常在整个阵列中具有统一的结构。脉动阵列的矩阵乘法部件由乘加子部件组成,这些乘加子部件中的每个乘加子部件采取输入操作数,将操作数乘以存储的权重以获得结果,并且将结果添加到部分和以产生新的部分和。
7.一种用于降低时延的方法是增加将权重加载到乘加部件的速率。
8.通常,本说明书中所描述的主题的一个创新方面可以体现为训练神经网络、计算神经网络推断或者两者的专用硬件电路。
9.该方面的其它实施例包括记录在一个或者多个计算机存储装置上的对应计算机系统、设备和计算机程序,每个计算机系统、设备和计算机程序配置为执行方法的动作。对于要配置为执行特定操作或者动作的一个或者多个计算机的系统意味着已经在系统上安装了在操作中使系统执行操作或者动作的软件、固件、硬件或者它们的组合。对于要配置为执行特定操作或者动作的一个或者多个计算机程序意味着一个或者多个程序包括指令,该指令在由数据处理设备执行时使设备执行操作或者动作。
10.单独地或者组合地,前述以及其它实施例可以分别可选地包括以下特征中的一个或者多个。具体地,一个实施例组合地包括所有以下特征。
11.一种矩阵乘法部件可以实施为单元的脉动阵列。单元阵列中的每个单元可以包括:权重矩阵寄存器,该权重矩阵寄存器配置为从转置或者非转置权重移位寄存器接收权重输入;转置权重移位寄存器,该转置权重移位寄存器配置为形成水平方向接收要存储在权重矩阵寄存器中的权重输入;非转置权重移位寄存器,该非转置权重移位寄存器配置为
从垂直方向接收要存储在权重矩阵寄存器中的权重输入;以及乘法部件,该乘法部件耦合至权重矩阵寄存器并且配置为将权重矩阵寄存器的权重输入与矢量数据输入相乘以获得乘法结果。每个单元可以包括多路复用器,该多路复用器配置为在转置权重移位寄存器和非转置权重移位寄存器的权重输入之间进行选择并且将所选择的权重输入转发至权重矩阵寄存器。
12.矩阵乘法部件可以包括第一权重保持寄存器,该第一权重保持寄存器配置为保持来自转置权重移位寄存器或者非转置权重移位寄存器的权重值。
13.矩阵乘法部件可以包括第二权重保持寄存器,该第二权重保持寄存器配置为保持来自转置权重移位寄存器或者非转置权重移位寄存器的权重值。
14.权重值可以被加载到矩阵乘法部件中,在水平方向上从转置权重移位寄存器加载到第一权重保持寄存器中,并且在垂直方向上从非转置权重移位寄存器加载到第二权重保持寄存器中。
15.可以向权重矩阵寄存器加载来自第一或者第二权重保持寄存器的值。
16.在另一实施例中,一种实施为脉动阵列的矩阵乘法部件可以包括:布置在脉动阵列的列中的多个单元;脉动阵列的每一列两个权重移位寄存器链;每单元一个权重矩阵寄存器,该权重矩阵寄存器配置为存储从权重移位寄存器接收到的权重输入;以及乘法部件,该乘法部件耦合至权重矩阵寄存器并且配置为将权重矩阵寄存器的权重输入与矢量数据输入相乘以获得乘法结果。每个权重移位寄存器只连接至一个链,并且每个单元只连接至一个权重移位寄存器。
17.可以从包括权重值对的矢量寄存器在两个权重移位寄存器链上发送权重值。
18.位于每一列的顶部的保持寄存器可以在无法从矢量寄存器中获得两个权重值时保持权重值。
19.当可获得两个权重值时,两个权重值在时钟周期被移位到单元中的所述权重移位寄存器。
20.当无法获得两个权重值时:在可获得第一权重值的第一时钟周期,向保持寄存器加载第一权重值作为保持值,并且未进行移位。在下一时钟周期,当可获得第二权重值时,第二权重值和保持值通过两个移位链被移位。每个移位链使一个值移位到连接至移位链的权重移位寄存器。
21.每个移位链可以具有用于注入权重值的两个注入点,一个位于列的顶部,而另一个位于列中的第二点。矢量寄存器可以包括分别表示分离的权重值的四个8位整数的打包集合。可以在列的顶部注入四个整数中的两个整数,并且在阵列中的第二点处注入四个整数中的另外两个整数。
22.可以在特定实施例中实施本说明书中所描述的主题以实现以下优点中的一个或者多个优点。具有脉动阵列的每一列的两个权重移位寄存器链的矩阵乘法部件可以以只具有一个权重移位寄存器链的矩阵乘法部件的两倍的速率来从矢量寄存器向矩阵乘法部件传递权重。此外,具有每一列的两个权重移位寄存器链的、将权重值发送至阵列中的两个点即阵列的顶点和中点的矩阵乘法部件可以以只具有一个权重移位寄存器链的矩阵乘法部件的四倍的速率来从矢量寄存器向矩阵乘法部件传递权重。
23.此外或者可替代地,矩阵乘法部件可以具有单元,每个单元包括非转置权重移位
寄存器和转置权重移位寄存器。然后,矩阵乘法部件可以针对垂直的和水平的权重移位链使用分离的寄存器,从而使矩阵乘法部件能够按照不具有用于两个权重移位链的分离的寄存器的矩阵单元的速率的两倍来加载权重值。
24.这些权重移位加载方法可以被组合以从矩阵乘法部件获得8倍的加载时间增加,而没有每一列的两个权重移位寄存器链以及用于垂直的和水平的权重移位链的分离的寄存器。这些权重移位链和/或分离的寄存器可以被添加至矩阵乘法部件,而不会显著增加矩阵乘法部件的复杂性或者占用面积。
25.在附图和下面的描述中阐述了本说明书的主题的一个或者多个实施例的细节。本主题的其它特征、方面和优点将通过描述、附图以及权利要求书而变得显而易见。
附图说明
26.图1a示出了用于训练神经网络的示例专用硬件芯片的高级图。
27.图1b示出了计算核心的高级示例。
28.图1c示出了示例神经网络处理系统。
29.图2图示了包括矩阵乘法部件的示例核心架构。每个矩阵乘法部件是二维脉动阵列。
30.图3图示了在脉动阵列的内部的多单元的示例架构。
31.图4示出了具有每列两个权重移位寄存器链以增加加载权重值的速率的矩阵乘法部件的架构的示例。
32.图5是用于将权重值加载到给定多单元的列中的示例方法的流程图。
33.图6示出了具有每列两个权重移位寄存器链、在列中的两个点处发送权重值以增加加载权重值的速率的矩阵乘法部件的架构的示例。
34.图7示出了具有用于进行水平权重移位和垂直权重移位以增加加载权重值的速率的分离的寄存器的矩阵乘法部件的架构的示例。
35.图8示出了具有用于增加加载权重值的速率的一组保持寄存器的示例单元。
36.各个附图中的相似附图标记和标号指示相似的元件。
具体实施方式
37.可以训练具有多个层的神经网络,并且然后将其用于计算推断。例如,神经网络具有分别用值来初始化的参数。在训练期间,神经网络执行神经网络训练过程以调整神经网络的参数的值,例如,以通过使用反向传播来从参数的初始值确定参数的训练值。然后,训练过的神经网络可以计算推断,即,通过神经网络的层来处理输入以生成输入的神经网络输出。
38.例如,在给定输入的情况下,神经网络可以针对输入计算推断。神经网络通过神经网络的每个层处理输入来计算该推断。在一些实施方式中,将神经网络的层布置在序列中。
39.因此,为了从接收到的输入计算推断,神经网络接收输入,并且通过序列中的神经网络层中的每个神经网络层来处理该输入以生成推断,其中,提供来自一个神经网络层的输出作为下一神经网络层的输入。可以将针对神经网络层的数据输入例如针对神经网络的输入或者在序列中的层下面的层的输出称为针对层的激活输入。
40.在一些实施方式中,将神经网络的层布置在有向图中。即,任何特定层都可以接收多个输入、多个输出或者两者。还可以将神经网络的层布置成使得可以将层的输出作为输入发送回前一层。
41.图1a示出了用于训练神经网络的示例专用硬件芯片的高级图。如图所示,单个专用硬件芯片包括两个独立的处理器,例如,102a、102b。每个处理器102a、102b包括两个不同的核心:(1)计算核心,即超长指令字(vliw)机器(103a、103b)和(2)稀疏计算核心,即嵌入层加速器(105a、105b)。
42.针对稠密线性代数问题优化每个计算核心例如103a和103b。每个计算核心由单个超长指令字控制。每个计算核心执行其自己的超长指令字流指令。
43.示例稀疏计算核心例如105a或者105b将非常稀疏的高维数据映射到密集的低维数据中,使得其余层处理密集地打包的输入数据。例如,稀疏计算核心可以对被训练的神经网络中的任何嵌入层执行计算。
44.为了执行这种稀疏到稠密的映射,稀疏计算核心使用预先构建的查找表,该预先构建的查找表是嵌入表。例如,当存在一系列查询字作为用户输入时,将每个查询词转换为哈希标识符或者单热编码矢量。通过使用标识符作为表索引,嵌入表返回对应的稠密矢量,该稠密矢量可以是用于下一层的输入激活矢量。稀疏计算核心还可以在搜索查询字上执行化简操作以创建一个稠密的激活矢量。稀疏计算核心一起工作以执行有效的稀疏分布式查找,因为嵌入表可能很大并且不适合于专用硬件芯片中的一个专用硬件芯片的有限容量高带宽存储器。可以在2016年2月5日提交的标题为“matrix processing apparatus”的美国专利申请第15/016,486号中找到有关稀疏计算核心功能的更多细节。
45.图1b示出了计算核心(101)的高级示例。计算核心可以是并行地控制若干计算部件的机器即vliw机器。每个计算核心(101)包括:标量存储器(104)、矢量存储器(108)、标量处理部件(107)、矢量寄存器(106)和扩展矢量单元(即,矩阵乘法部件(mxu)(113)、转置部件(xu)(114)以及化简和置换部件(rpu)(116))。
46.示例标量处理器执行vliw指令获取/执行循环并且控制计算核心。在获取指令束并且对指令束进行解码之后,标量处理器本身只通过使用多个多位寄存器即标量处理器(107)和标量存储器(104)中的32个32位寄存器来执行在束的标量槽中找到的指令。标量指令集包括正常的算术运算,例如,如用于地址计算、加载/存储指令和使指令分支。其余指令槽对用于矢量处理部件或者其它扩展矢量单元(113、114、116)的指令进行编码。被解码的矢量指令被转发至矢量处理部件。
47.与矢量指令一起,标量处理器(107)可以向其它处理器和单元转发多达三个标量寄存器的值以执行操作。标量处理器还可以直接从矢量处理器中检索计算结果。然而,在一些实施方式中,示例芯片具有从矢量处理器到标量处理器的低带宽通信路径。
48.矢量指令分派器位于标量处理器和矢量处理器之间。该分派器从非标量vliw槽接收解码指令,并且将这些指令广播到矢量处理部件。针对图1c详细描述矢量处理部件。
49.示例标量处理器(107)访问小型快速的私有标量存储器(104),其由大得多但是更慢的高带宽存储器(hbm)(110)备份。同样,示例矢量处理部件访问小型快速的私有矢量存储器(108),其也由hbm(110)备份。在标量处理器(107)与标量存储器(104)或者矢量处理部件与矢量存储器(108)之间发生字粒度访问。在矢量处理器与矢量存储器之间的加载和存
储的粒度是128个32位字的矢量。在标量存储器(104)与hbm(110)以及矢量存储器(108)与hbm(110)之间发生直接存储器访问。在一些实施方式中,可以只通过标量存储器或者矢量存储器来完成从hbm(110)到处理部件(107)的存储器传递。此外,在标量存储器与矢量存储器之间可以没有直接的存储器传递。
50.指令可以指定扩展矢量单元操作。与每个执行的矢量单元指令一起,存在二维即128乘8个矢量单元,每个矢量单元可以向扩展矢量单元发送寄存器值作为输入操作数。每个扩展矢量单元采取输入操作数,执行对应的操作,并且将结果返回至矢量处理器(306)。下面将针对图4描述扩展矢量单元。
51.图1c示出了用于执行神经网络计算的示例专用集成电路100。如图所示,芯片包括两个计算核心(103a、103b)和两个稀疏计算核心(152a、152b)。
52.芯片具有共享区域,该共享区域包括至主机计算机(150)的主机接口、沿着底部的四个高带宽存储器堆栈(156a至156d)和将接口和存储器连接在一起的芯片间互连(148)以及来自其它芯片的数据。两个高带宽存储器堆栈(156a-b、156c-d)与每个计算核心(103a、103b)相关联。
53.芯片将数据存储在高带宽存储器(156c-d)中,将数据读入矢量存储器(108)和从矢量存储器(108)读出数据,并且处理数据。计算核心(103b)本身包括是被划分成两个尺寸的片上s-ram的矢量存储器(108)。矢量存储器具有地址空间,在该地址空间中,地址保持浮点数即128个,每一个为32位。计算核心(103b)还包括计算值的计算部件和控制计算部件的标量部件。
54.矢量处理部件由矢量处理部件的二维阵列即128
×
8组成,这些矢量处理部件都按照单指令多数据(simd)方式来执行相同的指令。矢量处理器具有通道和子通道,即,128个通道和8个子通道。在通道内,矢量单元通过加载并且存储指令来与彼此通信。每个矢量单元一次可以访问一个4字节值。不属于同一通道的矢量单元无法直接进行通信。这些矢量单元必须使用在下面描述的化简/置换部件。
55.计算部件包括可以用于浮点运算和整数运算两者的矢量处理部件(106)中的矢量寄存器即32个矢量寄存器。计算部件包括用于执行计算的两个算术逻辑部件(alu)(126c至126d)。一个alu(126c)执行浮点加法,而另一alu(126d)执行浮点乘法。两个alu(126c至126d)都可以执行各种其它操作,诸如,移位、掩蔽和比较。例如,计算核心(103b)可能想要将矢量寄存器v1和第二矢量寄存器v2相加,并且将结果放入第三矢量寄存器v3中。为了计算加法,计算核心(103b)在一个时钟周期内执行多次即1024次操作。通过使用这些寄存器作为操作数,矢量单元中的每个矢量单元可以在每个时钟周期同时执行两个alu指令,一个加载指令和一个存储指令。可以用标量处理器来计算加载指令或者存储指令的基地址并且将其转发至矢量处理器。每个子通道中的矢量单元中的每个矢量单元可以通过使用各种方法诸如跨步和特殊的索引地址寄存器来计算其自己的偏移地址。
56.计算部件还包括执行运算诸如平方根和倒数的扩展一元管线(eup)(116)。计算核心(103b)需要三个时钟周期执行这些运算,因为它们一次接收一个操作数。由于eup处理需要多于一个时钟周期,因此,存在用于存储结果的先进先出数据存储。当完成运算时,结果存储在fifo中。计算内核可以在稍后的时间使用分离的指令来将数据从fifo中拉出并且将其放入矢量寄存器中。随机数发生器(120)允许计算核(103b)每周期产生随机数,即,每周
期128个随机数。
57.如上所述,每个处理器具有三个扩展矢量单元:执行矩阵乘法运算的矩阵乘法部件(113);包括执行矩阵即128乘128矩阵的转置操作的转置部件(xu)(114)的交叉通道单元(xlu)以及化简和置换部件,如图1c中的分离的单元图示的,化简部件115和置换部件116。
58.矩阵乘法部件在两个矩阵之间执行矩阵乘法。矩阵乘法部件(113)接收数据,因为计算核心需要加载是将要乘以的矩阵的数的集合。如图所示,数据来自矢量寄存器(106)。每个矢量寄存器包括数,即32位数。然而,当将数据发送至矩阵乘法部件(113)以将数改变为较小的位大小时即从32位改变为16位时,可能发生浮点转换。串行器(130)确保从矢量寄存器读出数时,将二维阵列即128乘8矩阵读取为在接下来的八个时钟周期中的每个时钟周期内被发送至矩阵乘法部件(113)的128个数的集合。在矩阵乘法已经完成其计算之后,结果被解串行化(132a、132b),这意味着结果矩阵被保持若干时钟周期。例如,对于128
×
8阵列,在8个时钟周期中的每个时钟周期内保持128个数,并且然后将其推送至适当的fifo例如转置结果fifo(trf)134或者乘法结果fifo(mrf)136,使得可以在一个时钟周期内获取128
×
8个数的二维阵列,并且将其存储在矢量处理部件(106)中包括的矢量寄存器中。
59.在一段周期即128个周期内,使权重移位到矩阵乘法部件(113)中作为乘以矩阵的数。一旦已经加载了矩阵和权重,计算核心(103b)就可以向矩阵乘法部件(113)发送数的集合即128
×
8个数。集合的每一行可以乘以矩阵以每时钟周期产生若干结果即128个结果。当计算核心执行矩阵乘法时,计算核心还在后台使新的数集移位到计算核心将乘以的下一矩阵,使得当已经完成针对前一矩阵的计算过程时,下一矩阵可用。矩阵乘法部件(113)可以处理作为要乘以的矩阵中的数据的权重输入和作为要乘以矩阵的矢量中的数据的左侧数据输入,并且向矢量处理部件提供这些输出的矢量。矢量处理部件可以处理这些输出的矢量并且将处理过的输出的矢量存储到矢量存储器。例如,矢量处理部件可以向矩阵乘法部件的输出应用非线性函数以生成矢量数据值。在一些实施方式中,矢量处理部件106生成归一化值、合并值或者两者。处理过的输出的矢量可以用作矩阵乘法部件113的左侧数据输入,例如,用于神经网络中的后续层。
60.转置部件对矩阵进行转置。转置逻辑部件(114)接收数并且对它们进行转置,使得用处于另一维的数来对通道上的数进行转置。在一些实施方式中,矢量处理器包括128
×
8个矢量部件。因此,为了对128
×
128矩阵进行转置,全矩阵转置需要十六个单独的转置指令。一旦完成转置,转置矩阵就将可用。然而,需要显式指令以将转置的矩阵移动到矢量寄存器文件中。
61.化简/置换部件(或者部件115、116)通过支持各种操作诸如置换、通道旋转、旋转置换、通道化简、置换通道化简和分段的置换通道化简来解决交叉通道通信的问题。如图所示,这些计算是分离的,然而,计算核心可以使用一个或者另一个计算,或者一个计算链接至另一个计算。化简部件(115)化简每行数并且将数馈送到置换部件(116)中。置换部件在不同的通道之间改变数据。转置部件、化简部件、置换部件和矩阵乘法部件分别需要多于一个时钟周期来完成。因此,每个部件具有与之相关联的fifo,使得可以将计算的结果推送至fifo,并且可以在稍后的时间执行分离的指令以将数据从fifo拉出并且放入矢量寄存器中。通过使用fifo,计算核心不需要在冗长的操作的持续时间内保留多个矢量寄存器。如图所示,部件中的每个部件从矢量处理部件(106)中的矢量寄存器获取数据。
62.计算核心使用标量部件来控制计算部件。标量部件具有两个主要功能:(1)执行循环计数和寻址以及(2)生成直接存储器地址(dma)请求,使得dma控制器在后台在高带宽存储器(156c至156d)与矢量存储器(108)之间移动数据,并且然后移动至与示例系统中的其它芯片的芯片间连接(148)。标量部件包括:指令存储器(104)、指令解码和发布(102)、包括标量寄存器即32位的标量处理部件(107)、标量存储器(104)和用于每时钟周期执行两次操作的两个alu(126a、126b)。标量部件可以将操作数和立即值提供到矢量运算中。可以从指令解码和发布(102)发送每个指令作为包括在矢量处理部件(106)中的矢量寄存器上执行的指令的指令束。每个指令束是超长指令字(vliw),其中,每个指令为若干个位宽、被划分成若干指令字段。
63.图2图示了包括矩阵乘法部件(mxu)201a和201b的示例核心架构200。每个mxu是二维脉动阵列。连接该阵列以执行矩阵乘法运算。mxu将128个元素的矢量乘以预先加载的128
×
128矩阵,每时钟周期一次乘法具有恒定吞吐量。
64.每个mxu可以具有128行和128列。mxu可以被划分成相同的块,被称为瓦片。例如,mxu可以被划分成32个瓦片,该32个瓦片中的每个瓦片包括32行乘16列。每个瓦片可以进一步被划分成乘加子部件单元。每个单元采取矢量数据输入操作数,将该操作数乘以存储的权重以获得结果,并且将该结果添加到部分和以产生新的部分和。在一些实施方式中,子部件单元可以被分组到较大的多单元中,即,2
×
2乘加子部件单元阵列或者4
×
4乘加子部件单元阵列,被称为sedecim单元。代替以每时钟周期一个的速率来将输入数据从一个乘加子部件单元移动至下一个,数据可以每时钟周期一个多单元来在脉动阵列上移动。
65.在开始一系列矢量矩阵乘法之前,需要将矩阵预加载到mxu中。将该矩阵的数据称为“权重”数据。由连接至mxu的总线通过源总线来将权重矩阵传递至mxu,并且使其移位到权重移位寄存器中。然后将权重移位寄存器的内容加载到权重矩阵寄存器中,使得可以开始矩阵乘法。针对图3至图8更详细地描述该权重加载过程。
66.如在图2中图示的,将每个mxu例如113a和113b连接至三条总线:用于非转置权重(230a、230b)的第一源总线、用于转置权重(220a、220b)的第二源总线和用于要乘以存储在mxu中的矩阵的矢量数据的左侧总线(210a、210b)。通过附接至mxu的边缘的接线来将mxu连接至总线。还将每个转置部件(xu)例如114a和114b连接至第一源总线和第二源总线。
67.第一和第二源总线是包括从矢量处理部件发送的数据以由xu或者mxu消耗的多用途总线。在矢量处理数据路径中发生数据处理,该矢量处理数据路径包括矢量寄存器206、串行化处理部件202和选择部件204。存在矢量处理部件可以在总线上发送权重的若干方式。可以正常地发送权重,“高”或者“低”。将每通道八个32位浮点数(每子通道一个)取整为截断浮点数即16位浮点数。将这些值打包成四对,并且在8个周期内每隔一个周期将其发送至mxu。正常的“高”和“低”之间的差异是矢量处理部件进行浮点32到截断浮点数转换的方式。可以将权重打包意味着每通道八个32位值中的每个32位值包括一对打包的截断浮点数。在八个连续的周期内每一个周期通过使用源总线来向mxu发送十六个值而不是八个值。在奇数周期期间,将每个子通道的低16位发送至mxu,但是在偶数周期期间,发送每个子通道的高16位。此外或者可替代地,可以按照字节来发送权重。每个32位操作数包括四个8位带符号2的补码整数的打包集合。将每个字节转换为修改过的符号带大小值。在八个连续的周期内通过源总线来将这些值发送至mxu。
68.可以通过使用第一或者第二源总线来将权重作为非转置或者转置指令进行发送,并且可以使权重移位到权重移位寄存器中。当利用加载操作来触发权重移位寄存器的内容时,如下面描述的那样将权重移位寄存器的内容加载到权重矩阵寄存器中。从权重移位寄存器到权重矩阵寄存器的负载路径还是利用字节模式数据来进行从修改过的符号带大小到截断浮点数的转换的路径。负载控制总线指示是否要进行该转换。
69.根据正执行的指令,来自源总线的32位值可以包括一对打包的16位浮点值,其中,值处于表示早先的(在时间上)值的位[15:0],或者包括修改过的符号带大小格式的四个8位整数的打包集合,其中,位处于表示最早的(在时间上)值的位[7:0],而其它值按顺序往后。当mxu通过总线接收到数据时,数据值均匀地分布在mxu上,其中,在左侧为0值,并且在右侧为值127。
[0070]
左侧(lhs)数据总线以特定格式例如截断浮点数)提供128个16位浮点数以乘以存储在连接的mxu中的矩阵。lhs数据总线的数据来自矢量处理部件并且通过转置部件例如114a和114b。当lhs输入到达mxu时,数据值均匀地分布在mxu上,其中,在左侧为0值,并且在右侧为值127。
[0071]
矩阵乘法的结果均匀地分布在mxu上,并且将其从mxu发送至矩阵结果fifo(mrf),例如,136a和136b。将来自xu的结果发送至对应的转置结果fifo(trf),例如,134a和134b。
[0072]
图3图示了在矩阵乘法部件的内部的多单元的示例架构。如上面讨论的,矩阵乘法部件是二维脉动阵列。该阵列包括可以被分组到多单元中的多个乘加子部件。在一些实施方式中,脉动阵列的第一维与单元的列对应,而脉动阵列的第二维与单元的行对应。脉动阵列可以行多于列,列多于行,或者列数和行数相等。本说明书描述了针对列或者在垂直上的特定处理。然而,不同的设计可以执行针对行或者在水平上的处理。
[0073]
在图示的示例中,左侧数据寄存器315a、315b向阵列的行发送了矢量数据输入。权重移位链301a和301b向阵列的列发送了权重输入值,并且权重移位链302a和302b向阵列的行发送了权重输入值。移位链是有线路径,沿着该有线路径,可以传递值,例如,从存储器传递至矩阵乘法部件内的各个寄存器中的每个寄存器。
[0074]
每个权重移位寄存器305设计为沿着权重移位寄存器305的链通过源总线来使其权重内容值移位。在移入数据之后,并行复制操作确保将所有数据从权重移位寄存器305复制到对应的权重矩阵寄存器325。当数据处于权重矩阵寄存器325中时,数据用于任意数量的乘法循环。在此期间,可以(并且通常)在准备下一乘法集合时在后台使更多的权重移位到权重寄存器305中。
[0075]
左侧数据寄存器315a、315b可以接收矢量数据输入。每个左侧数据寄存器针对一个时钟周期在每个时钟周期保持一个lhs数据项。由多单元接收的每个矢量数据输入可以在多单元的对应左侧寄存器诸如左侧数据寄存器315a、315b中自由流动。左侧数据寄存器存储矢量数据输入,该矢量数据输入可以由矢量寄存器通过由位于给定多单元的左边的相邻多单元提供,这取决于多单元在阵列内的位置。例如,如果多单元300位于矩阵乘法部件的脉动阵列内的最左边的位置,则矢量数据输入由矢量寄存器提供。矢量寄存器可以向多单元300提供多个不同的矢量数据输入,其中,每个接收到的矢量数据输入然后可以由不同的一个左侧数据寄存器315存储。每一行每时钟周期接收一个值,不管被分组到多单元中的行的数量。
[0076]
每个左侧寄存器可以沿着多单元阵列的第一维耦合至单元。通过图3中的虚线指示了左侧寄存器至单元的连接。例如,多单元中的左侧数据寄存器315a(左侧数据寄存器)耦合至第一行的单元350a和350c。同样,多单元中的左侧数据寄存器315b(第二左侧寄存器)耦合至第二行的单元350b和350d。每个左侧寄存器315将存储的矢量数据传递至左侧寄存器耦合至其的单元350。因此,对于沿着第一维(例如,沿着给定行或者沿着给定列)延伸的给定数量的单元,可以将矢量数据输入传递至多单元中的所有单元,而不仅仅是单个单元,从而使矢量数据输入快速分布在单元阵列中,从而提高了多单元的操作的效率。
[0077]
还可以将多个矢量数据输入发送至相邻的左侧寄存器,使得可以在阵列的另一多单元中使用多个矢量数据输入。该过程允许使矢量数据输入移位以供在阵列的另一特定多单元中使用。
[0078]
多单元300中的每个单元350包括存储的权重值。在开始矩阵乘法过程之前,通过使权重移位到脉动阵列的单元中来加载权重。提供了专用链和权重移位寄存器以便进行权重移位,使得可以与执行先前的矩阵乘法处理同时使新权重移位。可以按照降低整个矩阵乘法运算处理的时延的方式来将权重输入加载到多单元中。
[0079]
如上面讨论的,权重移位链301、302可以从存储器部件例如图1所示矢量存储器108接收权重输入。移位链可以向与多单元300相关联的权重矩阵寄存器325发送多个对应的权重输入。
[0080]
在一些实施方式中,权重移位寄存器沿着一个维度例如向右在阵列中使矢量数据输入移位,同时沿着一个或者两个维度例如向右或者向下移动在阵列中使权重输入移位。例如,在一个时钟周期内,在多单元300处的多个矢量数据输入中的每个矢量数据输入可以移位到同一行中的下一多单元中的对应左侧数据寄存器。在每个时钟周期,水平数据(左侧数据)和垂直数据(部分和)分别每时钟周期移动一个多单元。权重仅在系统指示时进行移位,并且取决于实施方式和执行的指令,可以移位1行、2行或者4行(或者列)。
[0081]
多路复用器330从第一移位链301或者第二移位链302的权重移位寄存器305中选择权重,并且将所选择的输入转发到单个行中进入权重矩阵寄存器325。虽然多路复用器330被示出为在单元350边界线的外部,但是在一些实施方式中,多路复用器330存在于单元350内。
[0082]
在时钟周期,每个多单元可以处理多个给定权重输入和多个给定矢量数据输入以生成多个累加输出。通常,处理包括乘法运算以将矢量数据输入与存储的权重相乘。还可以沿着与给定权重输入相同的维度来将累加输出传递至相邻的多单元。在一些实施方式中,在给定时钟周期期间使权重移位多于一个多单元以从一次卷积计算转变到另个卷积计算。
[0083]
可以沿着与权重输入相同的列例如朝着阵列中的列的底部来传递累加输出。在一些实施方式中,部分和寄存器310a、311a将部分和值传递到先前的多单元中的多单元中。阵列可以包括存储来自多单元的每个列的累加输出的部分和寄存器310b、311b。对于多单元的每一列,将由列中的子部件单元产生的乘积与来自上面的多单元的传入部分和组合,并且然后向前发送作为下一部分和。对于某些多单元,例如,脉动阵列的底部列中的多单元,累加输出可以包括可以被传递至矢量计算部件的最终累加值。在一些实施方式中,直接将最终累加值从阵列的底部多单元传递至矢量计算部件,而在其它实施方式中,首先将最终累加值存储在存储器中,或者在将其发送至矢量计算部件之前由不同的组件处理。
[0084]
图4示出了矩阵乘法部件的多单元的架构的示例,该矩阵乘法部件具有多单元子阵列的每一列的两个权重移位寄存器链以增加加载权重值的速率。如在图4中示出的,单元435a和单元435b组成多单元400的一列,并且单元435c和单元435d组成多单元400的第二列。每一列具有两个权重移位寄存器链。给定列中的每个单元配置为仅从列中的两个链中的一个链接收权重输入。如在图4中示出的,一个链401连接至偶数行中的权重移位寄存器,并且一个链402连接至奇数行中的权重移位寄存器。在每个周期,两个新的值被移位到每一列中,并且所有的现有权重值都向下移位两行。因此,可以按照不具有脉动阵列的两个权重移位寄存器列链的矩阵乘法部件的速率的两倍来将权重加载到多单元中。
[0085]
如图所示,从矢量寄存器403移入权重值。在实施方式中,矩阵乘法部件的每一列具有一个矢量寄存器403。虽然在图3的示例中,将矢量寄存器403图示在矩阵乘法部件的顶部,但是矢量寄存器403可以物理地位于相对于矩阵乘法部件的各种位置,例如,在部件的底部。
[0086]
矢量寄存器403可以保持比由矩阵乘法部件进行操作的值大一些或者小一些的寄存器值。例如,寄存器可以保持n位值,而矩阵乘法部件对n/2位值进行操作。在一些实施方式中,每个矢量寄存器保持32位值,而矩阵乘法部件对16位值进行操作。示例矩阵乘法部件具有用于将寄存器的每个32位值视为16位值对的模式,其中,对中的一个16位值被发送至第一权重移位链401,而对中的第二个16位值被发送至第二权重移位链402。虽然每一列示出了一个矢量寄存器403,但是每多单元可能只有一个矢量寄存器403。此外或者可替代地,每个链可以连接至向链提供单个16位权重值的分离的矢量寄存器303。在这种情况下,矢量寄存器403中的32位浮点值被转换为16位值。
[0087]
在一些实施方式中,可能无法获得权重值以在没有每一列的两个移位链的情况下按照矩阵乘法部件的速率的两倍来发送值。为了处理这种情况,将保持寄存器445放置在每一列的顶部以保持权重值,直到可获得两个权重值,一个用于每个垂直移位链。在只可获得一个权重值的第一时钟周期,将可获得的权重值复制到保持寄存器445中。在可获得新的权重值的下一时钟周期,将通过一个权重移位链来使保持寄存器中的权重值从保持寄存器移位到权重移位寄存器,并且将通过第二权重移位链来使在时钟周期可获得的新权重值移位到第二权重移位寄存器。
[0088]
水平移位链405可以如上面描述的那样向单元提供权重值。在一些实施方式中,可以存在用于按照与上面描述的垂直移位链401、402相同的方式来减少权重加载时延的两个水平移位链。
[0089]
多路复用器430确定发送至单元内的权重矩阵寄存器的权重值来自水平移位链405还是垂直移位链401b或者402b。一旦已经将权重值加载到权重矩阵寄存器中并且左侧数据寄存器415提供了矢量数据输入,单元435就可以执行矩阵乘法。
[0090]
图5是针对将权重值加载到给定多单元的列中的示例过程500的流程图。接口从矢量寄存器接收至少一个权重值(501)。
[0091]
接口确定是否可获得多个权重值(502)。
[0092]
如果可获得多个权重值,则接口在时钟周期通过移位链来使权重值移位到多单元内的单元435中的权重移位寄存器(504)。
[0093]
接口继续加载权重值,直到将来自权重矩阵的所有权重值都加载到矩阵乘法部件
中(506)。
[0094]
如果在同一时钟周期无法获得两个权重值,则在可获得单个权重值的第一周期,向保持寄存器445加载可获得的权重值,并且不进行移位(503)。
[0095]
在下一周期,当另一权重值变得可获得时,接口通过两个移位链来使新的值和保持在保持寄存器445中的值移位到多单元中的权重移位寄存器(505)。
[0096]
然后,接口继续加载权重值,直到将来自权重矩阵的所有权重值都加载到矩阵乘法部件中(506)。
[0097]
在每周期无法获得多个权重值的情况下,接口仅每隔一个周期激活移位链。
[0098]
图6示出了具有每一列的两个权重移位寄存器链、在列中的两个点处注入权重值以将加载权重值的速率增加四倍的矩阵乘法部件的架构的示例。如在图3中示出的,矩阵乘法部件具有脉动阵列的每一列的两个移位链。每个单元650包括只连接至一个移位链的移位寄存器635。如上面讨论的,矢量寄存器603可以保持比由矩阵乘法部件进行操作的值大一些或者小一些的寄存器值。例如,寄存器可以保持n位值,而矩阵乘法部件对n/2位值进行操作。矢量寄存器中的值可以被分离或者按照某种方式被变换以与矩阵乘法部件所期望的值大小相匹配。
[0099]
在一种实施方式中,每个寄存器603可以保持32位值。每个矢量寄存器603中的值被视为四个8位带符号整数的打包集合,每个8位带符号整数是分离的权重值。如在图3中图示的那样在两个16位链上发送每个8位带符号整数。然而,将整数发送至脉动阵列中的每一列的两个注入点680、681。将整数发送至顶部(680a、6801a)以及沿着阵列向下的另一点(680b、680b)。具有如描述的多个注入点的实施例可以与本文讨论的其它实施例和特征组合。
[0100]
在一些实施方式中,如果将整数发送至沿着阵列向下在中间的点,则不需要额外的接线来注入整数,因为从矢量寄存器到阵列的顶部的链从底部到顶部遍历阵列的长度。在每一列的顶部,将整数中的两个整数转换为阵列所使用的格式的16位浮点值,然后将该16位浮点值注入到如上面描述的两个权重移位链(680a、681a)中。移位链在中点被多路复用器中断,并且在该点处的第二整数到浮点转换器集合采取每个32位值中的另外两个整数,对该另外两个整数进行转换,并且然后在该点(680b、681b)处注入该另外两个整数。例如,可以将32位字划分成8位的四个相等部分:a、b、c和d。权重接口可以将部分a和部分b发送至阵列的顶部,并且将它们转换为16位值以由矩阵乘法部件进行操作。权重接口还可以经由多路复用器来将部分c和部分d发送至阵列的中点。在该实施方式中,不将部分c和部分d发送至阵列的顶部,而是在移位链上的中点处将部分c和部分d注入到单元的权重移位寄存器中。在移位链的中点处存在多路复用器,使得从注入点而不是从移位链上的前一权重移位寄存器中选择权重值。
[0101]
将第二对权重注入到阵列中的点可能不是中点,而是某一其它点。例如,其可以是沿着阵列向下在四分之一处的点。在这种情况下,使在顶部注入的权重移位到矩阵乘法部件的第一个四分之一单元和矩阵乘法部件的第三个四分之一单元,并且使在四分之一点处注入的权重移位到矩阵乘法部件的第二个和第四个四分之一单元。该过程需要另外的接线,但是允许权重在前一次矩阵乘法结束时更快地开始移位。
[0102]
如图所示,每一列出现两个移位链。然而,在一些实施方式中,此外或者可替代地,
两个移位链可以每一行地出现,其中,每移位链具有两个注入点。
[0103]
图7示出了具有用于进行转置权重移位和正常的非转置权重移位以增加加载权重值的速率的分离的寄存器的矩阵乘法部件的架构的示例。每个多单元700包括多个单元750,并且可以从垂直或者水平方向加载有权重值。在垂直方向上从顶部加载权重引起权重矩阵存储在矩阵乘法部件中。按照相同的顺序但是从侧面加载相同的权重引起权重矩阵的转置阵存储在矩阵乘法部件中。在神经网络系统训练中,必须在训练算法的不同步骤中加载非转置权重矩阵和转置权重矩阵。当从顶部沿垂直方向加载权重时,使权重值在单元中向下移位。当在水平方向上从左边加载权重时,使权重值在多单元700中向右移位。图7图示了连接至正常的移位寄存器705的正常的移位链701a、701b。转置的移位链702a、702b连接至转置的移位寄存器705。多路复用器730确定从哪个移位链701、702加载权重矩阵寄存器725。
[0104]
在一些实施方式中,花费n个周期来使一个权重集合移位到矩阵乘法部件的权重矩阵寄存器中。第二权重集合可以在加载了第一权重值之后开始其移位n/2个周期,并且可以每n/2个周期将新的权重集合从移位寄存器加载到权重矩阵寄存器中。
[0105]
在一些实施方式中,并不总是需要使用128
×
128个权重的整个集合。可以将处于未使用过的位置的权重设置为零,从而使权重矩阵有效地减小。然后,矩阵乘法部件不需要使数据移位到权重移位寄存器的所有行或者所有列中。每个权重移位指令将使8行数据移位到脉动阵列中,或者对于转置的加载,将使8列数据移位到脉动阵列中。十六个权重移位指令加载整个128乘128矩阵,替换所有先前的数据。当将数据从权重移位寄存器复制到对应的权重矩阵寄存器时,每个权重移位寄存器被清空。使新的数据移位到权重移位寄存器中可以在该加载和清空信号开始传播之后立即开始。对于在加载和清空波阵面下方和右边的所有单元,禁止权重移位信号,使得数据在有机会加载之前不会移位。由于旧数据被完全清除,因此,不需要进行考虑数据行或者数据列的移入。将只向移位寄存器的顶部(或者左边)部分填充新的数据,而其余部分将保持为零,从而导致会忽略针对这些行的传入数据(或者来自这些列的输出数据为零)。
[0106]
图8示出了具有用于增加加载权重值的速率的一组保持寄存器的示例单元800。单元800包括用作已经移入的多个权重集合的暂时存储装置的一个或者多个权重集合保持寄存器。代替或附加于将一个权重移位寄存器集合805a的值复制到权重矩阵寄存器825,可以将一个权重移位寄存器集合805a的值复制到一个权重集合保持寄存器845a。代替或附加于将第二权重移位寄存器集合805b的值复制到权重矩阵寄存器825,可以将第二权重移位寄存器集合805b的值复制到第二权重集合保持寄存器845b中。在要将一个权重集合值加载到权重矩阵寄存器中时,可以从保持寄存器集合845中的保持寄存器集合中而不是直接从权重移位寄存器805a、805b中获取该权重集合值。该过程允许在使一个权重集合值移位到阵列中之后不止一次加载该权重集合值。例如,如果算法要求在两个权重集合之间进行切换,则可以在加载之间使来自一个移位链的权重值移位到保持寄存器。该过程还允许权重移位的定时与权重加载分离。例如,当新的权重集合值开始每n/c个周期进行移位时,可以同时使两个权重集合值移位,并且当将第一组加载到权重矩阵寄存器时,将另一组移动至权重保持寄存器。在n/2个另外的周期之后,将第二组从保持寄存器加载到权重矩阵寄存器。
[0107]
在一些实施方式中,图4和/或图6所示两个移位链可以与添加正常的和转置的移
位寄存器组合以增加可以在给定时间加载到矩阵乘法部件中的权重值的量。
[0108]
可以在数字电子电路系统中、有形体现的计算机软件或者固件中、计算机硬件中(包括本说明书所公开的结构及其结构等效物)或者它们中的一个或者多个的组合中实施本说明书中描述的主题的实施例和功能操作。可以将本说明书中描述的主题的实施例实施为一个或者多个计算机程序,即,编码在有形非暂时性存储介质上以由数据处理设备执行或者控制数据处理设备的操作的计算机程序指令的一个或者多个模块。计算机存储介质可以是机器可读存储装置、机器可读存储基板、随机或者串行存取存储器装置或者它们中的一个或者多个的组合。可替代地或者另外,程序指令可以编码在人工生成的传播信号上,例如,机器生成的电气、光学或者电磁信号,生成该信号是为了对信息进行编码以便传输至合适的接收器设备供数据处理设备执行。
[0109]
术语“数据处理设备”是指数据处理硬件并且囊括了用于处理数据的所有种类的设备、装置和机器,包括:例如,可编程处理器、计算机或者多个处理器或者计算机。该设备还可以是或者进一步包括专用逻辑电路,例如,fpga(现场可编程门阵列)或者asic(专用集成电路)。除了硬件之外,该设备可以可选地包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或者它们中的一个或者多个的组合的代码。
[0110]
可以用任何形式的程序语言包括编译语言或者解释语言或者陈述性语言或者程序语言来编写计算机程序,其也可以被称为或者描述为程序、软件、软件应用、app、模块、软件模块、脚本或者代码,并且可以按照任何形式包括作为独立式程序或者模块、组件、子例程或者适合用于计算环境的其它部件来部署计算机程序。程序可以但并非必须与文件系统中的文件对应。可以将程序存储在保持其它程序或者数据例如存储在标记语言文档中的一个或者多个脚本的文件的一部分中,或者存储在专用于所探讨中的程序的单个文件中,或者存储在多个协作文件例如存储一个或者多个模块、子程序或者部分代码的文件中。可以将计算机程序部署为在一个计算机上执行或者在位于一个站点处或者分布在多个站点中并且通过数据通信网络互相连接的多个计算机上执行。
[0111]
可以通过一个或者多个可编程计算机来执行本说明书中描述的过程和逻辑流,该一个或者多个可编程计算机执行一个或者多个计算机程序以通过操作输入数据并且生成输出来执行功能。还可以通过专用逻辑电路系统例如fpga或者asic或者专用逻辑电路系统和一个或者多个编程计算机的组合来执行处理和逻辑流。
[0112]
适合于执行计算机程序的计算机可以基于通用或者专用微处理器或者两者或者任何其它种类的中央处理部件。一般而言,中央处理部件将接收来自只读存储器或者随机存取存储器或者两者的指令和数据。计算机的必要元件是:用于进行或者执行指令的中央处理部件和用于存储指令和数据的一个或者多个存储器装置。中央处理部件和存储器可以由专用逻辑电路系统补充或者可以并入该专用逻辑电路系统中。一般而言,计算机还将包括用于存储数据的一个或者多个海量存储装置例如磁盘、磁光盘或者光盘,或者计算机可以操作地耦合以接收来自该海量存储装置的数据或者将数据传输至该海量存储装置或者进行两者。然而,计算机不需要具有这种装置。此外,计算机可以嵌入在另一装置中,例如,移动电话、个人数字助理(pda)、移动音频或者视频播放器、游戏机、全球定位系统(gps)接收器或者便携式存储装置例如通用串行总线(usb)闪存驱动,仅举数例。
[0113]
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器装置,包括:例如,半导体存储器装置例如eprom、eeprom和闪速存储器装置、磁盘例如内部硬盘或者可移动盘、磁光盘、cd-rom盘和dvd-rom盘。
[0114]
为了提供与用户的交互,可以在计算机上实施本说明书中描述的主题的实施例,该计算机具有:用于向用户显示信息的显示装置,例如,crt(阴极射线管)或者lcd(液晶显示器)监视器;以及键盘和指向装置,例如,鼠标或者轨迹球,用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈,例如,视觉反馈、听觉反馈或者触觉反馈;并且可以用任何形式包括声输入、语音输入或者触觉输入来接收来自用户的输入。另外,计算机可以通过向用户所使用的装置发送文档和从该装置接收文档,例如通过响应于从web浏览器接收到的请求而向用户的装置上的web浏览器发送网页来与用户进行交互。而且,计算机可以通过向个人装置例如智能电话发送文本消息或者其它形式的消息,运行消息传送应用并且又从用户接收响应消息来与用户进行交互。
[0115]
可以将本说明书中描述的主题的实施例实施在包括后端组件的计算系统(例如,作为数据服务器)或者包括中间件组件的计算系统(例如,应用服务器)或者包括前端组件的计算系统(例如,具有图形用户界面、web浏览器或者app的用户计算机,用户可以通过该图形用户界面、该web浏览器或者该app来与本发明中所描述的主题的实施方式交互)或者包括一个或者多个这种后端组件、中间件组件或者前端组件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信例如通信网络)来将系统的组件相互连接。通信网络的示例包括:局域网(“lan”)和广域网(“wan”),例如,互联网。
[0116]
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。在一些实施例中,服务器向用户装置传输数据例如html页面,例如,为了向与充当客户端的装置进行交互的用户显示数据和接收来自该用户的用户输入。可以在服务器处从装置接收在用户装置处生成的数据例如用户交互的结果。
[0117]
实施例1是一种实施为单元的脉动阵列的矩阵乘法部件,单元阵列中的每个单元包括:配置为从转置或者非转置权重移位寄存器接收权重输入的权重矩阵寄存器;配置为从水平方向接收要存储在权重矩阵寄存器中的权重输入的转置权重移位寄存器;配置为从垂直方向接收要存储在权重矩阵寄存器中的权重输入的非转置权重移位寄存器;以及耦合至权重矩阵寄存器并且配置为将权重矩阵寄存器的权重输入与矢量数据输入相乘以获得乘法结果的乘法部件。
[0118]
实施例2是根据实施例1的矩阵乘法部件,其中,每个单元进一步包括:配置为在转置权重移位寄存器和非转置权重移位寄存器的权重输入之间进行选择并且将所选择的权重输入转发至权重矩阵寄存器的多路复用器。
[0119]
实施例3是根据实施例1或者2的矩阵乘法部件,进一步包括配置为保持来自转置权重移位寄存器或者非转置权重移位寄存器的权重值的第一权重保持寄存器。
[0120]
实施例4是根据实施例1至3中任一实施例的矩阵乘法部件,进一步包括配置为保持来自转置权重移位寄存器或者非转置权重移位寄存器的权重值的第二权重保持寄存器。
[0121]
实施例5是根据实施例1至4中任一实施例的矩阵乘法部件,其中,将权重值从转置
权重移位寄存器加载到第一权重保持寄存器中,并且从垂直方向将权重值加载到第二权重保持寄存器中。
[0122]
实施例6是根据实施例1至5中任一实施例的矩阵乘法部件,其中,向权重矩阵寄存器加载来自第一或者第二权重保持寄存器的值。
[0123]
实施例7是一种实施为脉动阵列的矩阵乘法部件,包括:
[0124]
布置在脉动阵列的列中的多个单元;脉动阵列的每一列两个权重移位寄存器链;其中,每个权重移位寄存器只连接至一个链,并且每个单元只连接至一个权重移位寄存器;每单元一个权重矩阵寄存器,该权重矩阵寄存器配置为存储从权重移位寄存器接收到的权重输入;以及耦合至权重矩阵寄存器并且配置为将权重矩阵寄存器的权重输入与矢量数据输入相乘以获得乘法结果的乘法部件。
[0125]
实施例8是根据实施例7的矩阵乘法部件,其中,从包括权重值对的矢量寄存器在两个权重移位寄存器链上发送权重值。
[0126]
实施例9是根据实施例7或者8的矩阵乘法部件,其进一步包括位于每一列的顶部的保持寄存器以在无法从矢量寄存器中获得两个权重值时保持权重值。
[0127]
实施例10是根据实施例7至9中任一实施例的矩阵乘法部件,其中,当可获得两个权重值时,两个权重值在时钟周期被移位到单元中的所述权重移位寄存器。
[0128]
实施例11是根据实施例7至10中任一实施例的矩阵乘法部件,其中,当无法获得两个权重值时:在可获得第一权重值的第一时钟周期,向保持寄存器加载第一权重值作为保持值,并且未进行移位;以及在下一时钟周期,当可获得第二权重值时,第二权重值和保持值通过两个移位链被移位到连接至移位链的权重移位寄存器,每个移位链使一个值移位。
[0129]
实施例12是根据实施例7至11中任一实施例的矩阵乘法部件,其进一步包括:每个移位链具有用于注入权重值的两个注入点,一个位于列的顶部,而另一个位于列中的第二点。
[0130]
实施例13是根据实施例7至12中任一实施例的矩阵乘法部件,其进一步包括:包括分别表示分离的权重值的四个8位整数的打包集合的矢量寄存器。
[0131]
实施例14是根据实施例7至13中任一实施例的矩阵乘法部件,其进一步包括:在列的顶部注入四个整数中的两个整数,并且将四个整数中的另外两个整数注入到阵列中的第二点。
[0132]
虽然本说明书包括许多具体实施细节,但是不应该将这些细节视为对任何发明或者可能被要求的内容的范围的限制,而是作为可以针对特定发明的特定实施例的特征的描述。在本说明书中在分离实施例的背景下描述的某些特征还可以组合地实施在单个实施例中。相反,在单个实施例的背景中描述的各种特征也可以单独地或者按照任何合适的子组合实施在多个实施例中。此外,虽然上文可能将特征描述为以某些组合来起作用并且最初甚至同样地对该特征进行了要求,但是在一些情况下,可以从组合中删除来自所要求的组合的一个或者多个特征。并且所要求的组合可以指向子组合或者子组合的变化。
[0133]
同样,虽然在附图中按照特定顺序示出了操作,但是不应该将其理解为需要按照所述的特定顺序或者按照相继的顺序来进行这种操作,或者需要进行所有图示的操作以实现期望的结果。在某些情况下,多任务处理和并行处理可以是有利的。此外,不应该将在上述实施例中的各种系统模块和组件的分离理解为在所有实施例中需要这种分离,并且应该
理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品中。
[0134]
已经描述了本主题的特定实施例。其它实施例在以下权利要求书的范围内。例如,可以按照不同的顺序来执行权利要求书中阐述的动作,并且仍然实现期望的结果。作为一个示例,在附图中描绘的过程不一定需要所示的特定顺序或者相继顺序,以实现期望的结果。在一些情况下,多任务处理和并行处理可以是有利的。

技术特征:
1.一种布置在矩阵乘法部件的阵列中的多个单元中的单元,所述单元包括:权重移位寄存器,被配置为经由两个移位链接收神经网络的权重值,其中所述权重移位寄存器中的每个权重移位寄存器仅连接到所述两个移位链路中的一个移位链;耦合到所述权重移位寄存器的权重矩阵寄存器,所述权重矩阵寄存器被配置为存储从所述权重移位寄存器接收的权重值;和耦合到所述权重矩阵寄存器的乘法部件,所述乘法部件被配置为从所述权重矩阵寄存器接收所述权重值中的至少一个权重值,所述乘法部件被配置成从矢量寄存器接收数据输入,所述乘法部件被配置成将所述至少一个权重值与所述数据输入相乘以确定乘法结果。2.根据权利要求1所述的单元,其中,所述阵列是二维阵列。3.根据权利要求1所述的单元,其中,所述多个单元被布置在所述阵列的多个列中。4.根据权利要求1所述的单元,其中:当所述权重值能够从所述矢量寄存器获得时,经由所述两个移位链,将所述权重值从所述矢量寄存器成对地传输到所述权重移位寄存器;和当所述权重值不能从所述矢量寄存器获得时,从保持寄存器接收所述权重值。5.根据权利要求4所述的单元,其中:当所述权重值能够从所述矢量寄存器获得时,在时钟周期上将所述权重值中的至少一对移位到所述权重移位寄存器。6.根据权利要求4所述的单元,其中当所述权重值不能从所述矢量寄存器获得时:在所述权重值中的第一权重值变为能够获得的第一时钟周期上,向所述保持寄存器加载所述第一权重值作为保持值,在所述第一时钟周期没有经由所述两个移位链传输所述保持值;和在随后时钟周期上,当所述权重值中的第二权重值变为能够获得时,所述第二权重值和所述保持值经由两个移位链被传输到所述权重移位寄存器,所述两个移位链路中的每个移位链传输对应的保持值。7.根据权利要求4所述的单元,其中,所述矢量寄存器被配置为将所述权重值存储为四个8位整数的打包集合。8.根据权利要求7所述的单元,其中:所述两个移位链中的每个移位链在所述移位链上的不同位置处具有两个注入点,以用于注入所述权重值,所述两个注入点是第一注入点和第二注入点;所述四个8位整数中的两个是在所述第一注入点处注入的;和所述四个8位整数中的另外两个是在所述第二注入点注入的。9.根据权利要求1所述的单元,其中:当所述权重值是在所述权重矩阵寄存器中时,由所述乘法部件使用所述权重值来计算额外的乘法结果;和在计算所述附加乘法结果期间,在准备在所述附加乘法结果之后计算进一步的乘法结果时,将附加权重值传输到所述权重移位寄存器中。10.一种由布置在阵列中的多个单元中的单元执行的方法,所述方法包括:通过所述单元内的权重移位寄存器,经由两个移位链接收神经网络的权重值;
通过所述权重移位寄存器,向所述单元内的权重矩阵寄存器传输所述权重值;通过所述权重矩阵寄存器,存储所述权重值;通过所述权重矩阵寄存器,将所述权重值中的至少一个权重值传输到所述单元内的乘法部件;通过所述乘法部件从矢量寄存器接收数据输入;和通过耦合到所述权重矩阵寄存器的乘法部件,将所述至少一个权重值与所述数据输入相乘。11.根据权利要求10所述的方法,其中,所述阵列是二维阵列。12.根据权利要求10所述的方法,其中,所述多个单元被布置在所述阵列的多个列中。13.根据权利要求10所述的方法,其中,通过所述权重移位寄存器接收所述权重值包括:当所述权重值能够从所述矢量寄存器获得时,经由所述两个移位链,从所述矢量寄存器成对地接收所述权重值;和当所述权重值不能从所述矢量寄存器获得时,从保持寄存器接收权重值。14.根据权利要求13所述的方法,进一步包括:当所述权重值能够从所述矢量寄存器获得时,在时钟周期上将所述权重值中的至少一对移位到所述权重移位寄存器。15.根据权利要求13所述的方法,进一步包括:当所述权重值不能从所述矢量寄存器获得时:在所述权重值中的第一权重值变为能够获得的第一时钟周期上,向所述保持寄存器加载所述第一权重值作为保持值,在所述第一时钟周期没有经由所述两个移位链传输所述保持值;和在随后时钟周期上,当所述权重值中的第二权重值变为能够获得时,所述第二权重值和所述保持值经由两个移位链被传输到所述权重移位寄存器,所述两个移位链路中的每个移位链传输对应的保持值。16.根据权利要求13所述的方法,其中:所述矢量寄存器被配置为将所述权重值存储为四个8位整数的打包集合;和所述两个移位链中的每个移位链在所述移位链上的不同位置处具有两个注入点,以用于注入所述权重值,所述两个注入点是第一注入点和第二注入点。17.根据权利要求16所述的方法,进一步包括:在所述第一注入点处,注入所述四个8位整数中的两个;和在所述第二注入点处,注入四个8位整数中的另外两个。18.根据权利要求10所述的方法,进一步包括:当所述权重值是在所述权重矩阵寄存器中时,由所述乘法部件通过使用所述权重值来计算附加乘法结果;和在计算所述附加乘法结果期间,在准备在所述附加乘法结果之后由所述乘法部件计算进一步的乘法结果时,将附加权重值传输到所述权重移位寄存器中。19.一种实现为二维脉动阵列的矩阵乘法部件(600),包括:布置在所述脉动阵列的列中的多个单元(650,660);
所述脉动阵列的每列权重移位寄存器(635,655)的至少一个链;其中,每个权重移位寄存器仅连接到一个链,并且每个单元仅连接到所述至少一个链的一个权重移位寄存器,所述至少一个链具有用于注入权重值的两个注入点(680a、680b、681a、681b),一个在所述列的顶部,另一个在所述列的第二点处;每单元权重矩阵寄存器,被配置为存储从权重移位寄存器接收的权重输入;和乘法部件,所述乘法部件耦合到所述权重矩阵寄存器并且被配置为将所述权重矩阵寄存器的权重输入与矢量数据输入相乘以获得乘法结果。20.根据权利要求19所述的矩阵乘法部件,其中,所述两个注入点中的另一个注入点处于所述列的中点处或处于所述列的向下四分之一的点处。21.根据权利要求19或20所述的矩阵乘法部件,还包括在所述链上位于所述列中的所述第二点处的多路复用器,所述多路复用器被配置为从所述链的所述另一注入点或先前移位寄存器中选择权重值。22.根据任一前述权利要求所述的矩阵乘法部件,包括所述脉动阵列的每列权重移位寄存器的两个链;其中每个权重移位寄存器仅连接到一个链,每个链具有用于注入权重值的两个注入点。23.根据权利要求22所述的矩阵乘法部件,进一步包括:矢量寄存器(603),所述矢量寄存器包含四个8位整数的打包集合,所述四个8位整数中的每个表示单独的权重值。24.根据权利要求23所述的矩阵乘法部件,进一步包括:在所述列的顶部注入所述四个整数中的两个,并将所述四个整数的另外两个注入到所述阵列中的第二点。25.根据权利要求22至24中任一项所述的矩阵乘法部件,还包括位于每个列的顶部的保持寄存器,用于在从所述矢量寄存器不能够获得两个权重值时保持权重值。26.根据权利要求25所述的矩阵乘法部件,其中,当两个权重值不能够获得时:在第一权重值能够获得的第一时钟周期上,向所述保持寄存器加载所述第一权重值作为保持值,并且不进行移位;和在下一个时钟周期,当第二权重值能够获得时,通过所述两个移位链将所述第二权重值和所述保持值移位到连接到所述移位链的权重移位寄存器,每个移位链移位一个值。27.根据权利要求21至26中任一项所述的矩阵乘法部件,其中,当所述两个权重值能够获得时,在所述时钟周期上将所述两个权重值移位到所述单元中的所述权重移位寄存器。28.根据任一前述权利要求所述的矩阵乘法部件,其中:当数据在所述权重矩阵寄存器中时,所述数据被用于任意数量的乘法循环,并且:在所述数量的所述乘法循环期间,在准备下一乘法集合时,在后台将更多的权重移位到所述权重移位寄存器中;和/或在所述数量的乘法循环期间,将所述权重矩阵寄存器的权重输入与矢量数据输入相乘,以获得乘法结果。29.根据任一前述权利要求所述的矩阵乘法部件,包括所述脉动阵列的多个行,每个行包括多个单元,还包括:所述脉动阵列的每行另外的权重移位寄存器的至少一个另外的链;其中,每个另外的
权重移位寄存器仅连接到所述至少一个另外的链中的一个另外的链,并且每个单元仅连接到一个另外的权重移位寄存器,所述至少一个另外的链具有用于注入权重值的两个注入点。30.一种实现为二维脉动阵列的矩阵乘法部件,包括:所述脉动阵列的多个行,每个行包括多个单元;所述脉动阵列的每行权重移位寄存器的至少一个链;其中,每个权重移位寄存器仅连接到所述至少一个行的一个链,并且每个单元仅连接到一个权重移位寄存器,所述至少一个链具有用于注入权重值的两个注入点;每单元权重矩阵寄存器,被配置为存储从权重移位寄存器接收的权重输入;和乘法部件,所述乘法部件耦合到所述权重矩阵寄存器并且被配置为将所述权重矩阵寄存器的权重输入与矢量数据输入相乘以获得乘法结果。31.根据权利要求30所述的矩阵乘法部件,其中,所述两个注入点中的第一注入点处于所述行的第一端,并且另一个注入点处于所述行中的第二点。32.根据权利要求30至31中任一项所述的矩阵乘法部件,包括所述脉动阵列的每行权重移位寄存器的两个链;其中每行权重移位寄存器链的所述两个链的每个权重移位寄存器仅连接到一个链,每个链具有用于注入权重值的两个注入点。

技术总结
公开了低时延矩阵乘法部件。公开了用于实施为单元的脉动阵列的矩阵乘法部件的方法、系统和设备。所述矩阵乘法部件可以包括布置在所述脉动阵列的列中的单元。所述脉动阵列的每一列的两个权重移位寄存器链布置在所述矩阵乘法部件中。每个权重移位寄存器只连接至一个链,并且每个单元只连接至一个权重移位寄存器。每单元的权重矩阵寄存器配置为存储从权重移位寄存器接收到的权重输入。乘法部件耦合至所述权重矩阵寄存器并且配置为将所述权重矩阵寄存器的所述权重输入与矢量数据输入相乘以获得乘法结果。以获得乘法结果。以获得乘法结果。


技术研发人员:安德鲁
受保护的技术使用者:谷歌有限责任公司
技术研发日:2018.05.17
技术公布日:2023/7/12
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐