CN115039067A - 包括具有高效预规格化和扩展动态范围的熔合乘法累加的脉动阵列 - Google Patents
包括具有高效预规格化和扩展动态范围的熔合乘法累加的脉动阵列 Download PDFInfo
- Publication number
- CN115039067A CN115039067A CN202080086461.9A CN202080086461A CN115039067A CN 115039067 A CN115039067 A CN 115039067A CN 202080086461 A CN202080086461 A CN 202080086461A CN 115039067 A CN115039067 A CN 115039067A
- Authority
- CN
- China
- Prior art keywords
- input
- bit
- normalized
- exponent
- normalizer
- 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
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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49936—Normalisation mentioned as feature only
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- 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
-
- 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/48—Indexing scheme relating to groups G06F7/48 - G06F7/575
- G06F2207/4802—Special implementations
- G06F2207/4818—Threshold devices
- G06F2207/4824—Neural networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Nonlinear Science (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
Abstract
提供系统和方法以在脉动阵列中执行归一化数的乘法累加运算以实现更大的计算密度、减小执行归一化数的乘法累加运算所需的脉动阵列的大小和/或实现更高的吞吐量操作。脉动阵列可以由一列归一化器提供归一化数,并且可能缺乏对非正规数的支持。每个归一化器可以对脉动阵列中每个处理元素的输入进行归一化。脉动阵列可以包括乘法器和加法器。乘法器可以具有多个与输入的数据类型相对应的数据通路。乘法器和加法器可以使用扩展的指数范围来对归一化浮点数进行运算,并且可能缺乏对非正规数的支持。
Description
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。神经网络可以通过电路和数据通路来实现,例如脉动阵列。脉动阵列能够促进人工神经网络的训练和推理阶段的性能。在训练阶段,能够提供输入数据来训练模型。在推理阶段,能够根据模型处理新的输入以获得预测结果。用户应用程序通常在推理阶段使用模型,因此推理阶段通常具有时间敏感性,而推理阶段的延迟会对用户体验产生负面影响。
随着越来越多的应用程序使用人工神经网络,这些应用程序还使用可能导致数值下溢的范围广泛的数字,例如,使用浮点算术计算。虽然对非正规数的计算支持能够有助于适应数值下溢,但为非正规数提供支持会导致脉动阵列中处理元件的复杂性、大小和成本增加。这些增加也会影响系统处理速度和系统功耗。当要求脉动阵列同时支持正规数和非正规数时,功耗和脉动阵列的大小可能变得非常重要。
附图说明
现在将参照以下附图描述各种特征。在所有附图中,附图标记可重复使用以指示所指代元件之间的对应关系。提供附图以示出本文所述的示例且附图不旨在限制本公开的范围。
图1示出了一个示例4×4脉动阵列和一个示例列的归一化器。
图2A示出了根据所公开技术的某些示例的其中输入通过单独的归一化器进入的用于神经网络计算的处理元件。
图2B示出了根据所公开技术的某些示例的其中输入通过同一归一化器进入的用于神经网络计算的处理元件。
图3示出了根据所公开技术的某些示例的包括用于归一化输入数据元素和归一化权重进入用于神经网络计算的脉动阵列的零检测器电路的装置。
图4A示出了根据所公开技术的一些示例的显示选择待归一化的输入的归一化器(其中输入是浮点16位数)。
图4B示出了根据所公开技术的一些示例的显示选择待归一化的输入的归一化器(其中输入是脑浮点16位数)。
图5示出了根据所公开技术的某些示例的用于神经网络计算的乘法累加数据通路。
图6示出了根据所公开技术的一些示例的用于神经网络计算的装置。
图7示出了根据所公开技术的一些示例的由归一化器和用于神经网络计算的处理元件执行的方法。
图8示出了根据本公开的某些方面的计算设备的一个示例。
具体实施方式
在以下描述中,将描述各种示例。出于解释的目的,阐述具体的配置和细节,以便提供对示例的透彻理解。然而,对于本领域的技术人员而言将明显的是,没有具体细节的情况下也可以实践实施例。此外,为了不使所描述的实施例变得模糊,可能会省略或简化众所周知的特征。
卷积神经网络(CNN)通常是前馈人工神经网络,其可以包括多个中间层并且来自一层的输出可以用作下一层的输入。脉动阵列可用于加速神经网络中的工作负载,方法是从内存中读取一次数据,并在多次计算中重用它。可以使用处理元件(PE)的二维阵列来实现脉动阵列。
PE可以分为行和列。输入层的每个PE可以接收输入数据集的一个元素,并使用权重(或滤波器)对元素进行缩放,以指示该元素对输出的影响程度。中间层中的PE可以组合从输入层的每个PE接收到的缩放元素,以计算一组中间输出。例如,中间层中的每个PE可以计算元素权重乘积的总和,然后通过对总和应用激活函数来生成中间输出。来自一个中间层的每个PE的中间输出可以被视为激活投票(或不投票),与指示投票影响的权重相关联,以确定下一个中间层的中间输出。输出层可以从最终中间层生成缩放中间输出的总和,并且基于缩放中间输出的总和是否超过阈值来生成二进制输出(例如,“是”或“否”)。
通常,输入数据集(例如,输入特征图)可以一次馈送一个输入数据元素到其脉动阵列的相应行中,并在从最左边的PE开始的给定行从一个PE传递到另一个PE。随着机器学习应用程序和神经网络应用程序的激增,输入数据集的值和数据类型的多样性同样激增。某些应用程序使用精度更高的浮点32位(FP32)或浮点64位(FP64)数据类型输入。一些应用程序需要更高精度的计算,但使用浮点16位(FP16)、脑浮点16位(bfloat16或BF16)或16位整数或8位整数数据类型输入。这些更高精度的计算可能会导致下溢,其中数据类型(例如FP16)由于该数据类型的范围和精度限制而不再能够表示计算值。因此,一些应用程序或系统允许使用非正规数来最大化数值数据的可表示范围和精度。非正规数(有时称为“次正规”数)与正规数的不同之处在于,隐含位(被识别为有效数的最高有效位)不再设置为高位值或一个值。此外,非正规数的指数域可以设置为全零。
与仅支持常规数相比,提供对非正规数和正规数的支持导致集成电路模具成本、功耗、电路复杂性和延迟显著增加。在数百或数千个PE的脉动阵列中,对非正规数的附加支持会导致集成电路模具成本、功耗、电路复杂性和延迟呈指数级增长。
在一些配置中,PE支持对归一化数执行数学运算而无需支持准确的非正规计算的附加电路。例如,对于支持非正规数和正规数计算的FP16脉动阵列,脉动阵列中的每个处理元件可能需要修改以支持或执行非正规输入的数学运算和/或从那些运算生成非正规输出。这样的修改可能是特别不希望的,并且可能排除为非正规数值提供算术支持。
所公开技术的实施例可以提供系统和方法来降低脉动阵列中的动态功耗并减少完成可能涉及正规数和非正规数的运算所需的电路的大小和数量。此外,所公开技术的实施例可以提供系统和方法以使脉动阵列能够接受正规和非正规数据,从而减少对每种数据类型的专用电路的需要。在一个实施例中,这些问题通过提供具有一列归一化器的脉动阵列来解决,该归一化器向脉动阵列提供归一化输入。在一些实施例中,每个归一化器可以被配置为向脉动阵列提供多于一个的归一化输入。
如本文所公开的,脉动阵列的每个归一化器可以对提供给归一化器的一个或多个输入进行归一化并且至少部分地基于一个或多个输入来输出一个或多个归一化输入。一个或多个归一化输入可以以具有归一化有效数的修改格式来表示。归一化输入可以具有符号位、非零指数位和以非零位作为最高有效位的有效位。可以隐含或隐藏有效位的最高有效位。每个归一化器可以包括以下中的一个或多个:非正规检测器、指数扩展器、前导零编码器、移位器、减法器和多路复用器。每个归一化器可以包含这些组件的任意组合。可以向归一化器提供输入并基于提供给该归一化器的运算符对该输入进行归一化。每个归一化器可以向脉动阵列提供归一化输入。
在一些实现方式中,归一化器可以包含多路复用器,其基于诸如操作码或数据类型指示符的控制信号在两个或更多个输入之间进行选择。可以将多路复用器的输出提供给归一化器的第二部分以进行归一化。
在一些实现方式中,脉动阵列可以具有单独的归一化器,其接收输入数据元素或权重之一并且将该输入的对应归一化版本提供给脉动阵列。脉动阵列的处理元件的初始行中的每个处理元件可以被配置为接收来自第一归一化器的归一化输入数据元素和来自第二归一化器的归一化权重。例如,第一归一化器可以接收输入数据元素并且将归一化输入数据元素提供给第一处理元件,并且第二归一化器可以接收权重并且将归一化权重提供给第一处理元件。
脉动阵列可以被配置为提供零输入数据检测器和零权重检测器的初始列。每个零输入数据检测器和每个零权重检测器可以被配置为检测处理元件的输入何时为零或空。可以为每个零输入数据检测器和每个零权重检测器提供到处理元件的每个输入的归一化版本。例如,可以为每个零输入数据检测器提供归一化输入数据元素,并且可以为每个零权重检测器提供归一化权重。然后每个零输入数据检测器可以被配置为向脉动阵列提供每个归一化输入数据元素,并且然后每个零权重检测器可以被配置为向脉动阵列提供每个归一化权重。在一些实现方式中,每个零权重检测器和每个零输入数据检测器可以被配置为在归一化输入数据元素或归一化权重为零的情况下向脉动阵列提供零输入或空输入。在其他实现方式中,零输入数据检测器和/或零权重检测器可以串联在相应的归一化器之前。在其他实现方式中,零输入数据检测器和/或零权重检测器被配置为与相应的归一化器并行处理输入或权重。
每个归一化器可以被配置为归一化16位数、32位数或任意位数。此外,每个归一化器可以被配置为对浮点数和脑浮点数两者进行归一化。例如,可以向归一化器提供一个具有1位符号、8位指数和7位有效数的BF16数字,以归一化为具有1位符号、10位扩展指数和7位移位有效数的18位格式。此外,可以向归一化器提供一个具有1位符号、5位指数和10位有效数的FP16数字,以归一化为具有1位符号、7位扩展指数和10位移位有效数的18位格式。在其他实现方式中,归一化器能够被配置为将多个不同数据格式的数字归一化为单个、更长的数据格式,其具有足够位数来表示最长有效位和足够数量的指数来表示移位有效数为归一化格式之后的最大指数。
脉动阵列可以具有包括18位乘法器和34位加法器的PE。18位乘法器可以被配置为对从FP16或BF16格式归一化的18位归一化浮点数进行运算。乘法器可以被配置为生成具有一个符号位、十个指数位和23个有效位的乘数积。乘数积可以包括24个有效位,其中最高有效位被隐含或隐藏。34位加法器可以被配置为对34位数进行运算。34位加法器可以被配置为对35位数进行运算,其中一位是隐含或隐藏的。在一些实现方式中,脉动阵列可以被配置为包括18位乘法器和32位加法器,其中18位乘法器和32位加法器可以被配置为对18位归一化浮点数进行运算。在一些实现方式中,脉动阵列可以被配置为包括n位乘法器和m位加法器,其中n可以是任何数字并且n位乘法器和m位加法器可以被配置为对x位归一化浮点数和y位归一化脑浮点数进行运算。变量n、m、x和y可以是任何数字,其中n大于x和y中的较大者。
脉动阵列可以包括PE中的多个延时寄存器。这些延时寄存器中的每一个可以接收输入并且延迟输出输入达至少一个时钟周期。例如,延时寄存器可以放置在乘法器和加法器之间。乘法器可以被配置为产生一个或多个乘数积并且将一个或多个乘数积发送到延时寄存器。延时寄存器可以被配置为在将一个或多个乘数积提供给加法器之前延迟至少一个时钟周期。
脉动阵列可能能够在某些条件下跳过PE中的乘法运算。当在当前操作的输入数据元素上检测到零或PE接收到无操作(NOP)时,可以跳过乘法运算。例如,每个PE可以接收指示要由PE执行的操作的操作码。PE可以解码操作码以确定操作码值是否对应于NOP。参考图1解释示例脉动阵列。
图1示出了示例4x4脉动阵列100。例如,脉动阵列100可以在每行包括四个PE,在每列包括四个PE。应理解,脉动阵列100可以在每行和每列中包括任意数量的PE。还应理解,脉动阵列100可以逻辑地组织成任意数量的行和任意数量的列。脉动阵列100可以是计算机系统中的神经网络处理器的一部分。例如,计算机系统可以被配置为诸如图像识别服务、基于文本的数据处理(例如,搜索查询的处理)、音频或视频数据处理等数据处理应用程序提供多租户计算服务。
每个PE可以包括行输入总线102、列输入总线104、列输出总线106和行输出总线108。PE可以经由行输入总线102接收来自同一行的左PE(或来自外部电路)的输入。PE还可以经由列输入总线104接收来自上述相同列的PE(或来自外部电路)的输入。PE可以基于输入执行算术计算,并经由列输出总线106将算术计算的结果传输到下述相同列的PE(或外部电路)。PE还可以将经由行输入总线102接收的输入经由行输出总线108转发到同一行的右PE。
脉动阵列100可以为神经网络的处理元件执行算术计算,包括乘法和加法运算。例如,每个PE可以包括诸如乘法器和加法器或融合乘法器加法器的算术单元。在图1的示例中,每行PE可以被配置为处理一组输入数据,并且每列PE可以基于给定列中的每个PE接收到的输入数据组生成一组输出数据。
PE的列112(最左边的列)可以接收四组输入数据,每组输入数据由一行PE处理。归一化器的列116可以向PE的列112提供四组归一化输入数据,每组输入数据由一个归一化器提供。归一化器的列116中的每个归一化器可以提供一组归一化输入数据,其中每组归一化输入数据包括两个或更多个归一化输入。例如,归一化器116a可以向PE 112a提供归一化输入数据元素和归一化权重。归一化器的列116中的每个归一化器可以将输入转换为归一化输入。例如,归一化器116a可以将16位输入数据元素转换成归一化18位输入数据元素。
归一化器的列116中的每个归一化器可以进一步选择归一化输入以提供给PE的列112中的每个PE。例如,归一化器的列116中的每个归一化器可以包含多路复用器以选择权重或输入数据元素。在一些实施例中,每个归一化器116a-116d可以被实现为第一归一化器和第二归一化器。第一归一化器和第二归一化器可以向PE的列112提供一个或多个输入。例如,归一化器116a的第一归一化器可以被配置为向PE 112a提供归一化输入数据元素,并且归一化器116a的第二归一化器可以被配置为向PE 112a提供归一化权重。
列112中的每个PE可以从经由行输入总线102接收的对应输入数据集获得归一化输入数据元素和归一化权重。列112中的每个PE可以将归一化输入数据元素与归一化权重相乘以生成缩放输入。任何列(包括列112)内的PE生成的缩放输入能够由每个PE的加法器累加。例如,(列112)PE 112a可以(从第一输入数据集)生成第一缩放输入,其中第一缩放输入可以基于加法器的输出。例如,加法器可以生成第一输出部分和,并且PE 112a可以被配置为至少部分地基于第一输出部分和来生成第一缩放输入。PE 112a可以被配置为经由列输出总线106将第一缩放输入作为部分和传输到PE 112b。PE 112b还可以生成第二缩放输入(来自第二输入数据集)并将第二缩放输入添加到部分和。用第一缩放输入和第二缩放输入累加的更新的部分和然后经由列输出总线106传输到PE 112c。部分和被更新并跨列112传播,并且PE 112d可以从四个输入数据集生成缩放输入的和。
PE 112d生成的和可以对应于输出数据集,并且可以在经过激活函数之后被反馈到最左边的PE。此外,列112中的每个PE还可以将输入数据集传播到其他PE列(例如,列114),这可以使用与列112不同的权重集来缩放输入数据集。PE的每一列都可以执行算术运算(乘法和加法)以并行生成用于其他处理元件的输出数据元素。在图1的示例中,脉动阵列100可为对应于脉动阵列100的四列的四个PE产生输出数据元素。
脉动阵列100可以在多个波中执行卷积计算。在一个实施例中,波表示在重用脉动阵列100中的相同权重时处理的输入数据元素流。例如,相应的权重可能已经在开始波计算之前顺序地或并行地预加载在脉动阵列100中的每个PE中。PE产生的部分和可以对应于单波。由于脉动阵列100的PE执行卷积计算的算术运算,PE中所有乘法器耗散的动态功率可能很大。对于包括大量PE(例如,数千个)的脉动阵列,该问题可能会进一步恶化。由PE执行的算术运算将参考图2A和图2B进一步解释。
图2A示出了根据所公开技术的某些实施例的用于神经网络计算的脉动阵列中的PE 00。PE 00可以是类似于图1中的脉动阵列100的脉动阵列的一部分。图4A和图4B示出了图2A的归一化器225、227的附加细节。一些实施例可以参考神经网络进行描述,然而,应理解,某些实施例可以用于其他应用,例如模式识别、图像处理、音频处理、视频处理等,而不偏离本技术的范围。
脉动阵列200包括归一化器225、227和包括PE 00和PE 01的多个处理元件。PE 00可以包括数据元素加载发生器202、输入数据元素寄存器204、权重寄存器206、乘法器208、加法器210、跳过计算发生器212、跳过计算寄存器214、选择器电路216、输入部分和寄存器218、缓存权重寄存器220和运算解码器256。PE 00可以被配置为接收归一化输入数据元素222、归一化权重224、零数据元素指示符226、零权重指示符228、操作码230、权重负载232和输入部分和234以执行根据一些实施例的卷积计算。
PE 00可以连接到第一归一化器225和第二归一化器227。第一归一化器225可以接收第一输入(例如输入数据元素221),并且第二归一化器227可以接收第二输入(例如权重223)。第一归一化器225可以将第一输入转换为第一归一化输入,第二归一化器227可以将第二输入转换为第二归一化输入。第一归一化器225可以被配置为向PE 00提供归一化输入数据元素222,其中归一化输入数据元素222是输入数据元素221的归一化版本。此外,第二归一化器227可以被配置为向PE 00提供归一化权重224,其中归一化权重224是权重223的归一化版本。
第一归一化器225和第二归一化器227可以检测输入数据元素221和权重223中的一个或两者何时是非正规数。例如,第一归一化器225可以被配置为检测输入数据元素221何时是非正规的,而第二归一化器227可以被配置为检测权重223何时是非正规的。在检测到非正规数时,对应的归一化器可以至少部分地基于检测到非正规数来提供非正规数的归一化版本。非正规数的归一化可以包括移位有效数、调整指数以反映有效数的移位以及扩展用于表示调整后的指数的位数。在一些情况下,输入数据元素221和权重223中的一个或两者可以是正规数,并且对应的归一化器可以被配置为将对应的正规数提供给PE 00并且跳过对对应的正规数进行归一化。例如,第一归一化器225可以检测到输入数据元素221是非正规的,对输入数据元素221进行归一化,并将归一化输入数据元素222提供给PE 00。此外,第二归一化器227可以检测到权重223时正规的并将归一化权重224提供给PE 00,其中权重223等于归一化权重224,并且第二归一化器227可以不对权重223进行归一化操作。
如果输入数据元素221和权重223中的一个或两者已经在归一化表示中,则第一归一化器225和第二归一化器227仍然能够扩展用于表示调整后的指数的位数。因此,诸如乘法器208之类的后续算术电路可以被配置为对单一格式的数字执行计算,而不管输入最初是正规表示还是非正规表示。例如,第一归一化器225可以检测到输入数据元素221是正规的,扩展用于表示输入数据元素221的指数域的位,并将归一化输入数据元素222提供给PE00。
第一归一化器225和第二归一化器227可以被配置为将一个或多个浮点输入转换成归一化表示。浮点输入可以是8位、16位、32位或任意位数。
PE 00可以经由第一输入端口接收归一化输入数据元素222。归一化输入数据元素222可以对应于输入数据集或任何输入数据元素的阵列。PE 00可以在统一的时间段内一次从输入数据集接收一个归一化输入数据元素。例如,统一的时间段可以对应于时钟周期。输入数据集可以类似于包括输入特征图元素的输入特征图。作为示例,输入数据集可以对应于输入图像、音频剪辑、视频剪辑、文本部分或可以被提供用于数据处理以识别特定模式或对象的任何其他数据。在一些情况下,输入数据集可以对应于中间输出数据集,该中间输出数据集已经经历了激活函数,例如ReLu或Sigmoid,如参考图1所述。每个归一化输入数据元素222可以是浮点数据类型或任何合适的数据类型。每个归一化输入数据元素222可以包括8位、16位或任何合适的位数。归一化输入数据元素222可以在输入数据元素寄存器204中存储一段时间。
PE 00可以经由第二输入端口接收归一化权重224。在一些实现方式中,归一化权重224可以属于对应于卷积滤波器的一组权重值。可以在接收归一化输入数据元素222之前将归一化权重224预加载在PE 00中。在一些实施例中,PE 00可以在统一的时间段内一次从归一化权重值的集合接收一个归一化权重值,以用相应的归一化权重值预加载给定行中的每个PE。PE可以将归一化权重值传递给相应行中的下一个PE,直到给定行中的每个PE都已被预加载。每个PE可以缓存各自的归一化权重值,以用于对归一化输入数据元素的计算。每个归一化权重224可以是浮点数据类型或任何合适的数据类型。每个归一化权重224可以包括8位、16位或任何合适的位数。归一化权重224可以存储在缓存权重寄存器220中一段时间。
PE 00可以经由第三输入端口接收用于当前操作的输入部分和236。在各种实现方式中,输入部分和236可以是16位、18位、32位、33位、34位数或具有任何位数。
PE 00可以经由第四端口接收用于当前操作的零数据元素指示符226。零数据元素指示符226可以包括单个位或多个位。零数据元素指示符226可用于指示归一化输入数据元素222是否为零。零数据元素指示符226还可用于指示输入数据元素221是否为零。例如,零数据元素指示符226的值“1”可以指示与零数据元素指示符226相关联的归一化输入数据元素222为零,并且零数据元素指示符226的值“0”可以指示与零数据元素指示符226相关联的归一化输入数据元素222不为零。“0”可以对应于逻辑零或逻辑低,“1”可以对应于逻辑1或逻辑高。例如,在一些实现方式中,逻辑零可以由电压电平的第一范围(例如,0-2伏)表示,并且逻辑一可以由电压电平的第二范围(例如,3-5伏)表示。应理解,表示“0”值和“1”值的其他实现方式是可能的,而不偏离所公开技术的范围。零数据元素指示符226可以由PE 00外部的电路产生,并在统一的时间段内依次传递给同一行中的所有PE。
PE 00可以被配置为经由第五端口接收零权重指示符228。零权重指示符228可以包括单个位或多个位。零权重指示符228可用于指示与零权重指示符228相关联的归一化权重224是否为零。零权重指示符228还可用于指示与零权重指示符228相关联的权重223是否为零。例如,零权重指示符228的值“1”可以指示归一化权重224为零,并且零权重指示符228的值“0”可以指示归一化权重224不为零。零权重指示符228可由PE 00外部的电路产生,并与归一化权重224一起依次传递给同一行中的所有PE。
权重负载232可用于将归一化权重224加载到缓存权重寄存器220中以提供缓存权重246。在将归一化输入数据元素222馈送到阵列之前,可以断言权重负载232将PE 00的归一化权重224缓存在缓存权重寄存器220中。随着权重被移位到阵列中以用相应的权重值预加载每个PE,可以在特定时间段为每个PE断言权重负载232以便用适当的权重值预加载每个PE。
运算解码器256可以被配置为对操作码230进行解码以确定由PE 00针对由不同操作码值表示的不同指令执行的操作。在一些实施例中,第一操作码值可以对应于将归一化权重从脉动阵列中的一个PE转移到另一个PE的指令。第二操作码值可以对应于由PE开始算术计算的指令。例如,一旦归一化权重被预加载到脉动阵列中,就可以从存储器中读取归一化输入数据元素,并且可以在归一化输入数据元素通过阵列时执行算术计算。第三操作码值可以对应于执行NOP的指令。NOP可用于分隔两个脉动阵列指令,或者当没有要从存储器读取的归一化输入数据元素时。例如,NOP可用于分隔用以移位归一化权重的指令和用以开始算术计算的指令。例如,对于4x4阵列,在开始算术计算之前,可能需要多达15个周期将归一化权重移位到阵列中的所有PE,因此可能需要15个NOP周期。运算解码器256可以被配置为解码操作码230以生成NOP 258和开始计算信号260。运算解码器256可以被配置为将开始计算信号260提供给连接到乘法器208和加法器210的权重寄存器206。运算解码器256还可以被配置为将开始计算信号260提供给乘法器208。操作码230可以包括任何合适的位数,例如,两个、四个等。在一些实现方式中,操作码解码器256还可以对操作码进行解码以确定数据类型,从而提供数据类型控制信号235以指示乘法器要操作的数据类型。
在一些实现方式中,归一化输入数据元素222、归一化权重224、操作码230、零数据元素指示符226和零权重指示符228可以属于行输入总线102,如以下参考图1所述。在一些实现方式中,可以在PE 00中使用分离器(未示出)将行输入总线102分离成不同的内部总线,以承载PE 00内的归一化输入数据元素222、归一化权重224、操作码230、零数据元素指示符226和零权重指示符228。例如,归一化输入数据元素222和归一化权重224可以属于第一行输入总线,并且操作码230、零数据元素指示符226和零权重指示符228可以属于第二行输入总线。
数据元素加载发生器202可以被配置为生成数据加载信号242,该数据加载信号242可以用于允许输入数据元素寄存器204在某些条件下跳过归一化输入数据元素222的存储。在一些实施例中,当基于零数据元素指示符226和NOP 258断言数据加载信号242时,可以将归一化输入数据元素222加载到输入数据元素寄存器204中。当对应于归一化输入数据元素222的零数据元素指示符226是“0”并且操作码230不指示NOP(例如,NOP 258是“0”)时,可以断言数据加载信号242。当对应于归一化输入数据元素222或NOP 258的零数据元素指示符226为“1”时,可以不断言数据加载信号242。数据元素加载发生器202可以使用OR、NOR、NAND或任何合适的电路来实现。
输入数据元素寄存器204可以被配置为存储归一化输入数据元素222,或跳过对归一化输入数据元素222的存储以基于数据加载信号242提供用于当前操作的存储的输入数据元素244。在一些实现方式中,如果负载输入为“1”,则输入数据元素寄存器204可以存储Din输入,并且如果负载输入为“0”,则可以保持先前值。例如,如果数据加载信号242是“1”,则输入数据元素寄存器204可以存储归一化输入数据元素222的新值,并且如果数据加载信号242是“0”,则输入数据元素寄存器204可以跳过存储归一化输入数据元素222的新值。因此,在某些情况下,输入数据元素寄存器204可以仅存储归一化输入数据元素222的非零值。根据某些实施例,跳过输入数据元素寄存器204对新值的存储可能导致不切换存储的输入数据元素244并保持存储的输入数据元素244的先前值。
权重寄存器206可以被配置为存储缓存权重246以基于开始计算信号260提供存储的权重值248。在一些实现方式中,如果负载输入为“1”,则权重寄存器206可以存储Din输入,并且如果负载输入为“0”,则可以保持先前值。例如,如果开始计算信号260被断言(例如,开始计算信号260是“1”),则缓存权重246可以被加载到权重寄存器206中,否则权重寄存器206可以保持先前值。因此,先前使用权重负载232加载到缓存权重寄存器220中的归一化权重224可以在算术计算开始时移入权重寄存器206。在一些实施例中,所存储的权重值248,一旦在算术计算开始时被加载,在输入数据元素通过脉动阵列一次一个被馈送到PE00用于对应于一个或多个波的计算时保持不变。
PE 00可以基于当前操作的数据加载信号242将存储的输入数据元素244提供给PE01。PE 01可以经由第一端口接收存储的输入数据元素244作为归一化输入数据元素222。在一些实现方式中,如果负载输入为“1”,则输入数据元素寄存器204可以存储Din输入,并且如果负载输入为“0”,则可以保持先前值。PE 00可以基于开始计算信号260将存储的权重值248提供给PE 01。PE 01可以经由第二端口接收存储的权重值248作为归一化权重224。在一些实现方式中,如果负载输入为“1”,则权重寄存器206可以存储Din输入,并且如果负载输入为“0”,则可以保持先前值。
乘法器208可以在存储的输入数据元素244和存储的权重值248之间执行乘法运算。乘法器208可以被配置为基于乘法运算生成乘积250。在一些实现方式中,乘积250可以是整数乘积、浮点乘积或任何其他乘积。在一些实现方式中,乘法器208可以生成8位、16位、18位、32位或任何其他位数的乘积250。乘法器208可以使用乘法器电路来实现。乘法器208可以被配置为执行浮点乘法、整数乘法或涉及任何其他数据类型的乘法。乘法器208可以使用16位乘法器数据通路、18位乘法器数据通路或具有任何位数的乘法器数据通路来实现。乘法器208可以被配置为支持至少n位操作,其中n大于或等于输入中的位数。
乘法器208可以包含多个数据通路,例如,如关于图5进一步讨论的。参照图2A,乘法器208可以包含用于计算符号位、有效数和指数的单独数据通路。乘法器208可以至少部分地基于数据类型控制信号235来调整数据通路中的功能。例如,如果数据类型控制信号235指示使用具有从八位扩展到十位的指数的归一化BF16数的计算,则乘法器208可以将较短的7位有效数映射到较长的10位有效数表示,并进一步利用归一化BF16数的归一化10位指数。作为另一个示例,如果数据类型控制信号235指示使用具有从五位扩展到七位的指数的归一化FP16数的计算,则乘法器208可以将较短的7位指数映射到10位指数表示并进一步利用FP16数的10位有效位。因此,BF16和FP16数两者都可以在乘法器208内以通用格式(例如,10位指数和10位有效数)来表示。数据类型控制信号235可以被配置为提供对归一化输入数据元素222和归一化权重224中的至少一个的数据类型的解释。
乘法器208可以向加法器210提供乘积250。加法器210可以对乘积250和存储的输入部分和236执行加法运算以提供加法结果238。加法器210可以使用加法器电路来实现。加法器210可以被配置为执行浮点加法、整数加法或非整数加法。加法器210可以被配置为对具有8位、16位、18位、32位、34位或任何位数的输入执行加法。加法器210可以使用16位加法器数据通路、18位加法器数据通路、32位加法器数据通路、34位加法器数据通路或具有任意位数的加法器数据通路来实现。加法器210可以被配置为支持至少m位操作,其中m等于或大于乘法器数据通路的值。加法器数据通路可以被配置为乘法器数据通路的超集。
乘法器208和加法器210可以提供熔合乘法累加运算。乘法器208和加法器210可以集成在一起以执行单步乘加运算。PE 00可以被配置为使得不对乘法器208的输出执行舍入。在一些实现方式中,PE 00可以对乘法器208的输出执行舍入。乘法器208可以被配置为向加法器210提供准确的乘积250。
选择器电路216可以接收加法结果238、输入部分和236以及存储的跳过计算指示符254。选择器电路216可以选择加法结果238或输入部分和236以经由第六端口提供作为输出部分和240。在一些实施例中,选择器电路216可以包含至少一个多路复用器,多路复用器可以选择要产生的加法结果238或输入部分和236。选择器电路216可以被配置为基于存储的跳过计算指示符254选择加法结果238或输入部分和236,以经由第六端口提供作为输出部分和240。根据一些实施例,当针对当前操作的归一化输入数据元素222或归一化权重224的值为零,或者NOP 258被断言时,加法结果238因为乘积250可以保持先前操作的值。在这种情况下,存储的跳过计算指示符254可以允许绕过加法结果238,并选择输入部分和236以提供作为输出部分和240。例如,当存储的跳过计算指示符254提供“1”的跳过计算信号时,输入部分和236可以被选择作为脉动阵列周期的输出部分和240,并且当存储的跳过计算指示符254提供跳过计算信号为“0”,则可以选择加法结果238作为脉动阵列周期的输出部分和240。
图2B示出了其中使用共享归一化器225替代第一归一化器225和第二归一化器227的图2A所示的图。可以向共享归一化器225提供输入数据元素221和权重223。也可以向共享归一化器225提供操作码230。共享归一化器225可以至少部分地基于操作码230对输入数据元素221和权重223执行选择操作。在一些实现方式中,共享归一化器225将至少部分地基于操作码230产生归一化输入。例如,当操作码230提供某个设定值时,共享归一化器225可以被配置为对权重223执行归一化操作并将归一化权重224提供给PE 00。此外,当操作码230提供一些其他设定值时,共享归一化器225可以被配置为对输入数据元素221执行归一化操作并将归一化输入数据元素222提供给PE 00。
在一些实现方式中,共享归一化器225可以使用多路复用器在输入数据元素221和权重223之间进行选择。归一化输入数据元素222和归一化权重224可以在单独的总线上传送到PE 00。在一些实现方式中,归一化输入数据元素222和归一化权重224可以在同一总线上传送。在一些实现方式中,共享归一化器225可以在同一时钟周期内对输入数据元素221和权重223两者进行归一化,并将归一化输入数据元素222和归一化权重224提供给PE 00。在一些实现方式中,共享归一化器225可以对权重223进行归一化并且在时钟周期期间将归一化权重224提供给PE 00。共享归一化器225然后可以对输入数据元素221进行归一化并且在第二时钟周期期间将归一化输入数据元素222提供给PE 00。
图3示出了根据所公开技术的某些实施例的包括用于归一化输入数据元素和归一化权重进入用于神经网络计算的脉动阵列的零检测器电路的装置300。
装置300可以包括二维脉动阵列302,其包括布置成行和列的PE。脉动阵列302可以类似于图1中的脉动阵列100。脉动阵列302的第一行可以包括PE 00、PE 01、PE 02、......、PE 0y,脉动阵列302的第二行可以包括PE 10、PE 11、PE 12、......、PE 1y,脉动阵列302的第三行可以包括PE 20、PE 21、PE 22、......、PE 2y,并且脉动阵列302的第X行可以包括PEx0、PE x1、PE x2、......、PE xy。x和y可以包括正整数,例如32、64、128或任何合适的数字。脉动阵列302的每个PE可以类似于PE 01,并且包括如参考图2A和图2B所述使用功率高效方法执行算术计算的装置。
在某些实施例中,脉动阵列302的每一行中的第一(例如,最左边的)PE可以耦合到相应的零输入数据检测器电路以检测输入数据元素上的零值,以及相应的零权重检测器电路以检测进入脉动阵列302的权重值的零值。例如,第一行中的PE 00可以耦合到第一零输入数据检测器306a和第一零权重检测器308a,第二行中的PE 10可以耦合到第二零输入数据检测器306b和第二零权重检测器308b,第三行中的PE 20可以耦合到第三零输入数据检测器306c和第三零权重检测器308c,并且第X行中的PE x0可以耦合到第X个零输入数据检测器306x第X个零权重检测器308x。第一零输入数据检测器306a、第二零输入数据检测器306b、第三零输入数据检测器306c、……和第X零输入数据检测器306x可以被配置为分别检测输入数据集0、输入数据集1、输入数据集2、……和输入数据集x中相应的归一化输入数据元素的零值。类似地,第一零权重检测器308a、第二零权重检测器308b、第三零权重检测器308c、……和第X零权重检测器308x可以被配置为分别检测滤波器0、滤波器1、滤波器2…和滤波器x中相应的归一化权重值的零值。
脉动阵列302的每一行中的每个零输入数据检测器和每个零权重检测器可以耦合到相应的归一化器以接收归一化输入。每个零输入数据检测器可以接收归一化输入数据元素并且每个零权重检测器可以接收归一化权重。例如,第一零输入数据检测器306a可以耦合到第一归一化器307a并且第一零权重检测器308a可以耦合到第二归一化器309a,第二零输入数据检测器306b可以耦合到第三归一化器307b并且第二零权重检测器308b可以耦合到第四归一化器309b,第三零输入数据检测器306c可以耦合到第五归一化器307c并且第三零权重检测器308c可以耦合到第六归一化器309c,并且第X零输入数据检测器306x可以耦合到第X归一化器307x并且第X零权重检测器308x可以耦合到第Y归一化器309x。
归一化器307a-307x和309a-309x可以被实现为脉动阵列302外部的单独实体。例如,归一化器307a-307x和309a-309x可以是电路的一部分。在其他实施例中,电路和脉动阵列302可以是计算引擎的一部分,其可以被配置为执行卷积运算的算术计算。在一些实现方式中,归一化器307a-307x和309a-309x可以实现为脉动阵列302的一部分。
在一些实现方式中,第一归一化器307a和第二归一化器309a可以是第一共享归一化器,第三归一化器307b和第四归一化器309b可以是第二共享归一化器,第五归一化器307c和第六归一化器309c可以是第三共享归一化器,并且第X归一化器307x和第Y归一化器309x可以是第X共享归一化器。每个共享归一化器可以提供归一化输入数据元素和归一化权重。在一些实现方式中,每个共享归一化器可以包含一个输出总线,并且每个共享归一化器必须选择一个归一化输入来产生。在一些实现方式中,每个共享归一化器可以包含多个输出总线并且每个共享归一化器可以输出归一化输入数据元素和归一化权重。
在一些实现方式中,零输入数据检测器306a-306x和/或零权重检测器308a-308x可以布置在相应的归一化器307a-307x、309a-309x之前,使得可以首先检测到零输入,如果检测到零输入,则相应归一化器307a-307x、309a-309x可以不工作以节省电力。在一些实现方式中,零输入数据检测器306a-306x和相应的归一化器307a-307x都能够接收输入数据集并且并行而不是顺序地操作。在一些实现方式中,零权重检测器308a-308x和相应的归一化器309a-309x都能够接收滤波器并且并行而不是顺序地操作。
输入数据集0、输入数据集1、输入数据集2、......和输入数据集x中的每一个可以属于图像、文本、视频剪辑、音频剪辑或可能需要由神经网络处理器处理以进行卷积计算的另一种数据集。
在某些情况下,输入数据集0、输入数据集1、输入数据集2、......和输入数据集x可以与由卷积操作的中间层生成的输出数据集0、输出数据集1、输出数据集2、......、输出数据集y相关联。例如,输出数据集0、输出数据集1、输出数据集2、......、输出数据集y可以通过激活函数并作为输入数据集0、输入数据集1、输入数据集2、......和输入数据集x反馈到脉动阵列302。滤波器0、滤波器1、滤波器2、......和滤波器x可以包括不同的权重值集,以与输入数据集0、输入数据集1、输入数据集2、......和输入数据集x进行卷积。滤波器0、滤波器1、滤波器2、......和滤波器x中的权重值可以使用监督学习、非监督学习或确定卷积滤波器的任何合适方法来预确定。
相应行的每个零输入数据检测器可以被配置为检测来自进入相应行的输入数据集的归一化输入数据元素是否为“0”,并为该归一化输入数据元素生成对应的零输入数据指示符。相应行的每个零输入数据检测器还可以被配置为检测来自进入相应归一化器的输入数据集的输入数据元素是否为“0”,并为该输入数据元素生成对应的零输入数据指示符。对应的零数据元素指示符可以与输入数据元素一起被传递到相应行的第一PE。例如,PE 00可以是脉动阵列302中第一行的第一个PE。PE 00可以被配置为在第一行中的其他PE(例如,PE 01、PE 02、......、PE 0y)之前从输入数据集0接收归一化输入数据元素。在一些实施例中,归一化输入数据元素可以在统一的时间段内一次一个从输入数据集0依次馈送到PE00。第一零输入数据检测器306a可以被配置为在统一时间段(例如时钟周期)中的每一个为来自输入数据集0的每个输入数据元素生成零数据元素指示符226。对应于每个归一化输入数据元素的零数据元素指示符226可以与每个归一化输入数据元素一起在统一时间段中依次馈送到PE 00。PE 00可以基于相应数据加载信号242的值来存储或跳过存储归一化输入数据元素222。在一些实现方式中,第一零输入数据检测器306a可以包括比较器以将传入的归一化输入数据元素与零进行比较以基于传入的归一化输入数据元素的值断言(例如,设置为“1”)或取消断言(例如,设置为“0”)零数据元素指示符226。例如,比较器可以使用OR、XOR、NAND或任何合适的电路来实现。
相应行的每个零权重检测器可以被配置为检测来自进入相应行的一组归一化权重值的归一化权重值是否为零,并为该归一化权重值生成对应的零权重指示符。此外,每个零权重检测器还可以被配置为检测来自进入相应归一化器的一组滤波器的权重值是否为零,并为该权重值生成对应的零权重指示符。例如,第一零权重检测器308a可以被配置为检测来自滤波器0的归一化权重值(例如,归一化权重224)是否包括零值,并为归一化权重生成零权重指示符228。在一些实现方式中,第一零权重检测器308a可以包括比较器以将归一化权重值与零进行比较以断言(例如,设置为“1”)或取消断言(例如,设置为“0”)零权重指示符228。例如,比较器可以使用OR、XOR、NAND或任何合适的电路来实现。在一个实施例中,归一化权重值可以在统一的时间段内一次一个从滤波器0依次馈送到PE 00,用于在开始算术计算之前将PE 00中的相应归一化权重值预加载到PE 0y。第一零权重检测器308a可以为那些可以在统一的时间段中与对应的归一化权重值一起依次馈送到PE 00的归一化权重值中的每一个生成对应的零权重指示符。PE 00可以将相应的归一化权重值和对应的零权重指示符依次传递给下一个相邻PE,直到第一行中的所有PE都被预加载了相应的归一化权重值和对应的零权重指示符。在将相应的归一化输入数据元素馈送到脉动阵列302中的每一行之前,可以在每个PE中缓存相应的归一化权重值和对应的零权重指示符。
第二零输入数据检测器306b、第三零输入数据检测器306c、……和第X零输入数据检测器306x可以类似于第一零输入数据检测器306a,并且可以生成相应的零数据元素指示符(类似于零数据元素指示符226),以在统一的时间段中依次提供给PE 10、PE 20、......和PE x0,用于功率优化。为每一行生成的相应零数据元素指示符可以由每一行中的相应第一PE经由相应行输入总线102接收,并且由第一PE在统一时间段内依次传播到给定行中的所有PE。第二零权重检测器308b、第三零权重检测器308c、……和第X零权重检测器308x可以类似于第一零权重检测器308a,并且可以生成相应的零权重指示符(类似于零权重指示符228),以依次提供给PE 10、PE 20、……和PE x0,以在开始算术计算之前预加载相应行中的每个PE以及相应的权重值。
在一些实施例中,零输入数据检测器306a-306x和零权重检测器308a-308x可以实现为脉动阵列302外部的单独实体。例如,零输入数据检测器306a-306x和零权重检测器308a-308x可以是电路304的一部分。在其他实施例中,电路304和脉动阵列302可以是计算引擎的一部分,其可以被配置为执行卷积运算的算术计算。与在脉动阵列302中的每个PE内使用相应的零检测器相比,所公开技术的一些实施例可以通过检测输入数据元素上的零以及进入脉动阵列的每一行中的相应第一PE的权重,并且将零指示符传递给阵列中的所有PE,来提供减少的门数和动态功耗。
请注意,为了便于说明,图3仅示出了进入脉动阵列302的每一行中的第一PE的相应零数据元素指示符和零权重指示符,然而应理解,脉动阵列302的相应行中的每个PE也可以接收相应的归一化输入数据元素和相应的归一化权重值以及一些控制信号(例如,操作码230、权重负载232、数据类型等),对于每一行,这些信号可以从脉动阵列302的左侧传播到右侧。
图4A示出了根据示例实现方式的示例FP16归一化器400。归一化器400包括多路复用器402、非正规检测器404、指数扩展器406和非正规重格式化器405。非正规重格式化器405包括前导零编码器408、移位器410和减法器412。归一化器400处理原始数401以产生归一化数403。
归一化器400可以被配置为接收一个或多个待归一化数字。一个或多个数字可以包括输入数据元素221和权重223,它们可以是或可以不是非正规表示。在一些实现方式中,单独的归一化器400可以在没有多路复用器的情况下接收输入数据元素221或权重223。在一些实现方式中,一个或多个数字可以是正规数。如果检测到正规数,则归一化器400仍可以执行归一化操作的一部分以增加用于表示指数的位的数量。
多路复用器402可以被配置为接收由归一化器400接收的一个或多个数字。多路复用器402还可接收操作码230或是否应选择权重或输入数据元素的其他指示符。多路复用器402可以被配置为对操作码230进行解码以选择要由归一化器400操作的数字。多路复用器402可以被配置为基于操作码230的值输出不同的数字用于归一化器操作。在一些实施例中,第一操作码值可以对应于将权重223输出为多路复用器输出420的指令。第二操作码值可以对应于将输入数据元素221输出为多路复用器输出420的指令。例如,一旦输入数据元素221和权重223已经被提供给归一化器400和多路复用器402,多路复用器402就可以被配置为至少部分地基于操作码230输出输入数据元素221,并且稍后输出权重223。
原始数401是具有符号位部分、指数位部分和有效位部分的FP16数。原始数401的FP16格式包括1位符号、5位指数和10位有效数。其他实现方式可以使用其他位格式处理其他16位浮点数。其他实现方式可以处理可能包含8位、32位或64位的原始数401。原始数401可以存储在寄存器中。
可以将原始数401提供给非正规检测器404用于非正规检测。非正规检测器404可以被配置为至少部分地基于1位符号的值、5位指数的值或10位有效数的值中的至少一个来检测多路复用器输出420是否非正规。例如,非正规检测器404可以被配置为当5位指数在每一位中包含零并且有效数为非零时检测非正规数。非正规检测器404可以至少部分地基于非正规数的检测向非正规重新格式化器405提供使能信号424。例如,如果非正规检测器404检测到多路复用器输出420为非正规,非正规检测器404可以将第一值提供给非正规重格式化器405。如果非正规检测器404检测到多路复用器输出420为正规,非正规检测器404可以将第二值提供给非正规重格式化器405。在一些实现方式中,第一数字可以是1,而第二数字可以是0。非正规数的检测可以对应于逻辑高而正规数的检测可以对应于逻辑零。
非正规重新格式化器405可以接非正规检测器404输出的使能信号424。可以至少部分地基于使能信号424的值来操作或跳过非正规重格式化器405。非正规重格式化器405可以包含前导零编码器408、移位器410和减法器412中的任何一个或全部。非正规重格式化器405可以被配置为使能前导零编码器408、移位器410和减法器412中的任何一个或全部。在一些实现方式中,非正规重格式化器405可以包含更多组件。
指数扩展器406可以从原始数401接收5位指数428。指数扩展器406可以将表示指数428的位的数量从5位增加到7位。在一些实现方式中,指数扩展器406可以将1、2、3、任意位数添加到指数428。添加的位数量足以以归一化格式表示非正规数。在所示示例中,指数扩展器被配置为将5位指数扩展两位。
指数扩展器406可以被配置为扩展指数428并保持指数428的值。指数扩展器406可以被配置为通过复制最高有效位、将最高有效位反转两次并将指数428的其他位附加到扩展指数434的末端来使用范围转换来扩展指数。例如,如果指数428的值为01111,则指数扩展器406可以复制最高有效位“0”,将最高有效位反转两次“11”,并附加最后四个位“1111”,使得扩展的指数434是0111111。在一些实现方式中,这两位数据可以对应于添加到指数数据域末端的逻辑零或逻辑低。例如,如果指数428是00000,则指数扩展器406可以扩展指数428,使得扩展的指数434是0000000。在各种实现方式中,指数扩展器406可以将额外的数据位添加到指数域的任何位置,这取决于指数的字节序格式和有符号或无符号表示。
当非正规检测器404检测到非正规格式时,指数扩展器406可以至少部分地基于使能信号424将指数的扩展版本提供给减法器412。否则,指数的扩展版本可以存储为归一化数403的7位扩展指数域。
非正规重格式化器405可以包含前导零编码器408。可以至少部分地基于从非正规检测器404接收的使能信号424来使能前导零编码器408。前导零编码器408可以接收有效数430作为输入。前导零编码器408可以检测有效数430中的多个前导零。有效数430中的前导零的数量可以对应于从左到右在1之前的零的数量。在一些实现方式中,前导零编码器408可以被配置为检测多个前导逻辑零。例如,如果有效数是0001000000,则前导零编码器408可以检测到前导零的数量是三。此外,如果有效数是0000001000,则前导零编码器408可以检测到前导零的数量是六。前导零编码器408可以被配置为使用检测数字域中前导零的数量的任何手段。前导零编码器408可以至少部分地基于前导零编码器408检测到的前导零的数量来产生前导零输出432。在其他实现方式中,可以调整前导零以说明其他字节序格式。
非正规重格式化器405可以包含移位器410。可以至少部分地基于从非正规检测器404接收的使能信号424来使能移位器410。移位器410可以从前导零编码器408接收前导零输出432并且从原始数401接收有效数430。移位器410可以被配置为至少部分地基于前导零输出来移位有效数430。移位器410可以进一步移位有效数430,使得第一非零数被移出有效数并用隐含位表示。移位器410可以通过将包含逻辑低或零的位添加到有效数430的右侧或末端来移位有效数430。移位器410可以产生移位的有效数436,其中移位的有效数436可以是与有效数430相同的位数。例如,如果有效数430是0000110000,则前导零编码器408可以计数四个零并且进一步将移位计数调整为五,并且移位器410可以将有效数430总共移位五次并且产生移位的有效数436,即1000000000。然后移位器410可以将移位的有效数436提供给归一化数403。
非正规重格式化器405可以包含减法器412。可以至少部分地基于从非正规检测器404接收的使能信号424来使能减法器412。减法器412可以接收来自指数扩展器406的扩展指数434和来自前导零编码器408的前导零输出432。减法器412可以至少部分地基于前导零输出432从扩展指数434中减去一个值。减法器412可以补偿指数值用于有效数的移位。例如,如果前导零输出432等于5并且扩展指数等于0011111或31,则减法器412可以被配置为从0011111或31中减去5,使得调整后的指数438等于0011010或26。减法器412可以将调整后的指数提供给归一化数403作为输出。
归一化数403可以是第二位长度,其中第二位长度是大于第一位长度的任何位数。第二位长度可以足够大以包括扩展指数。当原始数401可以是16位浮点数时,归一化数403可以是具有符号位部分、指数位部分和有效位部分的18位浮点数。归一化数403可以包含1位符号、7位指数和10位有效数。1位符号可以等于符号426。7位指数可以等于调整后的指数438。10位有效数可以等于移位的有效数436。在一些实现方式中,归一化数403的符号位部分、指数位部分和有效位部分可以是任何值。归一化器400可以被配置为提供归一化数403作为归一化输出421。归一化输出421可以是归一化输入数据元素222、归一化权重224或任何其他归一化数。
图4B示出了根据示例实现方式的示例BF16归一化器450。BF16归一化器450包括类似于图4A的FP16归一化器的组件,除了在图4B中,原始数407以BF16格式开始并且被归一化为与归一化数403相比不同格式的归一化数409。
原始数407是具有符号位部分、指数位部分和有效位部分的BF16数。原始数407的BF16格式包括1位符号、8位指数和7位有效数。其他实现方式可以使用其他位格式处理其他16位浮点数。其他实现方式可以处理可能包含8位、32位或64位的原始数407。原始数407可以存储在寄存器中。
归一化数409可以是具有符号位部分、指数位部分和有效位部分的18位脑浮点数。归一化数409可以包含1位符号、10位扩展指数和7位移位的有效数。在一些实现方式中,归一化数409可以包含8位、32位或64位。在一些实现方式中,归一化数409可以是整数或非整数数据类型。
指数扩展器406可以从原始数407接收8位指数428。指数扩展器406可以将表示指数428的位的数量从8位增加到10位。在一些实现方式中,指数扩展器406可以将1、2、3、任意位数添加到指数428。当非正规检测器404检测到非正规格式时,指数扩展器406可以至少部分地基于使能信号424将指数的扩展版本提供给减法器412。否则,指数的扩展版本可以存储为归一化数409的10位扩展指数域。
原始数407可以具有y的指数位长度和z的有效位长度。原始数401可以具有m的指数位长度和n的有效位长度,其中m不等于y并且z不等于n。例如,原始数407可以具有8的指数位长度和7的有效位长度,而原始数401可以具有5的指数位长度和10的有效位长度。归一化数409可以具有c的指数位长度和d的有效位长度。归一化数403具有r的指数位长度和s的有效位长度,其中c不等于r并且d不等于s。
图5示出了示例乘法累加数据通路500。示例数据通路500可以实现为关于图2A和图2B讨论的乘法器208和加法器210。如图5所示,乘法器208可以被配置为接收归一化输入数据元素222和归一化权重224并且将乘数积提供给加法器210。加法器210可以被配置为接收乘数积和输入部分和234并提供加法结果238。通过在将输入呈现给乘法器208之前将输入转换为归一化表示,乘法器208可以省略对非正规输入和非正规乘积的支持。具有扩展指数的归一化输入可以为计算提供更大的数值范围,并且乘法器208可能不需要对数值下溢计算的支持。
归一化输入数据元素222可以是18位数。在一些实现方式中,归一化输入数据元素222可以是任意位数。归一化输入数据元素222可以是浮点数或脑浮点数。在一些实现方式中,归一化输入数据元素222可以是任何数据类型。归一化输入数据元素222可以由符号位域、指数域和有效数域组成。乘法器208可以被配置为支持不同类型的归一化输入数据元素。例如,归一化输入数据元素222可以包含1位符号、10位指数和7位有效数。此外,归一化输入数据元素222可以包含1位符号、7位指数和10位有效数。乘法器208可以支持这两种类型的18位输入数据元素。在一些实现方式中,归一化输入数据元素222可以包含x位符号、y位指数和z位有效数。归一化输入数据元素222可以经由第一符号数据通路511、第一指数数据通路521和第一有效数数据通路531提供给乘法器208。
归一化权重224可以是18位数。在一些实现方式中,归一化权重224可以是任意位数。归一化权重224可以是浮点数或脑浮点数。在一些实现方式中,归一化权重224可以是任何数据类型。归一化权重224可以由符号位通路、指数位通路和有效位通路组成。例如,归一化权重224可以包含1位符号、10位指数和7位有效数。此外,归一化权重224可以包含1位符号、7位指数和10位有效数。在一些实现方式中,归一化权重224可以包含x位符号、y位指数和z位有效数。归一化权重224可以经由第二符号数据通路512、第二指数数据通路522和第二有效数数据通路532提供给乘法器208。
乘法器208可以包含符号数据通路、指数数据通路和有效数数据通路。乘法器208可以从归一化输入数据元素222接收第一符号数据通路511、第一指数数据通路521和第一有效数数据通路531。乘法器208可以从归一化权重224接收第二符号数据通路512、第二指数数据通路522和第二有效数数据通路532。乘法器208还可以接收数据类型控制信号235。乘法器208可以对浮点数或脑浮点数执行乘法运算。在一些实现方式中,乘法器208可以对浮点数执行一定数量的脉动阵列周期的乘法运算,然后随后对脑浮点数执行乘法运算。
可以提供第一符号数据通路511和第二符号数据通路512给乘法器208的符号数据通路。符号数据通路可以被配置为至少部分地基于第一符号数据通路511和第二符号数据通路512来输出部分符号数据通路513。在一些实现方式中,符号数据通路可以实现为排斥或(XOR)函数。符号数据通路可以将部分符号数据通路513提供给加法器210。
可以提供第一指数数据通路521、第二指数数据通路522和数据类型控制信号235给乘法器208的指数数据通路。乘法器208的指数数据通路可以包含7到10映射器524和加法器526。7到10映射器524可以接收第一指数数据通路521、第二指数数据通路522和数据类型控制信号235。7到10映射器524可以被配置为至少部分地基于数据类型控制信号235来执行映射运算。数据类型控制信号235可以指示归一化输入数据元素222或归一化权重224的数据类型。数据类型控制信号235可以被配置为指示归一化输入数据元素222的数据类型和/或归一化权重224的数据类型。
7到10映射器524可以被配置为将第一指数数据通路521或第二指数数据通路522从7位映射到10位。在一些实现方式中,7到10映射器524可以被配置为将指数数据通路从n位映射到m位,其中n和m是n小于m的任何数字。7到10映射器524可以将第一指数数据通路521和/或第二指数数据通路522的值映射到10位范围。每个指数数据通路的映射值可以对应于指数数据通路中的每一个的未映射值。例如,7到10映射器524可以接收具有值0000001的第一指数数据通路521,并且7到10映射器524可以将第一指数数据通路521映射到具有值0000000001的10位域。然后,7到10映射器524可以至少部分地基于数据类型控制信号235向加法器526提供第一指数数据通路521和第二指数数据通路522的映射或未映射版本。
如果指数已经被表示为10位,则数据类型控制信号502可以使映射功能被跳过。例如,如关于图4A和图4B所述,FP16指数域扩展为7位指数,而BF16指数域扩展为10位指数。因此,如果数据类型控制信号502指示数据类型是BF16,则提供扩展的10位指数作为18位输入数据元素222的指数域,并且7到10映射器不再发生进一步的映射。或者,如果数据类型控制信号502指示数据类型是FP16,则提供扩展的7位指数作为18位输入数据元素222的指数域,并且7到10映射器将7位指数映射到10位指数。在其他实现方式中,任何长度的较短指数域可以映射到较长的指数域,其中较短的指数域和较长的指数域都是不同的、受支持的归一化格式的一部分。
加法器526可以至少部分地基于数据类型控制信号235接收第一指数数据通路521和第二指数数据通路522的映射或未映射版本。加法器526可以被配置为对从7到10映射器524接收的两个值执行加法。加法器526还可以从有效数数据通路接收移位/进位信息(未示出)。加法器526可以至少部分地基于对从7到10映射器524接收到加法器210的两个值执行的加法来提供部分指数数据通路523。部分指数数据通路523可以是10位或足以容纳指数和而不会溢出的其他范围。
可以提供第一有效数数据通路531、第二有效数数据通路532和数据类型控制信号235到乘法器208的有效数数据通路。乘法器208的有效数数据通路可以包含7到10映射器534、隐含位解析器536、二进制乘法器540和格式调整器542。7到10映射器534可以接收第一有效数数据通路531、第二有效数数据通路532和数据类型控制信号235。7到10映射器534可以被配置为至少部分地基于数据类型控制信号235来执行映射运算。数据类型控制信号235可以指示归一化输入数据元素222和/或归一化权重224的数据类型。7到10映射器534可以将第一有效数数据通路531或第二有效数数据通路532从7位映射到10位。7到10映射器534可以将第一有效数数据通路531和第二有效数数据通路532两者从7位映射到10位。在一些实现方式中,7到10映射器534可以被配置为将有效数数据通路从j位映射到k位,其中j和k是j小于k的任何数字。7到10映射器534可以将第一有效数数据通路531或第二有效数数据通路532的值映射到10位范围。有效数数据通路中的每一个的映射值可以对应于有效数数据通路中的每一个的未映射值。例如,7到10映射器534可以接收具有值0000001的第一有效数数据通路531,并且7到10映射器534可以将第一有效数数据通路531映射到具有值0000000001的10位域。然后,7到10映射器534可以至少部分地基于数据类型控制信号235向隐含位解析器536提供第一有效数数据通路531和第二有效数数据通路532的映射或未映射版本。
如果指数已经被表示为10位,则数据类型控制信号502可能使映射功能被跳过。例如,如关于图4A和图4B所述,FP16数的移位的有效数域为10位,而BF16数的移位的有效数域为7位。因此,如果数据类型控制信号502指示数据类型是BF16,则移位的7位有效数在有效数数据通路中被处理,而不由7到10映射器进一步映射。或者,如果数据类型控制信号502指示数据类型是FP16,则提供移位的7位有效数作为18位输入数据元素222的有效数域,并且7到10映射器将7位有效数映射到10位有效数。在其他实现方式中,任何长度的较短指数域可以映射到较长的指数域,其中较短的指数域和较长的指数域两者是不同的、受支持的归一化格式的一部分。
隐含位解析器536可以为7到10映射器534的输出提供隐含位。隐含位解析器536可以被配置为将最高有效位添加到7到10映射器534的输出。隐含位解析器536可以向二进制乘法器540提供对应于具有隐含位的第一有效数数据通路的第一输出和对应于具有隐含位的第二有效数数据通路的第二输出。
二进制乘法器540可以将隐含位解析器536的第一输出乘以隐含位解析器536的第二输出,其中隐含位解析器536的第一和第二输出对应于第一和第二有效数数据通路531和532。二进制乘法器540可以被配置为基于乘法运算生成乘数积。在一些实现方式中,乘积可以是整数乘积、浮点乘积或任何其他乘积。在一些实现方式中,二进制乘法器540可以生成8位、16位、32位或任何其他位数的乘积。二进制乘法器540可以使用乘法器电路来实现。二进制乘法器540可以被配置为执行浮点乘法、整数乘法或涉及任何其他数据类型的乘法。二进制乘法器540可以使用16位乘法器数据通路、18位乘法器数据通路或具有任何位数的乘法器数据通路来实现。二进制乘法器540可以将乘数积提供给格式调整器542。
格式调整器542可以调整由二进制乘法器540产生的乘数积的格式。格式调整器542可以例如通过将位大小增加到23位来增加或减少用于表示乘数积的位数。格式调整器542可以向加法器210提供部分有效数数据通路。
加法器210可以包含符号数据通路、指数数据通路和有效数数据通路。加法器210可以被配置为从乘法器208接收部分符号数据通路513、部分指数数据通路523和部分有效数数据通路533。加法器210还可以接收输入部分和234。加法器210可以对由部分符号数据通路513、部分指数数据通路523、部分有效数数据通路533和输入部分和234组成的乘数积执行加法运算。加法器210可以对浮点数和脑浮点数两者执行加法运算。在一些实现方式中,加法器210可以对浮点数执行加法运算,并且加法器210是32位浮点加法器。在一些实现方式中,加法器210可以只对脑浮点数执行乘法运算,并且加法器210是34位浮点加法器。
加法器210可以被配置为基于加法运算生成加法结果238。加法结果238可以由符号数据通路515、指数数据通路525和有效数数据通路535组成。在一些实现方式中,加法结果238可以是整数和、浮点和或任何其他和。在一些实现方式中,加法器210可以生成8位、16位、32位、34位或任何其他位数的和。加法器210可以使用二进制加法器电路来实现。加法器210可以被配置为执行浮点加法、整数加法或涉及任何其他数据类型的加法。
图6示出了根据所公开技术的一些实施例的用于神经网络计算的装置600。装置600可以是计算机系统例如主机服务器的一部分。例如,主机服务器可以为诸如图像识别服务、基于文本的数据处理(例如,搜索查询的处理)、音频数据处理、视频数据处理等数据处理应用程序提供多租户计算服务。在一些实施例中,主机设备可以操作软件应用程序并与装置600通信以基于利用神经网络处理器的预测模型的计算进行预测。例如,主机设备可以通过使用预测模型识别包括在图像、文本、音频、视频等的输入数据集中的信息来进行预测。
装置600可以包括经由互连620耦合到存储器614、主机接口616和直接存储器访问(DMA)控制器618的神经网络处理器602。神经网络处理器602可以包括计算引擎604、计算控制器606、状态缓冲器608、输出缓冲器610和激活引擎612。神经网络处理器602可以提供计算资源来支持预测模型的计算。神经网络处理器602可以实现为片上系统(SoC)、现场可编程门阵列(FPGA)或任何合适的电路。
存储器614可以被配置为存储从主机设备接收的指令、输入数据集(例如,图像的像素数据)和权重(例如,对应于某些视觉和/或非视觉特征的权重)。存储器614还可以被配置为存储神经网络处理器602的输出(例如,以输出数据集的形式对输入图像的一个或多个图像识别决定)。存储器614可以包括任何合适的存储器,例如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率DRAM(DDR DRAM)、存储级存储器(SCM)、闪存等。
主机接口616可以被配置为实现主机设备和神经网络处理器602之间的通信。例如,主机接口616可以被配置为在主机设备和神经网络处理器602之间传输存储器描述符,其包括所存储的数据(例如,输入数据集、权重、计算结果等)的存储器地址。主机接口616可以包括例如外围组件互连快速(PCIe)接口,或用于与主机设备通信的任何合适的接口。主机设备可以包括主机处理器和主机存储器。
DMA控制器618可以被配置为执行DMA操作以在神经网络处理器602和主机设备之间传输数据。例如,如上所述,主机设备可以将指令、输入数据集和权重存储在存储器614中。主机设备可以将存储的指令、数据和权重的存储器地址提供给神经网络处理器602(例如,以存储器描述符的形式)。神经网络处理器602然后可以基于主机设备提供的存储器地址获得存储的指令、数据和权重。神经网络处理器602还可以将计算结果(例如,一个或多个图像识别决策)存储在存储器614中,并且将存储的结果的存储器地址提供给主机设备。
状态缓冲器608可以被配置为提供对用于计算引擎604处的计算的数据的缓存。缓存在状态缓冲器608处的数据可以包括例如输入数据集和从存储器614获取的权重,以及计算引擎604处的计算的中间输出。缓存可以减少存储器访问瓶颈(例如,由存储器614、DMA控制器618、互连620等处的延迟引起)对计算引擎604的性能的影响。状态缓冲器608可以是片上存储器设备并且可以包括静态随机存取存储器(SRAM)或任何合适的存储器。
计算控制器606可以被配置为向神经网络处理器602的各种组件提供控制以执行神经网络计算。在一些实现方式中,计算控制器606可以读取存储在存储器614中的指令并且调度计算引擎604对指令的执行。在第一实施例中,计算控制器606可以在从状态缓冲器608读取输入数据元素之前执行将权重加载到计算引擎604中的调度。例如,如参考图2A、图2B、图4A和图4B所述,计算控制器606可以基于从主机设备接收到的指令将操作码230和权重负载232提供给计算引擎604。计算控制器606可以将操作码230的适当值提供给计算引擎604,该计算引擎604可以被计算引擎中的每个PE解码以执行相应的操作。例如,计算引擎604可以使用权重负载232和操作码230来预加载计算引擎604中所有PE中的权重。一旦已经预加载了权重,计算控制器606就可以执行将输入数据元素在统一的时间段中从状态缓冲器608依次加载到计算引擎604中的调度,以开始算术计算。
在第二实施例中,计算控制器606可以执行将权重和输入数据元素在统一的时间段中从状态缓冲器608依次加载到计算引擎604中的调度。计算控制器606可以使用相应的行数据总线调度在脉动阵列302中的每一行的相应第一PE中的权重和输入数据元素的加载。例如,相应的输入数据元素和权重值可以在每个周期被加载到相应行的第一PE中。
在另一个实施例中,计算控制器606可以为给定行中的每个PE使用相应的列数据总线为每行调度并行加载脉动阵列302中的权重。例如,每行的权重可以在每个周期并行地加载。在一些实现方式中,计算控制器606可以基于从主机设备接收到的指令来确定输入数据集的数据类型。指令可以是操作码的形式。数据类型可以指示输入数据元素的大小和类型,例如,4位、8位、16位、有符号、无符号或浮点。
计算引擎604可以被配置为执行神经网络的计算。在一些实施例中,计算引擎604可以包括一组PE,其被配置为执行神经网络计算中涉及的一个或多个算术运算。每个PE可以使用输入数据集和相关权重来执行乘法累加运算。例如,计算引擎604可以包括脉动阵列302以及电路304,所述电路包括零输入数据检测器306a-306x和零权重检测器308a-308x。在一些实施例中,零输入数据检测器306a-306x和零权重检测器308a-308x可以在计算引擎604的外部。计算引擎604可以执行由计算控制器606调度的指令,以将权重和输入数据集从状态缓冲器608依次加载到计算引擎604中。
在第一实施例中,可以在从状态缓冲器608读取输入数据集之前预加载权重,如参考图4所述。对应于每个权重的相应零权重指示符可以在每个PE中本地缓存,并且当输入数据元素连同对应的零数据元素指示符一起被馈送到计算引擎604中时,缓存的值可用于对相应的输入数据元素执行算术计算。在第二实施例中,可以从状态缓冲器608同时读取权重和输入数据集,如参考图5所述。对应的零数据元素指示符和零权重指示符可以由相应的零检测器电路提供并且对于相应的行从一个PE依次传播到另一个PE。可以使用一个或多个接口从状态缓冲器608获得权重和输入数据集。在某些实施例中,计算引擎604可以执行算术计算以使用如参考图2-5所述的相应的零数据元素指示符和零权重指示符信号来降低脉动阵列302的动态功耗,并提供要存储在输出缓冲器610中的计算结果。
输出缓冲器610可以包括一组寄存器以存储由计算引擎604生成的输出数据集。在一些实现方式中,输出缓冲器610还可以使能附加处理,例如池化操作以减小所存储输出的大小。在一些实现方式中,计算引擎604可以被操作以针对特定神经网络层执行计算,并且输出缓冲器610可以处理该神经网络层的输出并将处理后的输出数据集(通过或不通过激活引擎612进行处理)存储在状态缓冲器608。计算引擎604可以将处理后的输出数据集用作中间输出。在一些实施例中,输出缓冲器610可以包括加法器以累加为不同滤波器组和输入数据集生成的部分和以生成卷积输出阵列。存储在状态缓冲器608中的卷积输出阵列的最终输出值可以由计算控制器606检索以存储在状态缓冲器608中。
激活引擎612可以被配置为在输出缓冲器610的输出上应用一个或多个激活函数(例如,ReLu函数)。例如,激活引擎612可以包括一个或多个查找表(例如,以多路复用器电路的形式),其可以将输入映射到代表将激活函数应用于输入的结果的候选输出之一。在一些示例中,激活引擎612还可以包括旁路通路以允许在不应用激活函数时将来自输出缓冲器610的输出直接存储在状态缓冲器608中。
图7示出了根据所公开技术的一些实施例的由PE执行的用于神经网络计算的方法700。PE可以是脉动阵列302的一部分,例如PE00。如图6所示,脉动阵列302可以是计算引擎604的一部分。
在步骤702中,第一归一化器可以接收第一输入。例如,第一归一化器可以接收对应于输入数据元素或权重的第一输入。第一输入可以用具有第一位长度的浮点格式来表示,其中第一位长度可以是任何位数。例如,第一输入可以是16位的浮点数。第一输入可以包含8位、16位、32位或任何位数。第一输入可以是正规数或非正规数。
在步骤704中,第一归一化器可以至少部分地基于第一输入来生成第一归一化数。第一归一化器可以检测第一输入是正规的还是非正规的。当第一输入是正规数时,第一归一化器可以生成第一归一化数,其中第一归一化数是第一输入的扩展版本。当第一输入是非正规化数时,第一归一化器可以对第一输入进行归一化并生成第一归一化数,其中对第一输入进行归一化包括扩展指数、移位有效数以及从指数中减去移位值中的至少一个。第一归一化数可以用具有第二位长度的浮点格式来表示,其中第二位长度可以是大于或等于第一位长度的任何位数。例如,第一输入可以是16位的浮点数,而第一归一化数可以是18位的浮点数。第一归一化器可以包含非正规检测器、指数扩展器、前导零编码器、移位器、减法器和多路复用器。
在步骤706中,PE 00可以接收对应于第二输入的第一归一化数和第二归一化数。在一些实现方式中,PE 00可以包括第二归一化器以接收第二输入并至少部分地基于第二输入生成第二归一化数。第二输入可以对应于输入数据元素或权重。当第一输入对应于权重时,第二输入可以对应于输入数据元素,而当第一输入对应于输入数据元素时,第二输入可以对应于权重。PE 00可以将第一归一化数乘以第二归一化数以产生乘数积。PE 00可以包含多个乘法器数据通路并且可以至少部分地基于第一输入的数据类型或第二输入的数据类型中的至少一个来选择乘法器数据通路。例如,当第一输入和第二输入中的至少一个是16位脑浮点数据类型时,PE 00可以选择第一乘法器数据通路,而当第一输入和第二输入中的至少一个是16位浮点数据类型时,PE 00可以选择第二个乘法器数据通路。乘数积可以用任意位数的浮点格式或脑浮点格式表示。
在步骤708中,PE 00可以接收乘数积和输入部分和。PE 00可以将乘数积与输入部分和相加以产生加法结果。PE 00可以对浮点数和脑浮点数进行加法。加法结果可以用任意位数的浮点格式或脑浮点格式表示。PE 00可以将加法结果提供给选择器电路,其中选择器电路被配置为在加法结果和输入部分和中进行选择,以供PE 00输出作为输出部分和。PE00可以将输出部分和提供给后续PE。例如,PE 00可以生成输出部分和并向PE 10提供输出部分和,其中PE 01接收输出部分和作为输入部分和。
图8示出了计算设备800的一个示例。计算设备800的功能和/或几个组件可以不受限制地与本公开中其他地方公开的其他实施例一起使用,而不受限制。计算设备800可以执行计算以促进任务的处理。作为说明性示例,计算设备800可以是多租户计算服务系统中的服务器的一部分。计算设备800的各种硬件和软件资源(例如,与数据处理相关联的硬件和软件资源)可以根据请求分配给客户端。
在一个示例中,计算设备800可以包括处理逻辑802、总线接口模块804、存储器806和网络接口模块808。这些模块可以是硬件模块、软件模块或硬件和软件的组合。在某些情况下,模块可以与组件或引擎互换使用,而不偏离本公开的范围。计算设备800可以包括附加模块,为了便于说明,这里没有对其进行说明。在一些实现方式中,计算设备800可以包括更少的模块。在一些实现方式中,可以将一个或多个模块组合成一个模块。一个或多个模块可以通过通信信道810彼此通信。通信信道810可以包括一个或多个总线、网格、矩阵、结构、这些通信信道的组合或一些其他合适的通信信道。
处理逻辑802可以包括专用集成电路(ASIC)、现场可编程门阵列(FPGA)、片上系统(SoC)和网络处理单元(NPU)、被配置为执行指令的处理器或被配置为执行逻辑算术和浮点运算的任何其他电路。可以包括在处理逻辑802中的处理器的示例可以包括由 等开发的处理器。在某些实现方式中,处理器可以包括多个处理核心,其中每个处理核心可以被配置为独立于其他处理核执行指令。此外,在某些实现方式中,每个处理器或处理核心可以实现多个处理线程在同一处理器或处理核心上执行指令,同时保持多个处理线程之间的逻辑分离。在处理器或处理核心上执行的此类处理线程可以作为单独的逻辑处理器或处理核心暴露给软件。在一些实现方式中,多个处理器、处理核心或在同一核心上执行的处理线程可以共享某些资源,例如总线、1级(L1)高速缓存和/或2级(L2)高速缓存。由处理逻辑802执行的指令可以以例如计算机程序的形式存储在计算机可读储存介质上。计算机可读储存介质可以是非暂时性的。在一些情况下,计算机可读介质可以是存储器806的一部分。处理逻辑802还可以包括用于执行包括例如神经网络处理器602等的人工神经网络计算的硬件电路。
可以向客户端授予对处理逻辑802的访问权,以提供客户端请求的个人助理服务。例如,计算设备800可以托管可以在其上执行图像识别软件应用程序的虚拟机。图像识别软件应用程序在执行时可以访问处理逻辑802以预测例如图像中包括的对象。作为另一个示例,还可以授予对处理逻辑802的访问权限作为裸机实例的一部分,其中在客户端设备(例如,远程计算机、智能电话等)上执行的图像识别软件应用程序可以直接访问处理逻辑802以执行图像的识别。
存储器806可以包括易失性或非易失性,或易失性和非易失性两种类型的存储器。存储器806可以例如包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、闪存和/或一些其他合适的存储介质。在一些情况下,一些或所有存储器806可以在计算设备800内部,而在其他情况下,一些或所有存储器可以在计算设备800外部。存储器806可以存储包括可执行指令的操作系统,所述可执行指令在由处理逻辑802执行时提供用于执行指令的执行环境,所述指令提供为计算设备800执行卷积计算的功能。存储器806还可以存储例如用于执行人工神经网络计算的软件应用程序。存储器还可以存储和维护若干数据结构和表格以促进计算设备800的功能。
总线接口模块804可以使得能够通过外部通信介质与诸如主机设备和/或计算系统中的其他组件的外部实体进行通信。总线接口模块804可以包括用于连接到电缆、插座、端口或到外部通信介质的其他连接的物理接口。总线接口模块804还可以包括硬件和/或软件以管理传入和传出事务。总线接口模块804可以实现本地总线协议,例如基于外围组件互连(PCI)的协议、非易失性存储器快速(NVMe)、高级主机控制器接口(AHCI)、小型计算机系统接口(SCSI)、串行连接SCSI(SAS)、串行AT附件(SATA)、并行ATA(PATA)、一些其他标准总线协议或专有总线协议。总线接口模块804可以包括用于这些总线协议中的任何一个的物理层,总线协议包括连接器、电源管理和错误处理等等。在一些实现方式中,计算设备800可以包括用于与多个外部实体通信的多个总线接口模块。这些多个总线接口模块可以实现相同的本地总线协议、不同的本地总线协议或相同和不同总线协议的组合。
网络接口模块808可以包括用于与网络通信的硬件和/或软件。该网络接口模块808可以例如包括用于有线连接到网络的物理连接器或物理端口,和/或用于与网络进行无线通信的天线。网络接口模块808还可以包括被配置为实现网络协议栈的硬件和/或软件。网络接口模块808可以使用网络协议与网络通信,例如TCP/IP、无限带宽技术、RoCE、电气和电子工程师协会(IEEE)802.11无线协议、用户数据报协议(UDP)、异步传输模式(ATM)、令牌环、帧中继、高级数据链路控制(HDLC)、光纤分布式数据接口(FDDI)和/或点对点协议(PPP)等。在一些实现方式中,计算设备800可以包括多个网络接口模块,每个网络接口模块被配置为与不同的网络通信。例如,在这些实现方式中,计算设备800可以包括用于与有线以太网、无线802.11网络、蜂窝网络、无限带宽技术网络等通信的网络接口模块。在一些实施例中,计算设备800可以通过网络接口模块808接收来自服务器的一组参数,例如用于卷积计算的上述权重值。
上述计算设备800的各种组件和模块可以实现为分立组件、片上系统(SoC)、ASIC、NPU、FPGA或任何的组合。在一些实施例中,SoC或其他组件可以通信地耦合到另一个计算系统以提供各种服务,例如流量监控、流量整形、计算等。在本技术的一些实施例中,SoC或其他组件可以包括如本文公开的多个子系统。
本文描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以体现在非暂时性计算机可读介质上并由本文描述的任何计算机系统中的处理器处理。应注意,所描述的过程和架构可以在任何用户交互之前以实时或异步模式执行。可以按照图8中建议的方式配置模块,和/或本文描述的功能可以由作为单独模块存在的一个或多个模块提供,和/或本文描述的模块功能可以分布在多个模块上。
因此,说明书和附图应被认为是说明性的而不是限制性的。然而,将显而易见的是,在不脱离如在权利要求中阐述的本公开的更广泛精神和范围的情况下,可对其做出各种修改和改变。
其他变型也在本公开的精神内。因此,虽然所公开的技术可容许各种修改和替代构造,但所示的其特定实施例已在附图中示出并且在上文中已经详细描述。然而,应理解,并不意图将本公开局限于所公开的一种或多种具体形式,而是相反地,本发明意图涵盖落在如所附权利要求中所限定的本发明的精神和范围内的所有修改、替代构造和等效物。
除非本文另外指出或明显地与上下文矛盾,否则在描述所公开的实施例的上下文中(尤其是在所附权利要求的上下文中)对术语“一个”和“一种”和“所述”以及类似指称对象的使用应解释为涵盖单数和复数两者。除非另外指出,否则术语“包含”、“具有”、“包括”和“含有”应解释为开放式术语(即,意指“包括但不限于”)。术语“连接的”应被解释为部分或全部包含在、连接到或连接在一起,即使有一些干扰。除非本文另外指出,否则本文中对值范围的列举仅仅意图用作单独提及落在所述范围内的每个单独值的速记方法,并且如同在本文中单独叙述地那样将每个单独值并入本说明书中。除非本文中另外指出或与上下文明显矛盾,否则本文中所描述的所有方法都可以按任何合适的顺序执行。本文所提供的任何以及所有示例或示例性语言(例如,“诸如”)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本公开的范围构成限制。本说明书中的语言不应解释为将任何非要求保护的要素指示为实践本公开所必需。
除非另有具体说明,否则诸如短语“X、Y、Z中的至少一个”的析取语言在上下文中应理解为通常用来表示项目、项等可为X、Y或Z或者它们的任何组合(例如,X、Y和/或Z)。因此,此类析取语言一般无意并且将不应暗示某些实施例需要存在X中的至少一者、Y中的至少一者或Z中的至少一者。
本文描述了本公开的各种实施例,包括发明人已知用于执行本公开的最佳模式。在阅读上述描述后,那些实施例的变型对于本领域普通技术人员而言可变得明显。发明人希望技术人员视情况采用此类变型,并且发明人意图以不同于如本文具体描述的方式来实践本公开。因此,在适用法律允许的情况下,本公开包括此处所附权利要求书中叙述的主题的所有修改和等效物。此外,除非本文另外指出或以其他方式明显地与上下文矛盾,否则本公开的范围涵盖在其所有可能变型中的上述要素的任何组合。
可根据以下条款描述本公开的各种示例实施例。
条款1:一种按行和列逻辑组织的脉动型乘法累加处理器,每行包括:
一个或多个归一化器,所述一个或多个归一化器包括被配置为将16位输入数据元素转换成归一化18位输入数据元素的归一化器,所述一个或多个归一化器中的每一个包括:
非正规检测器,其被配置为检测所述16位输入数据元素处于非正规形式;
移位器,其被配置为至少部分地基于检测所述非正规形式的所述非正规检测器来移位所述16位输入数据元素的有效数;
指数扩展器,其被配置为增加表示所述16位输入数据元素的指数部分的位的数量;以及
减法器,其被配置为至少部分地基于所述有效数的移位来调整所述指数部分的值;以及
多个处理元件,其被配置为从所述一个或多个归一化器依次接收所述归一化18位输入数据元素,所述多个处理元件中的每个处理元件包括:
第一输入端口,用于接收所述归一化18位输入数据元素;
第二输入端口,用于接收归一化权重;
权重寄存器,用于存储所述归一化权重;
第三输入端口,用于接收输入部分和;
乘法器,其被配置为将所述归一化18位输入数据元素乘以所述归一化权重以生成乘数积;以及
加法器,其被配置为通过将所述乘数积与所述输入部分和相加来生成34位加法结果。
条款2:如条款1所述的脉动型乘法累加处理器,其中:
所述归一化器被配置为当输入数据元素具有浮点16位(FP16)格式时,将所述16位输入数据元素转换为第一归一化18位输入数据元素;
所述归一化器被配置为当所述输入数据元素具有脑浮点16位(BF16)格式时,将所述16位输入数据元素转换为第二归一化18位输入数据元素;
所述第一归一化18位输入数据元素和所述第二归一化18位输入数据元素具有不同的指数长度;以及
所述第一归一化18位输入数据元素和所述第二归一化18位输入数据元素具有不同的有效数长度。
条款3:如条款1或条款2所述的脉动型乘法累加处理器,其还包括:
所述乘法器由两个或多个乘法器数据通路组成,其中:
第一乘法器数据通路由1位符号数据通路、10位有效数数据通路和7位指数数据通路组成;以及
第二乘法器数据通路由1位符号数据通路、7位有效数数据通路和10位指数数据通路组成;
控制器被配置为至少部分地基于数据类型控制信号在两个或更多个乘法器数据通路中进行选择;以及
所述加法器为34位浮点加法器,其中所述加法器由1位符号、23位有效数和10位指数组成。
条款4:如条款1至3中任一项所述的脉动型乘法累加处理器,其中所述归一化器被配置为将16位输入数据元素转换为归一化18位输入数据元素,并且归一化器还被配置为将16位权重转换为归一化18位权重。
条款5:一种脉动型电路,其包括:
脉动阵列,其包括布置成多行的处理元件;以及
第一归一化器,其被配置为:
接收以具有第一位长度的浮点表示的第一输入;以及
生成以具有第二位长度的浮点表示的第一归一化数,其中所述第二位长度大于所述第一位长度;
其中在所述脉动阵列的至少一行中的各个处理元件被配置为:
将所述第一归一化数乘以相应的第二归一化数以生成乘数积;以及
将相应的输入部分和与所述乘数积相加以生成相应的加法结果。
条款6:如条款5所述的脉动型电路,其中所述脉动阵列的所述多行中的各个处理元件包括:
乘法器,其被配置为将两个18位浮点数相乘,其中所述乘法器由1位符号数据通路、10位有效数数据通路和10位指数数据通路组成;以及
加法器,其被配置为将两个浮点数相加,其中所述加法器由1位符号数据通路、23位有效数数据通路和10位指数数据通路组成。
条款7:如条款5或条款6所述的脉动型电路,其中第一归一化器还被配置为:
接收输入数据元素和权重;
生成归一化输入数据元素和归一化权重;以及
选择要产生的归一化输入数据元素或归一化权重。
条款8:如条款5至7中任一项所述的脉动型电路,其中所述第一归一化器包括:
第一非正规检测器,其被配置为至少部分地基于所述第一输入的指数值和所述第一输入的有效数的值来检测所述第一输入是否为非正规;
第一指数扩展器,其被配置为扩展所述第一输入的所述指数的数值范围;以及
第一移位器,其被配置为移位所述第一输入的有效数。
条款9:如条款5至8中任一项所述的脉动型电路,其中所述第一归一化器包括:
第一前导零编码器或计数器,其被配置为检测所述第一输入的有效数中的前导零的数量;以及
第一移位器,其被配置为至少部分地基于所述第一输入的所述有效数中的前导零的数量来移位所述第一输入的所述有效数。
条款10:如条款5至9中任一项所述的脉动型电路,其中所述第一归一化器还被配置为接收所述第一输入并通过用两个额外位扩展所述第一输入的指数来扩展所述第一输入的所述指数。
条款11:如条款5至10中任一项所述的脉动型电路,其中所述脉动阵列的所述多行中的各个处理元件还包括:
乘法器;
加法器;以及
其中所述乘法器和加法器缺乏对以非正规形式提供的输入的支持。
条款12:如条款5至11中任一项所述的脉动型电路,其中:
所述第一归一化器还被配置为将第一输入转换为第一归一化数,其中所述第一归一化器被配置为支持16位浮点数和16位脑浮点数;以及
其中所述脉动阵列的所述多行中的各个处理元件还包括:
18位乘法器;以及
34位加法器。
条款13:如条款5至12中任一项所述的脉动型电路,其中:
所述第一归一化器还被配置为将第一输入转换为第一归一化数,其中所述第一归一化器被配置为支持至少n位浮点数,其中n可以是任意数;以及
其中所述脉动阵列的所述多行中的各个处理元件还包括:
乘法器,其被配置为将至少两个n位数相乘;以及
加法器,其被配置为将两个m位数相加,其中m大于n。
条款14:如条款5至13中任一项所述的脉动型电路,其还包括:
第二归一化器,其被配置为将第二输入转换为第二归一化数,所述第二归一化器包括:
第二非正规检测器,其被配置为检测所述第二输入是否为非正规形式;
第二移位器,其被配置为至少部分地基于检测所述非正规形式的所述第二非正规检测器来移位所述第二输入的有效数;
第二指数扩展器,其被配置为增加表示所述第二输入的指数的位的数量;以及
第二减法器,其被配置为调整指数值以补偿所述有效数的移位。
条款15:如条款5至14中任一项所述的脉动型电路,其中所述脉动阵列的所述多行中的各个处理元件还包括:
乘法器;
加法器;以及
其中所述加法器和所述乘法器集成在一起以执行单步乘加运算,其中所述单步乘加运算涉及单次舍入。
条款16:一种用于由处理元件的脉动阵列中的处理元件进行脉动阵列处理的方法,所述方法包括:
接收以具有第一位长度的浮点表示的第一输入;
生成以具有第二位长度的浮点表示的第一归一化数,其中所述第二位长度可以是大于所述第一位长度的任何位长度;
将所述第一归一化数乘以第二归一化数以生成乘数积;以及
将输入部分和与所述乘数积相加以生成加法结果。
条款17:如条款16所述的方法,其中使用缺乏对以非正规形式提供的输入的支持的乘法器来执行所述乘法。
条款18:如条款16或条款17所述的方法,其还包括:
接收第一输入,其中所述第一输入可以是16位浮点数或16位脑浮点数;
将第一归一化数乘以第二归一化数;以及
将所述乘数积与所述输入部分和相加以产生加法结果,其中所述加法结果为34位浮点数。
条款19:如条款16至18中任一项所述的方法,其还包括:
接收第一输入,其中所述第一输入可以是n位浮点数,其中n可以是任意数;
将所述第一归一化数乘以所述第二归一化数;以及
将所述乘数积与所述输入部分和相加以产生加法结果,其中所述加法结果为m位浮点数,其中m大于n。
条款20:如条款16至19中任一项所述的方法,其还包括:
接收以具有第三位长度的浮点表示的第三输入;
生成以具有第四位长度的浮点表示的第三归一化数,其中所述第四位长度大于所述第三位长度;以及
选择要产生的所述第三归一化数或所述第一归一化数。
Claims (15)
1.一种脉动型电路,其包括:
脉动阵列,其包括布置成多行的处理元件;以及
第一归一化器,其被配置为:
接收以具有第一位长度的浮点表示的第一输入;以及
生成以具有第二位长度的浮点表示的第一归一化数,其中所述第二位长度大于所述第一位长度;
其中在所述脉动阵列的至少一行中的各个处理元件被配置为:
将所述第一归一化数乘以相应的第二归一化数以生成乘数积;以及
将相应的输入部分和与所述乘数积相加以生成相应的加法结果。
2.如权利要求1所述的脉动型电路,其中所述脉动阵列的所述多行中的各个处理元件包括:
乘法器,其被配置为将两个18位浮点数相乘,其中所述乘法器由1位符号数据通路、10位有效数数据通路和10位指数数据通路组成;以及
加法器,其被配置为将两个浮点数相加,其中所述加法器由1位符号数据通路、23位有效数数据通路和10位指数数据通路组成。
3.如权利要求1或权利要求2所述的脉动型电路,其中所述第一归一化器还被配置为:
接收输入数据元素和权重;
生成归一化输入数据元素和归一化权重;以及
选择要产生的归一化输入数据元素或归一化权重。
4.如权利要求1至3中任一项所述的脉动型电路,其中所述第一归一化器包括:
第一非正规检测器,其被配置为至少部分地基于所述第一输入的指数值和所述第一输入的有效数的值来检测所述第一输入是否为非正规;
第一指数扩展器,其被配置为扩展所述第一输入的所述指数的数值范围;以及
第一移位器,其被配置为移位所述第一输入的有效数。
5.如权利要求1至4中任一项所述的脉动型电路,其中所述第一归一化器包括:
第一前导零编码器或计数器,其被配置为检测所述第一输入的有效数中的前导零的数量;以及
第一移位器,其被配置为至少部分地基于所述第一输入的所述有效数中的前导零的数量来移位所述第一输入的所述有效数。
6.如权利要求1至5中任一项所述的脉动型电路,其中所述第一归一化器还被配置为接收所述第一输入并通过用两个额外位扩展所述第一输入的指数来扩展所述第一输入的所述指数。
7.如权利要求1至6中任一项所述的脉动型电路,其中:
所述第一归一化器还被配置为将第一输入转换为第一归一化数,其中所述第一归一化器被配置为支持16位浮点数和16位脑浮点数;以及
其中所述脉动阵列的所述多行中的各个处理元件还包括:
18位乘法器;以及
34位加法器。
8.如权利要求1至7中任一项所述的脉动型电路,其中:
所述第一归一化器还被配置为将第一输入转换为第一归一化数,其中所述第一归一化器被配置为支持至少n位浮点数,其中n可以是任意数;以及
其中所述脉动阵列的所述多行中的各个处理元件还包括:
乘法器,其被配置为将至少两个n位数相乘;以及
加法器,其被配置为将两个m位数相加,其中m大于n。
9.如权利要求1至8中任一项所述的脉动型电路,其还包括:
第二归一化器,其被配置为将第二输入转换为第二归一化数,所述第二归一化器包括:
第二非正规检测器,其被配置为检测所述第二输入是否为非正规形式;
第二移位器,其被配置为至少部分地基于检测所述非正规形式的所述第二非正规检测器来移位所述第二输入的有效数;
第二指数扩展器,其被配置为增加表示所述第二输入的指数的位的数量;以及
第二减法器,其被配置为调整指数值以补偿所述有效数的移位。
10.如权利要求1至9中任一项所述的脉动型电路,其中所述脉动阵列的所述多行中的各个处理元件还包括:
乘法器;
加法器;以及
其中所述加法器和所述乘法器集成在一起以执行单步乘加运算,其中所述单步乘加运算涉及单次舍入。
11.一种用于由处理元件的脉动阵列中的处理元件进行脉动阵列处理的方法,所述方法包括:
接收以具有第一位长度的浮点表示的第一输入;
生成以具有第二位长度的浮点表示的第一归一化数,其中所述第二位长度可以是大于所述第一位长度的任何位长度;
将所述第一归一化数乘以第二归一化数以生成乘数积;以及
将输入部分和与所述乘数积相加以生成加法结果。
12.如权利要求11所述的方法,其中使用缺乏对以非正规形式提供的输入的支持的乘法器来执行所述乘法。
13.如权利要求11或权利要求12所述的方法,其还包括:
接收第一输入,其中所述第一输入可以是16位浮点数或16位脑浮点数;
将所述第一归一化数乘以所述第二归一化数;以及
将所述乘数积与所述输入部分和相加以产生加法结果,其中所述加法结果为34位浮点数。
14.如权利要求11至13中任一项所述的方法,其还包括:
接收第一输入,其中所述第一输入可以是n位浮点数,其中n可以是任意数;
将所述第一归一化数乘以所述第二归一化数;以及
将所述乘数积与所述输入部分和相加以产生加法结果,其中所述加法结果为m位浮点数,其中m大于n。
15.如权利要求11至14中任一项所述的方法,其还包括:
接收以具有第三位长度的浮点表示的第三输入;
生成以具有第四位长度的浮点表示的第三归一化数,其中所述第四位长度大于所述第三位长度;以及
选择要产生的所述第三归一化数或所述第一归一化数。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/698,809 US11467806B2 (en) | 2019-11-27 | 2019-11-27 | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
US16/698,809 | 2019-11-27 | ||
PCT/US2020/062356 WO2021108660A1 (en) | 2019-11-27 | 2020-11-25 | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115039067A true CN115039067A (zh) | 2022-09-09 |
Family
ID=74046139
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080086461.9A Pending CN115039067A (zh) | 2019-11-27 | 2020-11-25 | 包括具有高效预规格化和扩展动态范围的熔合乘法累加的脉动阵列 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11467806B2 (zh) |
EP (1) | EP4066101A1 (zh) |
CN (1) | CN115039067A (zh) |
WO (1) | WO2021108660A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11842169B1 (en) | 2019-09-25 | 2023-12-12 | Amazon Technologies, Inc. | Systolic multiply delayed accumulate processor architecture |
US11467806B2 (en) | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
US11816446B2 (en) | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
US11232062B1 (en) | 2020-06-29 | 2022-01-25 | Amazon Technologies, Inc. | Parallelism within a systolic array using multiple accumulate busses |
US11422773B1 (en) | 2020-06-29 | 2022-08-23 | Amazon Technologies, Inc. | Multiple busses within a systolic array processing element |
US11308027B1 (en) | 2020-06-29 | 2022-04-19 | Amazon Technologies, Inc. | Multiple accumulate busses in a systolic array |
US20220188073A1 (en) * | 2020-12-11 | 2022-06-16 | Amazon Technologies, Inc. | Data-type-aware clock-gating |
EP4363963A1 (en) * | 2021-06-30 | 2024-05-08 | Amazon Technologies, Inc. | Systolic array with efficient input reduction and extended array performance |
US11880682B2 (en) | 2021-06-30 | 2024-01-23 | Amazon Technologies, Inc. | Systolic array with efficient input reduction and extended array performance |
US11507452B1 (en) * | 2021-07-16 | 2022-11-22 | Google Llc | Error checking for systolic array computation |
US11941111B2 (en) * | 2021-07-31 | 2024-03-26 | International Business Machines Corporation | Exploiting fine-grained structured weight sparsity in systolic arrays |
CN114237551B (zh) * | 2021-11-26 | 2022-11-11 | 南方科技大学 | 一种基于脉动阵列的多精度加速器及其数据处理方法 |
Family Cites Families (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4937774A (en) | 1988-11-03 | 1990-06-26 | Harris Corporation | East image processing accelerator for real time image processing applications |
US5138695A (en) | 1989-10-10 | 1992-08-11 | Hnc, Inc. | Systolic array image processing system |
US5168499A (en) | 1990-05-02 | 1992-12-01 | California Institute Of Technology | Fault detection and bypass in a sequence information signal processor |
US5151953A (en) | 1990-12-10 | 1992-09-29 | Harris Corporation | Single chip 2-D convolver |
CA2148719A1 (en) | 1992-11-05 | 1994-05-11 | Warren Marwood | Scalable dimensionless array |
US5659781A (en) | 1994-06-29 | 1997-08-19 | Larson; Noble G. | Bidirectional systolic ring network |
US5692147A (en) | 1995-06-07 | 1997-11-25 | International Business Machines Corporation | Memory mapping method and apparatus to fold sparsely populated structures into densely populated memory columns or rows by selectively transposing X and Y address portions, and programmable gate array applications thereof |
US6463453B1 (en) | 1998-01-12 | 2002-10-08 | Motorola, Inc. | Low power pipelined multiply/accumulator with modified booth's recoder |
US6480872B1 (en) | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
US6801924B1 (en) | 1999-08-19 | 2004-10-05 | National Semiconductor Corporation | Formatting denormal numbers for processing in a pipelined floating point unit |
US6205462B1 (en) | 1999-10-06 | 2001-03-20 | Cradle Technologies | Digital multiply-accumulate circuit that can operate on both integer and floating point numbers simultaneously |
US6661730B1 (en) | 2000-12-22 | 2003-12-09 | Matrix Semiconductor, Inc. | Partial selection of passive element memory cell sub-arrays for write operation |
US20040139274A1 (en) | 2002-10-21 | 2004-07-15 | Hui Ronald Chi-Chun | Virtual content addressable memory with high speed key insertion and deletion and pipelined key search |
US7814297B2 (en) | 2005-07-26 | 2010-10-12 | Arm Limited | Algebraic single instruction multiple data processing |
US8024394B2 (en) | 2006-02-06 | 2011-09-20 | Via Technologies, Inc. | Dual mode floating point multiply accumulate unit |
US7814137B1 (en) | 2007-01-09 | 2010-10-12 | Altera Corporation | Combined interpolation and decimation filter for programmable logic device |
US8184696B1 (en) | 2007-09-11 | 2012-05-22 | Xilinx, Inc. | Method and apparatus for an adaptive systolic array structure |
US20090248769A1 (en) | 2008-03-26 | 2009-10-01 | Teck-Kuen Chua | Multiply and accumulate digital filter operations |
JP5251778B2 (ja) | 2009-08-03 | 2013-07-31 | ソニー株式会社 | 固体撮像装置、固体撮像装置のアナログ−デジタル変換方法および電子機器 |
FR2949879B1 (fr) | 2009-09-04 | 2014-07-18 | Kalray | Noeuds d'entree/sortie d'un reseau sur puce torique. |
US8135666B2 (en) | 2010-03-11 | 2012-03-13 | International Business Machines Corporation | Systems and methods for policy based execution of time critical data warehouse triggers |
US8924455B1 (en) | 2011-02-25 | 2014-12-30 | Xilinx, Inc. | Multiplication of matrices using systolic arrays |
US10083395B2 (en) | 2015-05-21 | 2018-09-25 | Google Llc | Batch processing in a neural network processor |
US10049322B2 (en) | 2015-05-21 | 2018-08-14 | Google Llc | Prefetching weights for use in a neural network processor |
US11061672B2 (en) | 2015-10-02 | 2021-07-13 | Via Alliance Semiconductor Co., Ltd. | Chained split execution of fused compound arithmetic operations |
US11029949B2 (en) | 2015-10-08 | 2021-06-08 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Neural network unit |
US10275394B2 (en) | 2015-10-08 | 2019-04-30 | Via Alliance Semiconductor Co., Ltd. | Processor with architectural neural network execution unit |
US10037192B2 (en) | 2015-10-21 | 2018-07-31 | Altera Corporation | Methods and apparatus for performing product series operations in multiplier accumulator blocks |
US9971541B2 (en) | 2016-02-17 | 2018-05-15 | Micron Technology, Inc. | Apparatuses and methods for data movement |
US20180164866A1 (en) | 2016-12-13 | 2018-06-14 | Qualcomm Incorporated | Low-power architecture for sparse neural network |
US10838910B2 (en) | 2017-04-27 | 2020-11-17 | Falcon Computing | Systems and methods for systolic array design from a high-level program |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
EP3757823B1 (en) | 2017-05-17 | 2023-07-05 | Google LLC | Low latency matrix multiply unit |
TWI807539B (zh) | 2017-05-17 | 2023-07-01 | 美商谷歌有限責任公司 | 用於執行矩陣乘法之方法、硬體電路、運算系統及電腦儲存媒體 |
US10310818B2 (en) | 2017-07-19 | 2019-06-04 | Arm Limited | Floating point chained multiply accumulate |
US10879904B1 (en) | 2017-07-21 | 2020-12-29 | X Development Llc | Application specific integrated circuit accelerators |
US11507429B2 (en) | 2017-09-14 | 2022-11-22 | Electronics And Telecommunications Research Institute | Neural network accelerator including bidirectional processing element array |
CN111149090B (zh) | 2017-09-21 | 2023-12-01 | 华为技术有限公司 | 多线程脉动阵列 |
US10915297B1 (en) | 2017-11-15 | 2021-02-09 | Habana Labs Ltd. | Hardware accelerator for systolic matrix multiplication |
US10459876B2 (en) | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US10678508B2 (en) | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
US11188814B2 (en) | 2018-04-05 | 2021-11-30 | Arm Limited | Systolic convolutional neural network |
US10817260B1 (en) | 2018-06-13 | 2020-10-27 | Amazon Technologies, Inc. | Reducing dynamic power consumption in arrays |
US11262982B2 (en) | 2018-07-23 | 2022-03-01 | SK Hynix Inc. | Computation circuit including a plurality of processing elements coupled to a common accumulator, a computation device and a system including the same |
US10817042B2 (en) | 2018-09-27 | 2020-10-27 | Intel Corporation | Power savings for neural network architecture with zero activations during inference |
US20200117988A1 (en) | 2018-10-11 | 2020-04-16 | International Business Machines Corporation | Networks for distributing parameters and data to neural network compute cores |
JP7315317B2 (ja) | 2018-11-09 | 2023-07-26 | 株式会社Preferred Networks | プロセッサおよびプロセッサのデータ転送方法 |
EP3654247A1 (en) | 2018-11-15 | 2020-05-20 | IMEC vzw | Convolution engine for neural networks |
US11360704B2 (en) | 2018-12-21 | 2022-06-14 | Micron Technology, Inc. | Multiplexed signal development in a memory device |
US20200226473A1 (en) | 2019-01-15 | 2020-07-16 | BigStream Solutions, Inc. | Systems, apparatus, methods, and architectures for heterogeneous precision acceleration of quantized neural networks |
US20200349106A1 (en) | 2019-05-01 | 2020-11-05 | Samsung Electronics Co., Ltd. | Mixed-precision neural-processing unit tile |
US10790830B1 (en) * | 2019-05-20 | 2020-09-29 | Achronix Semiconductor Corporation | Fused memory and arithmetic circuit |
US11675998B2 (en) | 2019-07-15 | 2023-06-13 | Meta Platforms Technologies, Llc | System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator |
US11256476B2 (en) | 2019-08-08 | 2022-02-22 | Achronix Semiconductor Corporation | Multiple mode arithmetic circuit |
US11342944B2 (en) | 2019-09-23 | 2022-05-24 | Untether Ai Corporation | Computational memory with zero disable and error detection |
US20210089316A1 (en) | 2019-09-25 | 2021-03-25 | Intel Corporation | Deep learning implementations using systolic arrays and fused operations |
US11663746B2 (en) * | 2019-11-15 | 2023-05-30 | Intel Corporation | Systolic arithmetic on sparse data |
US11816446B2 (en) | 2019-11-27 | 2023-11-14 | Amazon Technologies, Inc. | Systolic array component combining multiple integer and floating-point data types |
US11467806B2 (en) | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
US11113233B1 (en) | 2020-06-29 | 2021-09-07 | Amazon Technologies, Inc. | Multiple busses in a grouped systolic array |
US11232062B1 (en) | 2020-06-29 | 2022-01-25 | Amazon Technologies, Inc. | Parallelism within a systolic array using multiple accumulate busses |
-
2019
- 2019-11-27 US US16/698,809 patent/US11467806B2/en active Active
-
2020
- 2020-11-25 EP EP20829414.0A patent/EP4066101A1/en active Pending
- 2020-11-25 WO PCT/US2020/062356 patent/WO2021108660A1/en unknown
- 2020-11-25 CN CN202080086461.9A patent/CN115039067A/zh active Pending
-
2022
- 2022-09-15 US US17/932,537 patent/US20230010054A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20210157548A1 (en) | 2021-05-27 |
WO2021108660A1 (en) | 2021-06-03 |
EP4066101A1 (en) | 2022-10-05 |
US11467806B2 (en) | 2022-10-11 |
US20230010054A1 (en) | 2023-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11816446B2 (en) | Systolic array component combining multiple integer and floating-point data types | |
CN115039067A (zh) | 包括具有高效预规格化和扩展动态范围的熔合乘法累加的脉动阵列 | |
US10817260B1 (en) | Reducing dynamic power consumption in arrays | |
US20210264273A1 (en) | Neural network processor | |
CN111095241B (zh) | 加速数学引擎 | |
CN111684473B (zh) | 提高神经网络阵列的性能 | |
EP3533003B1 (en) | Exploiting input data sparsity in neural network compute units | |
US20180046894A1 (en) | Method for optimizing an artificial neural network (ann) | |
US20180046903A1 (en) | Deep processing unit (dpu) for implementing an artificial neural network (ann) | |
CN110163355B (zh) | 一种计算装置及方法 | |
US11880682B2 (en) | Systolic array with efficient input reduction and extended array performance | |
US11113233B1 (en) | Multiple busses in a grouped systolic array | |
US20230004523A1 (en) | Systolic array with input reduction to multiple reduced inputs | |
US11232062B1 (en) | Parallelism within a systolic array using multiple accumulate busses | |
US11762803B2 (en) | Multiple accumulate busses in a systolic array | |
US8706791B2 (en) | Low power fir filter in multi-MAC architecture | |
US11308026B1 (en) | Multiple busses interleaved in a systolic array | |
US11422773B1 (en) | Multiple busses within a systolic array processing element | |
CN110543936B (zh) | 一种cnn全连接层运算的多并行加速方法 | |
EP4363963A1 (en) | Systolic array with efficient input reduction and extended array performance | |
Fong et al. | A cost-effective CNN accelerator design with configurable PU on FPGA | |
Wong et al. | Low bitwidth CNN accelerator on FPGA using Winograd and block floating point arithmetic | |
CN108255463B (zh) | 一种数字逻辑运算方法、电路和fpga芯片 | |
US11842169B1 (en) | Systolic multiply delayed accumulate processor architecture | |
CN110908714A (zh) | 算术逻辑单元、数据处理系统、方法和模块 |
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 |