CN112130803A - 具有正确舍入的浮点点积运算器 - Google Patents
具有正确舍入的浮点点积运算器 Download PDFInfo
- Publication number
- CN112130803A CN112130803A CN202010578649.7A CN202010578649A CN112130803A CN 112130803 A CN112130803 A CN 112130803A CN 202010578649 A CN202010578649 A CN 202010578649A CN 112130803 A CN112130803 A CN 112130803A
- Authority
- CN
- China
- Prior art keywords
- bits
- fixed
- dynamic range
- result
- operand
- 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/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
- 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
- G06F7/485—Adding; Subtracting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/14—Conversion to or from non-weighted codes
- H03M7/24—Conversion to or from floating-point codes
-
- 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
Abstract
本发明涉及一种用于点积计算的硬件运算器,包括多个乘法器(10),每个乘法器接收以第一精度格式(fp16)编码的浮点数格式的两个被乘数(a,b);与每个乘法器相关联的对准电路(12),被配置为基于相应被乘数的指数,将乘法的结果转换成具有足够位数(80)以覆盖乘法的整个动态范围的相应固定点数;以及多加法器(30),被配置为将乘法器提供的固定点数无损失地相加,提供固定点数的格式的和。
Description
技术领域
本发明涉及用于在处理器内核中处理浮点数的硬件运算器,并且更具体地说,涉及用于基于通常被称为FMA的融合乘加运算器(Fused Multiply-Add operator)来计算点积的运算器。
背景技术
人工智能技术,尤其是深度学习,在大型矩阵的乘法方面要求特别高,其中大型矩阵可以有数百行和数百列。因此,专门从事混合精度矩阵乘法的硬件加速器正在出现。
大矩阵的乘法通常以块实施,即通过将矩阵分解成大小适合于计算资源的子矩阵。加速器因此被设计来有效地计算这些子矩阵的乘积。这种加速器包括能够在一个指令周期中计算表示子矩阵的行和列的向量的点积并将相应部分结果加到先前周期中累积(accumulate)的部分结果的运算器。经过多个周期后,部分结果的累积是表示完整矩阵的一行和一列的向量的点积。
这种运算器利用了FMA技术。
图1示意性地示出了传统的FMA运算器。运算器通常采用三个二进制浮点操作数,即两个乘法操作数(即被乘数a和b)以及加法操作数c。它计算项ab+c以在指定为ACC的寄存器中产生结果s。之所以这样指定寄存器,是因为它通常用于在数个周期内累积数个乘积,并在下一个周期内将寄存器的输出作为加法操作数c重新使用,如虚线所示。
在[″Modified Fused Multiply and Add for Exact Low Precision ProductAccumulation″,Nicolas Brunie,IEEE 24th Symposium on Computer Arithmetic(ARITH),July2017]的文章中,根据IEEE-754标准,被乘数a和b是半精度浮点格式,也称为“二进制16”或“fp16”。“fp16”格式的数具有一个符号位、5位指数和10+1位尾数(包括以指数编码的隐式位)。
ACC寄存器旨在以定点格式容纳乘积ab的全部动态范围。对于“fp16”格式的被乘数,80位寄存器(加上可能几个溢出位)就足够了,固定点位于寄存器的位置49。加法操作数c的格式与ACC寄存器的内容相同。
只要寄存器不溢出,这种结构就有可能获得每个运算ab+c的精确结果,并一个周期接一个周期地保持精确累积结果,从而避免在将相反符号但绝对值接近的数进行相加之后的舍入误差和精度损失。
上述文章还提出,在混合精度FMA配置中,在累积阶段结束时,将寄存器的内容转换成更高精度的格式,例如“二进制32”。然而,这样转换的数并没有涵盖“二进制32”格式的全部动态范围,因为乘积ab的指数只定义为6位而不是8位。
图2示意性地示出了将FMA结构应用于累积点积运算器,例如在美国专利申请2018/0321938中描述的。四对被乘数(a1,b1)、(a2,b2)、(a3,b3)和(a4,b4)被提供给相应乘法器。四个结果乘积p1至p4(称为部分乘积)和一个加法操作数c由加法器树同时相加。被乘数和加法操作数都是相同的浮点格式。加法的结果被归一化和舍入,以转换成初始浮点格式,使得它可以被重新用作操作数c。
为了将部分乘积和加法操作数相加,比较这些项的指数,以使这些项的尾数彼此对准。只有对应于最高指数的有效位窗口被保留用于加法和舍入,窗口对应于加法器的大小。结果,较低指数项的尾数被截断,或者一起被消除,当两个较大指数的部分乘积相互抵消时,产生较大的误差。
上述专利申请没有提到加法器的任何特定大小。在部分乘积相加的同一背景下,尼古拉斯·布鲁尼(Nicolas Brunie)2014年题为“Contributions to computerarithmetic and applications to embedded systems”的论文提出了一种加法器,其大小等于部分乘积尾数大小的两倍加上两位的溢出余量,即二进制32格式的被乘数为98位。在同一上下文中,专利US8615542,为了增加四个部分乘积,提供了仅等于被乘数的尾数大小的加法器大小,即二进制32格式的被乘数为24位。
发明内容
通常提供一种融合乘加硬件运算器,包括:乘法器,接收作为以第一精度格式编码的浮点数的两个被乘数;与乘法器相关联的对准电路,被配置为基于被乘数的指数,将乘法结果转换成具有足够位数以覆盖乘法的整个动态范围的第一固定点数;以及加法器,被配置为将第一固定点数和加法操作数相加。加法操作数是以具有比第一精度格式更高精度的第二精度格式编码的浮点数,并且运算器包括与加法操作数相关联的对准电路,被配置为基于加法操作数的指数,将加法操作数转换成相对于加法操作数的动态范围的减小的动态范围的第二固定点数,第二固定点数的位数等于第一固定点数的位数在两侧扩展至少加法操作数的尾数的大小;并且加法器被配置为无损失地将第一和第二固定点数相加。
运算器还可以包括舍入和归一化电路,被配置为将加法器结果转换成第二精度格式的浮点数,从加法器结果的最高有效位获取尾数,从加法器结果的剩余位计算舍入,以及从加法器结果中最高有效位的位置确定指数。
第二固定点数可以向右扩展至少等于加法操作数的尾数大小的位数;并且舍入电路可以使用第二固定点数的扩展位来计算舍入。
运算器可以被配置为当加法操作数的指数超过第二固定点数的容量时,作为结果提供加法操作数。
一种二进制数的融合乘法和加法的相关方法,包括以下步骤:将以第一精度格式编码的两个浮点被乘数的尾数相乘;将乘法结果转换成具有足够位数以覆盖乘法结果的整个动态范围的第一固定点数;以及将第一固定点数和加法操作数相加。加法操作数是以具有比第一精度格式更高精度的第二精度格式编码的浮点数,并且该方法还包括以下步骤:将加法操作数转换成具有相对于加法操作数的动态范围的减小的动态范围的第二固定点数,第二固定点数的位数等于第一固定点数的位数在任一侧扩展至少加法操作数的尾数的大小;并且无损失地将第一和第二固定点数相加。
另一方面,通常提供一种用于点积计算的硬件运算器,包括多个乘法器,每个乘法器接收以第一精度格式编码的浮点数格式的两个被乘数;与每个乘法器相关联的对准电路,被配置为基于相应被乘数的指数,将乘法的结果转换成具有足够位数以覆盖乘法的整个动态范围的相应固定点数;以及多加法器,被配置为无损失地将由乘法器提供的固定点数相加,提供固定点数的格式的和。
该运算器还可以包括:以具有比第一精度格式更高精度的第二精度格式编码的浮点加法操作数的输入;与加法操作数相关联的对准电路,被配置为基于加法操作数的指数,将加法操作数转换成相对于加法操作数的动态范围的减小的动态范围的固定点数,该固定点数的位数等于定点和的位数在任一侧扩展至少加法操作数的尾数的大小;以及加法器,被配置为无损失地将定点和与减小的动态范围的固定点数相加。
运算器还可以包括舍入和归一化电路,被配置为将加法器结果转换成以第二精度格式编码的浮点数,从加法器结果的最高有效位获取尾数,从加法器结果的剩余位计算舍入,以及从加法器结果中最高有效位的位置确定指数。
减小的动态范围的固定点数可以向右扩展至少等于加法操作数的尾数大小的位数;并且舍入电路可以使用减小的动态范围的固定点数的扩展位来计算舍入。
根据的运算器可以被配置为当加法操作数的指数超过减小的动态范围的固定点数的容量时,作为结果提供加法操作数。
一种计算二进制数的点积的相关联的方法,包括以下步骤:并行计算多个乘法,每个乘法来自以第一精度格式编码的浮点数的两个被乘数;基于每个乘法的被乘数的指数,将相应乘法的结果转换成具有足够位数以覆盖乘法的整个动态范围的相应固定点数;以及无损失地将从乘法得到的固定点数相加,以产生固定点数的格式的和。
该方法还可以包括以下步骤:接收以具有比第一精度格式更高的精度的第二精度格式编码的浮点加法操作数;基于加法操作数的指数,将加法操作数转换成具有相对于加法操作数的动态范围的减小的动态范围的固定点数,该固定点数的位数等于定点和的位数在两侧扩展至少加法操作数的尾数的大小;和无损失地将固定点和与减小的动态范围的固定点数相加。
附图说明
将在以下非限制性描述中结合附图阐述实施例,其中:
前面描述的图1表示传统的融合乘加运算器(称为FMA)的示意图;
前面描述的图2表示传统累积点积运算器的示意图;
图3示出了混合精度二进制16/二进制32FMA运算器中使用的定点格式的数;
图4A示出了二进制32格式的定点表示的动态范围的无损压缩技术;
图4B示出了二进制32格式的定点表示的动态范围的无损压缩技术;
图5表示使用图4A和图4B的技术来实现正确舍入的混合精度FMA运算器的实施例的示意图;和
图6表示使用图4A和图4B的技术来实现正确舍入的混合精度点积与累积运算器的示意图。
具体实施方式
为了在部分乘积的累积的多个阶段期间提高计算准确度,期望实现混合精度FMA,即具有比被乘数更高精度的加法操作数。事实上,在重复累积期间,加法操作数趋向于连续增加,而部分乘积保持有界。
尼古拉斯·布鲁尼的上述IEEE文章提出了一种解决方案,该解决方案提供了适用于二进制16格式被乘数的准确计算,其乘积可以用80位的定点格式来表示,这种格式对于处理器内核的处理单元内的硬件处理来说仍然是可接受的。
但是,两个二进制16的乘积会产生非标准浮点数,该浮点数具有一个符号位、6个指数(exponent)位和21+1个尾数(mantissa)位,并且在28位上进行了编码。这种格式只能在内部使用。然后,希望加法操作数采用更高精度的标准格式。例如,加法操作数可以具有紧接着的更高的精度,即具有一个符号位、8个指数位和23+1个尾数位的二进制32。因此,二进制32格式对于定点编码需要277位,对于在集成电路芯片中复制数十次的复杂度降低的处理器内核中的硬件处理来说,这种大小太大了。
图3的上部显示了定点格式,可用于二进制16的被乘数的乘积。该格式由一个80位寄存器REG80体现,其位由乘积的相应指数指定。对应于固定点的指数0位于第49位。第一位对应于指数-48,而最后一位对应于指数31。
乘积的22位尾数p(22)位于寄存器中,使得其最高有效位位于两个被乘数的指数和加1所定义的位置。
图3的下部显示了定点格式,可用于二进制32操作数。该格式由一个277位寄存器REG277实现。所需大小由关系exponent_max-exponent_min+1+(mantissa_size-1)给出。
对应于固定点的指数0位于第150位。第一位对应于指数-149,而最后一位对应于指数127。
操作数的24位尾数c(24)位于寄存器中,使其最高有效位位于由操作数的指数定义的位置。
为了执行操作数c和乘积p的精确相加,原则上应该使用最大数的加法器大小,即277位。然而,由于标准浮点格式的结果是预期的,因此这个精确结果必然是舍入的。在这种情况下,目的是确保结果被正确舍入,即舍入计算考虑了精确结果的所有位。
为了从具有比尾数更多位的精确结果中产生正确舍入的尾数,使用在精确结果中紧跟在尾数之后的三个位,称为保护位G、舍入位R和粘滞位S。这三个位确定是否根据选择的舍入模式增加尾数。为了确保有符号和(signed sum)的序列后的最佳准确度,优选“舍入到最近”模式。
然而,应当注意,粘滞位S的值严格来说不是舍入位R之后的位的值一一如果舍入位右侧的任何位为1,则它是被设置为1的位。因此,要在所有情况下计算正确的舍入,需要精确结果的所有位。
然而,为了将加法器的大小减小到合理的值,使用了这样的属性,当将80位的固定点数和277位的固定点数相加时,在将加法的结果转换成浮点数时,277位的大范围对于计算正确的舍入是不必要的。实际上,如图4A和图4B所示,可以区分两种情况。
图4A示出了标称情况,其中操作数c和乘积p可能具有直接或通过舍入效应影响加法结果的相互影响。操作数c的指数严格地在-74和57之间。(此后,术语“位置”相对于定点格式来定义,即位置对应于指数。)
对于指数56的边界情况,尾数c(24)位于定点格式的段[56:33]中,并且在尾数c(24)的最低有效位和寄存器REG80的最高有效位之间的位置32处有一个保护位G。
当寄存器REG80包含正数时,保护位G为0。加法仅仅是段[56:32]的级联,包括尾数c(24)和保护位,以及寄存器REG80。因为加法的结果应该被转换成二进制32的数,得到的尾数是尾数c(24),可能通过舍入来调整。对于“舍入到最近”模式,为0的保护位G指示不需要调整,在这种情况下,尾数c(24)直接用于转换的结果。
当寄存器REG80的内容为负时,保护位G接收1的符号位,在这种情况下尾数c(24)可能需要在舍入时进行调整。
对于指数-73的边界情况,尾数c(24)位于段[73:-96]中,并且在寄存器REG80的最低有效位和尾数c(24)的最高有效位之间存在为0的24个的保护位[-49:-72]。
在这种情况下,如果操作数c为正,加法只是寄存器REG80和段[49:-96]的级联,包括为0的24个保护位和尾数c(24)。因为加法的结果应该被转换成二进制32的数,所以产生的尾数通常取自寄存器REG80。然而,当乘积为其动态范围的最小绝对值,即2-48时,结果的尾数取自寄存器REG80的最后一位和接下来的23位,实际上是段[-48:-71],在尾数c(24)之前的位置-72处留下为0的保护位G。
为了舍入“到最近的”,为0的保护位G指示没有要进行的调整,在这种情况下,从寄存器REG80中取出的由段[-49:-71]扩展的尾数直接用于转换结果。
如果操作数c为负,位置-72处的保护位G接收为1的符号位,在这种情况下,所取的尾数可能需要在舍入时进行调整。
图4B示出了情况,其中操作数c具有在图4A的域之外的指数e,即e≥57或e≤-74。在这种情况下,乘积p和操作数c对以二进制32格式提供的最终结果没有相互影响。对于“舍入到最近”模式,要么操作数c太大(e≥57),以至于乘积p没有影响,并且操作数c可以直接作为最终结果来提供,而无需相加;或者操作数c太小(e≤-74),以至于没有影响,并且寄存器REG80的内容可以直接用于最终结果,而无需相加。
这种情况通常不会发生,除非为操作数c提供了相应初始值。
然而,为了确保舍入始终是根据精确值计算的,从而确保在所有情况下和所有舍入模式下它在格式上是正确的,在这种情况下也可以考虑操作数c和乘积p的尾数的所有位。事实上,这种情况对应于保护位G和舍入位R都为0的情况,并且只有粘滞位S的值是感兴趣的。对于“舍入到最近”和“舍入到0”模式,单个位G的值0指示不需要调整,并且位S的值无关紧要。另一方面,对于“舍入到无穷大”模式,如果结果的符号对应于舍入方向(例如,舍入到“正无穷大”的正结果),则位S的值1导致尾数的增加,即使位G和R为O。
因此,当e≥57时,粘滞位S考虑寄存器REG80的内容。
当e≤-74时,粘滞位S考虑尾数c(24)。
从这些元素可以看出,为了以二进制32浮点格式计算最终结果并进行正确舍入,在图4A定义的缩小的变化范围内,即在153位段[56:-96]上,以定点格式对操作数c进行编码就足够了,并以特定的方式处理越界情况。
加法器的大小有效地只有80位在任一侧扩展了结果的尾数大小,即24+80+24=128位。153位中右边的剩余25位仅用于计算影响结果尾数的舍入。处理128位中的24个最低有效位和24个最高有效位的加法器级可以通过这些位对于输入接收乘积p都是固定的这一事实来简化。加法的结果可以表示为128+o位上的定点值,其中o表示几个位以考虑可能的进位(carryover)。
二进制32浮点格式的最终结果的尾数取自加法结果的24个最高有效位,并且浮点结果的指数由尾数的最高有效位的位置直接提供。
图5是实现图4A和图4B的技术的混合精度FMA运算器(fp16/fp32)的框图。应当注意,这里示出的图是简化的,并且仅示出了那些有助于理解本发明的元素。传统上处理标准浮点数的特殊性所需的某些元素,诸如次正规数、未定义数(NaN)、无穷大等,没有被描述。
FMA运算器包括浮点乘法单元FP16MUL,提供80位定点结果。该单元接收fp16(或二进制16)格式的两个被乘数a和b。每个被乘数都有一个符号位S、5位指数EXP和10+1位尾数MANT(其最高有效位(隐式地处于1)未存储)。两个尾数都被提供给乘法器10,乘法器10将乘积p计算为22位整数。乘积p被提供给由加法器14控制的对准电路12,加法器14产生被乘数a和b的指数和。对准电路12被配置为在指数的和加1所定义的位置、在80个线(line)上对准乘积p的22位,如关于图3所描述的。电路12因此将乘法的浮点结果转换成80位的固定点数。
如结合图4A和图4B所讨论的,由对准电路输出的80位向左和向右填充为0的24位,以形成128位的固定点数,这对应于乘积的绝对值。该128位绝对值通过求反电路16,该电路被配置为当被乘数的符号相反时,反转绝对值的符号。在负号的情况下,求反电路会在寄存器的80位输出的左边加上符号(为1)。由求反电路16产生的128位数形成乘法单元FP16MUL的输出。
以fp32(或二进制32)格式提供给FMA运算器的加法操作数c具有符号位S、8位指数EXP和23+1位尾数MANT。尾数被提供给由操作数c的指数控制的对准电路18。电路18被配置为在由指数定义的位置、在153个线上对准尾数的24位,如结合图4A所讨论的。电路18因此将浮点操作数转换成153位的固定点数。
回想一下,153位不足以涵盖fp32数的指数的全部动态,而仅涵盖56和-73之间的指数,值56对应于153位数的最高有效位的位置。因此,电路18可以被配置为使在阈值56和-73处的指数饱和(saturate)。结果是,当指数超出范围时,尾数会停留在153位数的左边或右边。在任何情况下,如结合图4B所讨论的,超出范围的情况被不同地处理。
由电路18提供的数通过由操作数的符号位控制的求反电路20。可替代地,可以省略电路20,并且在电路16处,如果乘积的符号不等于操作数c的符号,则反转乘积的符号。
128位加法器22接收单元FP16MUL的输出和由求反电路20提供的153位有符号数的128个最高有效位。加法的结果是128+o位的固定点数,其中o表示几个位,以允许可能的进位传播。求反电路输出的25个最低有效位用于舍入计算的下游。
加法器22的输出由归一化和舍入电路24处理,该电路具有将加法的定点结果转换成fp32格式的浮点数的功能。为此,如结合图4A和图4B所述,fp32数的尾数取自加法结果的24个最高有效位,并且指数由加法的结果中尾数的最高有效位的位置确定。在一般情况下,在加法结果中紧跟尾数的位上正确计算舍入,随后是求反电路20的输出的25个最低有效位。
图5没有示出处理操作数c的指数大于或等于57或小于或等于-74的超出范围情况的可能电路元件。考虑到所描述的功能,这些元件是不重要的,并且有数种可能的变体。
例如,当指数大于或等于57时,电路24取加法结果中左边的尾数,直接取操作数c的指数(而不是尾数的位置),并通过考虑为0的保护位G并使用加法结果中尾数之后的位来确定粘滞位S,来计算舍入。如果寄存器REG80的内容为正,则舍入位R被认为是0,或者如果寄存器REG80的内容为负,则舍入位R被认为是1。
当指数小于或等于-74时,电路24可以像在标称情况下那样操作,操作数c的尾数停留在加法器外部的25位中的右边,对粘滞位s的值有贡献。
当然,如果乘积是零,加法的结果直接是操作数c。
图6表示使用图4A和图4B的技术来实现正确舍入的混合精度点积与累积运算器的示意图。
与图5的FMA运算器相比,点积与累积运算器旨在增加数个部分乘积,例如这里的四个,以及加法操作数c。每个部分乘积由图5类型的相应单元FP16MUL计算。乘法结果以80位定点格式表示,这里不需要在左侧和右侧填充24个固定位。四个定点部分乘积结果被提供给80位多加法器30。
多加法器30可以具有多种传统结构。对于四个加法操作数,可以使用三个全加器的分层结构,或者基于进位保存加法器(Carry-Save Adder,CSA)的结构,如美国专利申请2018/0321938中所述,不同之处在于,这里的加法操作数是80位固定点数,每个固定点数的大小足以覆盖相应部分乘积的整个动态范围。
多加法器的结果具有精确特性,而与部分乘积的值无关。特别是,两个大的部分乘积可以互相抵消而不影响结果的准确度,因为部分乘积的所有位都保持在这一点上。在传统运算器中,部分乘积的加法运算一执行完成,就执行舍入运算。
此外,每个乘法单元FP16MUL独立于其他乘法单元,因为不需要比较部分乘积的指数来实现部分乘积的尾数的相对对准。事实上,每个单元都转换成对所有数通用的固定点格式。结果,在设计水平上根据需要改变乘法单元的数量是特别简单的,因为在乘法单元之间没有相互依赖性。使多加法器的结构适应操作数的数量也很简单,因为它是根据系统设计规则来执行的。因此,运算器的复杂性可以与乘法单元的数量成比例。
部分乘积的加法的结果可能超过80位。因此,结果在80+o位上进行编码,其中o指定少量附加的有效位以容纳溢出,等于要相加的部分乘积数量的以2为底的对数加上符号位。因此,对于要相加的四个部分乘积,o=3。
多加法器由此提供的80+o位固定点数将与加法操作数c相加,并在有限的动态范围内转换成固定点数,如图4A和图4B所示。受限动态范围此处基于80+o位,而不是80位的大小。因此,如右图所示,对于加法操作数c的处理,对准电路18执行到153+o位的固定点数的转换,并且相应地调整下游处理。特别地,在加法操作数c侧将128+o个最高有效位提供给加法器22。在部分乘积和(partial product sum)侧,用24个固定值位(由0表示正结果或1表示负结果)左右填充多乘法器30提供的80+o位。
加法器22的输出按图5进行处理,除了位数128+o2稍大,o2包括o位和一个或多个额外位以容纳来自加法器22的溢出。
因此,当将最终加法的结果转换成浮点数时,该运算器结构只执行单次舍入,并且在所有情况下都可以正确计算该单次舍入。
对于本领域的技术人员来说,所描述的实施例的许多变型和修改将会变的显而易见。图5和图6中所示的运算器被描述为组合逻辑电路。在以相对高的频率计时的处理器内核中,纯粹在组合逻辑中的运算器的等待时间可能太高。在这种情况下,运算器可以具有流水线结构,具有用于存储中间结果的寄存器,例如,用于存储对准电路12和18的输出数(如结合图3所讨论的)。
虽然已经描述了使用fp16和fp32格式的混合精度运算器,并且这些运算器在性能/复杂度比方面是当今真正感兴趣的,但是这些原理在理论上适用于其他标准或非标准精度格式。
Claims (7)
1.一种用于点积计算的硬件运算器,包括:
·多个乘法器,每个乘法器接收以第一精度格式编码的浮点数格式的两个被乘数;
·与每个乘法器相关联的对准电路,被配置为基于相应被乘数的指数,将乘法的结果转换成具有足够位数以覆盖乘法的整个动态范围的相应固定点数;和
·多加法器,被配置为无损失地将乘法器提供的固定点数相加,提供固定点数的格式的和。
2.根据权利要求1所述的运算器,还包括:
·以具有比第一精度格式更高精度的第二精度格式编码的浮点加法操作数的输入;
·与加法操作数相关联的对准电路,被配置为基于加法操作数的指数,将加法操作数转换成相对于加法操作数的动态范围的减小的动态范围的固定点数,该固定点数的位数等于定点和的位数在任一侧扩展至少加法操作数的尾数的大小;和
·加法器,被配置为无损失地将定点和与减小的动态范围的固定点数相加。
3.根据权利要求2所述的运算器,包括舍入和归一化电路,被配置为将加法器结果转换成以第二精度格式编码的浮点数,从加法器结果的最高有效位取得尾数,从加法器结果的剩余位计算舍入,以及从加法器结果中最高有效位的位置确定指数。
4.根据权利要求3所述的运算器,其中:
·减小的动态范围的固定点数向右扩展至少等于加法操作数的尾数大小的位数;和
·舍入电路使用减小的动态范围的固定点数的扩展位来计算舍入。
5.根据权利要求3所述的运算器,被配置为当加法操作数的指数超过减小的动态范围的固定点数的容量时,作为结果提供加法操作数。
6.一种计算二进制数的点积的方法,包括以下步骤:
·并行计算多个乘法,每个乘法来自以第一精度格式编码的浮点数的两个被乘数;
·基于每个乘法的被乘数的指数,将相应乘法的结果转换成具有足够位数以覆盖乘法的整个动态范围的相应固定点数;和
·无损失地将从乘法产生的固定点数相加,以产生固定点数的格式的和。
7.根据权利要求6所述的方法,还包括以下步骤:
·接收以具有比第一精度格式更高精度的第二精度格式编码的浮点加法操作数;
·基于加法操作数的指数,将加法操作数转换成具有相对于加法操作数的动态范围的减小的动态范围的固定点数,该固定点数的位数等于定点和的位数在两侧扩展至少加法操作数的尾数的大小;和
·无损失地将固定点和与减小的动态范围的固定点数相加。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1906887 | 2019-06-25 | ||
FR1906887A FR3097993B1 (fr) | 2019-06-25 | 2019-06-25 | Opérateur de produit scalaire de nombres à virgule flottante réalisant un arrondi correct |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112130803A true CN112130803A (zh) | 2020-12-25 |
Family
ID=68987763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010578649.7A Pending CN112130803A (zh) | 2019-06-25 | 2020-06-23 | 具有正确舍入的浮点点积运算器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11294627B2 (zh) |
EP (1) | EP3757756A1 (zh) |
CN (1) | CN112130803A (zh) |
FR (1) | FR3097993B1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11663000B2 (en) | 2020-01-07 | 2023-05-30 | SK Hynix Inc. | Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator |
US20220229633A1 (en) | 2020-01-07 | 2022-07-21 | SK Hynix Inc. | Multiplication and accumulation(mac) operator and processing-in-memory (pim) device including the mac operator |
TW202141290A (zh) | 2020-01-07 | 2021-11-01 | 韓商愛思開海力士有限公司 | 記憶體中處理(pim)系統和pim系統的操作方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2412986B (en) | 2001-03-14 | 2005-11-30 | Micron Technology Inc | Arithmetic pipeline |
TWI235948B (en) * | 2004-02-11 | 2005-07-11 | Via Tech Inc | Accumulatively adding device and method |
FR2974645A1 (fr) * | 2011-04-28 | 2012-11-02 | Kalray | Operateur de multiplication et addition fusionnees a precision mixte |
US9298082B2 (en) | 2013-12-25 | 2016-03-29 | Shenzhen China Star Optoelectronics Technology Co., Ltd. | Mask plate, exposure method thereof and liquid crystal display panel including the same |
US10216479B2 (en) * | 2016-12-06 | 2019-02-26 | Arm Limited | Apparatus and method for performing arithmetic operations to accumulate floating-point numbers |
US10474458B2 (en) * | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US10643297B2 (en) * | 2017-05-05 | 2020-05-05 | Intel Corporation | Dynamic precision management for integer deep learning primitives |
US10338919B2 (en) | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
US10747502B2 (en) * | 2018-09-19 | 2020-08-18 | Xilinx, Inc. | Multiply and accumulate circuit |
US20210263993A1 (en) * | 2018-09-27 | 2021-08-26 | Intel Corporation | Apparatuses and methods to accelerate matrix multiplication |
-
2019
- 2019-06-25 FR FR1906887A patent/FR3097993B1/fr active Active
-
2020
- 2020-06-09 EP EP20178996.3A patent/EP3757756A1/fr active Pending
- 2020-06-23 CN CN202010578649.7A patent/CN112130803A/zh active Pending
- 2020-06-25 US US16/946,526 patent/US11294627B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US11294627B2 (en) | 2022-04-05 |
FR3097993B1 (fr) | 2021-10-22 |
US20200409661A1 (en) | 2020-12-31 |
FR3097993A1 (fr) | 2021-01-01 |
EP3757756A1 (fr) | 2020-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8694572B2 (en) | Decimal floating-point fused multiply-add unit | |
US6732134B1 (en) | Handler for floating-point denormalized numbers | |
US6631392B1 (en) | Method and apparatus for predicting floating-point exceptions | |
CN112130803A (zh) | 具有正确舍入的浮点点积运算器 | |
US20120215823A1 (en) | Apparatus and method for performing floating point addition | |
US8463834B2 (en) | Floating point multiplier with first and second partial product shifting circuitry for result alignment | |
US20070266072A1 (en) | Method and apparatus for decimal number multiplication using hardware for binary number operations | |
US6996596B1 (en) | Floating-point processor with operating mode having improved accuracy and high performance | |
US9256397B2 (en) | Fused multiply-adder with booth-encoding | |
JPH02294820A (ja) | 浮動小数点数演算処理装置および演算処理方法 | |
US5548545A (en) | Floating point exception prediction for compound operations and variable precision using an intermediate exponent bus | |
US6988119B2 (en) | Fast single precision floating point accumulator using base 32 system | |
US20170293471A1 (en) | Arithmetic units and related converters | |
US20230053261A1 (en) | Techniques for fast dot-product computation | |
CN112241291A (zh) | 用于指数函数实施的浮点单元 | |
CN112130804A (zh) | 具有正确舍入的混合精度浮点数的融合乘加运算器 | |
US9430190B2 (en) | Fused multiply add pipeline | |
US7814138B2 (en) | Method and apparatus for decimal number addition using hardware for binary number operations | |
USH1222H (en) | Apparatus for determining sticky bit value in arithmetic operations | |
KR20170138143A (ko) | 단일 곱셈-누산 방법 및 장치 | |
Boldo et al. | Some functions computable with a fused-mac | |
US20200133633A1 (en) | Arithmetic processing apparatus and controlling method therefor | |
US6044391A (en) | Method of generating the sticky-bit from the input operands | |
US7640286B2 (en) | Data processing apparatus and method for performing floating point multiplication | |
US20230333812A1 (en) | Method and system for processing floating point numbers |
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 |