首页> 中国专利> 用于多种格式的浮点运算的硬件

用于多种格式的浮点运算的硬件

摘要

本申请公开了用于多种格式的浮点运算的硬件。第一格式表示的浮点数被接收。基于浮点数的浮点格式类型的标识,识别第一格式表示的不同组成部分。第一格式表示的不同组成部分被放置在浮点数的第二格式表示的相应组成部分中,其中,第二格式表示的总位数大于第一格式表示的总位数。用一个或更多个零位填充第二格式表示的至少一个组成部分。第二格式表示的浮点数被存储在寄存器中。使用浮点数的第二格式表示的乘法被执行。

著录项

说明书

发明背景

使用神经网络可以解决一整类复杂的人工智能问题。许多神经网络需要的一种常见操作是乘法运算,例如,在执行矩阵运算时的乘法运算。由于人工智能问题通常是计算和数据密集型的,所以硬件解决方案通常有利于提高性能。然而,实现浮点乘法运算的硬件是昂贵的。此外,不同的神经网络可能需要不同的数字格式,而这些数字格式又可能各有不同的硬件要求。创建一个兼容多种数字格式并能够高效执行矩阵乘法运算的硬件平台是一项技术挑战。因此,需要一种与多种数字格式兼容而不会引入明显的硬件复杂性和费用的高吞吐量矩阵乘法方案。

附图简述

在以下详细描述和附图中公开了本发明的各种实施例。

图1是示出使用神经网络解决人工智能问题的系统的实施例的框图。

图2是示出使用神经网络解决人工智能问题的处理元件的实施例的框图。

图3是示出用于执行与矩阵计算引擎相关联的运算的过程的实施例的流程图。

图4是示出用于使用与多种浮点数格式兼容的格式表示(formatrepresentation)来执行浮点乘法的过程的实施例的流程图。

图5是示出各种浮点数格式的图。

图6是示出用于使用与多种浮点数格式兼容的格式表示来执行浮点点积运算(floating-point dot product operation)的过程的实施例的流程图。

详细描述

本发明可以以多种方式实现,包括作为过程;装置;系统;物质的组成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,例如被配置为执行存储在耦合到处理器的存储器上和/或由该存储器提供的指令的处理器。在本说明书中,这些实现或者本发明可以采取的任何其他形式可以被称为技术。通常,在本发明的范围内,可以改变所公开的过程的步骤顺序。除非另有说明,否则被描述为被配置为执行任务的诸如处理器或存储器的组件可以被实现为在给定时间被临时配置为执行任务的通用组件或者被制造为执行任务的特定组件。如本文所使用的,术语“处理器”指的是被配置成处理数据(例如计算机程序指令)的一个或更多个装置、电路和/或处理核心。

下面提供了本发明的一个或更多个实施例的详细描述连同说明本发明原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改和等同物。为了提供对本发明的全面理解,在以下描述中阐述了许多具体细节。这些细节是出于示例的目的而提供的,并且本发明可以根据权利要求来被实施,而不需要这些具体细节中的一些或全部。为了清楚起见,没有详细描述与本发明相关的技术领域中已知的技术材料,以便不会不必要地模糊本发明。

公开了一种用于提高浮点乘法运算的效率和性能的装置。所公开的装置包括乘法单元,该乘法单元被配置为:接收第一格式表示的浮点数,基于浮点数的浮点格式类型的标识,识别第一格式表示的不同组成部分,将第一格式表示的不同组成部分放置在浮点数的第二格式表示的相应组成部分中,其中,第二格式表示的总位数大于第一格式表示的总位数,用一个或更多个零位(zero bit)填充第二格式表示的至少一个组成部分,并使用浮点数的第二格式表示执行乘法。装置还包括被配置为存储第二格式表示的浮点数的寄存器。在一些实施例中,乘法单元是处理元件或其部分(例如,图1的处理元件111)。所公开的装置的实际和技术益处包括提高乘法运算的效率和性能(例如,通过更有效地使用集成电路芯片面积和降低功耗)。

神经网络加速器通常需要计算采用诸如半精度二进制浮点格式(在本文中还称为“fp16”、“FP16”等)或脑浮点浮点格式(在本文中还称为“bfloat16”、“BFloat16”等)的格式的低位宽浮点数的向量之间的点积。fp16数具有5位指数和10位尾数,而bfloat16数具有8位指数和7位尾数。每个使用一个符号位。为了最大限度地提高软件灵活性,希望提供几种不同浮点类型的选择,使得可以选择精度和动态范围来最适合应用需求。然而,这使得硬件更加复杂和昂贵。例如,为每种浮点类型实现单独的点积引擎(dot product engine)使用大量集成电路芯片面积,并增加漏电(leakage)功耗。对于每种类型的浮点数,通过使用单个装置而不是单独的装置来节省电力。

在各种实施例中,所公开的装置是单个多用途逻辑/乘法单元,该单个多用途逻辑/乘法单元能够以几种不同的浮点类型中的任何一种高效地执行点积。在一些实施例中,多用途逻辑/乘法单元计算两个fp16向量或两个bfloat16向量的点积。在各种实施例中,硬件在每个计算步骤处理可能的浮点格式的最坏情况(最大位宽),并且根据从软件接收的指令类型的要求,通过硬件路由数据。例如,fp16数具有5位指数和10位尾数,而bfloat16数具有8位指数和7位尾数。为了在单个点积引擎中容纳这两种格式,硬件处理多至(up to)8位指数和10位尾数。如果接收到用于找到两个fp16向量的点积的软件指令,则使用仅5个指数位和全部10个尾数位。另一方面,如果接收到用于找到两个bfloat16向量的点积的软件指令,则使用全部8个指数位和仅7个尾数位。

为了用同一硬件容纳多种浮点格式,逻辑组件的位宽被扩展到最坏情况的宽度。如本文进一步详细描述的,在各种实施例中,加法器用于将指数相加,乘法器用于将尾数相乘。例如,fp16点积单元可能需要6位加法器(将两个5位指数相加可以得到6位结果)和11位乘法器(10个尾数位加一个J位(J-bit))。bfloat16点积单元可能需要9位加法器(将两个8位指数相加可以得到9位结果)和8位乘法器(7个尾数位加一个J位)。为了组合这两种格式的逻辑,单个点积引擎可以包括9位加法器和11位乘法器,以便容纳两种格式的最坏情况宽度。使用适当的控制逻辑(例如,多个(a plurality of)多路复用器),适当的位数可以被馈送到加法器和乘法器。例如,要找到两个bfloat16向量的点积,每个bfloat16元素的完整8位指数用于填充9位加法器的输入,但仅使用乘法器输入的8位(用零填充未使用的位。)中间步骤可以以通常的方式执行(例如,加法器用于将指数相加,乘法器用于将尾数相乘),最后,最终结果可以被舍入和规格化(normalize)以符合期望的输出格式。

包括被配置为执行乘法的乘法单元的装置的上述(并且在下面详细描述的)示例仅仅是说明性的示例。在各种实施例中,该装置是被配置成以多种格式执行浮点加法、减法、乘法和/或除法的算术装置。换句话说,公开了一种用于提高浮点算术运算的效率和性能的装置。该公开的装置包括算术单元,该算术单元被配置为:接收第一格式表示的浮点数,基于浮点数的浮点格式类型的标识,识别第一格式表示的不同组成部分,将第一格式表示的不同组成部分放置在浮点数的第二格式表示的相应组成部分中,其中,第二格式表示的总位数大于第一格式表示的总位数,用一个或更多个零位填充第二格式表示的至少一个组成部分,并使用浮点数的第二格式表示执行算术运算。该装置还包括寄存器,该寄存器被配置为存储第二格式表示的浮点数。本文公开的乘法技术(对于本领域技术人员来说是明显的)容易应用于加法、减法和除法。例如,为了执行加法或减法而不是乘法,可以使用浮点加法器(该加法器被配置为执行加法和/或减法,其中减法是增加负数)来代替浮点乘法单元。此外,对于本领域技术人员来说明显的是,为了执行除法而不是乘法,可以使用浮点除法器来将指数相减(而不是相加)并且将尾数相除(而不是相乘)。

图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包括多个向量单元,并且每个向量单元包括向量乘法单元和向量加法器单元。

在一些实施例中,控制逻辑113包括多个多路复用器,这些多路复用器基于浮点输入的格式将浮点输入的不同组成部分引导至矩阵计算引擎115。例如,如果(例如,基于经由总线151的处理元件指令)检测到fp16格式,则多路复用器将fp16浮点数的5指数位组成部分(5-exponent-bit components)和10尾数位组成部分(10-mantissa-bit components)路由到矩阵计算引擎115。如果检测到bfloat16格式(例如,基于经由总线151的处理元件指令),则多路复用器将bfloat16浮点数的8指数位组成部分(8-exponent-bit components)和7尾数位组成部分(7-mantissa-bit components)路由到矩阵计算引擎115。在各种实施例中,路由的组成部分首先被存储在(例如,用于中间存储的)寄存器中,然后寄存器的内容被路由到矩阵计算引擎115的乘法单元或向量乘法单元。

在一些实施例中,处理元件111包括存储浮点输入、转换成中间格式的浮点输入、浮点乘法输出和/或其它适当数据的多个寄存器。在一些实施例中,采用第一格式表示的浮点数输入被转换成第二格式表示,该第二格式表示存储在寄存器中。在一些实施例中,第二格式表示是图5的浮点布局521。在一些实施例中,由于第二格式表示比第一格式表示具有更多的位,所以用零填充存储第二格式表示的寄存器。可以根据输入类型(例如,对于fp16和bfloat16)加上或减去指数字段(exponent field)中的偏移量,以确保用零填充不会改变存储的指数值。在各种实施例中,控制逻辑113基于浮点输入的格式来引导用零填充。在一些实施例中,这是使用控制逻辑113内的多路复用器来执行的。例如,如果(例如,基于经由总线151的处理元件指令)检测到fp16格式,则多路复用器可以将零路由到图5的浮点布局521的未填充的指数位位置(因为fp16使用5个指数位,并且浮点布局521容纳8个指数位)。如果(例如,基于经由总线151的处理元件指令)检测到bfloat16格式,则多路复用器可以将零路由到图5的浮点布局521的未填充的尾数位位置(因为bfloat16使用7个尾数位,并且浮点布局521容纳11位(J位和10个尾数位))。

图2是示出使用神经网络解决人工智能问题的处理元件的实施例的框图。在所示的示例中,处理元件201通信连接到总线251。处理元件201包括控制逻辑203和矩阵计算引擎205。矩阵计算引擎205包括向量单元211、221、231和241。矩阵计算引擎205可以包括更多或更少的向量单元。例如,矩阵计算引擎可以包括32个向量单元,每个向量单元能够处理两个32元素向量。在各种实施例中,每个向量单元包括向量乘法单元和向量加法器单元。在所示的示例中,向量单元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个向量单元。每个向量单元可以将两个32元素向量作为参数,并且每个向量单元可以确定32元素向量结果。在一些实施例中,该结果是单元素结果,并且跨越矩阵计算引擎205的所有向量单元获取结果。在一些实施例中,该结果是输出向量结果。在各种实施例中,输出结果通过跨多个向量单元运算累加部分向量结果来确定。例如,乘法运算可以分解为多个乘法运算,并将结果相加。在各种实施例中,矩阵计算引擎205的向量单元的数量可以变化,向量单元长度和元素大小也可以变化。例如,元素可以是4位、8位、2字节、4字节或其他合适的大小。根据向量单元的能力,可以在本地支持不同的元素大小。

在一些实施例中,矩阵计算引擎205的每个向量单元(诸如向量单元211、221、231或241)接收两个向量操作数,并且可以执行一个或更多个向量运算。例如,向量单元可以通过将第一输入向量的每个元素与第二输入向量的相应元素相乘来计算多个乘法运算的结果。所得到的乘法结果可以被累加并用于将来的运算,诸如对部分结果求和。例如,向量单元结果可以被累加,并用作由向量单元执行的后续运算的操作数。

在一些实施例中,矩阵计算引擎205的每个向量单元(诸如向量单元211、221、231或241)包括乘法单元和加法器单元。向量单元的每个向量乘法单元(诸如向量乘法单元213)可以被配置为使经由输入向量操作数接收的相应元素相乘。在各种实施例中,向量乘法单元213包括多个乘法器,其中每个乘法器被配置成执行成对元素的浮点乘法,如图6的步骤601-607中所述。如下文进一步详细描述的(例如,参见图6),在各种实施例中,执行浮点乘法包括将相应的指数对相加、找到最大指数和、使相应的尾数对相乘以及对齐尾数乘积(至少部分基于最大指数和)。图6的示例是点积过程。在各种实施例中,如下面进一步详细描述的(例如,参见图6),将对齐的尾数乘积相加,作为计算点积结果的一部分。例如,向量加法器单元215可以用于将对齐的尾数乘积相加。

在各种实施例中,乘法结果的向量被传递到向量单元的向量加法器单元。例如,向量乘法单元213可以将其乘法结果传递给向量加法器单元215。向量加法器单元215可用于加法运算,诸如对部分结果求和、至少部分计算点积结果或其他适当的功能。

在一些实施例中,向量单元的每个向量加法器单元(诸如向量加法器单元215)被配置为使用来自输入向量的元素来计算加法运算。例如,可以由向量加法器单元215计算从由向量乘法单元213计算的乘法结果的向量中选择的元素的和。在一些实施例中,向量加法器单元的结果是用作相应向量乘法单元的输入的向量的点积。在各种实施例中,每个向量加法器单元(诸如向量加法器单元215)被实现为加法器树。例如,加法器树的顶层可以将成对的元素相加以确定一组部分和,诸如将元素0和元素1相加以确定第一部分和,以及将元素2和元素3相加以确定第二部分和,等等。每个后续层可以对来自前一层的成对的部分和进行求和,直到最后一层计算出最终结果和。在一些实施例中,指定的部分和可以被输出作为加法器单元的结果。在各种实施例中,每个加法器树并行计算部分和,以得到结果和。并行运算显著提高了对数字向量进行求和的效率。在各种实施例中,多个向量单元可以并行运算以并行计算多个结果,从而显著提高矩阵计算引擎205的吞吐量。

在一些实施例中,向量乘法单元213包括用于将浮点数相乘的乘法器和加法器。在各种实施例中,将浮点数相乘包括将浮点数的指数相加,并将浮点数的尾数相乘。然后可以将相加的指数和相乘的尾数组合,以获得浮点乘法结果。图6示出了过程,其中,浮点数的乘法是通过将指数相加和将尾数相乘来完成的。例如,在各种实施例中,对于图5的浮点布局521格式的浮点数,使用9位加法器来将8位指数组成部分相加(因为将两个8位数相加可以产生9位结果),并且使用11位乘法器来将10位尾数组成部分相乘(J位与10个尾数位组合是要相乘的11位)。

图3是示出用于执行与矩阵计算引擎相关联的运算的过程的实施例的流程图。例如,可以执行点积运算(例如,参见图6)。在图3的过程中,可以执行使用各种格式的操作数的计算运算。在各种实施例中,硬件乘法器单元/处理元件处理多种浮点数格式,例如fp16和bfloat16。使用所公开的技术,处理元件能够支持多种浮点格式并因此支持多种类型的神经网络模型,同时以最小的附加硬件修改保持高吞吐量。例如,可以使用单个矩阵计算引擎来执行fp16浮点运算以及bfloat16浮点运算。在一些实施例中,响应于在处理元件(诸如图1的处理元件101、111和/或121和/或图2的处理元件201)的控制单元处接收到运算指令,执行图3的过程。

在301,接收浮点处理器指令。运算指令可以指定16位浮点数。例如,可以在处理元件的控制逻辑组件处接收指定fp16数的fp16浮点点积运算指令。运算指令还可以指定bfloat16浮点数。在一些实施例中,每个操作数使用的位数可以是16位或另一合适的位大小。

在303,识别浮点格式。例如,指定的操作数的浮点格式被识别,并且可以包括fp16、bfloat16和/或其它浮点格式。在各种实施例中,处理元件支持多种不同的浮点格式。在一些实施例中,浮点格式由处理器指令指定。例如,处理器指令中的标志可以识别浮点格式是fp16还是bfloat16。

在305,执行浮点运算。例如,可以执行两个fp16向量或两个bfloat16向量的点积。在各种实施例中,使用与多种浮点数格式兼容的格式表示来执行浮点运算。

在307,提供浮点结果。例如,浮点结果被提供给下一步以用于解决人工智能问题。在一些实施例中,该结果用于求解神经网络的下一层和/或与来自其他处理元件的结果相结合。在一些实施例中,该结果被写回到存储器,诸如图1的存储器131,在那里该结果可以被后续操作利用。

图4是示出用于使用与多种浮点数格式兼容的格式表示来执行浮点乘法的过程的实施例的流程图。在一些实施例中,响应于接收到乘法运算指令,执行图4的过程。例如,诸如图1的处理元件111的处理元件接收使用诸如fp16或bfloat16的浮点格式指定操作数的乘法运算。在一些实施例中,使用诸如图1的控制逻辑113或图2的控制逻辑203的控制逻辑并使用诸如图1的矩阵计算引擎115或图2的矩阵计算引擎205的矩阵计算引擎,来执行图4的过程。在一些实施例中,图4的过程的至少一部分在图3的305中执行。

在401,接收第一格式表示的浮点数。在一些实施例中,浮点数被存储在寄存器、暂存器(scratch memory)位置或另一适当的存储器中。在一些实施例中,浮点数被存储到矩阵计算引擎的输入缓冲器中,为执行矩阵运算做准备。在一些实施例中,经由总线(例如,图1的总线151或图2的总线251)从存储器(例如,图1的存储器131)接收浮点数。第一格式表示的示例包括fp16、bfloat16和任何其它浮点数格式。fp16和bfloat16是16位浮点数格式。不同于16位格式的浮点数格式也是可能的。

在403,识别第一格式表示的组成部分。例如,fp16格式的组成部分包括符号位、5个指数位和10个尾数位。bfloat16格式的组成部分包括符号位、8个指数位和7个尾数位。在各种实施例中,标识基于浮点数的浮点格式类型的标识。例如,为了确定浮点数是哪种类型的格式,可以读取正在发送乘法运算指令的软件发送的标志。在一些实施例中,一个或更多个软件标志指示作为第一格式表示的浮点数格式(例如,fp16、bfloat16等)的类型。当浮点数格式被识别时,浮点数内组成部分的位置是已知的。图5的浮点布局501和511分别示出了fp16格式和bfloat16格式的组成部分的布置。浮点布局501是fp16格式,包括单符号位组成部分503、5个指数位组成部分505和10个尾数位组成部分507。浮点布局511是bfloat16格式,包括单符号位组成部分513、8个指数位组成部分515和7个尾数位组成部分517。

在405,所识别的组成部分被放置在第二格式表示中。换句话说,第一格式表示的不同组成部分被放置在浮点数的第二格式表示的相应组成部分中。在各种实施例中,第二格式表示的总位数大于第一格式表示的总位数。在各种实施例中,寄存器被配置成存储第二格式表示的浮点数。还可以使用暂存器位置或另一个适当的存储器。在各种实施例中,多路复用器基于浮点数格式类型来引导逻辑(例如,图1的控制逻辑113或图2的控制逻辑203)。

在一些实施例中,第二格式表示被定制为能够存储bfloat16格式的全部指数位数以及fp16格式的全部尾数位数。在一些实施例中,第二格式表示包括符号位、8个指数位和10个尾数位。图5的浮点布局521示出了具有符号位、8个指数位和10个尾数位的第二格式表示的布置。浮点布局521(包括单符号位组成部分523、8个指数位组成部分525和10个尾数位组成部分527)具有拥有足够大位宽的组成部分来存储浮点布局501的fp16格式以及浮点布局511的bfloat16格式。浮点布局501的组成部分503(符号位)、505(指数位)和507(尾数位)可以分别被传送到浮点布局521的组成部分523、525和527并分别存储在浮点布局521的组成部分523、525和527中。另外,浮点布局511的组成部分513(符号位)、515(指数位)和517(尾数位)也可以被分别传送到浮点布局521的组成部分523、525和527并分别存储在浮点布局521的组成部分523、525和527中。

在407,用一个或更多个零位填充第二格式表示。用一个或更多个零位填充第二格式表示的至少一个组成部分。例如,当第一格式表示是具有图5的浮点布局501的布局的fp16格式,并且第二格式表示具有图5的浮点布局521的布局时,第二格式表示包括第一格式表示不包括的三个额外的指数位。在这种情况下,图5的组成部分525的三个最左边的(最高有效位)位可以被用零填充,并且加上或减去偏移量,以便确保用零填充不会改变存储的指数值。这是因为指数大于或等于1意味着前导零位不会改变指数值。在图5所示的示例中,浮点布局501的符号位组成部分503和尾数位组成部分507具有与浮点布局521中的相应组成部分相同的位宽;因此,当第一格式表示是具有浮点布局501的布局的fp16格式时,浮点布局521的那些组成部分不会被用零填充。

当第一格式表示是具有图5的浮点布局511的布局的bfloat16格式并且第二格式表示具有图5的浮点布局521的布局时,第二格式表示包括第一格式表示不包括的三个额外的尾数位。在这种情况下,图5的组成部分527的三个最右边的位可以被用零填充,而不改变所表示和存储的十进制值。这是因为尾数位存储从最左边的尾数位到最右边的尾数位递减的值,这意味着尾随零(trailing zero)位不会改变尾数。在图5所示的示例中,浮点布局511的符号位组成部分513和指数位组成部分515具有与浮点布局521中的相应组成部分相同的位宽;因此,当第一格式表示是具有浮点布局511的布局的bfloat16格式时,浮点布局521的那些组成部分将不被用零填充。

在409,使用浮点数的第二格式表示来执行乘法。乘法可以响应于指定要被相乘的两个数(例如,两个fp16格式或两个bfloat16格式的数)的乘法运算指令。乘法还可以响应于向量指令。换句话说,乘法可以是一组乘法的一部分。例如,可以接收两个操作数向量,并且第一向量的每个元素可以与第二向量的相应元素相乘。乘法乘积可以被求和以产生单个数的输出。换句话说,乘法可以响应点积指令和执行点积运算所需的多次乘法的一部分(例如,参见图6)。

在各种实施例中,使用单一类型的计算单元(例如,图1的矩阵计算引擎115或图2的矩阵计算引擎205)来执行乘法,而不管第一格式表示(例如,fp16或bfloat16)。这是可以实现的,因为第二格式表示可以容纳多个第一格式表示(例如,fp16和bfloat16两者)。第二格式表示可以处理跨多个第一格式表示的最坏情况(最大位宽)组成部分。针对多个第一格式表示使用单一类型的计算单元具有降低功耗的好处(例如,与使用为多个第一格式表示定制的多种类型的计算单元相比)。乘法的输出可以存储在矩阵计算引擎的累加器或另一适当的存储器位置中。

在一些实施例中,乘法的输出被舍入。例如,输出可以从第二格式表示(例如,具有图5的浮点布局521的布局)舍入到第一格式表示(例如,fp16、bfloat16等)。换句话说,输出可以被舍入,以匹配输入数类型的格式。在一些实施例中,乘法的输出被置于另一种格式。例如,乘法输出的不同组成部分可以放置在浮点数的第三格式表示的相应组成部分中,其中第三格式表示的总位数大于第二格式表示的总位数。第三种格式表示的示例是单精度浮点格式(本文还称为“fp32”),该单精度浮点格式包括符号位、8个指数位和23个尾数位。fp32格式的尾数中的额外位可以用零来填充。在一些实施例中,fp32格式的尾数位的大部分可以用从第二格式表示值的乘法生成的十进制位来填充。例如,将具有10位尾数的两个数相乘可以生成具有多至22个尾数位的乘积(由于每个数有10个尾数位和J位,所以每个数有11位),该乘积可以适应在fp32格式的23个尾数位内。

图5是示出各种浮点数格式的图。所示的格式已经在上面针对图4的过程进行了讨论。在所示的示例中,由浮点布局501表示的浮点格式包括三个组成部分:单符号位组成部分503、5个指数位组成部分505和10个尾数位组成部分507。浮点布局501是16位浮点数格式fp16。由浮点布局511表示的浮点格式还包括三个组成部分:单符号位组成部分513、8个指数位组成部分515和7个尾数位组成部分517。浮点布局511是16位浮点数格式bfloat16。浮点布局501和511的组成部分可以被放置并存储在浮点布局521中,浮点布局521包括单符号位组成部分523、8个指数位组成部分525和10个尾数位组成部分527。浮点布局521包括19位,以便容纳浮点布局501和511的较大指数组成部分(浮点布局511中的位宽为8)以及浮点布局501和511的较大尾数组成部分(浮点布局501中的位宽为10)。

在各种实施例中,诸如图1的处理元件111的处理元件接收使用浮点布局501或511(位宽为16)的格式指定操作数的乘法运算指令。由于浮点布局521的较大位宽,浮点布局521可以接收浮点布局501或浮点布局511的所有指数位和尾数位,并因此支持使用浮点布局501或511的格式指定操作数的乘法运算指令。在一些实施例中,使用图3、图4和/或图6的过程以及图1和/或图2所示的硬件来执行乘法运算。图5的示例针对浮点布局501和511使用16位,针对浮点布局521使用19位,但是在原始浮点数(第一格式表示)所使用的位数小于原始浮点数将被放置到的第二格式(第二格式表示)所使用的位数的情况下,也可以使用其它适当的位大小。

图6是示出用于使用与多种浮点数格式兼容的格式表示来执行浮点点积运算的过程的实施例的流程图。在一些实施例中,响应于接收到乘法运算指令,执行图6的过程。例如,诸如图1的处理元件111的处理元件接收使用诸如fp16或bfloat16的浮点格式来指定向量操作数的乘法运算。在一些实施例中,使用诸如图1的控制逻辑113或图2的控制逻辑203的控制逻辑并使用诸如图1的矩阵计算引擎115或图2的矩阵计算引擎205的矩阵计算引擎,来执行图6的过程。在一些实施例中,图6的过程的至少一部分在图3的305中执行。在一些实施例中,图6的过程的至少一部分在图4的409中执行。

向量操作数可以被提供给乘法单元。例如,可以将向量操作数提供给矩阵计算引擎(诸如图1的矩阵计算引擎115或图2的矩阵计算引擎205)。在一些实施例中,诸如图2的向量乘法单元213的向量乘法单元接收一对向量操作数。在一些实施例中,多个向量乘法单元各自接收向量操作数。例如,每个乘法向量单元可以并行运算一对向量操作数。在一些实施例中,在多个向量单元共享同一操作数的情况下,可以将选定的向量操作数广播给多个向量单元。例如,在一些实施例中,矩阵计算引擎支持广播功能以将同一向量操作数广播给多个向量单元。

在601,来自浮点输入的两个向量的相应指数对被相加。换句话说,一对向量中相应元素的指数被相加。例如,在长度各自为N的两个向量A和B的情况下,将N对指数相加。在一些实施例中,一组加法器单元将指数对相加。在一些实施例中,9位加法器用于将fp16格式数和bfloat16格式数的指数相加,因为两种格式的指数位的最大数是bfloat16的8个指数位,并且两个8位数的和可以是9位数。在一些实施例中,加法在图2的向量乘法单元213内执行。

在603,比较已经相加的指数对,并且确定最大值。换句话说,确定相应指数和的最大值。在各种实施例中,具有较小指数的浮点值可以使用相应指数的和的该最大值转换成换算值(equivalent value)。例如,如果相应指数的和的最大值是15,则可以通过使尾数移位将1.1×2

在605,将(点积运算的向量中相应元素的)相应的尾数对相乘。在一些实施例中,11位乘法器用于将fp16格式数和bfloat16格式数的尾数相乘,因为两种格式的尾数位的最大数是fp16的10个尾数位,fp16还包括J位(10个尾数位加一个J位等于11位)。在一些实施例中,在图2的向量乘法单元213内执行乘法。

在607,将尾数乘积与最大指数(在603确定)对齐。例如,如果最大指数是15,则尾数乘积被移位(零被填充到尾数乘积的左边),使得移位的尾数乘积乘以2

在609,将对齐的尾数乘积相加。通过在607对齐尾数乘积,可能直接将对齐的尾数相加并获得正确的结果,因为所有所得的和都引用同一指数部分(例如,如果最大指数是15,则每个所得的和乘以2

在611,结果被规格化(如果需要的话)。结果可能需要规格化,以解释上溢(overflow)和下溢(underflow)。规格化需要尾数位的移位,以确保最终输出具有正确的位数。还将对指数应用适当的校正。在各种实施例中,在浮点数的两个向量相乘(得到向量结果)之后,向量结果被求和以确定最终的点积结果。求和操作可以使用向量加法器单元来执行,诸如使用图2的向量加法器单元215来执行。在一些实施例中,结果被存储在矩阵计算引擎的累加器或另一个适当的存储器位置中。

尽管为了清楚理解的目的已经详细描述了前述实施例,但是本发明不限于所提供的细节。有许多实现本发明的替代方式。所公开的实施例是说明性的,而不是限制性的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号