CN113626759A - 使用低位宽点积引擎对高位宽数求和 - Google Patents

使用低位宽点积引擎对高位宽数求和 Download PDF

Info

Publication number
CN113626759A
CN113626759A CN202110494255.8A CN202110494255A CN113626759A CN 113626759 A CN113626759 A CN 113626759A CN 202110494255 A CN202110494255 A CN 202110494255A CN 113626759 A CN113626759 A CN 113626759A
Authority
CN
China
Prior art keywords
elements
bits
bit
dot product
dot
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
Application number
CN202110494255.8A
Other languages
English (en)
Inventor
克里希纳库马尔·纳拉亚南·奈尔
伊赫桑·基什阿德斯坦尼扎德
托马斯·马克·乌尔里希
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Meta Platforms Inc
Original Assignee
Facebook Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Facebook Inc filed Critical Facebook Inc
Publication of CN113626759A publication Critical patent/CN113626759A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Abstract

本申请涉及使用低位宽点积引擎来对高位宽数字求和。一种设备(例如,集成电路芯片)包括点积处理组件、数据对齐组件和累加器。点积处理组件被配置为计算第一组元素与第二组元素的点积,该第一组元素存储在第一存储单元中,其中:使用第一数量的位来表示第一组元素中的每个元素,使用大于第一数量的位的第二数量的位来表示存储在第一存储单元中的一组值中的每个值,并且该组值中的每个值被存储为跨越第一组元素的元素中的多于一个元素的分割段。数据对齐组件被配置成接收点积处理组件的结果,并修改点积处理组件的结果中的一个或更多个。累加器被配置为对数据对齐组件的输出求和,以至少部分地确定该组值的和。

Description

使用低位宽点积引擎对高位宽数求和
发明背景
使用神经网络可以解决一整类复杂的人工智能问题。许多神经网络所需的常见运算包括例如,在执行矩阵运算时的求和、乘法和点积。由于人工智能问题通常是计算和数据密集型的,所以硬件解决方案通常有利于提高性能。创建一个灵活且计算效率高的硬件平台是一项技术挑战。因此,存在对针对高效、高吞吐量硬件方案的技术的需求,该技术不会引入显著的硬件复杂性和费用。
附图简述
在以下详细描述和附图中公开了本发明的各种实施例。
图1是示出用于解决人工智能问题和其他计算问题的系统的实施例的框图。
图2是示出用于解决人工智能问题和其他计算问题的处理元件的实施例的框图。
图3是示出用于在硬件中执行点积运算的过程的实施例的流程图。
图4是示出使用低位宽(low-bit-width)点积引擎处理数字组的系统的实施例的框图。
图5是示出与处理整数相关的示例数据格式的示意图。
图6是示出与处理浮点数相关的示例数据格式的示意图。
图7是示出使用低位宽点积引擎处理数字组的过程的实施例的流程图。
详细描述
本发明可以以多种方式实现,包括作为过程;装置;系统;物质的组成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,例如被配置为执行存储在耦合到处理器的存储器上和/或由该存储器提供的指令的处理器。在本说明书中,这些实现或者本发明可以采取的任何其他形式可以被称为技术。通常,在本发明的范围内,可以改变所公开的过程的步骤顺序。除非另有说明,否则被描述为被配置成执行任务的诸如处理器或存储器的组件可以被实现为在给定时间被临时配置为执行任务的通用组件或者被制造为执行任务的特定组件。如本文所使用的,术语“处理器”指的是被配置成处理数据(例如计算机程序指令)的一个或更多个设备、电路和/或处理核心。
下面提供了本发明的一个或更多个实施例的详细描述以及说明本发明原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改和等同物。为了提供对本发明的全面理解,在以下描述中阐述了许多具体细节。这些细节是出于示例的目的而提供的,并且本发明可以根据权利要求来被实施,而不需要这些具体细节中的一些或全部。为了清楚起见,没有详细描述与本发明相关的技术领域中已知的技术材料,以免不必要地模糊本发明。
公开了一种用于提高硬件中数值处理效率的设备。所公开的设备包括:点积处理组件,该点积处理组件被配置为计算第一组元素与第二组元素的点积,该第一组元素存储在第一存储单元中,其中:使用第一数量的位来表示第一组元素中的每个元素,使用大于第一数量的位的第二数量的位来表示存储在第一存储单元中的一组值中的每个值,并且该组值中的每个值被存储为跨越第一组元素的元素中的多于一个元素的分割段(splitsegment);数据对齐组件,该数据对齐组件被配置为:接收点积处理组件的结果,并修改点积处理组件的一个或更多个结果;以及累加器,该累加器被配置为对数据对齐组件的输出求和,以至少部分地确定该组值的和。所公开的设备的实际和技术益处包括增加关于数字处理的灵活性,例如,使用较低位宽的点积引擎对较高位宽的数字求和的能力。
在一些实施例中,能够本地对8位整数和/或16位浮点数的向量进行相乘以及求和的点积引擎(在本文也称为点积处理组件)被用于通过结合额外的指定硬件来分别计算32位整数和/或32位浮点数的向量的和。向量的求和是指将向量中所有元素的值求和成单个输出值。向量的求和在本文也被称为向量的缩减(reducing)/缩减(reduction)。对于位宽由点积引擎本地支持的数字向量,点积引擎可以通过计算第一向量与第二向量的点积来缩减整数元素或浮点元素的第一向量,第二向量的元素都分别具有整数或浮点格式的值1。使用本文公开的技术,点积引擎还可以缩减位宽高于点积引擎本地支持的位宽的数字向量。本文公开的技术适用于稀疏神经网络、卷积和其他应用。
在一些实施例中,能够本地缩减8位整数(例如,int8)的向量的点积处理组件被用于缩减32位整数(例如,int32)的向量。在一些实施例中,点积处理组件以32字节(256位)块(chunk)从存储器读取数据。可以读取八个32位整数的输入向量,并对这256位进行处理,就像它们是三十二个8位整数一样。在各种实施例中,加载32位整数的向量,并将每个32位整数存储为四个8位块xi3、xi2、xi1和xi0,其中xi3是32位整数xi的最高有效8位,并且xi0是32位整数xi的最低有效8位。然后可以使用点积处理组件来计算上述成组8位块的输入向量与值为0、0、0、1、0、0、0、1……(也是8位格式)的向量的第一点积。这产生了来自每个32位整数的最低有效8位之和。换句话说,对于每组八个32位整数(当32位整数以八个为一组加载时),结果是x00+x10+……+x70的计算。在各种实施例中,该中间结果存储在累加器(例如,寄存器)中。接下来,可以使用点积处理组件来计算输入向量与向量0、0、1、0、0、0、1、0……的第二点积。这产生了来自每个32位整数的第二最低有效8位的和(x01+x11+……+x71)。然后,该和被左移8位,并被发送到累加器(以添加到运行和(running sum))。在下一个循环中,可以使用点积处理组件来计算输入向量与向量0、1、0、0、0、1、0、0……的第三点积。这产生了来自每个32位整数的第二最高有效8位的和(x02+x12+……+x72)。然后,该和被左移16位,并被发送到累加器。在下一个循环中,可以使用点积处理组件来计算输入向量与向量1、0、0、0、1、0、0、0……的第四点积。这产生了来自每个32位整数的最高有效8位的和(x03+x13+……+x73)。然后,该和被左移24位,并被发送到累加器。此时,累加器存储最终结果,该最终结果为八个32位整数之和。
如本文进一步详细描述的,在一些实施例中,用于执行32位整数的向量的缩减的硬件包括:被配置为本地处理8位整数的向量的点积处理组件、被配置为路由四个点积结果的多路复用器、被配置为从0位、8位、16位和24位的向左位移位(bit shift)中进行选择的位移位器(bit shifter)以及累加器。
在一些实施例中,能够本地缩减16位浮点数(例如,脑浮点(Brain FloatingPoint)浮点格式(在本文也称为bfloat16、BFloat16等))的向量的点积处理组件用于缩减32位浮点数(例如,单精度浮点格式(在本文也称为fp32))的向量。在一些实施例中,点积处理组件以32字节(256位)块从存储器读取数据。可以读取八个32位fp32数字的输入向量,并对这256位执行处理,就像它们是十六个bfloat16数字一样。在各种实施例中,八个fp32数字的输入向量被加载和存储,并被视为十六个bfloat16数字。输入向量与向量1、0、1、0……(bfloat16格式的交替的1和0)的第一点积可以使用点积处理组件来计算并发送到累加器。这产生了每个fp32数字的bfloat16版本的和,这是因为fp32数字的前16位是1个符号位(sign bit)、8个指数位(exponent bit)和7个尾数位(mantissa bit),其是bfloat16格式(bfloat16和fp32数据格式的图示见图6)。fp32数字的其他16位是其他16个尾数位(fp32数字中总共23个尾数位)。换句话说,输入向量的所有其他16位块是正确格式化的bfloat16数字,并且第一点积将所有这些bfloat16块加在一起,以获得正确的指数和最终尾数的前7位。在第一点积中,超出前七位的fp32尾数位不会影响结果,因为它们被乘以0。接下来,来自每个fp32数字的尾数的(来自每个fp32数字的第二个16位半部的)接下来的8位被路由到点积处理组件的输入(例如,使用多路复用器来替换这8位),替换尾数的前7位,并且使用点积处理组件计算与交替的1和0向量1、0、1、0……的第二点积并将其发送到累加器。因为额外的位(第8位)替换了正规浮点数(normal floating-point number)的J位(J-bit),所以八位可以替换要由点积处理组件处理的尾数的前7位。从第二点积指数中减去值8,以考虑到第二点积的尾数位的8位偏移。接下来,来自每个fp32数字的尾数的(来自每个fp32数字的第二个16位半部的)最后8位被路由到点积处理组件的输入(例如,使用多路复用器来替换这8位),并且使用点积处理组件计算与交替的1和0向量1、0、1、0……的第三点积并将其发送到累加器。与第二点积一样,第8个尾数位取代了J位。从第三点积指数中减去值16,以考虑第三点积的尾数位的16位偏移。累加后的最终结果是输入向量的fp32数字之和。
如本文进一步详细描述的,在一些实施例中,执行32位fp32数字的向量的缩减的硬件包括:被配置为本地处理bfloat16数字的向量的点积处理组件;被配置为从来自每个fp32数字的三组尾数位中进行选择的多个(aplurality of)多路复用器;被配置为路由三个点积结果的多路复用器;被配置为从值0、8和16中进行选择以进行减法的减法器;以及累加器。在一些实施例中,减法器是被配置为添加负数的加法器。
上述示例仅是说明性的。还可以应用本文描述的技术来缩减不同位宽和/或不同格式的数字的向量。例如,对于本领域技术人员来说显而易见的是,应用本文描述的技术来缩减64位整数的向量可以包括对八个8位的块而不是四个8位的块执行处理。也可以提供不同的点积处理组件。例如,使用被配置为本地缩减16位整数向量的点积处理组件来缩减64位整数向量可以包括对四个16位的块执行处理。
图1是示出用于解决人工智能问题和其他计算问题的系统的实施例的框图。例如,系统100可被应用以使用神经网络来解决诸如图像识别和推荐系统匹配的问题。在所示的示例中,系统100包括多个处理元件,诸如通过总线151连接到存储器单元131的处理元件101、111和121。系统100可以包括更少或更多的处理元件。例如,处理元件的数量可以根据预期的计算和数据要求而按比例增加(scaled up)或减少。在一些实施例中,诸如101、111和121的处理元件经由总线151而彼此通信连接和/或通信地连接到存储器单元131。例如,存储器单元可以是末级高速缓存(last level cache,LLC)和/或可以使用静态随机存取存储器(SRAM)来实现。系统100可以利用每个处理元件来执行矩阵计算运算,例如求和、乘法、点积、矩阵乘法等,包括整数和浮点运算。在一些实施例中,不同的处理元件用于不同的操作和/或数据格式。例如,一些处理元件可以用于计算整数点积,而其他处理元件用于计算浮点点积。
在一些实施例中,诸如总线151的通信总线用于传输处理元件指令和可选的指令参数(argument)。例如,矩阵运算和矩阵操作数可以经由总线151传输到处理元件,诸如处理元件101、111和/或121。附加的处理元件指令可以包括求和、乘法、点积、矩阵乘法等,运算指令,如整数或浮点运算指令。在各种实施例中,可以使用系统100通过将问题细分成较小的子问题来解决大型的复杂人工智能问题。较小的子问题可以被分派和分配给不同的处理元件。较小子问题的结果可以被合并,以确定较大和更复杂问题的解。在某些情况下,子问题是并行地和/或在流水线级(pipelined stage)解决的。在一些情况下,来自第一处理元件的结果作为输入被馈送到第二处理元件。
在一些实施例中,系统100的每个处理元件至少包括控制逻辑单元和矩阵计算引擎。如关于处理元件111所示,处理元件111包括控制逻辑113和矩阵计算引擎115。处理元件101和121显示为虚线框,并且没有示出处理元件101和121的一些细节。在一些实施例中,处理元件的控制逻辑单元用于控制处理元件的操作,包括处理元件的矩阵计算引擎的操作。在所示的示例中,控制逻辑113处理经由通信总线151导向处理元件111的指令。例如,处理元件指令可以包括整数或浮点运算指令。在一些实施例中,控制逻辑113确定如何使用矩阵计算引擎115执行整数或浮点运算,包括如何确定整数或浮点数操作数的分量。在一些实施例中,控制逻辑113经由总线151接收处理元件指令,并且可以用于启动从存储器131检索数据和/或向存储器131写入数据。
在一些实施例中,矩阵计算引擎115是硬件矩阵计算引擎,用于执行矩阵运算,包括与整数或浮点求和、乘法、点积、矩阵乘法和/或卷积运算相关的运算。例如,矩阵计算引擎115可以是用于执行要求整数或浮点乘法和加法运算的点积运算的矩阵引擎。在一些实施例中,支持的卷积运算包括逐深度(depthwise)、逐组(groupwise)、正常(normal)、规则(regular)、逐点(pointwise)、二维和/或三维卷积等。例如,矩阵计算引擎115可以接收第一输入矩阵(例如大图像的子集)以及接收第二输入矩阵(例如滤波器、核(kernel)或卷积矩阵等)以应用于第一输入矩阵。矩阵计算引擎115可用于使用两个输入矩阵执行卷积运算,以确定结果输出矩阵。在一些实施例中,矩阵计算引擎115包括输入和/或输出缓冲器,用于加载输入数据矩阵或向量和写出结果数据矩阵或向量。在一些实施例中,矩阵计算引擎115包括多个向量单元,并且每个向量单元包括向量乘法单元和向量加法器单元。
图2是示出用于解决人工智能问题和其他计算问题的处理元件的实施例的框图。在所示的示例中,处理元件201通信地连接到总线251。处理元件201包括控制逻辑203和矩阵计算引擎205。矩阵计算引擎205包括向量单元211、221、231和241。矩阵计算引擎205可以包括更多或更少的向量单元。例如,矩阵计算引擎可以包括32个向量单元,每个向量单元能够处理两个256位向量。在各种实施例中,每个向量单元包括向量乘法单元和向量加法器单元。在所示的示例中,向量单元211包括向量乘法单元213和向量加法器单元215。为简单起见,向量单元221、231和241的向量乘法单元和向量加法器单元未示出,但功能类似于向量乘法单元213和向量加法器单元215。在一些实施例中,不同的向量单元用于不同的运算和/或数据格式。例如,一些向量单元可用于计算整数点积,而其他向量单元可用于计算浮点点积。处理元件中的所有向量单元也可以用于相同的运算和/或数据格式。在一些实施例中,处理元件201是图1的处理元件101、111和/或121。在一些实施例中,控制逻辑203和矩阵计算引擎205分别是图1的控制逻辑113和矩阵计算引擎115。
在一些实施例中,矩阵计算引擎205接收输入矩阵(或向量)操作数以执行矩阵运算。例如,矩阵计算引擎205可以接收对应于图像的一部分的一个或更多个数据输入向量和对应于滤波器矩阵的至少一个权重输入向量。输入向量(诸如输入数据和权重向量)可以作为参数传递给向量单元,诸如矩阵计算引擎205的向量单元211、221、231和241之一。例如,矩阵计算引擎205的向量单元可以使用数据输入向量和权重输入向量对来确定矩阵结果,诸如点积结果。在一些实施例中,矩阵计算引擎205包括32个向量单元。每个向量单元可以采用两个n元素向量(例如,16、32等)作为参数,每个确定n元素向量结果。在一些实施例中,该结果是单元素结果,并且跨越矩阵计算引擎205的所有向量单元获取结果。在一些实施例中,该结果是输出向量结果。在一些实施例中,输出结果通过跨多个向量单元运算累加部分向量结果来确定。例如,乘法运算可以分解为多个乘法运算,并将结果相加。矩阵计算引擎205的向量单元的数量可以变化,向量单元长度和元素大小也可以变化。根据向量单元的能力,可以在本地支持不同的元素大小。在一些实施例中,本地支持8位整数和16位浮点格式。
在一些实施例中,矩阵计算引擎205的每个向量单元(诸如向量单元211、221、231或241)接收两个向量操作数,并且可以执行一个或更多个向量运算。例如,向量单元可以通过将第一输入向量的每个元素与第二输入向量的对应元素相乘来计算多个乘法运算的结果。所得到的乘法结果可以被累加并用于将来的运算,诸如对部分结果求和。例如,向量单元结果可以被累加,并用作由向量单元执行的后续运算的操作数。
在一些实施例中,矩阵计算引擎205的每个向量单元(诸如向量单元211、221、231或241)包括向量乘法单元和向量加法器单元。每个向量乘法单元(例如向量乘法单元213)被配置为使经由输入向量操作数接收的相应元素相乘。在一些实施例中,结果是相乘结果的向量。来自第一输入向量的第一元素与第二输入向量的第一元素相乘。类似地,来自第一输入向量的第二元素与第二输入向量的第二元素相乘。在各种实施例中,相乘结果的向量被传递到向量单元的向量加法器单元。例如,向量乘法单元213可以将其乘法结果传递给向量加法器单元215。向量加法器单元215可用于加法运算,诸如对部分结果求和、至少部分计算点积结果或其他适当的功能。例如,可以通过使用向量加法器单元215来对向量乘法单元213的输出的所有元素求和来计算点积。
在一些实施例中,向量单元的每个向量加法器单元(诸如向量加法器单元215)被配置为使用来自输入向量的元素来计算加法运算。例如,可以由向量加法器单元215计算从由向量乘法单元213计算的乘法结果的向量中选择的元素的和。在一些实施例中,向量加法器单元的结果是用作相应向量乘法单元的输入的向量的点积。在各种实施例中,每个向量加法器单元(诸如向量加法器单元215)被实现为加法器树。例如,加法器树的顶层可以将成对的元素相加以确定一组部分和,例如将元素0和1相加以确定第一部分和,以及将元素2和3相加以确定第二部分和,等等。每个后续层可以对来自前一层的成对的部分和进行求和,直到最后一层计算出最终结果和(result sum)。在一些实施例中,指定的部分和可以被输出作为加法器单元的结果。在一些实施例中,每个加法器树并行计算部分和,以得到结果和。并行运算显著提高了对数字向量进行求和的效率。多个向量单元可以并行运算以并行计算多个结果,从而显著提高矩阵计算引擎205的吞吐量。
在一些实施例中,矩阵计算引擎205包括一个或更多个累加器(例如,实现为寄存器),例如,用于累加每个向量单元的结果。在一些实施例中,累加器被适当地包括作为向量单元的一部分或者作为矩阵计算引擎205的一部分。累加器也可以与矩阵计算引擎205分离,但是通信地连接到矩阵计算引擎205。累加器可以用于对向量单元的多次迭代所计算的结果进行求和。例如,来自向量单元的一次迭代的结果可以存储在累加器中,并添加到向量单元的下一次迭代的结果中。在一些实施例中,累加器是向量累加器。例如,可以基于矩阵计算引擎205的输出向量的大小来确定累加器的大小。累加器还可以用于存储跨多次迭代的单元素结果并使其相加。在各种实施例中,一旦矩阵处理完成,累加器结果就经由总线251被推送到存储器。
图3是示出用于在硬件中执行点积运算的过程的实施例的流程图。在图3的过程中,可以执行使用各种格式的操作数的整数或浮点点积运算。在一些实施例中,响应于在诸如图1的处理元件101、111和/或121和/或图2的处理元件201的处理元件的控制逻辑单元处接收到点积运算指令,执行图3的过程。在一些实施例中,点积运算由图1的矩阵计算引擎115或图2的矩阵计算引擎205执行。例如,可以指示图2的矩阵计算引擎205的向量单元211执行点积运算。在一些实施例中,点积运算用于通过计算第一输入向量A与第二输入向量B的点积来执行第一输入向量A中所有元素的求和,第二输入向量B的元素都具有值1(其是以整数或浮点格式,这取决于第一输入向量A的元素的格式)。
在301,接收点积运算指令。点积运算指令可以指定两个整数或浮点向量。例如,可以接收两个操作数向量,并且第一向量的每个元素将与第二向量的相应元素相乘。如果其中一个向量的所有元素都是1,那么点积运算的结果将是另一个向量的元素的和。换句话说,结果将是另一个向量的缩减。
在303,识别操作数格式。在各种实施例中,处理元件支持多种不同的整数和浮点格式。例如,可以支持8位整数(例如,int8)和16位浮点(例如,bfloat16)格式。在一些实施例中,格式由点积运算指令指定。例如,点积运算指令中的标志(flag)可以标识整数格式的类型或浮点格式的类型。
在305,执行点积运算。例如,可以计算两个整数向量或两个浮点向量的点积。向量单元(例如,图2的向量单元211)可用于执行点积运算。在一些实施例中,点积运算的结果被发送到累加器。累加的结果可以用于求解神经网络的下一层和/或与来自其他处理元件的结果相结合。在一些实施例中,结果被写回到存储器,例如图1的存储器131,在那里结果可以被后续运算利用。
图4是示出使用低位宽点积引擎处理数字组的系统的实施例的框图。在各种实施例中,系统400是专用集成电路(ASIC)设备或ASIC设备的一部分。在一些实施例中,系统400使用可本地处理8位整数(例如,int8)的向量的点积处理组件来缩减32位整数(例如,int32)的向量。系统400还可以被配置成使用可以本地处理16位浮点数(例如,bfloat16)的向量的点积处理组件来缩减32位浮点数(例如,fp32)的向量。
在所示的示例中,系统400包括点积处理组件406、数据对齐组件408和累加器410。在一些实施例中,点积处理组件406是图2的向量单元211。点积处理组件406被配置成当系统400缩减整数向量时执行整数点积,以及当系统400缩减浮点向量时执行浮点点积。在所示的示例中,点积处理组件406接收输入A 402和输入B 404。在各种实施例中,输入A 402和输入B 404是整数或浮点数的向量。在一些实施例中,输入A 402和输入B 404存储在寄存器中。系统400可用于缩减第一输入向量(例如,输入A402)。在各种实施例中,点积处理组件406进行多次处理迭代,以便缩减使用比点积处理组件406本地用来表示值的位数更多的位数表示的值的向量。
在所示的示例中,数据对齐组件408接收点积处理组件406的结果。在各种实施例中,数据对齐组件408基于进行哪次处理迭代来对齐结果。数据对齐组件408的实现根据输入格式而变化。例如,如下面进一步详细描述的,当缩减整数向量时,在各种实施例中,数据对齐组件408包括被配置为路由点积结果的多路复用器和被配置为接收路由的点积结果并执行向左位移位的位移位器,该向左位移位取决于进行哪次处理迭代。如下面进一步详细描述的,当缩减浮点向量时,在各种实施例中,数据对齐组件408包括被配置为路由点积结果的多路复用器和被配置为接收路由的点积结果并执行减法的减法器,该减法取决于进行哪次处理迭代。在所示的示例中,已经由数据对齐组件408修改的点积结果被传输到累加器410。在一些实施例中,累加器410被实现为一个或更多个寄存器。在各种实施例中,累加器410累加由点积处理组件406和数据对齐组件408处理的多次迭代的结果。一次迭代的结果被存储在累加器410中,并被添加到下一次迭代的结果中。
当缩减整数向量时,对于每次迭代,如下所述,输入之一是要缩减的整数向量,并且另一个输入是具有值1和0的向量(这两个向量对应于输入A 402和输入B 404,反之亦然)。图5示出了当点积处理组件406被配置为处理8位整数时,与缩减32位整数的向量相关联的示例整数数据格式。在一些实施例中,输入A 402和输入B 404是256位数据块(例如,图5的数据块502)。因此,如图5的布局504所示,在256位数据块中,八个32位整数可以被加载和求和。在该示例中,因为点积处理组件被配置为处理8位整数,所以点积处理组件将布局504的数据视为32个8位整数,如图5的布局506所示。图5的布局508示出了如何将每个32位整数存储为跨越四个8位元素的分割段。例如,元素组512示出了如何将布局504的第一个32位整数视为四个8位值:x03(第一个32位整数x0的最高有效8位)、x02(第一个32位整数x0的接下来的8位)、x01(第一个32位整数x0的接下来的8位)和x00(第一个32位整数x0的最低有效8位)。布局504的其他七个32位整数(x1到x7)也可以被视为从最高有效位到最低有效位的四个8位元素。
在各种实施例中,使用被配置为处理8位整数的点积处理组件,执行处理的四次迭代以对32位整数的向量求和。布局510示出了要加载到点积处理组件中的四个对应的输入布局,其中向量在处理的四次迭代期间被缩减。布局510中示出的值是0或1(8位格式)。在第一次迭代期间,要缩减的向量(例如,布局508)与布局510中的第一布局的第一点积被执行,产生了布局508的8位段(8-bit segment)的第一和x00+x10+x20+x30+x40+x50+x60+x70。第一和是由每个32位整数的最低有效8位形成的值的和。在第二次迭代期间,要缩减的向量与布局510中的第二布局的第二点积被执行,产生了布局508的8位段的第二和x01+x11+x21+x31+x41+x51+x61+x71。第二和是由每个32位整数的第二最低有效8位形成的值的和。在各种实施例中,数据对齐组件408接收第二和并执行8位的向左位移位。在第三次迭代期间,要缩减的向量与布局510中的第三布局的第三点积被执行,产生了布局508的8位段的第三和x02+x12+x22+x32+x42+x52+x62+x72。第三和是由每个32位整数的第二最高有效8位形成的值的和。在各种实施例中,数据对齐组件408接收第三和并执行16位的向左位移位。在第四次迭代期间,要缩减的向量与布局510中的第四布局的第四点积被执行,产生了布局508的8位段的第四和x03+x13+x23+x33+x43+x53+x63+x73。第四和是由每个32位整数的最高有效8位形成的值的和。在各种实施例中,数据对齐组件408接收第四和并执行24位的向左位移位。在一些实施例中,图1的控制逻辑113或图2的控制逻辑203在四次迭代期间控制输入向量的加载,包括对应于布局510中的布局的向量的加载。在一些实施例中,输入向量由软件提供给点积处理组件。在一些实施例中,数据对齐组件408的多路复用器基于迭代来控制由数据对齐组件408的位移位器执行的位移位量(第一次迭代为0位、第二次迭代为8位、第三次迭代为16位以及第四次迭代为24位)。在各种实施例中,累加器410累加第一和、第二和、第三和以及第四和的位移位版本,以得到最终结果,该最终结果是32位整数向量的和。
当缩减浮点数的向量时,对于每次迭代,如下所述,输入之一是要缩减的浮点数的向量的版本,并且另一个输入是具有值1和0的向量(这两个向量对应于输入A 402和输入B404,反之亦然)。图6示出了当点积处理组件406被配置为处理16位浮点数时,与缩减32位浮点数的向量相关联的示例浮点数据格式。在一些实施例中,输入A 402和输入B 404是256位数据块(例如,与图5的数据块502大小相同)。在图6所示的示例中,在256位数据块内,可以加载八个32位浮点数并进行求和,如布局602所示。在所示的示例中,布局602中的每个浮点数具有图6的布局604中所示的格式。布局604示出了fp32格式,对于每个32位浮点数,该格式具有1个符号位、8个指数位和23个尾数位。如布局604所示,尾数位可以被视为被分组为前7个尾数位、中间8个尾数位和最后8个尾数位。在该示例中,因为点积处理组件被配置为处理16位浮点数,所以点积处理组件将布局602的数据视为十六个16位浮点数,如图6的布局606所示。布局606示出了如何将每个32位浮点数存储为跨越两个16位元素的分割段。换句话说,布局602的每个元素与布局606的两个元素相称(fit)。在图示的示例中,布局606的每个元素具有图6的布局608中所示的格式。布局608示出了bfloat16格式,对于每个16位浮点数,该格式具有1个符号位、8个指数位和7个尾数位。因此,布局602的每个元素可以被视为fp32元素的包括符号位、8个指数位和前7个尾数位的第一16位元素,以及fp32元素的包括中间8个尾数位和最后8个尾数位的第二16位元素。
在一些实施例中,使用被配置为处理16位浮点数的点积处理组件,执行三次处理迭代来对32位浮点数的向量求和。布局610示出了与要被加载到点积处理组件中的将在三次处理迭代期间用掩码向量布局612来缩减的向量相关联的三个数据输入。掩码向量布局612中示出的值是0或1(在本例中为bfloat16格式)。在第一次迭代期间,执行布局610中的第一布局与掩码向量布局612的第一点积。在各种实施例中,布局610中的第一布局是要缩减的向量的未修改版本。这产生了第一和,该第一和是要缩减的向量中的元素的bfloat16版本的和,因为掩码向量布局612每16位在1和0之间交替,并且每个fp32元素的前16位具有与bfloat16数字相同的格式。在第二次迭代期间,执行布局610中的第二布局与掩码向量布局612的第二点积,以获得第二和。在各种实施例中,布局610中的第二布局是要缩减的向量的修改版本,其中不使用每个fp32元素的前7个尾数位(如在第一次迭代期间的情况),而是使用每个fp32元素的中间8个尾数位(替换每个fp32元素的前7个尾数位)。在各种实施例中,可以用中间的8个尾数位替换前7个尾数位,因为点积处理组件被配置为处理可以用尾数位替换的J位。在各种实施例中,数据对齐组件408接收第二和,并从第二和的指数部分减去8,以考虑中间8个尾数位相对于fp32格式中的第一尾数位的移位位置。在第三次迭代期间,执行布局610中的第三布局与掩码向量布局612的第三点积,以获得第三和。在各种实施例中,布局610中的第三布局是要缩减的向量的修改版本,其中使用每个fp32元素的最后8个尾数位(替换来自第二次迭代的中间8个尾数位)。在各种实施例中,数据对齐组件408接收第三和,并从第三和的指数部分减去16,以考虑最后8个尾数位相对于fp32格式中的第一尾数位的移位位置。在一些实施例中,图1的控制逻辑113或图2的控制逻辑203在三次迭代期间控制输入向量的加载。多路复用器可用于将不同组的尾数位路由到点积处理组件。在一些实施例中,输入向量由软件提供给点积处理组件。在一些实施例中,数据对齐组件408的多路复用器基于迭代来控制由数据对齐组件408的减法器单元执行的从指数部分中减去的量(第一次迭代为0、第二次迭代为8以及第三次迭代为16)。在各种实施例中,累加器410累加第一和、第二和以及第三和的修改(对指数执行减法)版本,以获得最终结果,该最终结果是32位浮点数的向量的和。
图5是示出与处理整数相关的示例数据格式的示意图。在以上与图4相关的描述中提供了图5的进一步描述。
图6是示出与处理浮点数相关的示例数据格式的示意图。在以上与图4相关的描述中提供了图6的进一步描述。
图7是示出使用低位宽点积引擎处理数字组的过程的实施例的流程图。在一些实施例中,图7的过程由图4的系统400执行。在一些实施例中,图7的过程的至少一部分在图3的305中执行。
在701,接收第一组元素。在一些实施例中,第一组元素由图4的点积处理组件406接收。第一组元素可以是图4的输入A 402。在一些实施例中,第一组元素与要求和的整数向量(例如,以int32格式)或浮点数向量(例如,以fp32格式)相关联。第一组元素可以是要求和的向量的未修改或修改版本。在某些情况下,第一组元素根据进行哪次处理迭代而被修改(例如,参见与图4相关联的浮点示例)。
在703,接收第二组元素。在一些实施例中,第二组元素由图4的点积处理组件406接收。第二组元素可以是图4的输入B 404。在一些实施例中,第二组元素是掩码向量,当用于计算与第一组元素的点积时,该掩码向量贡献第一组元素中的元素的值的和的一部分。在某些情况下,第二组元素根据进行哪次处理迭代而被修改(例如,参见与图4相关联的整数示例)。因为点积是可交换的,所以第一组元素和第二组元素可以是点积处理组件的两个输入中的任何一个,而不影响点积结果。例如,第一组元素和第二组元素可以分别是图4的输入A 402和输入B 404,反之亦然。
在705,计算第一组元素与第二组元素的点积结果。在一些实施例中,使用图4的点积处理组件406来计算点积结果。例如,点积结果可以是单个整数或浮点数。
在707,修改计算的点积结果。在一些实施例中,修改由图4的数据对齐组件408执行。在具有整数点积结果的情况下,修改可以包括基于进行哪次处理迭代将整数点积结果位移位指定的量。在具有浮点点积结果的情况下,修改可以包括基于进行哪次处理迭代,从浮点点积结果的指数部分减去指定值。
在709,将修改后的点积结果添加到运行和。在一些实施例中,图4的累加器410接收修改后的点积结果并保持运行和。
在711,确定运行和是否完成。在一些实施例中,确定运行和是否完成包括确定是否已经完成指定次数的处理迭代。例如,在一些实施例中,为了使用可本地处理8位整数的点积处理组件来缩减32位整数的向量,进行四次处理迭代,包括四个点积结果的计算。在一些实施例中,为了使用可本地处理16位浮点数的点积处理组件来缩减32位浮点数的向量,进行三次处理迭代,包括三个点积结果的计算。如果在711确定运行和完成(例如,所需的迭代次数已经完成),则不发生进一步的处理,并且运行和的值是最终值(例如,在所有迭代完成之后存储在图4的累加器410中的值)。如果在711确定运行和没有完成(例如,需要更多迭代),则在701,通过接收另一第一组元素开始另一迭代。例如,在分别用于缩减整数和浮点数的向量的第四次和第三次迭代之前,运行和不会完成。在一些实施例中,图1的控制逻辑113或图2的控制逻辑203确定运行和是否完成。在一些实施例中,一旦处理完成,最终结果被写入存储器(例如,经由总线151或经由图2的总线251写入图1的存储器131)。
尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不限于所提供的细节。有许多实现本发明的替代方式。所公开的实施例是说明性的,而不是限制性的。

Claims (20)

1.一种设备,包括:
点积处理组件,其被配置为计算第一组元素与第二组元素的点积,所述第一组元素存储在第一存储单元中,其中:
使用第一数量的位来表示所述第一组元素中的每个元素;
使用大于所述第一数量的位的第二数量的位来表示存储在所述第一存储单元中的一组值中的每个值;和
所述一组值中的每个值被存储为跨越所述第一组元素的元素中的多于一个元素的分割段;
数据对齐组件,其被配置为:
接收所述点积处理组件的结果;和
修改所述点积处理组件的结果中的一个或更多个;和
累加器,其被配置为对所述数据对齐组件的输出求和,以至少部分地确定所述一组值的和。
2.根据权利要求1所述的设备,其中所述第一存储单元包括一个或更多个寄存器。
3.根据权利要求1所述的设备,其中所述第一存储单元被配置为存储256位。
4.根据权利要求1所述的设备,还包括被配置为存储所述第二组元素的第二存储单元。
5.根据权利要求1所述的设备,其中所述第二组元素中的每个元素使用所述第一数量的位来表示,并且具有或者是零或者是一的值。
6.根据权利要求1所述的设备,其中所述点积是整数点积。
7.根据权利要求1所述的设备,其中所述第一数量的位是八位,并且所述第二数量的位是三十二位。
8.根据权利要求1所述的设备,其中所述数据对齐组件被配置为修改所述点积处理组件的一个或更多个结果,包括通过被配置为至少部分地基于迭代计数来对所述一个或更多个结果进行位移位。
9.根据权利要求1所述的设备,其中所述点积是浮点点积。
10.根据权利要求1所述的设备,其中所述第一数量的位是十六位,并且所述第二数量的位是三十二位。
11.根据权利要求10所述的设备,其中所述第一数量的位被格式化为脑浮点浮点格式,并且所述第二数量的位被格式化为单精度浮点格式。
12.根据权利要求1所述的设备,其中所述数据对齐组件被配置为修改所述点积处理组件的一个或更多个结果,包括通过被配置为至少部分地基于迭代计数从所述一个或更多个结果的指数部分减去指定值。
13.根据权利要求1所述的设备,其中所述数据对齐组件包括选择逻辑组件,所述选择逻辑组件被配置为至少部分地基于迭代计数来选择数据修改。
14.根据权利要求13所述的设备,其中所述选择逻辑组件包括一个或更多个多路复用器。
15.根据权利要求1所述的设备,其中所述数据对齐组件包括位移位器。
16.根据权利要求1所述的设备,其中所述数据对齐组件包括减法器或被配置为添加负数的加法器。
17.根据权利要求1所述的设备,其中所述设备是专用集成电路设备。
18.根据权利要求1所述的设备,其中所述点积是人工神经网络操作的一部分。
19.一种方法,包括:
接收第一组元素,其中:
所述第一组元素存储在第一存储单元中;
使用第一数量的位来表示所述第一组元素中的每个元素;
使用大于所述第一数量的位的第二数量的位来表示存储在所述第一存储单元中的一组值中的每个值;和
所述一组值中的每个值被存储为跨越所述第一组元素的元素中的多于一个元素的分割段;
接收第二组元素;
计算所述第一组元素与所述第二组元素的点积;
接收与所计算的点积相关联的结果;
修改所计算的点积的结果中的一个或更多个;和
对修改后的结果求和以至少部分地确定所述一组值的和。
20.一种方法,包括:
接收第一组元素,其中:
所述第一组元素存储在包括256位存储空间的第一存储单元中;
使用第一数量的位来表示所述第一组元素中的每个元素;
使用大于所述第一数量的位的第二数量的位来表示存储在所述第一存储单元中的第一组值中的每个值;和
所述第一组值中的每个值被存储为跨越所述第一组元素的元素中的多于一个元素的分割段;
接收第二组元素,其中:
所述第二组元素存储在包括256位存储空间的第二存储单元中;
使用所述第一数量的位来表示所述第二组元素中的每个元素;
使用所述第一数量的位来表示存储在所述第二存储单元中的第二组值中的每个值;和
所述第二组值中的每个值或者是零值或者是一值;
计算所述第一组元素与所述第二组元素的点积;
接收与所计算的点积相关联的结果;
修改所计算的点积的结果中的一个或更多个;和
对修改后的结果求和以至少部分地确定所述一组值的和。
CN202110494255.8A 2020-05-07 2021-05-07 使用低位宽点积引擎对高位宽数求和 Pending CN113626759A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/869,281 2020-05-07
US16/869,281 US11455143B2 (en) 2020-05-07 2020-05-07 Using a low-bit-width dot product engine to sum high-bit-width numbers

Publications (1)

Publication Number Publication Date
CN113626759A true CN113626759A (zh) 2021-11-09

Family

ID=78377943

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110494255.8A Pending CN113626759A (zh) 2020-05-07 2021-05-07 使用低位宽点积引擎对高位宽数求和

Country Status (2)

Country Link
US (2) US11455143B2 (zh)
CN (1) CN113626759A (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11615307B2 (en) * 2018-12-06 2023-03-28 MIPS Tech, LLC Neural network data computation using mixed-precision
US20210200549A1 (en) * 2019-12-27 2021-07-01 Intel Corporation Systems, apparatuses, and methods for 512-bit operations

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5793661A (en) * 1995-12-26 1998-08-11 Intel Corporation Method and apparatus for performing multiply and accumulate operations on packed data
US20180234101A1 (en) * 2017-02-16 2018-08-16 Qualcomm Incorporated Delay-free poly-phase quantizer and quantization method for pwm mismatch shaping
US20180307489A1 (en) * 2017-04-24 2018-10-25 Arm Limited Apparatus and method for performing multiply-and-accumulate-products operations
US20180321938A1 (en) * 2017-05-08 2018-11-08 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
RU185346U1 (ru) * 2018-08-21 2018-11-30 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Векторный мультиформатный умножитель
CN109726806A (zh) * 2017-10-30 2019-05-07 上海寒武纪信息科技有限公司 信息处理方法及终端设备
RU2689819C1 (ru) * 2018-08-21 2019-05-29 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Векторный мультиформатный умножитель
WO2019212836A1 (en) * 2018-05-04 2019-11-07 Microsoft Technology Licensing, Llc Block floating point computations using reduced bit-width vectors

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6247036B1 (en) * 1996-01-22 2001-06-12 Infinite Technology Corp. Processor with reconfigurable arithmetic data path
JP4147423B2 (ja) * 2004-11-12 2008-09-10 セイコーエプソン株式会社 任意精度演算器、任意精度演算方法、および電子機器
US10445064B2 (en) * 2017-02-03 2019-10-15 Intel Corporation Implementing logarithmic and antilogarithmic operations based on piecewise linear approximation

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5793661A (en) * 1995-12-26 1998-08-11 Intel Corporation Method and apparatus for performing multiply and accumulate operations on packed data
US20180234101A1 (en) * 2017-02-16 2018-08-16 Qualcomm Incorporated Delay-free poly-phase quantizer and quantization method for pwm mismatch shaping
US20180307489A1 (en) * 2017-04-24 2018-10-25 Arm Limited Apparatus and method for performing multiply-and-accumulate-products operations
US20180321938A1 (en) * 2017-05-08 2018-11-08 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
CN108874744A (zh) * 2017-05-08 2018-11-23 辉达公司 矩阵乘积累加运算的广义加速
CN109726806A (zh) * 2017-10-30 2019-05-07 上海寒武纪信息科技有限公司 信息处理方法及终端设备
CN109997154A (zh) * 2017-10-30 2019-07-09 上海寒武纪信息科技有限公司 信息处理方法及终端设备
WO2019212836A1 (en) * 2018-05-04 2019-11-07 Microsoft Technology Licensing, Llc Block floating point computations using reduced bit-width vectors
RU185346U1 (ru) * 2018-08-21 2018-11-30 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Векторный мультиформатный умножитель
RU2689819C1 (ru) * 2018-08-21 2019-05-29 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Векторный мультиформатный умножитель

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
蔡瑞初;钟椿荣;余洋;陈炳丰;卢冶;陈瑶;: "面向"边缘"应用的卷积神经网络量化与压缩方法", 计算机应用, no. 09, 23 April 2018 (2018-04-23), pages 2449 - 2454 *

Also Published As

Publication number Publication date
US20210349690A1 (en) 2021-11-11
US11455143B2 (en) 2022-09-27
US20230056304A1 (en) 2023-02-23

Similar Documents

Publication Publication Date Title
CN103092564B (zh) 执行乘加指令的处理器和对分组数据执行乘加操作的系统
CN113282273A (zh) 用于多种格式的浮点运算的硬件
US20230056304A1 (en) Using a low-bit-width dot product engine to sum high-bit-width numbers
JP3605181B2 (ja) 掛け算累算命令を使用したデータ処理
EP3800544B1 (en) Floating point multiply hardware using decomposed component numbers
EP3937085A1 (en) Mapping convolution to a channel convolution engine
EP3968237A1 (en) Grouped convolution using point-to-point connected channel convolution engines
CN113032009A (zh) 使用处理器指令的硬件加速矩阵操纵运算
US10725741B2 (en) Digital circuit with compressed carry
CN114341796A (zh) 带符号多字乘法器
US20060277243A1 (en) Alternate representation of integers for efficient implementation of addition of a sequence of multiprecision integers
US11829441B2 (en) Device and method for flexibly summing matrix values
EP1936492A1 (en) SIMD processor with reduction unit
US11614920B2 (en) Bypassing zero-value multiplications in a hardware multiplier
CN110914800A (zh) 基于寄存器的复数处理
WO2008077803A1 (en) Simd processor with reduction unit
CN114174982A (zh) 用于乘法的计算单元、方法和计算机程序
JPH04358224A (ja) 開平演算装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: California, USA

Applicant after: Yuan platform Co.

Address before: California, USA

Applicant before: Facebook, Inc.

CB02 Change of applicant information