CN116762056A - 脉动阵列中的乘法器和加法器 - Google Patents
脉动阵列中的乘法器和加法器 Download PDFInfo
- Publication number
- CN116762056A CN116762056A CN202280009769.2A CN202280009769A CN116762056A CN 116762056 A CN116762056 A CN 116762056A CN 202280009769 A CN202280009769 A CN 202280009769A CN 116762056 A CN116762056 A CN 116762056A
- Authority
- CN
- China
- Prior art keywords
- mac unit
- flip
- output
- flop
- partial
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 26
- 238000004891 communication Methods 0.000 claims description 16
- 230000036316 preload Effects 0.000 claims description 12
- 239000011159 matrix material Substances 0.000 abstract description 101
- 238000003491 array Methods 0.000 abstract description 13
- 230000008901 benefit Effects 0.000 abstract description 7
- 238000013528 artificial neural network Methods 0.000 abstract description 3
- 241001442055 Vipera berus Species 0.000 description 114
- 238000013461 design Methods 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000013459 approach Methods 0.000 description 6
- 238000007667 floating Methods 0.000 description 6
- 230000009467 reduction Effects 0.000 description 5
- 230000004927 fusion Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8046—Systolic arrays
-
- 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/50—Adding; Subtracting
-
- 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
- G06F7/5306—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with row wise addition of partial products
- G06F7/5312—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with row wise addition of partial products using carry save adders
-
- 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Complex Calculations (AREA)
Abstract
本文描述的主题提供了用于设计和使用乘法和累加(MAC)单元以通过(诸如在深度神经网络(DNN)加速器中使用的那些)脉动阵列来执行矩阵乘法的***和技术。这些MAC单元可以利用在脉动阵列内执行矩阵乘法的特定方式。例如,当矩阵A与矩阵B相乘时,矩阵A的标量值a被重复使用多次,矩阵B的标量值b可以被流传输到脉动阵列中并且被转发到脉动阵列中的一系列MAC单元,并且仅针对矩阵乘法计算的点积的最终值而不是中间值可以是正确的。本文描述了被特别化以利用这些观察的MAC单元硬件。
Description
相关申请的交叉引用
本申请是于2021年7月16日提交的美国专利申请No.17/377,743的继续申请,其公开内容通过引用并入本文。
背景技术
最近,用于神经网络(诸如深度神经网络(DNN))的加速器已经利用脉动阵列进行高密度计算。脉动阵列可以是具有用于密集矩阵乘法的权重固定方法的乘法和累加(MAC)单元的2D阵列。脉动阵列可以替代地是使用输出固定结构或一些其他结构的MAC单元的2D阵列。在MAC单元内的乘法器中使用的常用硬件设计是Booth(或修改的Booth)乘法器。这样的乘法器通过以下方式分别将两个标量数(诸如矩阵A和B的a和b)相乘:从a准备部分积,Booth编码b,诸如通过使用进位保存加法器(CSA)树或树缩减将部分积累加到两个项,以及通过将结果输出到最终进位传播加法器(CPA)以导出乘法的结果。部分积的数(其可以近似是使用Radix-4 Booth2乘法器的n/2、使用Radix-8 Booth3乘法器的n/3、以及使用Radix-16 Booth4的n/4)在确定树缩减复杂度方面可能是重要的。实际上,在大多数情况下使用Booth2乘法器,而在其他情况下使用Booth3乘法器。由于难以计算“硬倍数”,所以很少使用更高基数的乘法器。在Booth2乘法器中,部分积可以包括0、±a和±2a。然而,在Booth3乘法器中,部分积可以附加地包括±3a和±4a。这里,因为3a不是2的幂,所以它可以被称为硬倍数,与其他部分积不同,必须在执行a和b的乘法中的其他步骤之前计算硬倍数。更高基数乘法器设计可能具有必须计算的更多硬倍数。计算硬倍数的要求使得现有的更高基数的Booth乘法器设计不切实际和低效。另外,常规MAC单元加法器可能将乘法器的乘积加到部分和,并且以低效和未优化的方式将结果传递到脉动阵列中的下一个MAC单元。例如,在这种传统加法器的设计中可能存在低效,这种传统加法器没有考虑它们在矩阵乘法的脉动阵列中的实施方式。
发明内容
基于脉动阵列的矩阵乘法的效率在加速器(诸如DNN加速器)的设计中可能是重要的。本文描述了用于脉动阵列的MAC单元中的更有效和实用的乘法器和加法器设计。检查用于脉动阵列中的矩阵A与矩阵B的矩阵乘法的常规MAC单元,可以进行三个观察:
首先,一旦矩阵A中的标量值a被脉动阵列中的MAC单元的触发器加载和锁存,则矩阵A中的标量值a可以被多次重复使用。例如,它可以被重复使用与矩阵B的宽度一样多的次数,矩阵B的宽度通常可以较宽。标量值a可以被重复使用几次,直到它被重新加载为止。
其次,矩阵B中的标量值b可以被流式传输到脉动阵列中。特别地,可以将相同的标量值b转发到脉动阵列的行中的一系列MAC单元。
第三,脉动阵列的列中的MAC单元可以一起使用矩阵A中的行和矩阵B中的列来计算点积。只有点积计算的最终值可以被用于导出结果。特别地,只要最终点积的计算是正确的,脉动阵列中的每个MAC单元中的中间值(即,部分和)可以不必是正确的。
基于上述观察,相对于脉动阵列中的常规MAC单元的运算,可以设计用于脉动阵列中的MAC单元的增强乘法器和加法器。特别地,通常在每个MAC单元中找到的乘法器和加法器可以融合在一起,并且可能使用附加组件,以产生可以利用上述观察的增强型MAC单元。增强型MAC单元可以利用更高基数乘法,这可以简化CSA树缩减。与常规MAC单元相比,增强型MAC单元可以更快、可以更有效、可以被优化以执行矩阵乘法、可以包括更少的硬件,并且可以更节能。当增强型MAC单元用于(诸如用于DNN的加速器的那些)脉动阵列中的矩阵A与矩阵B的矩阵乘法时,增强型MAC单元可以包括这些和其他优点。
本文提供了这种增强型MAC单元的若干示例结构。通常,本说明书中描述的主题的一个方面包括用于将两个数相乘以产生结果的乘法和累加(MAC)单元。所述MAC单元可以包括第一触发器、第二触发器、复用器、至少一个进位保存加法器和多个并行分段加法器。第一触发器可以被配置成锁存第一数并且输出第一数和基于第一数的倍数。第二触发器可以被配置成加载第二数并且输出第二数。复用器可以与第一触发器和第二触发器通信,并且可以被配置成从第一触发器接收第一数和倍数以及从第二触发器接收第二数。复用器可以被配置成基于第一数、倍数和第二数来输出多个部分积。进位保存加法器可以与复用器通信。进位保存加法器可以被配置成接收多个部分积以及部分和,并且基于多个部分积和部分和来输出至少两个部分求和数。并行分段加法器可以与至少一个进位保存加法器通信。并行分段加法器可以被配置成接收至少两个部分求和数,对至少两个部分求和数执行加法运算,并且输出结果。可以使用Booth编码对第二数进行编码。MAC单元可以包括至少一个硬倍数计算器。至少一个硬倍数计算器可以与第一触发器通信,并且可以被配置成接收预加载数并且将倍数输出到第一触发器。至少一个进位保存加法器可以仅包括多到二进位保存加法器。至少一个进位保存加法器可以包括进位保存加法器和多到二进位保存加法器。MAC单元可以包括第三触发器。第三触发器可以与多到二进位保存加法器通信,并且可以被配置成加载部分和并且将部分和输出到多到二进位保存加法器。第三触发器可以被配置成根据从另一MAC单元输出的部分和来加载部分和。多个并行分段加法器可以被配置成对呈部分冗余形式的数的段进行并行操作。第一触发器可以被配置成以正常时钟速度的两倍来锁存第一数。MAC单元可以是使用乘法器和加法器的融合版本的增强型MAC单元。MAC单元可以在脉动阵列内。
本主题的另一方面包括乘法和累加(MAC)单元。MAC单元可以包括第一触发器、第二触发器、第三触发器、乘法器和加法器。第一触发器可以被配置成锁存第一数并且输出到第一数。第二触发器可以被配置成基于第一数来锁存倍数并且输出该倍数。第三触发器可以被配置成加载第二数并且输出第二数。乘法器可以与第一、第二和第三触发器通信。乘法器可以被配置成从第一触发器接收第一数、从第二触发器接收倍数,以及从第三触发器接收第二数。乘法器可以被配置成基于第一数、倍数和第二数来产生部分积。乘法器可以被配置成输出部分积。加法器可以与乘法器通信。加法器可以被配置成从乘法器接收部分积。加法器可以被配置成将部分积与部分和数相加以产生结果。MAC单元可以包括双倍数据速率触发器,该双倍数据速率触发器被配置成以正常时钟速度的两倍来锁存第一数和倍数。MAC单元可以包括与双倍数据速率触发器以及第一和第二触发器通信的解复用器。解复用器可以被配置成从双倍数据速率触发器接收第一数和倍数,将第一数输出到第一触发器,并且将倍数输出到第二触发器。MAC单元可以包括第四触发器。第四触发器可以与加法器通信,并且可以被配置成加载部分和数并且将部分和数输出到加法器。MAC单元可以在脉动阵列内。
本主题的又一方面包括一种计算至少一个乘法和累加运算的结果的过程。可以使用第一触发器来锁存第一数和基于第一数的倍数。可以使用第二触发器来加载第二数。可以使用复用器基于第一数、倍数和第二数来产生多个部分积。可以从复用器接收多个部分积。可以使用至少一个进位保存加法器来接收部分和。可以使用至少一个进位保存加法器,基于多个部分积和部分和来产生至少两个部分求和数。可以使用多个并行分段加法器来接收至少两个部分求和数。可以对至少两个部分求和数执行加法运算以计算结果。可以使用Booth编码来编码第二数。可以使用至少一个硬倍数计算器来计算倍数。过程可以包括加载部分和并且将部分和输出到至少一个进位保存加法器。
附图说明
图1A描绘了用于将矩阵A和B相乘以产生输出矩阵C的示例脉动阵列。
图1B描绘了可以在用于将矩阵A和B相乘的脉动阵列中使用的示例MAC单元。
图2描绘了数的部分冗余形式,其可以是几个位长。
图3描绘了在脉动阵列中的每个MAC单元中使用并行分段加法器执行的示例运算。
图4A描绘了用于将矩阵A和B相乘以产生输出矩阵C的另一示例脉动阵列。
图4B描绘了可以在用于将矩阵A和B相乘的脉动阵列(诸如结合图4A描述的脉动阵列)中使用的MAC单元。
图5描绘了用于将矩阵A和B相乘以产生输出矩阵C的又一示例脉动阵列。
图6A描绘了MAC单元,其可以在用于将矩阵A和B相乘的脉动阵列(诸如结合图4A和/或图5描述的脉动阵列)中使用。
图6B描绘了MAC单元,其可以在用于将矩阵A和B相乘的脉动阵列(诸如结合图4A和/或图5描述的脉动阵列)中使用。
图7是用于计算乘法和累加运算的结果的示例过程的流程图。
图8描绘了根据本公开的各方面的示例电子设备的框图。
具体实施方式
图1A描绘了用于将矩阵A 110和B 120相乘以产生输出矩阵C130的示例脉动阵列100。特别地,脉动阵列100可以是乘法和累加(MAC)单元的2D阵列,其具有用于矩阵A 110和矩阵B 120的密集矩阵乘法以产生矩阵C 130的权重固定方法。在一些示例中,脉动阵列100可以是4×4的大小。可以通过计算矩阵A 110中的每行和矩阵B 120中的每列的点积来导出矩阵C 130。因此,矩阵C 130可以是脉动阵列100的输出。脉动阵列100中的每个条目可以表示执行点积计算以生成输出矩阵C 130的MAC单元。矩阵B 120中的标量值可以在脉动阵列100中水平移动,使得它被若干MAC单元使用。脉动阵列100中的MAC单元之间的中间值可能是未知的。
图1B描绘了可以在用于将矩阵A和B相乘的脉动阵列(诸如结合图1A描述的脉动阵列)中使用的示例MAC单元150。MAC单元150可以包括触发器152、154、156和160、乘法器158和加法器162。图1B还示出了附加触发器170、172和174,其可以在脉动阵列中的其他MAC单元内。
触发器152和154可以在矩阵A中预加载和锁存标量值。特别地,触发器152可以用于预加载矩阵A的标量值a的值,并且可以将该值传递给触发器154。触发器154可以用于加载和锁存标量值a,并且在计算中多次重复使用该值,直到其被重新加载为止。触发器156可以用于加载矩阵B的标量值b。加载在触发器156中的标量值b可以一个接一个地用在脉动阵列的行中的每个MAC单元中。乘法器158可以将已经分别加载和/或锁存在触发器154和触发器156中的两个标量数a和b相乘。特别地,乘法器158可以分别从触发器154和156接收标量值a和b作为输入,并且可以将这些标量值相乘。乘法器158可以将乘法的结果输出到加法器162。触发器160可以例如加载和/或锁存可能已经由脉动阵列中的先前MAC单元输出的部分和。加法器162可以接收乘法器158的输出以及在触发器160中加载和/或锁存的部分和作为输入,并且可以输出这些输入的和作为可以由脉动阵列中的下游MAC单元的触发器(诸如触发器174)存储的部分和输出。附加触发器170、172和174可以在脉动阵列中的其他MAC单元中。中间结果可以是由MAC单元中的加法器162输出的部分和。该部分和可以不与在脉动阵列底部处的MAC单元相关联,并且可以不被用作最终结果。相反,最终结果可以由位于脉动阵列底部处的MAC单元的加法器输出。
基于上述观察,相对于脉动阵列内的常规MAC单元的运算,可以设计用于脉动阵列中的MAC单元的增强型乘法器和加法器。特别地,可以对MAC单元进行设计优化,以便利用如何在脉动阵列中输入和使用和/或重复使用数据。在一些示例中,对乘法器和加法器的设计的增强可以适用于通用目的。在一些示例中,对乘法器和加法器的设计的增强可能不适用于通用目的。
在脉动阵列中的MAC单元中使用高基数乘法器(诸如Booth 3或Booth 4乘法器)的障碍之一可能是硬倍数。如上所述,这可能是因为在执行标量值a和标量值b的乘法中的其他步骤之前可能必须计算这样的硬倍数。基于上述第一观察,当预加载矩阵A中的每个标量值a时,可以计算硬倍数。可以多次使用所计算的硬倍数,直到新的标量值a由MAC单元预加载为止。所计算的硬倍数可以偏离乘法的关键路径,并且在一些示例中,可以在多周期运算中实现。因此,可以在脉动阵列中的MAC单元中使用高基数Booth乘法器。高基数Booth乘法器可以不在每个时钟周期执行硬倍数计算,并且可以不执行用在乘法的关键路径中的硬倍数计算。高基数Booth乘数器可以比常规乘法器更快,因为其生成更少的部分积。
基于上述第二观察,矩阵B中的标量值b最初可以是Booth编码的。一旦标量值被Booth编码,它们就可以被流传输到脉动阵列中的MAC单元中。在标量值b被流传输到脉动阵列之前对标量值b进行Booth编码可以允许Booth编码函数从由每个MAC单元中的乘法器执行的乘法的关键路径卸载。
脉动阵列中的每个MAC单元可以使用加法器,该加法器将来自每个MAC单元中的乘法器的乘积与来自上述MAC单元/脉动阵列单元格的部分和相加。MAC单元然后可以将结果向下传递到下面的MAC单元/脉动阵列单元格。基于上述第三观察,可以简化每个MAC单元中的加法器。特别地,部分冗余形式可以用于每个加法器。
图2描绘了数200的部分冗余形式,其可以是几个位长。在部分冗余形式中,数200可以使用几个更小的段来表示。例如,如图2所示,如果数200是24位整数,则它可以被表示为六个4位的段,诸如段202、204、206、208、210和212,除了最后一个段之外的每个段可以包括相应的1位进位,诸如到下一个段的进位214、216、218、220和222。最后一个段可以不包括或使用进位。因此,24位整数可以由总共6×4+5个位=29个位来表示。这种冗余形式可以用于每个MAC单元中的部分和。这可以用于垂直累加的部分和,并且在每个MAC单元中,如果正在执行8位乘8位乘法,则我们可以将来自乘法器的积(诸如16位数)相加。
常规MAC单元中的每个加法器(诸如结合图1B描述的加法器162)可以由并行分段加法器代替。基于数(诸如数200)的部分冗余形式,适当数量的分段加法器可以在每个MAC单元内并行运算。
例如,对于图2的数200,可以并行操作六个4位加法器,每个加法器用于与数200相关联的每个段。来自上面的MAC单元/脉动阵列单元格的进位(如果存在一个的话)可以在由脉动阵列中的每个MAC单元执行的加法运算中使用。由每个MAC单元输出的进位可以被向下传递到下面的MAC单元/脉动阵列单元格(如果存在一个的话)。在脉动阵列的底部处,部分冗余形式可以被转换为非冗余形式。
图3描绘了在脉动阵列中的每个MAC单元中使用并行分段加法器执行的示例运算300。在图3中,并行分段加法器用于将来自每个MAC单元中的乘法器的积与来自上面的MAC单元/脉动阵列单元格的部分和相加。在示例运算300中,将作为来自包括两个8位段的每一MAC单元中的乘法器的积的16位数310与包括三个8位段的呈部分冗余形式的24位部分和320相加。使用三个8位并行分段加法器将数310与部分和320相加。
16位数310可以使用两个段p1和p0来表示。数p1:p0可以是16位积。在每个脉动阵列MAC单元中,该数可以是从其乘法器输出的积。此外,可以使用段s2、s1和s0以及进位c2和c1来表示部分冗余形式的24位部分和320。数s2:s1:s0和c2:c1可以使用三个8位段以及两个进位位来表示部分冗余形式的24位部分和。可以从脉动阵列中的每个MAC单元上面的MAC单元/脉动阵列单元格接收部分和。
可以使用多个并行分段加法器将两个数(诸如16位乘积数310和部分和320)相加。例如,可以使用三个8位并行分段加法器340、350和360将16位乘积数310与部分和320相加。尽管未示出,但是可以接收来自脉动阵列中的每个MAC单元上面的MAC单元/脉动阵列单元格的进位,并将其用作并行分段加法器340中的第一个的输入。可以由最后一个并行分段加法器输出的进位可以不被传播到下一个段,而是可以被传递到每个MAC单元下面的MAC单元/脉动阵列单元格。并行分段加法器340、350和360的输出可以分别是段370、372和374以及进位376和378。段370、372和374与进位376和378一起可以形成使用并行分段加法器执行的运算300的最终结果380。
尽管运算300示出了16位数310,其是来自添加到24位部分和320的乘法器的乘积,但是可以以类似的方式使任何长度的数或部分和相加。附加地,尽管图3中示出了8位段和特定数量的进位,但是可以以与图3中类似的方式使用任何基本相等大小的段和任何数量的进位。另外,尽管图3中示出了三个并行分段加法器,但是可以以与图3中类似的方式使用更多或更少数量的并行分段加法器。
每个MAC单元中的乘法器可以使用进位保存加法器(CSA)。CSA可以是数字加法器,其可以在乘法器中使用,以计算三个或更多个输入数的总和作为乘法运算的一部分。CSA可以输出两个数,其可以被求和以产生要被求和的原始数的最终结果。CSA可以与树相关联,该树可以具有将由CSA执行的若干级加法,以输出用于产生原始求和的最终结果的两个数。可以在每个MAC单元中的乘法器和加法器中使用进位传播加法器(CPA),以在段被加在一起时适当地计算(多个)进位位。
图4A描绘了用于将矩阵A 410和B 420相乘以产生输出矩阵C430的示例脉动阵列400。特别地,脉动阵列400可以是乘法和累加(MAC)单元的2D阵列,其具有用于矩阵A 410和矩阵B 420的密集矩阵乘法以产生矩阵C 430的权重固定方法。在一些示例中,脉动阵列400可以具有4×4的大小。图4A还示出了Booth编码器440以及底部CPA 445。Booth编码器440可以用于对矩阵B 420中的标量值b进行Booth编码。一旦这些标量值被Booth编码,它们就可以被流传输到脉动阵列400中的MAC单元中。在将标量值b流传输到脉动阵列400中之前对这些值进行Booth编码可以允许从每个MAC单元中的乘法器的关键路径卸载Booth编码函数。Booth编码器440的输出b值和矩阵A410的标量值可以用作脉动阵列400中的每个MAC单元中的融合乘法器和加法器的输入。融合乘法器和加法器可以用在至少部分地计算矩阵A 410中的每行和矩阵B 420中的每列的点积中。CPA 445可以类似于实现为上述CPA的若干并行分段加法器来操作。在脉动阵列400底部处的MAC单元中的融合乘法器和加法器的输出可以被输出到底部CPA 445以相加而产生矩阵C 430的值。
图4B描绘了可以在用于将矩阵A和B相乘的脉动阵列(诸如结合图4A描述的脉动阵列)中使用的MAC单元450。MAC单元450可以用在脉动阵列(诸如结合图4A描述的脉动阵列400)中。MAC单元450可以包括在常规MAC单元(诸如图1B的MAC单元150)中找到的常规乘法器和加法器的融合版本。MAC单元450可以包括触发器452、454、458和462、硬倍数计算器456、复用器460、CSA树470、3到2CSA 472以及并行分段加法器480。
触发器452和454可以用于预加载和锁存矩阵A中的标量值。特别地,触发器452可以用于预加载矩阵A的标量值的值a,并且将该值输出到触发器454。触发器454可以用于加载和锁存来自触发器452的标量值a,并且在计算中重复使用该值几次,直到其被重新加载为止。因此,加载和锁存标量值a可以涉及单个时钟周期或仅几个时钟周期。触发器454可以将其接收的值输出到硬倍数计算器456。硬倍数计算器456可以接收已经由触发器452和454预加载和锁存的标量值a。硬倍数计算器456可以将其接收的数乘以一个或多个整数倍,以便预计算硬倍数,并且将(多个)乘法的结果输出到触发器458。特别地,硬倍数计算器456可以输出标量值a的硬倍数。每个a的硬倍数可以是不是2的幂的任何倍数。例如,硬倍数计算器456可以将倍数±3a、±5a和/或±7a输出到触发器458。硬倍数的预计算可以在一个时钟周期或几个时钟周期中发生,并且可以不必在每个时钟周期发生。因此,硬倍数计算可能偏离乘法的关键路径。触发器458可以从触发器454和/或从硬倍数计算器456接收标量值a。另外,触发器458可以接收由硬倍数计算器456输出的(多个)值。触发器458可以加载和/或锁存其接收的值,并且可以将这些值输出到复用器460。
触发器462可以用于加载矩阵B的Booth编码的标量值b。例如,矩阵B的标量值b可以被Booth3编码和加载,诸如通过使用基数8的Booth编码,并且将结果加载到触发器462。加载在触发器462中的Booth编码的标量值b可以一个接一个地用在脉动阵列的行中的每个MAC单元中。触发器462可以将加载的Booth编码值b输出到复用器460。
复用器460可以将值a、Booth编码值b以及它接收的a的硬倍数作为输入,并且可以将若干部分积输出到CSA树470。例如,复用器460可以从触发器458接收值a、从硬倍数计算器456接收a的硬倍数的值,以及从触发器462接收Booth编码值b,并且可以将三个部分积输出到CSA树470。复用器460可以用于实现例如输入的Booth3乘法。
CSA树470可以是常规CSA的改变版本,其可以仅包含多到二CSA的第一级。这可能意味着CSA树470可以接受多个输入并且输出两个数。例如,CSA树470可以包括3到2CSA的第一级,并且可以接受三个输入数并且可以输出两个数。在一些示例中,取决于能够乘以乘数的位的数量,可以存在许多级的CSA,诸如3到2和/或4到2CSA,其可以被称为CSA树。由CSA树470输出的数可以分别各自呈部分冗余形式。这些数可以被添加到来自上面的MAC单元/脉动阵列单元格的部分和的部分冗余形式。触发器474(其可以是或可以不是MAC单元450的一部分)可以加载和/或锁存来自MAC单元450上面的MAC单元/脉动阵列单元格的部分和。触发器474可以将该值输出到多到二CSA,诸如3到2CSA 472。
在MAC单元450中,由CSA树输出的数的部分冗余形式(其可以表示常规乘法器的积)可以被添加到来自上面的MAC单元/脉动阵列单元格的部分和的部分冗余形式。可以使用多到二CSA(诸如3到2CSA 472)来执行该加法。此外,在包括传统MAC单元乘法器和加法器的融合版本的MAC单元450中,可以不使用(即跳过)在常规乘法器中使用的CPA。由3到2CSA472执行的该加法运算可以以与结合图3描述的运算300类似的方式执行。例如,由CSA树470输出的呈部分冗余形式的两个16位数可以与来自触发器474的部分和的呈部分冗余形式的24位数及5个进位位相加。可以使用3到2CSA 472来减少结果,3到2CSA 472可以接受三个数作为输入并且输出两个数。特别地,可以表示乘法器的输出的来自CSA树470的两个数(诸如两个16位数)可以与部分和数(诸如24位数)一起输入到3到2CSA 472。3到2CSA 472的输出可以是两个数。例如,当两个16位数和24位数相加时,3到2CSA 472可以产生两个24位数作为输出。在一些示例中,CSA树470和3到2CSA 472可以被组合成单个4到2CSA,其可以替换CSA树470和3到2CSA 472。所得的4到2CSA可以接受通常由CSA树470接收的相同的三个输入以及通常输入到3到2CSA 472的部分和数作为输入。所得的4到2CSA可以输出通常由3到2CSA 472输出的两个数。
由3到2CSA 472输出的数可以例如由若干并行分段加法器480相加。对于在脉动阵列底部处的MAC单元,并行分段加法器可以被实现为底部CPA。例如,如果执行Booth3编码和乘法,则可以使用六个4位并行分段加法器来执行该加法。该加法可以产生由并行分段加法器480输出的数,其表示MAC单元450的输出。例如,由MAC单元450输出的数可以包括呈部分冗余形式的24位及5个进位位。
在MAC单元450中,通常在MAC单元中找到的乘法器和加法器可以被融合在一起以产生增强型MAC单元设计。当与常规MAC单元设计相比时,增强型MAC单元设计对于执行矩阵乘法而言可以是更高效和优化的,可以包括更少的硬件,并且可以更节能。当增强型MAC单元设计用于(诸如用于DNN的加速器的那些)脉动阵列中的矩阵乘法时,增强型MAC单元设计可以包括这些和其他优点。
与MAC单元450相关的上述示例可以被描述为使用Booth3编码和乘法。然而,如果要相乘和/或累加的数的精度更高,诸如24位数与另一24位数相乘,则可以使用MAC单元的更高基数的Booth设计。在一些示例中,如果使用这种更高基数的Booth设计,则硬倍数计算可能涉及更大的复杂性,但是可以通过预加载和锁存矩阵A的下一个标量值a来实现。可替选地或附加地,硬倍数计算可以作为多周期运算来执行。MAC单元的更高基数Booth设计还可以涉及增加CSA树470的高度,可能调谐并行分段加法器480,以及调整由MAC单元的组件输入和输出的数的部分冗余形式。例如,并行分段加法器480可以包括用于执行48位加法的八个6位加法器。
对于n位乘n位乘法,MAC单元内的乘法器的复杂度可以表示为O(n2)。乘法运算的复杂度和MAC单元乘法器可能受到乘法中涉及的被乘数和乘数的影响。特别地,被乘数的精度(诸如矩阵A的标量值a)可以影响硬倍数计算、进位保存加法器树缩减的宽度、以及最终进位传播加法器。乘以被乘数、乘数(诸如矩阵B的标量值b)的精度可能影响进位保存加法器树缩减的高度。如上所述,在一些示例中,可以预计算硬倍数。在这样的示例中,缩减树的宽度可以主要在树的区域上而非关键路径上。另外,在这样的示例中,最终进位传播加法器可以与并行分段加法器混合。因此,在这样的示例中,矩阵A的标量值a的精度可能不会像矩阵B的标量值b的精度那样显著地影响计算的时延。因此,在一些示例中,可以在脉动阵列的值/数输入中使用不对称精度,并且与矩阵B相比,更高精度可以被用于矩阵A。在这些示例中,包括更高精度数的矩阵可以被定义为矩阵A。例如,16位或32位整数可以用于矩阵A,而矩阵B可以包括8位整数。
尽管前面的示例假设使用整数算术,但是浮点算术可以使用具有每个MAC单元的脉动阵列(诸如分别结合图4A和4B描述的脉动阵列400和MAC单元450)来执行。上面提出的技术可以以与上面关于整数算术描述的类似方式应用于用于尾数乘法的浮点算术。上面提出的技术也可以以与上面关于整数算术描述的类似方式应用于块浮点算术和相关数格式。部分冗余形式的数(诸如结合图2描述的部分冗余形式的数200)和并行分段加法器(诸如结合图4B描述的并行分段加法器480)也可以用于由MAC单元执行浮点算术。然而,为了执行这种浮点算术,可能需要MAC单元的设计中的附加改变。
图5描绘了用于将矩阵A 510和B 520相乘以产生输出矩阵C 530的示例脉动阵列500。特别地,脉动阵列500可以是乘法和累加(MAC)单元的2D阵列,其具有用于矩阵A 510和矩阵B 520的密集矩阵乘法以产生矩阵C 530的权重固定方法。在一些示例中,脉动阵列500可以具有4×4的大小。图5还示出了硬倍数计算器540。硬倍数计算器540可以接收矩阵A510的标量值a。硬倍数计算器540可以将其接收的数乘以一个或多个整数倍,以便预计算一个或多个硬倍数,并且将(多个)乘法的结果输出到脉动阵列500中的MAC单元。特别地,硬倍数计算器540可以输出值a的(多个)硬倍数,每个硬倍数可以是不为2的幂的任何倍数。例如,硬倍数计算器540可以输出±3a、±5a和/或±7a的倍数。(多个)硬倍数的预计算可以在一个时钟周期或几个时钟周期中发生,并且可以不需要重新计算几个周期。因此,可以不必在每个时钟周期发生(多个)硬倍数的预计算,这可以允许高效计算。因此,(多个)硬倍数计算可能偏离乘法的关键路径。矩阵A 510的标量值、由硬倍数计算器540输出的(多个)硬倍数、以及矩阵B 520的标量值b可以用作脉动阵列500中的每个MAC单元中的融合乘法器和加法器的输入。融合的乘法器和加法器可以用在至少部分地计算矩阵A 510中的每行和矩阵B520中的每列的点积中,以产生矩阵C 530的行和列。
MAC单元中使用的更高基数Booth乘法器的区域开销可以通过共享硬倍数计算器来减少。一种设计技术可以是将硬倍数计算器放置在脉动阵列的顶部,诸如示出在脉动阵列500的顶部处的硬倍数计算器540。当加载矩阵A 510时,可以使用该硬倍数计算器。因此,脉动阵列中的每个MAC单元可以不包括硬倍数计算器。使用该技术,可以使用附加的线来将所计算的(多个)硬倍数传递到脉动阵列中的MAC单元。通过将硬倍数计算器放置在脉动阵列的顶部,脉动阵列中的每个MAC单元的功能性可以不改变。例如,可以用于在每个MAC单元中执行计算的任何软件不需要知道在将矩阵A推送到脉动阵列之前是否计算了硬倍数。如将更详细地描述的,下面的图6A展示了可以在脉动阵列的顶部处使用硬倍数计算器的技术,该脉动阵列具有可以用于传递所计算的硬倍数的附加线。
可替选地,矩阵A 510的标量值a的重新加载可以以比正常时钟速度更快的速率进行。例如,对于Booth3乘法器,a和3a最初可以被推送,然后用这些值重新加载触发器可以以正常时钟速度的两倍发生。例如,可以在时钟的上升沿上重新加载标量值a,并且可以在时钟的下降沿上加载3a。对于该示例,可以用于计算诸如3a的硬倍数的硬倍数计算器逻辑也可以被设计为匹配该更快的时钟速度。如将更详细地描述,下面的图6B演示了可以以快于正常时钟速率重新加载标量值a的技术。
另一种设计技术可以是在脉动阵列中的相邻MAC单元的一部分中共享硬倍数计算器。例如,脉动阵列中的两个垂直相邻的MAC单元或2×2MAC单元可以共享一个硬倍数计算器。使用这种技术,可以使用可以是局部线的附加线来分配硬倍数。使用该技术,标量值a和a的(多个)硬倍数可以可替选地以更高的时钟速率重新加载。
图6A描绘了可以在脉动阵列中使用的MAC单元600,用于将矩阵A和B相乘。例如,MAC单元600可以在结合图4A和/或图5描述的脉动阵列中。MAC单元600可以包括触发器610、612、614、616、618和622、乘法器620和加法器630。图6A还示出了附加触发器640、642、644和648,其可以在脉动阵列中的其他MAC单元中。
触发器610和612可以预加载和锁存矩阵A中的标量值。特别地,触发器610可以用于预加载矩阵A的标量值a,并且可以将该值传递给触发器612。触发器612可以用于加载和锁存标量值a,并且在计算中重复使用该值若干次,直到其被重新加载为止。触发器614和616可以预加载和锁存矩阵A中的标量值a的(多个)硬倍数。特别地,触发器614可以用于预加载矩阵A的标量值a的预计算的(多个)硬倍数,并且可以将这些值传递到触发器616。触发器616可以用于加载和锁存标量值a的预计算的(多个)硬倍数,并且在计算中重复使用这些值若干次,直到它们被重新加载为止。触发器618可以用于加载矩阵B的标量值b。加载在触发器618中的标量值b可以一个接一个地用在处于脉动阵列的行中的每个MAC单元中。
乘法器620可以将已经加载和/或锁存在触发器612和/或触发器616以及触发器618中的值相乘。特别地,乘法器620可以从触发器612、616和/或618接收标量值a和/或标量值a的硬倍数以及标量值b作为输入,并且可以将这些值中的一个或多个相乘以产生部分积。乘法器620可以将乘法的结果输出到MAC单元600中包括的加法器630。触发器622可以加载和/或锁存可能已经由脉动阵列中的先前MAC单元输出的部分和。加法器630可以接收乘法器620的输出以及在触发器622中加载和/或锁存的部分和作为输入,并且可以输出这些输入的和作为部分和输出。该输出可以由脉动阵列中的下游MAC单元的触发器(诸如触发器644)存储。附加触发器640、642、644和648可以在脉动阵列中的其他MAC单元中。中间结果可以不用作最终结果,该中间结果可以是由不在脉动阵列的底行中的MAC单元中的加法器630输出的部分和。相反,最终结果可以由脉动阵列的底行中的MAC单元的加法器输出。
图6B描绘了可以在脉动阵列中使用的MAC单元650,用于将矩阵A和B相乘。例如,MAC单元650可以在结合图4A和/或图5描述的脉动阵列中。MAC单元650可以包括解复用器662、触发器660、664、666、668和672、乘法器670和加法器680。图6A还示出了附加触发器690、692和694,其可以在脉动阵列中的其他MAC单元中。
触发器660可以预加载和/或锁存矩阵A中的标量值以及这些标量值的(多个)硬倍数。特别地,触发器660可以用于预加载矩阵A的标量值a以及预加载值a的预计算的(多个)硬倍数,并且可以将这些值传递到解复用器662。触发器660可以以双倍数据速率操作,并且因此可以被认为是双倍数据速率触发器。解复用器662可以用于加载和锁存标量值a以及a的预计算的(多个)硬倍数,并且将这些值分别输出到触发器664和666。触发器664可以用于加载和锁存标量值a,并且在计算中重复使用该值若干次,直到其被重新加载为止。触发器666可以用于加载和锁存标量值a的预计算的(多个)硬倍数,并且在计算中重复使用这些值若干次,直到它们被重新加载为止。触发器668可以用于加载矩阵B的标量值b。加载在触发器668中的标量值b可以一个接一个地用于处于脉动阵列的行中的每个MAC单元中。
乘法器670可以将已经加载和/或锁存在触发器664和/或触发器666以及触发器668中的值相乘。特别地,乘法器670可以从触发器664、666和/或668接收标量值a和/或标量值a的(多个)硬倍数以及标量值b作为输入,并且可以将这些值中的一个或多个相乘以产生部分积。乘法器670可以将乘法的结果输出到MAC单元650中包括的加法器680。触发器672可以例如加载和/或锁存可能已经由脉动阵列中的先前MAC单元输出的部分和。加法器680可以接收乘法器670的输出以及在触发器672中加载和/或锁存的部分和作为输入,并且可以输出这些输入的和作为部分和输出。该输出可以由脉动阵列中的下游MAC单元的触发器(诸如触发器692)存储。附加触发器690、692和694可以在脉动阵列中的其他MAC单元中。中间结果可以不用作最终结果,该中间结果可以是由不在脉动阵列的底行中的MAC单元中的加法器680输出的部分和。相反,最终结果可以由脉动阵列的底行中的MAC单元的加法器输出。
矩阵B的Booth编码的标量值b而不是未编码的标量值b中的流传输可以增加脉动阵列中的每个MAC单元中的线的数量。例如,使用Booth 3编码的8位乘法可以使用三组Booth编码,每组使用五条线。在该示例中,线可以用于a、2a、3a、4a和符号,其中a、2a、3a和4a是独热编码的,并且除了0,这四个能够是零。在该示例中,与用于未编码的8位数据的八条线相比,可以使用十五条线。减少线的数量的一种方式可以是使用另一种编码。例如,4位二进制补码带符号表示可以用于Booth3编码。在该示例中,可以使用-8和+7之间的数来覆盖-4和+4之间的所有可能情况。在该示例中,每个MAC单元(诸如结合图4B描述的MAC单元450)可以使用解码器来驱动每个复用器,诸如结合图4B描述的复用器460。输入矩阵B的标量值b的另一种方法可以是使用更高的数据速率,类似于上面参考图6B描述的数据速率。使用这种方法,矩阵A的标量值a和相关的硬倍数值以双倍数据速率被预加载。例如,使用该方法,可以使用八条线来以正常时钟速率的两倍(即,2X数据速率)传送和/或加载矩阵B的Booth编码的标量值b。
在一些示例中,可以使用输出固定脉动阵列。输出固定脉动阵列可以不将乘法器的操作数保持/存储在每个MAC单元内。另外,类似于上述内容,预计算的硬倍数可以在输出固定脉动阵列中垂直向下传递。在这些示例中,可以流传输矩阵B的Booth编码的标量值b。附加地,在这些示例中,部分冗余形式的数可以与并行分段加法器一起使用。
图7是用于计算至少一个乘法和累加运算的结果的示例过程700的流程图。过程700可以由MAC单元(诸如结合图4B、6A和6B描述的MAC单元)的各种元件来执行。
在框710中,可以使用第一触发器(诸如结合图4B描述的触发器458)来锁存第一数和基于第一数的倍数。例如,可以锁存矩阵A的标量值a和(多个)硬倍数值。锁存的数可以在脉动阵列中的计算中重复使用若干次,直到它们被重新加载和/或重新锁存为止。这些锁存数可以被输出到复用器。
在框720中,可以使用第二触发器(诸如结合图4B描述的触发器462)来加载第二数。例如,可以加载矩阵B的Booth编码的标量值b。加载的数可以被流传输到MAC单元的脉动阵列中。
在框730中,可以使用复用器(诸如结合图4B描述的复用器460)基于第一数、倍数和第二数来产生多个部分积。例如,复用器可以将a的值、b的Booth编码值以及其接收的a的硬倍数作为输入,并且可以基于这些数来输出若干部分积。
在框740中,多个部分积以及部分和可以由至少一个进位保存加法器(诸如结合图4B描述的CSA树470和/或3到2CSA 472)接收。可以从复用器(诸如结合图4B描述的复用器460)接收多个部分积。部分和可以由触发器(诸如结合图4B描述的触发器474)加载并从触发器接收。
在框750中,可以使用至少一个进位保存加法器(诸如结合图4B描述的3到2CSA472)基于多个部分积以及部分和来产生至少两个部分求和数。例如,由结合图4B描述的CSA树470输出的呈部分冗余形式的两个部分求和16位数可以与来自结合图4B描述的触发器474的部分和的呈部分冗余形式的24位数及5个进位位相加。可以使用3到2CSA 472来缩减结果,该3到2CSA 472可以接受三个数作为输入并且输出两个数。特别地,来自CSA树470的两个数(诸如两个16位数)可以与部分和数(诸如24位数)一起输入到3到2CSA 472。至少一个进位保存加法器的输出可以是两个部分求和数。例如,当两个16位数和24位数相加时,3到2CSA 472可以产生两个24位数作为输出,这两个24位数可以被输出到并行分段加法器。
在框760中,可以使用若干并行分段加法器(诸如结合图4B描述的并行分段加法器480)来接收至少两个部分求和数。继续先前的示例,3到2CSA 472可以产生两个24位数作为输出,该两个24位数可以是由并行分段加法器480接收的至少两个部分求和数。
在框770中,可以对至少两个部分求和数执行加法运算以计算结果。由进位保存加法器输出的数可以由并行分段加法器(诸如若干并行分段加法器480)相加。例如,如果执行Booth3编码和乘法,则可以使用六个4位并行分段加法器来执行该加法。该加法可以产生由并行分段加法器输出的数。该数可以表示可以执行过程700的MAC单元的输出。继续先前的示例,由MAC单元(诸如结合图4B描述的MAC单元450)输出的数可以包括呈部分冗余形式的24位及5个进位位。
虽然以特定顺序描述了过程700的操作,但是应当理解,可以修改顺序并且可以并行地执行操作。此外,应当理解,可以添加或省略操作。
图8描绘了示例电子设备800的框图。电子设备800可以包括一个或多个处理器810(诸如一个或多个xPU)、***存储器820、总线830、(多个)网络接口840以及其他组件(未示出)(诸如(多个)存储、(多个)输出设备接口、(多个)输入设备接口)。总线830可以用于在处理器810、***存储器820、(多个)网络接口840和其他组件之间进行通信。电子设备800的任何或所有组件可以与本公开的主题结合使用。
取决于期望的配置,处理器810可以是任何类型的,包括但不限于张量处理单元(TPU)、微处理器、微控制器、数字信号处理器(DSP)或其任何组合。处理器810可以包括脉动阵列,诸如结合图4A和/或图5描述的脉动阵列。处理器810可以包括一级或多级缓存(诸如一级缓存811和二级缓存812)、处理器核心813、一个或多个MAC单元850和寄存器814。处理器核813可以包括一个或多个算术逻辑单元(ALU)、一个或多个浮点单元(FPU)、一个或多个DSP核心或其任何组合。在一些示例中,一个或多个MAC单元850可以在处理器核心813内实现。存储器控制器815也可以与处理器810一起使用,或者在一些实施方式中,存储器控制器815能够是处理器810的内部部分。
取决于期望的配置,物理存储器820可以是任何类型的,包括但不限于易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或其任何组合。物理存储器820可以包括操作***821、一个或多个应用822和程序数据824,该程序数据824可以包括服务数据825。非暂时性计算机可读介质程序数据824可以包括存储指令,所述指令在由一个或多个处理设备执行时实现用于计算乘法和累加运算823的结果的过程。在一些示例中,一个或多个应用822可以被布置为在操作***821上与程序数据824和服务数据825操作。
电子设备800可以具有附加特征或功能性,以及附加接口,以促进基本配置801与任何所需设备和接口之间的通信。
物理存储器820可以是计算机存储介质的示例。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术,或者能够用于存储期望的信息并且能够由电子设备800访问的任何其他介质。任何这样的计算机存储介质能够是设备800的一部分。
(多个)网络接口840可以将电子设备800耦合到网络(未示出)和/或另一电子设备(未示出)。以这种方式,电子设备800能够是电子设备的网络的一部分,诸如局域网(“LAN”)、广域网(“WAN”)、内联网或诸如互联网的多网络的网络。在一些示例中,电子设备800可以包括用于形成到网络的网络连接的网络连接接口和用于形成与另一设备的网络共享连接的本地通信连接接口。连接可以是有线的或无线的。电子设备800可以桥接网络连接和网络共享连接以经由(多个)网络接口840将另一设备连接到网络。
一个或多个MAC单元850可以用于执行乘法和累加运算,诸如矩阵乘法所需执行的那些运算。一个或多个MAC单元850可以是脉动阵列的一部分。例如,MAC单元850及其操作的脉动阵列可以用在可以用于DNN实施方式的加速器中。一个或多个MAC单元850可以是上述MAC单元中的任何一个。例如,(多个)MAC单元850可以类似于并且包括在结合图4B描述的MAC单元450、结合图6A描述的MAC单元600、和/或结合图6B描述的MAC单元650中。
(多个)MAC单元850可以被认为是增强型MAC单元,诸如包括融合乘法器或加法器的增强型MAC单元或本文描述的其他增强型MAC单元。与常规MAC单元相比,这种增强型MAC单元可以更有效、更实用、更优化以执行矩阵乘法、可以包括更少的硬件,并且可以更节能。当增强型MAC单元用于(诸如用于DNN的加速器的那些)脉动阵列中的矩阵乘法时,增强型MAC单元可以包括这些和其他优点。
电子设备800可以被实现为小形状因子便携式(或移动)电子设备的一部分,诸如扬声器、头戴式耳机、耳塞、蜂窝电话、智能电话、智能手表、个人数字助理(PDA)、个人媒体播放器设备、平板计算机(平板电脑)、无线网络手表设备、个人头戴式耳机设备、可穿戴设备、专用设备或包括任何上述功能的混合设备。电子设备800还可以被实现为包括膝上型计算机和非膝上型计算机配置这两者的个人计算机。电子设备800还可以被实现为服务器、加速器或大规模***。
本公开的各方面可以被实现为计算机实现的过程、***或诸如存储器设备或非暂时性计算机可读存储介质的制品。计算机可读存储介质可以由电子设备可读,并且可以包括用于使电子设备或其他设备执行本公开中描述的过程和技术的指令。计算机可读存储介质可以由易失性计算机存储器、非易失性计算机存储器、固态存储器、闪存驱动器和/或其他存储器或其他非暂时性和/或暂时性介质来实现。本公开的各方面可以以不同形式的软件、固件和/或硬件来执行。此外,本公开的教导可以由例如专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他组件来执行。
本公开的各方面可以在单个设备上执行,或者可以在多个设备上执行。例如,包括本文描述的一个或多个组件的程序模块可以位于不同的设备中,并且可以各自执行本公开的一个或多个方面。如本公开中所使用的,除非另有具体说明,否则术语“一(a)”或“一个(an)”可以包括一个或多个项目。此外,除非另有具体说明,否则短语“基于”旨在表示“至少部分地基于”。
本公开的上述方面旨在是说明性的。选择它们是为了解释本公开的原理和应用,而不旨在穷举或限制本公开。所公开的各方面的许多修改和变化对于本领域技术人员来说是显而易见的。
除非另有说明,否则前述替代示例不是相互排斥的,而是可以以各种组合来实现以实现独特的优点。由于能够在不脱离由权利要求限定的主题的情况下利用上面讨论的特征的这些和其他变体和组合,因此示例的前述描述应当通过说明的方式而不是通过限制由权利要求限定的主题的方式来理解。另外,本文描述的示例的提供以及措辞为“诸如”、“包括”等的条款不应被解释为将权利要求的主题限制于具体示例;相反,这些示例仅旨在说明许多可能示例中的一个。此外,不同附图中的相同附图标记能够标识相同或相似的元件。
在本申请中描述了许多示例,并且仅出于说明性目的而呈现。所描述的示例在任何意义上不是并且不旨在是限制性的。本领域普通技术人员将认识到,所公开的主题可以用各种修改和变更来实践,诸如结构、逻辑、软件和电气修改。应当理解,除非另有明确说明,否则所描述的特征不限于在参考其描述的一个或多个特定示例或附图中的使用。
Claims (15)
1.一种用于将两个数相乘以产生结果的乘法和累加(MAC)单元,所述MAC单元包括:
第一触发器,所述第一触发器被配置成锁存第一数并且输出所述第一数和基于所述第一数的倍数;
第二触发器,所述第二触发器被配置成加载第二数并且输出所述第二数;
复用器,所述复用器与所述第一触发器和所述第二触发器通信,所述复用器被配置成从所述第一触发器接收所述第一数和所述倍数以及从所述第二触发器接收所述第二数,并且基于所述第一数、所述倍数和所述第二数来输出多个部分积;
至少一个进位保存加法器,所述至少一个进位保存加法器与所述复用器通信,所述至少一个进位保存加法器被配置成接收所述多个部分积以及部分和,并且基于所述多个部分积和所述部分和来输出至少两个部分求和数;以及
多个并行分段加法器,所述多个并行分段加法器与所述至少一个进位保存加法器通信,所述多个并行分段加法器被配置成接收所述至少两个部分求和数,对所述至少两个部分求和数执行加法运算,并且输出所述结果。
2.根据权利要求1所述的MAC单元,其中,使用Booth编码对所述第二数进行编码。
3.根据权利要求1所述的MAC单元,进一步包括与所述第一触发器通信的至少一个硬倍数计算器,所述至少一个硬倍数计算器被配置成接收预加载数并且将所述倍数输出到所述第一触发器。
4.根据权利要求1所述的MAC单元,其中,所述至少一个进位保存加法器仅包括多到二进位保存加法器。
5.根据权利要求1所述的MAC单元,其中,所述至少一个进位保存加法器包括进位保存加法器和多到二进位保存加法器。
6.根据权利要求5所述的MAC单元,进一步包括与所述多到二进位保存加法器通信的第三触发器,所述第三触发器被配置成加载所述部分和并且将所述部分和输出到所述多到二进位保存加法器。
7.根据权利要求6所述的MAC单元,其中,所述第三触发器被配置成根据从另一MAC单元输出的部分和来加载所述部分和。
8.根据权利要求1所述的MAC单元,其中,所述多个并行分段加法器被配置成对呈部分冗余形式的数的段进行并行操作。
9.根据权利要求1所述的MAC单元,其中,所述第一触发器被配置成以正常时钟速度的两倍来锁存所述第一数。
10.根据权利要求1所述的MAC单元,其中,所述MAC单元是使用乘法器和加法器的融合版本的增强型MAC单元。
11.根据权利要求1所述的MAC单元,其中,所述MAC单元在脉动阵列内。
12.一种计算至少一个乘法和累加运算的结果的方法,所述方法包括:
使用第一触发器来锁存第一数和基于所述第一数的倍数;
使用第二触发器来加载第二数;
使用复用器基于所述第一数、所述倍数和所述第二数来产生多个部分积;
使用至少一个进位保存加法器来接收所述多个部分积和部分和;
使用所述至少一个进位保存加法器,基于所述多个部分积和所述部分和来产生至少两个部分求和数;
使用多个并行分段加法器来接收所述至少两个部分求和数;以及
对所述至少两个部分求和数执行加法运算以计算所述结果。
13.根据权利要求12所述的方法,其中,使用Booth编码来编码所述第二数。
14.根据权利要求12所述的方法,其中,使用至少一个硬倍数计算器来计算所述倍数。
15.根据权利要求12所述的方法,进一步包括:
加载所述部分和;以及
将所述部分和输出到所述至少一个进位保存加法器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/377,743 | 2021-07-16 | ||
US17/377,743 US20230015148A1 (en) | 2021-07-16 | 2021-07-16 | Multiplier and Adder in Systolic Array |
PCT/US2022/035660 WO2023287589A1 (en) | 2021-07-16 | 2022-06-30 | Multiplier and adder in systolic array |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116762056A true CN116762056A (zh) | 2023-09-15 |
Family
ID=82742644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280009769.2A Pending CN116762056A (zh) | 2021-07-16 | 2022-06-30 | 脉动阵列中的乘法器和加法器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230015148A1 (zh) |
EP (1) | EP4272069A1 (zh) |
JP (1) | JP2024509062A (zh) |
KR (1) | KR20230125079A (zh) |
CN (1) | CN116762056A (zh) |
WO (1) | WO2023287589A1 (zh) |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4876660A (en) * | 1987-03-20 | 1989-10-24 | Bipolar Integrated Technology, Inc. | Fixed-point multiplier-accumulator architecture |
KR950004226B1 (ko) * | 1993-02-12 | 1995-04-27 | 삼성전자주식회사 | 디지탈 데이타 승산처리회로 |
US5661673A (en) * | 1995-08-31 | 1997-08-26 | National Semiconductor Corporation | Power efficient booth multiplier using clock gating |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US5938763A (en) * | 1997-08-06 | 1999-08-17 | Zenith Electronics Corporation | System for transposing data from column order to row order |
US7343388B1 (en) * | 2003-03-05 | 2008-03-11 | Altera Corporation | Implementing crossbars and barrel shifters using multiplier-accumulator blocks |
US8307023B1 (en) * | 2008-10-10 | 2012-11-06 | Altera Corporation | DSP block for implementing large multiplier on a programmable integrated circuit device |
US9411554B1 (en) * | 2009-04-02 | 2016-08-09 | Xilinx, Inc. | Signed multiplier circuit utilizing a uniform array of logic blocks |
US9176709B2 (en) * | 2011-11-29 | 2015-11-03 | Apple Inc. | Shared integer, floating point, polynomial, and vector multiplier |
US9483232B2 (en) * | 2014-03-07 | 2016-11-01 | Arm Limited | Data processing apparatus and method for multiplying floating point operands |
US11816446B2 (en) * | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
KR20210086233A (ko) * | 2019-12-31 | 2021-07-08 | 삼성전자주식회사 | 완화된 프루닝을 통한 행렬 데이터 처리 방법 및 그 장치 |
US11113233B1 (en) * | 2020-06-29 | 2021-09-07 | Amazon Technologies, Inc. | Multiple busses in a grouped systolic array |
KR20220071723A (ko) * | 2020-11-24 | 2022-05-31 | 삼성전자주식회사 | 딥러닝 연산 수행 방법 및 장치 |
-
2021
- 2021-07-16 US US17/377,743 patent/US20230015148A1/en active Pending
-
2022
- 2022-06-30 WO PCT/US2022/035660 patent/WO2023287589A1/en active Application Filing
- 2022-06-30 JP JP2023548943A patent/JP2024509062A/ja active Pending
- 2022-06-30 CN CN202280009769.2A patent/CN116762056A/zh active Pending
- 2022-06-30 KR KR1020237026834A patent/KR20230125079A/ko unknown
- 2022-06-30 EP EP22748145.4A patent/EP4272069A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
JP2024509062A (ja) | 2024-02-29 |
EP4272069A1 (en) | 2023-11-08 |
KR20230125079A (ko) | 2023-08-28 |
US20230015148A1 (en) | 2023-01-19 |
WO2023287589A1 (en) | 2023-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3244506B2 (ja) | 小型乗算器 | |
US20210349692A1 (en) | Multiplier and multiplication method | |
Kanhe et al. | Design and implementation of floating point multiplier based on vedic multiplication technique | |
Hickmann et al. | A parallel IEEE P754 decimal floating-point multiplier | |
CN114647399B (zh) | 一种低能耗高精度近似并行定宽乘法累加装置 | |
Jaberipur et al. | Efficient realisation of arithmetic algorithms with weighted collection of posibits and negabits | |
US8892621B2 (en) | Implementation of negation in a multiplication operation without post-incrementation | |
CN110825346B (zh) | 一种低逻辑复杂度的无符号近似乘法器 | |
US9720648B2 (en) | Optimized structure for hexadecimal and binary multiplier array | |
Tang et al. | A high-accuracy hardware-efficient multiply–accumulate (mac) unit based on dual-mode truncation error compensation for cnns | |
US7840628B2 (en) | Combining circuitry | |
US20230015148A1 (en) | Multiplier and Adder in Systolic Array | |
US20220075598A1 (en) | Systems and Methods for Numerical Precision in Digital Multiplier Circuitry | |
Rooban et al. | Implementation of 128-bit radix-4 booth multiplier | |
Nezhad et al. | High-speed multiplier design using multi-operand multipliers | |
Ragunath et al. | Delay optimized binary to BCD converter for multi-operand parallel decimal adder | |
El Atre et al. | Design and implementation of new delay-efficient/configurable multiplier using FPGA | |
Lin et al. | A parallel decimal adder with carry correction during binary accumulation | |
Jaberipur et al. | Posibits, negabits, and their mixed use in efficient realization of arithmetic algorithms | |
Dorrigiv et al. | Conditional speculative mixed decimal/binary adders via binary-coded-chiliad encoding | |
EP4036704A1 (en) | Multiplier | |
Santhi et al. | Realization of parallel prefix adders for power and speed critical applications | |
Reddy et al. | A high speed, high Radix 32-bit Redundant parallel multiplier | |
Setia et al. | Novel Architecture of High Speed Parallel MAC using Carry Select Adder | |
Cui et al. | An Energy-efficient and High-precision Approximate MAC with Distributed Arithmetic Circuits |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40094243 Country of ref document: HK |