一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于大规模并行神经推理引擎的多模式低精度内积计算电路的制作方法

2022-06-01 18:31:07 来源:中国专利 TAG:
1.本公开的实施例涉及神经网络处理,并且更具体地,涉及用于大规模并行神经推理引擎的多模式低精度内积计算电路。技术实现要素:2.根据本公开的实施例,提供了用于计算神经激活的神经推理芯片。在各种实施例中,神经推理芯片适于:接收包括多个输入激活的输入激活张量;接收包括多个权重的权重张量;将多个权重中的每一个权重布斯重编码为多个布斯编码权重,每个布斯编码值具有阶次(order);将输入激活张量乘以布斯编码权重,针对每个输入激活产生多个结果,该多个结果中的每一个结果对应于布斯编码权重的阶次;对于布斯编码权重的每一阶次,对对应结果求和,产生多个部分和(partialsum),每个阶次一个部分和;以及从多个部分和的总和计算神经激活。3.在一些实施例中,输入激活张量维度为一。在一些实施例中,权重张量维度为二。4.在一些实施例中,计算神经激活包括根据多个部分和中的每一个部分和的对应阶次来移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括根据输入激活的精度来移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括将非线性激活函数应用于多个部分和的总和。在一些实施例中,对所述对应结果求和包括应用多个进位保存加法器。5.根据本公开的实施例,提供了用于计算神经激活的神经推理芯片。在各种实施例中,神经推理芯片适于:接收包括多个输入激活的输入激活张量;接收包括多个权重的权重张量;将多个输入激活中的每一个输入激活布斯重编码为多个布斯编码输入激活,每个布斯编码值具有阶次;将权重张量乘以布斯编码输入激活,针对每个权重产生多个结果,该多个结果中的每一个结果对应于布斯编码输入激活的阶次;对于布斯编码输入激活的每一阶次,对对应结果求和,产生多个部分和,每个阶次一个部分和;以及从多个部分和的总和计算神经激活。6.在一些实施例中,输入激活张量维度为一。在一些实施例中,权重张量维度为二。7.在一些实施例中,计算神经激活包括根据多个部分和中的每一个部分和的对应阶次移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括根据输入激活的精度来移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括将非线性激活函数应用于多个部分和的总和。在一些实施例中,对所述对应结果求和包括应用多个进位存储加法器。8.根据本公开的实施例,提供了用于计算神经激活的方法和计算机程序产品。接收包括多个输入激活的输入激活张量。接收包括多个权重的权重张量。该多个权重中的每一个权重被布斯重编码为多个布斯编码权重,每个布斯编码值具有阶次。将输入激活张量乘以布斯编码权重,针对每个输入激活产生多个结果,该多个结果中的每一个结果对应于布斯编码权重的阶次。对于布斯编码权重的每一阶次,对对应结果求和,产生多个部分和,每一阶一个部分和。从多个部分和的总和来计算神经激活。9.在一些实施例中,输入激活张量维度为一。在一些实施例中,权重张量维度为二。10.在一些实施例中,计算神经激活包括根据所述多个部分和中的每一个部分和的对应阶次移动所述多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括根据输入激活的精度来移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括将非线性激活函数应用于多个部分和的总和。在一些实施例中,对所述对应结果求和包括应用多个进位保存加法器。11.根据本公开的实施例,提供了用于计算神经激活的方法和计算机程序产品。接收包括多个输入激活的输入激活张量。接收包括多个权重的权重张量。该多个输入激活中的每一个输入激活被布斯重编码为多个布斯编码输入激活,每个布斯编码值具有阶次。将权重张量乘以布斯编码输入激活,针对每个权重产生多个结果,该多个结果中的每一个结果对应于布斯编码输入激活的阶次。对于布斯编码输入激活的每一阶次,对对应结果求和,产生多个部分和,每个阶次一个部分和。从多个部分和的总和来计算神经激活。12.在一些实施例中,输入激活张量维度为一。在一些实施例中,权重张量维度为二。13.在一些实施例中,计算神经激活包括根据多个部分和中的每一个部分和的对应阶次移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括根据输入激活的精度来移动多个部分和中的每一个部分和。在一些实施例中,计算神经激活包括将非线性激活函数应用于多个部分和的总和。在一些实施例中,对对应结果求和包括应用多个进位保存加法器。附图说明14.图1示出根据本公开的实施例的神经核心。15.图2示出根据本公开的实施例的示例性推理处理单元(ipu)。16.图3示出根据本公开的实施例的多核推理处理单元(ipu)。17.图4示出根据本公开的实施例的示例性布斯重编码。18.图5示出根据本公开的实施例的示例性布斯重编码乘法器。19.图6示出根据本公开的实施例的示例性布斯重编码乘法器。20.图7示出根据本公开的实施例的用于计算内积的示例性方法。21.图8示出根据本公开的实施例的用于计算内积的示例性方法。22.图9示出根据本公开的实施例的用于计算内积的方法。23.图10示出根据本公开的实施例示出的多精度输入数据格式。24.图11a-c示出根据本公开的实施例的各种精度的部分和生成。25.图12示出根据本公开的实施例的用于计算4位内积的方法。26.图13示出根据本公开的实施例的用于计算4位内积的方法。27.图14示出根据本公开的实施例的计算内积的可变精度方法。28.图15示出根据本公开的实施例的用于计算神经激活的方法。29.图16描绘了根据本公开的实施例的计算节点。具体实施方式30.人工神经元是其输出是其输入的线性组合的非线性函数的数学函数。如果一个神经元的输出是另一个神经元的输入,则两个神经元被连接。权重是对一个神经元的输出与另一个神经元的输入之间的连接的强度进行编码的标量值。31.神经元通过将非线性激活函数应用于其输入的加权和来计算其输出,称为激活。加权和是通过将每个输入乘以对应的权重并累加乘积而计算的中间结果。部分和是输入的子集的加权和。所有输入的加权和可以通过累加一个或多个部分和而分阶段计算。32.神经网络是一个或多个神经元的集合。神经网络通常被分成神经元组,被称为层。层是一个或多个神经元的集合,该一个或多个神经元全部从同一层接收输入并且全部将输出发送到同一层,并且通常执行类似的功能。输入层是从神经网络外部的源接收输入的层。输出层是将输出发送到神经网络外部的目标的层。所有其它层是中间处理层。多层神经网络是具有多于一层的神经网络。深度神经网络是具有许多层的多层神经网络。33.张量是数值的多维阵列。张量区块是张量中的元素的连续子阵列。34.每个神经网络层与参数张量v、权重张量w、输入数据张量x、输出数据张量y和中间数据张量z相关联。参数张量包括控制层中的神经元激活函数σ的所有参数。权重张量包括将输入连接到层的所有权重。输入数据张量包含该层作为输入消耗的所有数据。输出数据张量包括该层计算的作为输出的所有数据。中间数据张量包括该层产生的作为中间计算(诸如部分和)的任何数据。35.层的数据张量(输入、输出和中间值)可以是3维的,其中前二维可以被解释为编码空间位置,而第三维可以被解释为编码不同特征。例如,当数据张量表示彩色图像时,前二维编码图像内的垂直和水平坐标,并且第三维编码每个位置处的颜色。输入数据张量x的每个元素可以通过单独的权重连接到每个神经元,因此权重张量w通常具有6个维度,将输入数据张量的3个维度(输入行a、输入列b、输入特征c)与输出数据张量的3个维度(输出行i、输出列j、输出特征k)连接。中间数据张量z具有与输出数据张量y相同的形状。参数张量v将3个输出数据张量维度与索引激活函数σ的参数的附加维度o连接。在一些实施例中,激活函数σ不需要附加参数,在这种情况下,附加维度是不必要的。然而,在一些实施例中,激活函数σ需要至少一个附加参数,其出现在维度o中。36.层的输出数据张量y的元素可以如等式1来计算,其中神经元激活函数σ由激活函数参数v[i,j,k,:]的向量配置,并且加权和z[i,j,k]可以如等式2来计算。[0037]y[i,j,k]=σ(v[i,j,k,:];z[i,j,k])[0038]等式1[0039][0040]等式2[0041]为了简化注释,等式2中的加权和可以被称为输出,其等效于使用线性激活函数y[i,j,k]=σ(z[i,j,k])=z[i,j,k],可理解,当使用不同的激活函数时,相同的陈述适用而不失一般性。[0042]在各种实施例中,如上所述的输出数据张量的计算被分解成较小的问题。然后,可以在一个或多个神经核心上,或者在传统多核系统的一个或多个核心上并行地求解每个问题。[0043]从以上所述显而易见的是,神经网络是并行结构。给定层中的神经元接收输入,具有来自一个或多个层的元素xi的x或其它输入。每个神经元基于输入和具有元素wi的权重w计算其状态y∈y。在各种实施例中,输入的加权和由偏差b调节,并且然后将结果传递给非线性f(·)。例如,单个神经元激活可以表示为y=f(b ∑xiwi)[0044]因为给定层中的所有神经元都从同一层接收输入并且独立地计算它们的输出,所以神经元激活可以被并行地计算。由于总体神经网络的该方面,在并行分布的核心中执行计算加速了总体计算。此外,在每个核心向量内,可以并行计算运算。即使具有循环输入,例如当层投影回到其自身时,所有神经元仍然同时更新。实际上,循环连接被延迟以与该层的后续输入对齐。[0045]现在参考图1,描绘了根据本公开的实施例的神经核心。神经核心100是计算输出张量的一个区块的可平铺(tileable)计算单元。神经核心100具有m个输入和n个输出。在各种实施例中,m=n。为了计算输出张量区块,神经核心将m×1输入张量区块101乘以m×n权重张量区块102,并将乘积累加为加权和,该加权和被存储在1×n中间张量区块103中。o×n参数张量区块包括指定n个神经元激活函数中的每个神经元激活函数的o参数,该n个神经元激活函数被应用于中间张量区块103以产生1×n输出张量区块105。[0046]多个神经核心可以平铺在神经核心阵列中。在一些实施例中,阵列是2维的。[0047]神经网络模型是一组常数,其共同指定由神经网络执行的整个计算,包括神经元之间的连接的图以及每个神经元的权重和激活函数参数。训练是修改神经网络模型以执行所需函数的过程。推理是将神经网络应用于输入以产生输出而不修改神经网络模型的过程。[0048]推理处理单元是执行神经网络推理的一类处理器。神经推理芯片是推理处理单元的特定物理实例。[0049]参考图2,根据本公开的实施例示出了示例性推理处理单元(ipu)。ipu200包括用于神经网络模型的存储器201。如上所述,神经网络模型可包括要计算的神经网络的突触权重。ipu200包括激活存储器202,其可以是瞬时的。激活存储器202可以被分成输入和输出区域,并且存储神经元激活以供处理。ipu200包括神经计算单元203,该神经计算单元203加载有来自模型存储器201的神经网络模型。在每个计算步骤之前从激活存储器202提供输入激活。来自神经计算单元203的输出被写回到激活存储器202,以在同一或另一神经计算单元上处理。[0050]在各种实施例中,微引擎204被包括在ipu200中。在该实施例中,ipu中的所有运算都由微引擎指导。如下所述,在各种实施例中可以提供中央和/或分布式微引擎。全局微引擎可被称为芯片微引擎,而本地微引擎可被称为核心微引擎或本地控制器。在各种实施例中,微引擎包括一个或多个微引擎、微控制器、状态机、cpu或其它控制器。[0051]参考图3,示出了根据本公开的实施例的多核推理处理单元(ipu)。ipu300包括用于神经网络模型和指令的存储器301。在一些实施例中,存储器301被分成权重部分311和指令部分312。如上所述,神经网络模型可包括要计算的神经网络的突触权重。ipu300包括激活存储器302,其可以是瞬时的。激活存储器302可被分成输入区域和输出区域,并且存储神经元激活以供处理。[0052]ipu300包括神经核心303的阵列306。每个核心303包括计算单元333,该计算单元333加载有来自模型存储器301的神经网络模型,并且可操作以执行向量计算。每个核心还包括本地激活存储器332。在每个计算步骤之前从本地激活存储器332提供输入激活。来自计算单元333的输出被写回到激活存储器332以便在同一或另一计算单元上处理。[0053]ipu300包括一个或多个片上网络(noc)305。在一些实施例中,部分和noc351互连核心303并在它们之间传输部分和。在一些实施例中,单独的参数分布noc352将核心303连接到存储器301,以将权重和指令分布到核心303。将理解,noc351和352的各种配置适用于根据本公开的使用。例如,可以使用广播网络、行广播网络、树形网络和交换网络。[0054]在各种实施例中,全局微引擎304被包括在ipu300中。在各种实施例中,本地核心控制器334被包括在每个核心303上。在该实施例中,运算的方向在全局微引擎(芯片微引擎)和本地核心控制器(核心微引擎)之间共享。具体地,在311处,通过全局微引擎304将计算指令从模型存储器301加载到每个核心303上的神经计算单元333。在312处,参数(例如,神经网络/突触权重)由全局微引擎304从模型存储器301加载到每个核心303上的神经计算单元333。在313处,通过本地核心控制器334将神经网络激活数据从激活本地激活存储器332加载到每个核心303上的神经计算单元333。如上所述,激活被提供给由模型定义的特定神经网络的神经元,并且激活可源自同一或另一神经计算单元,或者源自系统外部。在314处,神经计算单元333执行该计算以生成如由本地核心控制器334指导的输出神经元激活。具体地,该计算包括将输入突触权重应用于输入激活。应当理解,各种方法可用于执行此类计算,包括计算机枝晶(insilicodendrites)以及向量乘法单元。在315处,来自计算的结果如本地核心控制器334所指导存储在本地激活存储器332中。如上所述,这些阶段可以是流水线的,以便在每个核心上提供神经计算单元的有效使用。还将理解,根据给定神经网络的要求,输入和输出可以从本地激活存储器332传输到全局激活存储器302。[0055]因此,本公开提供了推理处理单元(ipu)中的运算的运行时控制。在一些实施例中,微引擎是集中式的(单个微引擎)。在一些实施例中,ipu计算是分布式的(由核心阵列执行)。在一些实施例中,运算的运行时控制是分层的,中央微引擎和分布式微引擎都参与。[0056]微引擎或多个微引擎指导ipu中所有运算的执行。每个微引擎指令对应于几个子运算(例如,地址生成、加载、计算、存储等)。在分布式情况下,核心微代码在核心微引擎(例如,334)上运行。核心微代码包括执行完整的单个张量运算的指令。例如,加权张量和数据张量之间的卷积。在单个核心的上下文中,核心微代码包括对本地存储的数据张量(和部分和)的子集执行单张量运算的指令。芯片微代码在芯片微引擎(例如304)上运行。微代码包括执行神经网络中的所有张量运算的指令。[0057]在各种实施例中,使用向量矩阵乘法器来加速突触整合的计算。如上所述,激活向量x乘以权重矩阵w。该中间结果给定为ps=xw。ps的每列可被计算为psj=∑xiwij。在该公式中,在低精度定点计算中,激活xi和权重wij可以是例如2位、4位或8位。在示例性实现方式中,执行乘法xiwij,并对所有乘积求和。[0058]可以以下面的方式实现适合于该计算的示例性乘法器。对所产生的部分和应用布斯重编码,从而生成用于n位乘法器的n/2部分和。然后,部分和被进位存储加法器压缩,减少了从n/2到2的部分和的数量。使用全进位传播加法器(或其变体)将最后2个部分和加到乘积。在这些步骤中,进位传播加法器需要复杂的电路。对于n元素向量x和n×m元素矩阵w的向量乘法,需要n×m进位传播加法器。为了节省电路空间,期望每∑xiwij计算仅使用一个进位传播加法器。通常,可以通过改变∑xiwij中计算的顺序来优化电路实现方式。[0059]此外,期望修改向量矩阵乘法器以支持多个精度,例如2位、4位、8位或更高的精度。还希望在这些多个计算精度之间尽可能多地重用电路。在乘法第一求和第二(multiply-firstsummation-second)方法中,每个乘法器需要支持多个精度的乘法。通过改变电路的运算顺序,同一数据路径可针对多个运算精度而被重用。[0060]在各种实施例中,定点内积计算∑xiwij通过以下步骤执行:布斯重编码部分和生成;对同阶次的布斯重编码的部分和进行部分和约简;以及对所有部分和求和,以得到最终答案。[0061]这样,不生成各个乘法器的值。相反,每个乘数计算被分布在整个内积计算上。当以不同精度计算时,在求和步骤处对部分和执行不同量的移动。因此,需要最小量的多精度电路。[0062]参考图4,示出了示例性布斯重编码。布斯重编码可由乘法器使用以生成部分和。采用表查找(tableloopup)来重编码值。在该示例中,表1提供基数(radix)-2布斯重编码表。[0063]3位组合011 2010 1001 100001110110-1101-1100-2[0064]表1[0065]为了说明布斯重编码的程序,考虑使用基数-4布斯重编码将a与b相乘。首先,从每隔一个位开始检查布斯重编码表(例如,表1)以寻找乘法器b的重叠3个位。使用位b[1:-1],b[3:1],b[5:3]等。b[-1]是添加到b的最低有效位的右边的额外位,并且为0。部分和向量取决于b的对应位置的布斯重编码而生成。对于每个布斯重编码,部分和向量被移动两位。因此,{b1,b0,b-1}的部分和从位位置0开始,而{b3,b2,b1}的部分和从位位置2开始。使用进位保存加法器将部分和向量的数量压缩到2。最后,使用进位传播加法器(或其变体)将压缩的两个部分和向量添加到乘积。[0066]参考图5,示出8位布斯重编码乘法器。在该示例中,执行被乘数a(501)与乘数b(502)的乘法。假设b是8位二进制b[7:0]。b[-1]=0被添加到b[0]右边。为了计算部分和503…506,进行布斯表查找:booth(b[i 1:i-1]),其中i=0,2,4,6。如果booth(b[i 1:i-1])=2,则a*booth(b[i 1:i-1])=a<<1。如果booth(b[i 1:i-1])=1,则a*booth(b[i 1:i-1])=a。如果booth(b[i 1:i-1])=0,则a*booth(b[i 1:i-1])=0。如果booth(b[i 1:i-1])=-1,则a*booth(b[i 1:i-1])=-a。如果booth(b[i 1:i-1])=-2,则a*booth(b[i 1:i-1])=-a<<1。在相加之前,将部分和a*booth(b[i 1:i-1])向左移动i位。[0067]例如,i=0的部分和503被对齐到a和b的位置。部分和504、505和506分别向左移动2位、4位和6位。这些部分和503-506因此具有交错的位置,并且被称为具有不同的阶次。[0068]在每种情况下,可以通过选择0、a或-a或可选地向左移动1位来从值a计算部分和a*booth(b[i 1:i-1])=a。最后,将四个部分和503…506相加以产生乘积a*b507。[0069]参考图6,示出布斯重编码乘法器示例。该示例示出了19*71的二进制计算。由于根据表1来自[b1:b-1]处的位110的布斯重编码值是-1,所以第一部分和603是111111111101101,其是具有符号扩展的被乘数00010011(601)的2的补数。第二部分和000100110(604)是被乘数向左移动一位,[b3:b1]处011的第二布尔重编码是2。第三部分和605是000000000,[b5:b3]处000的第三布斯重编码值是0。最后部分和606是000010011,[b7:b5]处010的布斯重编码是1。部分和相隔2个位:部分和604位于部分和603的左边2位;部分和605是部分和603左边4位;而部分和606位于部分和603的左边6位。最后,将所有部分和相加产生二进制格式的正确乘积607,19*71=1349。[0070]参考图7,示出用于计算内积的示例性方法。在该示例中,针对所有i,乘法器计算ai*bi,并且然后将它们加在一起以产生∑ai*bi。这样,通过首先计算每个ai*bi的相乘结果,并且然后将它们加在一起,来获得内积。[0071]参考图8,示出用于计算内积的示例性方法。在该示例中,代替计算个体ai*bi的乘积,计算相同阶次的部分和的总和,并且然后将它们加在一起。特别地,对于每个ai*bi801…804,如上所述计算部分和811…814、821…824、831…834和841…844。在该示例中,计算四个部分和,对应于bi[1:-1],bi[3:1],bi[5:3],bi[7:5]。相同阶次的部分和由加法器805分别求和,产生和806…809。例如,部分和811、821、831和841具有相同阶次,并且由加法器805加在一起以生成和806。分别地,部分和812、822、832和842具有相同的阶次,并且相加以生成和807。部分和813、823、833和843相加以产生和808。部分和814、824、834和844相加以产生和809。最后,移动和806…809相隔两位,并且加在一起以产生最终结果∑ai*bi810。[0072]参考图9,示出计算内积的方法。特别地,如图所示,使用相同阶次的部分和的总和来计算内积∑a0*b0。在901处,所有被乘数bi被布斯重编码。在902处,从ai和bi的重编码值生成部分和。在903处,分别计算来自不同乘法器的具有相同阶次的所有部分和的总和。在904处,经由适当的移动对部分和的总和进行加法计算。[0073]在该方法中,所有相同阶次的部分和被对齐,并且早期求和过程更有效。对于具有大向量和矩阵的低精度神经向量-矩阵乘法,每个乘法具有少量的不同阶次的部分和。然而,大量相同阶次的部分和来自不同乘法。因此,许多部分和的减少将导致更有效的实现方式。例如,对于每个乘法,具有8位精度的32×32矩阵具有4个部分和。然而,每个内积计算需要将相同阶次的32个部分和相加。[0074]该方法的另一个优点是可以共享用于多精度模式的计算电路。参考图10,示出了多精度输入数据格式。在该实施例中,以不同的精度解释相同的向量或矩阵。例如,16位数据可以用作2元素8位向量、4元素4位向量或8元素2位向量。如图10中所示,8位可用于提供8位模式激活(1001)、4位模式激活(1002)或2位模式激活(1003)。同样地,8位可用于提供8位模式权重(1004)、4位模式权重(1005)或2位模式权重(1006)。这示出了8位数据可以如何被解释为8位单重、4位双重或2位四重。[0075]上述内积电路可用于支持多精度内积生成。布斯重编码和部分和生成电路需要稍微修改输入数据。不需要修改电路,以添加相同阶次的所有部分和。最终的求和电路需要将同一阶次的部分和的总和移动不同的量,并且然后将它们加在一起。[0076]参考图11a-c,比较8位(图11a)、4位(图11b)和2位(图11c)模式部分和生成。这示出了如何生成部分和。与8位模式相比,输入到部分和生成器的被乘数是4位a’i或2位a”i。布斯编码器的被乘数输入几乎是相同的位(因为b0[7:5]=b’1[3:1],并且b0[7:6]=b”3[1:0])。仅b’i[-1]和b”i[-1]需要假定为0。[0077]图11a示出8位乘法器如何计算8位乘积1117。通过首先计算b0的布斯重编码且然后通过以潜在移动选择0、a0或-a0来生成8位乘法器的部分和1113…1116。[0078]在图11b中,2路4位乘法器生成a’0*b’0 a’1*b’1。第一个b’0被布斯重编码并用于生成部分和1123…1124。这些部分和需要通过随着向左一位的潜在移动选择0、a’0或-a’0来生成。类似地,b’1被布斯重编码且用于通过以一位的潜在移动选择0、a’1或-a’1来生成部分和1125…1126。与8位乘法器不同,来自a’0和b’0的部分和1123…1124与从a’1和b’1生成的部分和1125…1126对齐,因为其两者均从1到-1的位置处的布斯重编码(其是b’0[1:-1]和b’i[1:-1])生成。最后,所有部分和1123…1126加在一起以生成4位内积1127。[0079]在图11c中,4路2位乘法器计算内积a”0*b”0 a”1*b”1 a”2*b”2 a”3*b”3。部分和1133通过第一布斯重编码b”0,并选择0、a”0或-a”0,从a”0和b”0生成。类似地,部分和1134从a”1和b”1生成,部分和1135从a”2和b”2生成,以及部分和1136从a”3和b”3生成。所有部分和1133…1136被对齐,因为它们从相同位位置的布斯重编码值生成。部分和1133…1136被加在一起以生成2位内积1137。[0080]与8位模式相比,输入到部分和生成器的被乘数是4位a’i或2位a”i。输入到布斯编码器的被乘数几乎是相同的位(因为b0[7:5]=b’1[3:1],并且b0[7:6]=b”3[1:0])。仅b’i[-1]和b”i[-1]需要假定为0。布斯重编码逻辑可被共享,选择和移动被乘数的逻辑也可被共享。[0081]参考图12,示出用于计算4位内积的方法。在该实施例中,采用相同的方法来首先相加部分和。这里,部分和求和电路与图8中所示的8位内积计算相同。特别地,使用如8位模式所述的电路,来自每个乘法器的第一部分和(例如1201)被收集以计算和1205。同样地,第二部分和(例如1202)相加以生成和1206,第三部分和(例如1203)相加以生成和1207,以及第四部分和(例如1204)相加以生成和1208。为了适应4位模式计算,在最终求和之前,将不同的移动量应用于和1205…1208中的每一个,产生结果1209。[0082]对于每个部分和计算,第一部分和1201和第二部分和1202具有不同的阶次,因此与部分和1201相比,部分和1202向左移动2位。然而,第三部分和1203具有与部分和1201相同的阶次,并且这两个部分和在最后的相加之前被对齐。类似地,第四部分和1204与第二部分和1202对齐,但与部分和1203相比其向左移动2位。和1206与部分总1205的总和相比向左移动2位。然而,第三和1207具有与和1205相同的阶次,并且这两个和在最后的相加之前被对齐。类似地,第四和1208与第二和1206对齐,但是与和1207相比,它向左移动2位。4位模式的移动控制不同于8位模式,但其仅需在用于计算结果1209的最终加法之前实现一次,而不是在每一乘法器处实现。[0083]参考图13,示出用于计算2位内积的方法。类似于图12的4位内积计算,2位计算使用与8位模式(如图8中)相同的数据路径来将部分和加在一起。然而,最终求和是通过将部分和的总和相加而没有任何移动来获得。[0084]通过首先采用将相同阶次的部分和加在一起的方法,可以共享用于多个精度的数据路径,例如提供8位、4位和2位模式。布斯重编码器和部分和生成器在各种精度配置之间采用稍微修改的输入。相同阶次的部分和的求和电路是相同的。最终的求和需要取决于精度以不同的移动量来完成。这导致比替代方案更紧凑的设计。与8位配置相比,4位模式在乘法-累加运算方面每个周期获得两倍的计算,且2位模式获得4倍的乘法-累加运算。[0085]参考图14,示出使用相同阶次的部分和的总和来计算可变精度的内积的方法。在1401处,所有被乘数bi被布斯重编码。在1402处,从ai和bi的重编码值生成部分和。在1403处,对所有具有相同阶次的部分和求和。在1404处,根据部分和的精度来移动部分和的总和。在1405处,将部分和相加以得出结果。[0086]参考图15,示出用于计算神经激活的方法。在1501处,接收包括多个输入激活的输入激活张量。在1502处,接收包括多个权重的权重张量。在1503处,将多个权重中的每一个布斯重编码成多个布斯编码权重,每一布斯编码值具有阶次。在1504处,将输入激活张量乘以布斯编码权重,从而针对每个输入激活产生多个结果,该多个结果中的每一个结果对应于布斯编码权重的阶次。在1505处,对于布斯编码权重的每个阶次,对应的结果被求和,产生多个部分和,每个阶次一个部分和。在1506处,从多个部分和的总和来计算神经激活。[0087]如上文所描述,本发明的各种实施例包括用于通过对乘法向量的每一元素进行布斯重编码来计算两个向量的内积的芯片。使用被乘数向量的元素和重编码的乘数值生成部分和。相同阶次的所有部分和被相加。相同阶次的部分和的总和通过移动相加。在一些实施例中,使用进位保存加法器树来执行部分和相加。在各种实施例中,向量乘法器的多个实例被组合以形成向量矩阵乘法器。在各种实施例中,组合多个实例以形成矩阵-矩阵乘法器。[0088]在各种实施例中,通过第一布斯重编码元素乘根据精度的向量来支持多个精度。然后可以根据精度生成部分和。相同阶次的所有部分和被相加。根据精度来移动部分和的总和,然后将它们加在一起。[0089]现在参考图16,示出计算节点的示例的示意图。计算节点10仅是合适的计算节点的一个示例,并且不旨在对在此描述的实施例的使用范围或功能提出任何限制。无论如何,计算节点10能够被实现和/或执行上文阐述的任何功能。[0090]在计算节点10中,存在计算机系统/服务器12,其可与许多其它通用或专用计算系统环境或配置一起操作。适合与计算机系统/服务器12一起使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络pc、小型计算机系统、大型计算机系统,以及包括任何上述系统或设备的分布式云计算环境等。[0091]计算机系统/服务器12可以在计算机系统可执行指令的一般上下文中描述,诸如由计算机系统执行的程序模块。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器12可以在分布式云计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可位于包括存储器存储设备的本地和远程计算机系统存储介质中。[0092]如图16中所示,计算节点10中的计算机系统/服务器12以通用计算设备的形式示出。计算机系统/服务器12的组件可以包括但不限于一个或多个处理器或处理单元16、系统存储器28以及将包括系统存储器28的各种系统组件耦合到处理器16的总线18。[0093]总线18表示若干类型的总线结构中的任何一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及使用各种总线架构中的任何一种的处理器或本地总线。作为示例而非限制,此类架构包括工业标准架构(isa)总线、微通道架构(mca)总线、增强型isa(eisa)总线、视频电子技术标准协会(vesa)本地总线、外围部件互连(pci)总线、外围部件互连快速(pcie)和高级微控制器总线架构(amba)。[0094]在各种实施例中,一个或多个推理处理单元(未示出)被耦合到总线18。在该实施例中,ipu可以经由总线18从存储器28接收数据或向其写入数据。同样,如在此所述,ipu可以经由总线18与其它组件交互。[0095]计算机系统/服务器12通常包括各种计算机系统可读介质。该介质可以是计算机系统/服务器12可访问的任何可用介质,并且它包括易失性和非易失性介质、可移动和不可移动介质。[0096]系统存储器28可以包括易失性存储器形式的计算机系统可读介质,诸如随机存取存储器(ram)30和/或高速缓冲存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动、易失性/非易失性计算机系统存储介质。仅作为示例,存储系统34可被提供用于从不可移动、非易失性磁介质(未示出,并且通常被称为“硬盘驱动器”)读取和向其写入。尽管未示出,但是可以提供用于从可移动、非易失性磁盘(例如,“软盘”)读取和向其写入的磁盘驱动器,以及用于从诸如cd-rom、dvd-rom或其它光学介质的可移动、非易失性光盘读取或向其写入的光盘驱动器。在此类情况下,每个都可以通过一个或多个数据介质接口连接到总线18。如下面将进一步描绘及描述,存储器28可包括具有被配置以执行本公开的实施例的功能的一组(例如,至少一个)程序模块的至少一个程序产品。[0097]具有一组(至少一个)程序模块42的程序/实用程序40,以及操作系统、一个或多个应用程序、其它程序模块和程序数据,可作为示例而非限制存储在存储器28中。操作系统、一个或多个应用程序、其它程序模块和程序数据或其某种组合中的每一个可包括联网环境的实现方式。程序模块42通常执行在此描述的实施例的功能和/或方法。[0098]计算机系统/服务器12还可以与如下通信:一个或多个外部设备14诸如键盘、指示设备、显示器24等;一个或多个设备,其使用户能够与计算机系统/服务器12交互;和/或使计算机系统/服务器12能够与一个或多个其它计算设备通信的任何设备(例如网卡、调制解调器等)。该通信可以经由输入/输出(i/o)接口22发生。然而,计算机系统/服务器12可以经由网络适配器20与一个或多个网络通信,所述网络诸如局域网(lan)、通用广域网(wan)和/或公共网络(例如互联网)。如图所示,网络适配器20经由总线18与计算机系统/服务器12的其它组件通信。应当理解,尽管未示出,其它硬件和/或软件组件可以与计算机系统/服务器12结合使用。示例包括但不限于:微码、设备驱动器、冗余处理单元、外部磁盘驱动器阵列、raid系统、磁带驱动器和数据档案存储系统等。[0099]本公开可以被实现为系统、方法和/或计算机程序产品。计算机程序产品可以包括其上具有用于使处理器执行本公开的方面的计算机可读程序指令的计算机可读存储介质(或多个介质)。[0100]计算机可读存储介质可以是能够保留和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括以下:便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式光盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、诸如上面记录有指令的打孔卡或凹槽中的凸起结构的机械编码设备,以及上述的任何适当组合。如在此所使用的计算机可读存储介质不应被解释为暂态信号本身,诸如无线电波或其它自由传播的电磁波、通过波导或其它传输介质传播的电磁波(例如,通过光纤线缆的光脉冲),或通过导线传输的电信号。[0101]在此描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者经由网络,例如互联网、局域网、广域网和/或无线网络,下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。[0102]用于执行本公开的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器相关指令、微代码、固件指令、状态设置数据,或者以一种或多种编程语言的任意组合编写的源代码或目标代码,该编程语言包括面向对象的编程语言(例如smalltalk、c 等)以及传统的过程式编程语言(例如“c”编程语言或类似的编程语言)。计算机可读程序指令可以完全在用户的计算机上执行,部分在用户的计算机上执行,作为独立的软件包执行,部分在用户的计算机上并且部分在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(lan)或广域网(wan),或者可以连接到外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本公开的方面。[0103]在此参考根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述本公开的方面。将理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。[0104]这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其它可编程数据处理装置的处理器执行的指令创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,其可以引导计算机、可编程数据处理装置和/或其它设备以特定方式工作,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图的一个或多个框中指定的功能/动作的各方面的指令。[0105]计算机可读程序指令还可以被加载到计算机、其它可编程数据处理装置或其它设备上,以使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,使得在计算机、其他可编程装置或其它设备上执行的指令实现流程图和/或框图的一个或多个框中指定的功能/动作。[0106]附图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实现方式中,框中所提及的功能可不按图中所提及的次序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的次序执行,这取决于所涉及的功能。还将注意,框图和/或流程图图示的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。[0107]已经出于说明的目的呈现了对本公开的各种实施例的描述,但是其并非旨在是穷举的或限于所公开的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域的普通技术人员将是显而易见的。选择在此所使用的术语以最好地解释实施例的原理、实际应用或对市场上存在的技术改进,或使本领域的其他普通技术人员能够理解在此所公开的实施例。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献