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

使用低位宽点积引擎对高位宽数求和的制作方法

2021-11-09 21:01:00 来源:中国专利 TAG:

segment);数据对齐组件,该数据对齐组件被配置为:接收点积处理组件的结果,并修改点积处理组件的一个或更多个结果;以及累加器,该累加器被配置为对数据对齐组件的输出求和,以至少部分地确定该组值的和。所公开的设备的实际和技术益处包括增加关于数字处理的灵活性,例如,使用较低位宽的点积引擎对较高位宽的数字求和的能力。
16.在一些实施例中,能够本地对8位整数和/或16位浮点数的向量进行相乘以及求和的点积引擎(在本文也称为点积处理组件)被用于通过结合额外的指定硬件来分别计算32位整数和/或32位浮点数的向量的和。向量的求和是指将向量中所有元素的值求和成单个输出值。向量的求和在本文也被称为向量的缩减(reducing)/缩减(reduction)。对于位宽由点积引擎本地支持的数字向量,点积引擎可以通过计算第一向量与第二向量的点积来缩减整数元素或浮点元素的第一向量,第二向量的元素都分别具有整数或浮点格式的值1。使用本文公开的技术,点积引擎还可以缩减位宽高于点积引擎本地支持的位宽的数字向量。本文公开的技术适用于稀疏神经网络、卷积和其他应用。
17.在一些实施例中,能够本地缩减8位整数(例如,int8)的向量的点积处理组件被用于缩减32位整数(例如,int32)的向量。在一些实施例中,点积处理组件以32字节(256位)块(chunk)从存储器读取数据。可以读取八个32位整数的输入向量,并对这256位进行处理,就像它们是三十二个8位整数一样。在各种实施例中,加载32位整数的向量,并将每个32位整数存储为四个8位块x
i3
、x
i2
、x
i1
和x
i0
,其中x
i3
是32位整数x
i
的最高有效8位,并且x
i0
是32位整数x
i
的最低有效8位。然后可以使用点积处理组件来计算上述成组8位块的输入向量与值为0、0、0、1、0、0、0、1
……
(也是8位格式)的向量的第一点积。这产生了来自每个32位整数的最低有效8位之和。换句话说,对于每组八个32位整数(当32位整数以八个为一组加载时),结果是x
00
x
10

……
x
70
的计算。在各种实施例中,该中间结果存储在累加器(例如,寄存器)中。接下来,可以使用点积处理组件来计算输入向量与向量0、0、1、0、0、0、1、0
……
的第二点积。这产生了来自每个32位整数的第二最低有效8位的和(x
01
x
11

……
x
71
)。然后,该和被左移8位,并被发送到累加器(以添加到运行和(running sum))。在下一个循环中,可以使用点积处理组件来计算输入向量与向量0、1、0、0、0、1、0、0
……
的第三点积。这产生了来自每个32位整数的第二最高有效8位的和(x
02
x
12

……
x
72
)。然后,该和被左移16位,并被发送到累加器。在下一个循环中,可以使用点积处理组件来计算输入向量与向量1、0、0、0、1、0、0、0
……
的第四点积。这产生了来自每个32位整数的最高有效8位的和(x
03
x
13

……
x
73
)。然后,该和被左移24位,并被发送到累加器。此时,累加器存储最终结果,该最终结果为八个32位整数之和。
18.如本文进一步详细描述的,在一些实施例中,用于执行32位整数的向量的缩减的硬件包括:被配置为本地处理8位整数的向量的点积处理组件、被配置为路由四个点积结果的多路复用器、被配置为从0位、8位、16位和24位的向左位移位(bit shift)中进行选择的位移位器(bit shifter)以及累加器。
19.在一些实施例中,能够本地缩减16位浮点数(例如,脑浮点(brain floating point)浮点格式(在本文也称为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数字之和。
20.如本文进一步详细描述的,在一些实施例中,执行32位fp32数字的向量的缩减的硬件包括:被配置为本地处理bfloat16数字的向量的点积处理组件;被配置为从来自每个fp32数字的三组尾数位中进行选择的多个(aplurality of)多路复用器;被配置为路由三个点积结果的多路复用器;被配置为从值0、8和16中进行选择以进行减法的减法器;以及累加器。在一些实施例中,减法器是被配置为添加负数的加法器。
21.上述示例仅是说明性的。还可以应用本文描述的技术来缩减不同位宽和/或不同格式的数字的向量。例如,对于本领域技术人员来说显而易见的是,应用本文描述的技术来缩减64位整数的向量可以包括对八个8位的块而不是四个8位的块执行处理。也可以提供不同的点积处理组件。例如,使用被配置为本地缩减16位整数向量的点积处理组件来缩减64位整数向量可以包括对四个16位的块执行处理。
22.图1是示出用于解决人工智能问题和其他计算问题的系统的实施例的框图。例如,系统100可被应用以使用神经网络来解决诸如图像识别和推荐系统匹配的问题。在所示的示例中,系统100包括多个处理元件,诸如通过总线151连接到存储器单元131的处理元件101、111和121。系统100可以包括更少或更多的处理元件。例如,处理元件的数量可以根据预期的计算和数据要求而按比例增加(scaled up)或减少。在一些实施例中,诸如101、111和121的处理元件经由总线151而彼此通信连接和/或通信地连接到存储器单元131。例如,存储器单元可以是末级高速缓存(last level cache,llc)和/或可以使用静态随机存取存储器(sram)来实现。系统100可以利用每个处理元件来执行矩阵计算运算,例如求和、乘法、点积、矩阵乘法等,包括整数和浮点运算。在一些实施例中,不同的处理元件用于不同的操作和/或数据格式。例如,一些处理元件可以用于计算整数点积,而其他处理元件用于计算浮点点积。
23.在一些实施例中,诸如总线151的通信总线用于传输处理元件指令和可选的指令参数(argument)。例如,矩阵运算和矩阵操作数可以经由总线151传输到处理元件,诸如处理元件101、111和/或121。附加的处理元件指令可以包括求和、乘法、点积、矩阵乘法等,运算指令,如整数或浮点运算指令。在各种实施例中,可以使用系统100通过将问题细分成较小的子问题来解决大型的复杂人工智能问题。较小的子问题可以被分派和分配给不同的处理元件。较小子问题的结果可以被合并,以确定较大和更复杂问题的解。在某些情况下,子问题是并行地和/或在流水线级(pipelined stage)解决的。在一些情况下,来自第一处理元件的结果作为输入被馈送到第二处理元件。
24.在一些实施例中,系统100的每个处理元件至少包括控制逻辑单元和矩阵计算引擎。如关于处理元件111所示,处理元件111包括控制逻辑113和矩阵计算引擎115。处理元件101和121显示为虚线框,并且没有示出处理元件101和121的一些细节。在一些实施例中,处理元件的控制逻辑单元用于控制处理元件的操作,包括处理元件的矩阵计算引擎的操作。在所示的示例中,控制逻辑113处理经由通信总线151导向处理元件111的指令。例如,处理元件指令可以包括整数或浮点运算指令。在一些实施例中,控制逻辑113确定如何使用矩阵计算引擎115执行整数或浮点运算,包括如何确定整数或浮点数操作数的分量。在一些实施例中,控制逻辑113经由总线151接收处理元件指令,并且可以用于启动从存储器131检索数据和/或向存储器131写入数据。
25.在一些实施例中,矩阵计算引擎115是硬件矩阵计算引擎,用于执行矩阵运算,包括与整数或浮点求和、乘法、点积、矩阵乘法和/或卷积运算相关的运算。例如,矩阵计算引擎115可以是用于执行要求整数或浮点乘法和加法运算的点积运算的矩阵引擎。在一些实施例中,支持的卷积运算包括逐深度(depthwise)、逐组(groupwise)、正常(normal)、规则(regular)、逐点(pointwise)、二维和/或三维卷积等。例如,矩阵计算引擎115可以接收第一输入矩阵(例如大图像的子集)以及接收第二输入矩阵(例如滤波器、核(kernel)或卷积矩阵等)以应用于第一输入矩阵。矩阵计算引擎115可用于使用两个输入矩阵执行卷积运算,以确定结果输出矩阵。在一些实施例中,矩阵计算引擎115包括输入和/或输出缓冲器,用于加载输入数据矩阵或向量和写出结果数据矩阵或向量。在一些实施例中,矩阵计算引擎115包括多个向量单元,并且每个向量单元包括向量乘法单元和向量加法器单元。
26.图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。
27.在一些实施例中,矩阵计算引擎205接收输入矩阵(或向量)操作数以执行矩阵运算。例如,矩阵计算引擎205可以接收对应于图像的一部分的一个或更多个数据输入向量和对应于滤波器矩阵的至少一个权重输入向量。输入向量(诸如输入数据和权重向量)可以作为参数传递给向量单元,诸如矩阵计算引擎205的向量单元211、221、231和241之一。例如,矩阵计算引擎205的向量单元可以使用数据输入向量和权重输入向量对来确定矩阵结果,诸如点积结果。在一些实施例中,矩阵计算引擎205包括32个向量单元。每个向量单元可以采用两个n元素向量(例如,16、32等)作为参数,每个确定n元素向量结果。在一些实施例中,该结果是单元素结果,并且跨越矩阵计算引擎205的所有向量单元获取结果。在一些实施例中,该结果是输出向量结果。在一些实施例中,输出结果通过跨多个向量单元运算累加部分向量结果来确定。例如,乘法运算可以分解为多个乘法运算,并将结果相加。矩阵计算引擎205的向量单元的数量可以变化,向量单元长度和元素大小也可以变化。根据向量单元的能力,可以在本地支持不同的元素大小。在一些实施例中,本地支持8位整数和16位浮点格式。
28.在一些实施例中,矩阵计算引擎205的每个向量单元(诸如向量单元211、221、231或241)接收两个向量操作数,并且可以执行一个或更多个向量运算。例如,向量单元可以通过将第一输入向量的每个元素与第二输入向量的对应元素相乘来计算多个乘法运算的结果。所得到的乘法结果可以被累加并用于将来的运算,诸如对部分结果求和。例如,向量单元结果可以被累加,并用作由向量单元执行的后续运算的操作数。
29.在一些实施例中,矩阵计算引擎205的每个向量单元(诸如向量单元211、221、231或241)包括向量乘法单元和向量加法器单元。每个向量乘法单元(例如向量乘法单元213)被配置为使经由输入向量操作数接收的相应元素相乘。在一些实施例中,结果是相乘结果的向量。来自第一输入向量的第一元素与第二输入向量的第一元素相乘。类似地,来自第一输入向量的第二元素与第二输入向量的第二元素相乘。在各种实施例中,相乘结果的向量被传递到向量单元的向量加法器单元。例如,向量乘法单元213可以将其乘法结果传递给向量加法器单元215。向量加法器单元215可用于加法运算,诸如对部分结果求和、至少部分计算点积结果或其他适当的功能。例如,可以通过使用向量加法器单元215来对向量乘法单元213的输出的所有元素求和来计算点积。
30.在一些实施例中,向量单元的每个向量加法器单元(诸如向量加法器单元215)被配置为使用来自输入向量的元素来计算加法运算。例如,可以由向量加法器单元215计算从由向量乘法单元213计算的乘法结果的向量中选择的元素的和。在一些实施例中,向量加法器单元的结果是用作相应向量乘法单元的输入的向量的点积。在各种实施例中,每个向量加法器单元(诸如向量加法器单元215)被实现为加法器树。例如,加法器树的顶层可以将成对的元素相加以确定一组部分和,例如将元素0和1相加以确定第一部分和,以及将元素2和3相加以确定第二部分和,等等。每个后续层可以对来自前一层的成对的部分和进行求和,直到最后一层计算出最终结果和(result sum)。在一些实施例中,指定的部分和可以被输出作为加法器单元的结果。在一些实施例中,每个加法器树并行计算部分和,以得到结果和。并行运算显著提高了对数字向量进行求和的效率。多个向量单元可以并行运算以并行计算多个结果,从而显著提高矩阵计算引擎205的吞吐量。
31.在一些实施例中,矩阵计算引擎205包括一个或更多个累加器(例如,实现为寄存器),例如,用于累加每个向量单元的结果。在一些实施例中,累加器被适当地包括作为向量
单元的一部分或者作为矩阵计算引擎205的一部分。累加器也可以与矩阵计算引擎205分离,但是通信地连接到矩阵计算引擎205。累加器可以用于对向量单元的多次迭代所计算的结果进行求和。例如,来自向量单元的一次迭代的结果可以存储在累加器中,并添加到向量单元的下一次迭代的结果中。在一些实施例中,累加器是向量累加器。例如,可以基于矩阵计算引擎205的输出向量的大小来确定累加器的大小。累加器还可以用于存储跨多次迭代的单元素结果并使其相加。在各种实施例中,一旦矩阵处理完成,累加器结果就经由总线251被推送到存储器。
32.图3是示出用于在硬件中执行点积运算的过程的实施例的流程图。在图3的过程中,可以执行使用各种格式的操作数的整数或浮点点积运算。在一些实施例中,响应于在诸如图1的处理元件101、111和/或121和/或图2的处理元件201的处理元件的控制逻辑单元处接收到点积运算指令,执行图3的过程。在一些实施例中,点积运算由图1的矩阵计算引擎115或图2的矩阵计算引擎205执行。例如,可以指示图2的矩阵计算引擎205的向量单元211执行点积运算。在一些实施例中,点积运算用于通过计算第一输入向量a与第二输入向量b的点积来执行第一输入向量a中所有元素的求和,第二输入向量b的元素都具有值1(其是以整数或浮点格式,这取决于第一输入向量a的元素的格式)。
33.在301,接收点积运算指令。点积运算指令可以指定两个整数或浮点向量。例如,可以接收两个操作数向量,并且第一向量的每个元素将与第二向量的相应元素相乘。如果其中一个向量的所有元素都是1,那么点积运算的结果将是另一个向量的元素的和。换句话说,结果将是另一个向量的缩减。
34.在303,识别操作数格式。在各种实施例中,处理元件支持多种不同的整数和浮点格式。例如,可以支持8位整数(例如,int8)和16位浮点(例如,bfloat16)格式。在一些实施例中,格式由点积运算指令指定。例如,点积运算指令中的标志(flag)可以标识整数格式的类型或浮点格式的类型。
35.在305,执行点积运算。例如,可以计算两个整数向量或两个浮点向量的点积。向量单元(例如,图2的向量单元211)可用于执行点积运算。在一些实施例中,点积运算的结果被发送到累加器。累加的结果可以用于求解神经网络的下一层和/或与来自其他处理元件的结果相结合。在一些实施例中,结果被写回到存储器,例如图1的存储器131,在那里结果可以被后续运算利用。
36.图4是示出使用低位宽点积引擎处理数字组的系统的实施例的框图。在各种实施例中,系统400是专用集成电路(asic)设备或asic设备的一部分。在一些实施例中,系统400使用可本地处理8位整数(例如,int8)的向量的点积处理组件来缩减32位整数(例如,int32)的向量。系统400还可以被配置成使用可以本地处理16位浮点数(例如,bfloat16)的向量的点积处理组件来缩减32位浮点数(例如,fp32)的向量。
37.在所示的示例中,系统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本地用来表示值的位数更多的位数表示的值的向量。
38.在所示的示例中,数据对齐组件408接收点积处理组件406的结果。在各种实施例中,数据对齐组件408基于进行哪次处理迭代来对齐结果。数据对齐组件408的实现根据输入格式而变化。例如,如下面进一步详细描述的,当缩减整数向量时,在各种实施例中,数据对齐组件408包括被配置为路由点积结果的多路复用器和被配置为接收路由的点积结果并执行向左位移位的位移位器,该向左位移位取决于进行哪次处理迭代。如下面进一步详细描述的,当缩减浮点向量时,在各种实施例中,数据对齐组件408包括被配置为路由点积结果的多路复用器和被配置为接收路由的点积结果并执行减法的减法器,该减法取决于进行哪次处理迭代。在所示的示例中,已经由数据对齐组件408修改的点积结果被传输到累加器410。在一些实施例中,累加器410被实现为一个或更多个寄存器。在各种实施例中,累加器410累加由点积处理组件406和数据对齐组件408处理的多次迭代的结果。一次迭代的结果被存储在累加器410中,并被添加到下一次迭代的结果中。
39.当缩减整数向量时,对于每次迭代,如下所述,输入之一是要缩减的整数向量,并且另一个输入是具有值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位值:x
03
(第一个32位整数x0的最高有效8位)、x
02
(第一个32位整数x0的接下来的8位)、x
01
(第一个32位整数x0的接下来的8位)和x
00
(第一个32位整数x0的最低有效8位)。布局504的其他七个32位整数(x1到x7)也可以被视为从最高有效位到最低有效位的四个8位元素。
40.在各种实施例中,使用被配置为处理8位整数的点积处理组件,执行处理的四次迭代以对32位整数的向量求和。布局510示出了要加载到点积处理组件中的四个对应的输入布局,其中向量在处理的四次迭代期间被缩减。布局510中示出的值是0或1(8位格式)。在第一次迭代期间,要缩减的向量(例如,布局508)与布局510中的第一布局的第一点积被执行,产生了布局508的8位段(8

bit segment)的第一和x
00
x
10
x
20
x
30
x
40
x
50
x
60
x
70
。第一和是由每个32位整数的最低有效8位形成的值的和。在第二次迭代期间,要缩减的向量与布局510中的第二布局的第二点积被执行,产生了布局508的8位段的第二和x
01
x
11
x
21
x
31
x
41
x
51
x
61
x
71
。第二和是由每个32位整数的第二最低有效8位形成的值的和。在各种实施例中,数据对齐组件408接收第二和并执行8位的向左位移位。在第三次迭代期间,要缩减的向量与布局510中的第三布局的第三点积被执行,产生了布局508的8位段的第三和x
02
x
12
x
22
x
32
x
42
x
52
x
62
x
72
。第三和是由每个32位整数的第二最高有效8位形成的值的和。在各种实施例中,数据对齐组件408接收第三和并执行16位的向左位移位。在第四次迭代期间,要缩减的向量与布局510中的第四布局的第四点积被执行,产生了布局508的8位段的第四和x
03
x
13
x
23
x
33
x
43
x
53
x
63
x
73
。第四和是由每个32位整数的最高有效8位形成的值的和。在各种
实施例中,数据对齐组件408接收第四和并执行24位的向左位移位。在一些实施例中,图1的控制逻辑113或图2的控制逻辑203在四次迭代期间控制输入向量的加载,包括对应于布局510中的布局的向量的加载。在一些实施例中,输入向量由软件提供给点积处理组件。在一些实施例中,数据对齐组件408的多路复用器基于迭代来控制由数据对齐组件408的位移位器执行的位移位量(第一次迭代为0位、第二次迭代为8位、第三次迭代为16位以及第四次迭代为24位)。在各种实施例中,累加器410累加第一和、第二和、第三和以及第四和的位移位版本,以得到最终结果,该最终结果是32位整数向量的和。
41.当缩减浮点数的向量时,对于每次迭代,如下所述,输入之一是要缩减的浮点数的向量的版本,并且另一个输入是具有值1和0的向量(这两个向量对应于输入a 402和输入b 404,反之亦然)。图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位元素。
42.在一些实施例中,使用被配置为处理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位浮点数的向量的和。
43.图5是示出与处理整数相关的示例数据格式的示意图。在以上与图4相关的描述中提供了图5的进一步描述。
44.图6是示出与处理浮点数相关的示例数据格式的示意图。在以上与图4相关的描述中提供了图6的进一步描述。
45.图7是示出使用低位宽点积引擎处理数字组的过程的实施例的流程图。在一些实施例中,图7的过程由图4的系统400执行。在一些实施例中,图7的过程的至少一部分在图3的305中执行。
46.在701,接收第一组元素。在一些实施例中,第一组元素由图4的点积处理组件406接收。第一组元素可以是图4的输入a 402。在一些实施例中,第一组元素与要求和的整数向量(例如,以int32格式)或浮点数向量(例如,以fp32格式)相关联。第一组元素可以是要求和的向量的未修改或修改版本。在某些情况下,第一组元素根据进行哪次处理迭代而被修改(例如,参见与图4相关联的浮点示例)。
47.在703,接收第二组元素。在一些实施例中,第二组元素由图4的点积处理组件406接收。第二组元素可以是图4的输入b 404。在一些实施例中,第二组元素是掩码向量,当用于计算与第一组元素的点积时,该掩码向量贡献第一组元素中的元素的值的和的一部分。在某些情况下,第二组元素根据进行哪次处理迭代而被修改(例如,参见与图4相关联的整数示例)。因为点积是可交换的,所以第一组元素和第二组元素可以是点积处理组件的两个输入中的任何一个,而不影响点积结果。例如,第一组元素和第二组元素可以分别是图4的输入a 402和输入b 404,反之亦然。
48.在705,计算第一组元素与第二组元素的点积结果。在一些实施例中,使用图4的点积处理组件406来计算点积结果。例如,点积结果可以是单个整数或浮点数。
49.在707,修改计算的点积结果。在一些实施例中,修改由图4的数据对齐组件408执行。在具有整数点积结果的情况下,修改可以包括基于进行哪次处理迭代将整数点积结果位移位指定的量。在具有浮点点积结果的情况下,修改可以包括基于进行哪次处理迭代,从浮点点积结果的指数部分减去指定值。
50.在709,将修改后的点积结果添加到运行和。在一些实施例中,图4的累加器410接收修改后的点积结果并保持运行和。
51.在711,确定运行和是否完成。在一些实施例中,确定运行和是否完成包括确定是否已经完成指定次数的处理迭代。例如,在一些实施例中,为了使用可本地处理8位整数的点积处理组件来缩减32位整数的向量,进行四次处理迭代,包括四个点积结果的计算。在一
些实施例中,为了使用可本地处理16位浮点数的点积处理组件来缩减32位浮点数的向量,进行三次处理迭代,包括三个点积结果的计算。如果在711确定运行和完成(例如,所需的迭代次数已经完成),则不发生进一步的处理,并且运行和的值是最终值(例如,在所有迭代完成之后存储在图4的累加器410中的值)。如果在711确定运行和没有完成(例如,需要更多迭代),则在701,通过接收另一第一组元素开始另一迭代。例如,在分别用于缩减整数和浮点数的向量的第四次和第三次迭代之前,运行和不会完成。在一些实施例中,图1的控制逻辑113或图2的控制逻辑203确定运行和是否完成。在一些实施例中,一旦处理完成,最终结果被写入存储器(例如,经由总线151或经由图2的总线251写入图1的存储器131)。
52.尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不限于所提供的细节。有许多实现本发明的替代方式。所公开的实施例是说明性的,而不是限制性的。
再多了解一些

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

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

相关文献