CN111752526A - 浮点相加 - Google Patents

浮点相加 Download PDF

Info

Publication number
CN111752526A
CN111752526A CN202010201747.9A CN202010201747A CN111752526A CN 111752526 A CN111752526 A CN 111752526A CN 202010201747 A CN202010201747 A CN 202010201747A CN 111752526 A CN111752526 A CN 111752526A
Authority
CN
China
Prior art keywords
operand
floating
point
rounding
exponent
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
CN202010201747.9A
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.)
ARM Ltd
Original Assignee
ARM Ltd
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 ARM Ltd filed Critical ARM Ltd
Publication of CN111752526A publication Critical patent/CN111752526A/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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Abstract

本申请公开了浮点相加。提供了浮点相加电路,用于对第一浮点操作数和第二浮点操作数进行相加,对第一浮点操作数和第二浮点操作数各自包括有效位和指数。对齐移位电路基于指数差对较小操作数有效位进行移位,以与较大操作数有效位对齐。增量电路生成较大操作数有效位的备选版本,每个版本基于应用于较大操作数有效位的不同舍入增量。由相加电路生成多个候选和值,每个候选和值表示移位的较小操作数有效位与较大操作数有效位的相应替代版本中的一个之和。选择候选和值中的一个作为第一浮点操作数和第二浮点操作数相加的舍入结果。这允许更快地执行浮点加和,因为舍入增量的延迟可以隐藏在对齐移位延迟的阴影中。

Description

浮点相加
技术领域
本技术涉及数据处理领域。更具体地,涉及浮点相加电路。
背景技术
数据处理装置可以提供对以浮点表示法所表示的数字的处理支持。在浮点表示法中,数字用有效位1.F、指数E和符号位S表示。符号位S表示浮点数是正还是负。有效位1.F表示浮点数的有效位数。指数E表示基点(也称为二进制点)相对于有效位的位置。因此,通过改变指数的值,基点可以在有效位内左右浮动,使得对于预定的位数,浮点表示法可以表示比基点在有效位内具有固定位置的定点表示法更宽的数字范围。然而,使用浮点表示法可能导致执行相加的复杂性增加,这是因为例如:在将具有不同指数的两个浮点数相加时,需要基于指数之间的差在相加之前对齐浮点数的有效位。此外,由于某些位用于存储指数,因此可以使用浮点数表示的额外范围是以降低精度为代价的。有时,浮点运算操作可能生成具有比用于有效位的位数更多的有效位的结果。如果发生这种情况,则结果可以被舍入为可以使用可用有效位数表示的值。对齐和舍入都可能在执行相加时引入额外的延迟。
发明内容
至少一些示例提供了浮点相加电路,用于对第一浮点操作数和第二浮点操作数进行相加,第一浮点操作数和第二浮点操作数各自包括有效位和指数;该浮点相加电路包括:
对齐移位电路,该对其移位电路用于基于表示第一浮点操作数和第二浮点操作数的指数之间的差的指数差,对较小操作数有效位进行移位,以将较小操作数有效位与较大操作数有效位对齐,其中,较小操作数有效位是第一浮点操作数和第二浮点操作数中具有较小指数的那个操作数的有效位,较大操作数有效位是第一浮点操作数和第二浮点操作数中具有较大指数的那个操作数的有效位;
增量电路,该增量电路用于生成较大操作数有效位的多个替代版本,其中,较大操作数有效位的每个替代版本基于应用于较大操作数有效位的不同舍入增量;
多个相加电路,该多个相加电路用于生成多个候选和值,其中,每个候选和值表示由对齐移位电路生成的移位的较小操作数有效位和由增量电路生成的较大操作数有效位的多个替代版本中的各个版本的和;以及
选择电路,该选择电路用于选择由多个相加电路生成的多个候选和值中的一个候选和值,其中,所选择的和值表示对第一浮点操作数和第二浮点操作数进行相加的舍入结果。
至少一些示例提供了浮点相加电路,用于对第一浮点操作数和第二浮点操作数进行相加,其中第一浮点操作数和第二浮点操作数各自包括有效位和指数;该浮点相加电路包括:
用于基于表示第一浮点操作数和第二浮点操作数的指数之间的差的指数差,对较小操作数有效位进行移位,以将较小操作数有效位与较大操作数有效位对齐的装置,其中,较小操作数有效位是第一浮点操作数和第二浮点操作数中具有较小指数的那个操作数的有效位,较大操作数有效位是第一浮点操作数和第二浮点操作数中具有较大指数的那个操作数的有效位;
用于生成较大操作数有效位的多个替代版本的装置,其中,较大操作数有效位的每个替代版本基于应用于较大操作数有效位的不同舍入增量;
用于生成多个候选和值的多个装置,其中,每个候选和值表示由对齐移位电路生成的移位的较小操作数有效位和由增量电路生成的较大操作数有效位的多个替代版本中的各个版本的和;以及
用于选择由多个相加电路生成的多个候选和值中的一个候选和值的装置,其中,所选择的和值表示对第一浮点操作数和第二浮点操作数进行相加的舍入结果。
至少一些示例提供了一种用于对第一浮点操作数和第二浮点操作数进行相加的方法,第一浮点操作数和第二浮点操作数包括有效位和指数;该方法包括:
基于表示第一浮点操作数和第二浮点操作数的指数之间的差的指数差,对较小操作数有效位进行移位,以将较小操作数有效位与较大操作数有效位对齐,其中,较小操作数有效位是第一浮点操作数和第二浮点操作数中具有较小指数的那个操作数的有效位,较大操作数有效位是第一浮点操作数和第二浮点操作数中具有较大指数的那个操作数的有效位;
生成较大操作数有效位的多个替代版本,其中,较大操作数有效位的每个替代版本基于应用于较大操作数有效位的不同舍入增量;
执行多个相加以生成多个候选和值,其中,每个候选和值表示由对齐移位电路生成的移位的较小操作数有效位和由增量电路生成的较大操作数有效位的多个替代版本中的各个版本的和;以及
选择由多个相加电路生成的多个候选和值中的一个候选和值,其中,所选择的和值表示对第一浮点操作数和第二浮点操作数进行相加的舍入结果。
附图说明
通过下面对示例的描述,本技术的其他方面、特征和优点将变得显而易见,对示例的描述应结合以下附图来阅读。
图1示意性地示出了数据处理装置的示例;
图2示出了浮点相加单元的一部分;
图3更详细地示出了浮点相加单元的远路径电路;
图4更详细地示出了远路径电路逻辑的部分;以及
图5是示出了为远路径处理相加的方法的流程图。
具体实施方式
提供了浮点相加电路,用于将第一浮点操作数和第二浮点操作数相加,第一浮点操作数和第二浮点操作数各自包括有效位和指数。浮点相加电路具有对齐移位电路,该对齐移位电路用于将较小操作数有效位(第一浮点操作数和第二浮点操作数中指数较小的一个的有效位)移位一定数量的位位置,以将较小操作数有效位与较大操作数有效位(第一浮点操作数和第二浮点操作数中指数较大的另一个的有效位)对齐。用于对齐移位的位数可取决于指数差(第一浮点操作数和第二浮点操作数的指数之间的差)。
在用于处理浮点相加的一种方法中,在通过应用移位而对齐操作数之后,移位的较小操作数有效位与较大操作数有效位相加,以生成求和结果。然后通过以下方式来应用舍入:首先基于移位器移出较小操作数有效位的位和求和结果的最低有效位来确定是否需要舍入增量,然后如果确定需要舍入增量,则将舍入增量与求和结果相加。因此,在这种方法中,较小操作数有效位的对齐移位、较大操作数有效位和对齐的较小操作数有效位的相加以及舍入增量加法都将按顺序进行。
然而,越来越希望通过使处理器能够在更高的时钟频率下操作来提高性能。随着时钟频率的增加,在将执行浮点相加所需的所有工作设置到单个时钟周期中的挑战越来越大。一般地,电路设计人员可以选择降低时钟频率,在这种情况下,由于具有较不紧张时间约束的其他处理操作将减慢,所以会对性能造成影响;或者选择在多个时钟周期上执行浮点相加,这可能会降低浮点相加的性能,因为浮点相加在某些软件应用中比较常见,从而可能会对性能产生重大影响。在实践中,典型的浮点相加单元将使用第二种方法,并跨多个时钟周期执行浮点相加,使得可以使用更高的时钟频率来避免使需要较少电路逻辑深度的其他操作延迟。
发明人认识到,用于对较小操作数有效位进行移位的对齐移位相对较慢,并且在执行移位时,较大操作数有效位可以不需要大量处理。此外,发明人认识到,在应用舍入增量之前,不必等到较大操作数有效位和移位的较小操作数有效位的最终和可用。相反,在将较大操作数有效位加到较小操作数有效位之前,可以将舍入增量应用于较大操作数有效位,使得可以将与添加舍入增量相关联的延迟隐藏在与较小操作数有效位的对齐移位相关联的延迟的阴影中。
这种方法可能被认为是反直觉的,因为在移位的较小操作数有效位和较大操作数有效位与移位的较小操作数有效位之和可用之前,可能根本不知道是否需要舍入增量。然而,这可以通过以下方式来解决:生成较大操作数有效位的两个或更多个替代版本,其中每个版本是基于不同的舍入增量的;然后将较大操作数有效位的相应版本中每个版本加到移位的较小操作数有效位,以产生多个候选和值。然后,选择电路可以在候选和值之间进行选择,以确定应将哪个值用作表示将第一浮点操作数与第二浮点操作数相加的舍入结果的最终结果。
因此,浮点相加电路具有增量电路(incrementing circuitry),该增量电路被提供用于生成较大操作数有效位的两个或更多个替代版本,每个版本是基于应用于较大操作数有效位的不同舍入增量的。提供两个或更多个相加电路以生成两个或更多个候选和值。每个候选和值表示由对齐移位电路生成的移位的较小操作数有效位与由增量电路生成的较大操作数有效位的替代版本中的一个相应版本的和。选择电路选择由相加电路生成的候选和值中的一个候选和值,以提供将第一浮点操作数和第二浮点操作数相加的舍入结果。
因此,通过这种方法,可以更快地获得舍入结果,从而可以在单个时钟周期内(即使在相对较高的时钟频率下)执行涉及对齐有效位和舍入的浮点相加,而在其他情况下这可能不实际。这会对性能产生重大影响。
增量电路可以执行至少一次相加,以生成较大操作数有效位的替代版本。每次相加都可以将相应的舍入增量加到较大操作数有效位。增量电路可以与由对齐移位电路执行对较小操作数有效位的移位的至少一部分并行地执行(一次或多次)增量相加。因此,这避免了在相加电路生成对齐有效位的和之后产生舍入相加的延迟,从而提高了性能。
在一些示例中,较大操作数有效位的替代版本可以包括:基于0的舍入增量的第一版本、基于1的舍入增量的第二版本。这些版本可以分别对应于不需要舍入增量和需要舍入增量的情况。
然而,在实践中,对齐的较小操作数有效位和较大操作数有效位之和也可能导致溢出,在这种情况下,结果的标准化可导致最高有效位处于比不存在溢出时更高的位置,在这种情况下,需要比不存在溢出时的位位置高一位应用舍入增量。为了避免需要在相应的相加电路计算出较小操作数有效位和较大操作数有效位之和之后执行移位或额外相加,可以生成较大操作数有效位的第三版本,该第三版本的舍入增量为2,从而有效地表示将舍入增量加到比非溢出情况时的位位置高一位的位位置处的相加。因此,较大操作数有效位的各个替代版本可以包括:基于0的舍入增量的第一版本、基于1的舍入增量的第二版本、以及基于2的舍入增量的第三版本。通过计算较大操作数有效位的每个版本与较小操作数有效位的和,则可能需要的每个可能的舍入结果值已经由多个相加电路生成,从而选择电路可以简单地选择这些值中的一个,而不需要额外的相加来舍入。
因此,由于较大操作数有效位的第一版本是基于0的舍入增量的,因此可以理解,第一版本与较大操作数有效位的输入值完全相同。因此,生成第一版本不需要增量电路进行相加(较大操作数有效位可以直接传递到相应的相加电路)。然而,增量电路执行相加以生成第二版本或第三版本。加入舍入增量的延迟与对齐移位延迟并行生成,从而提高性能。
选择电路可以基于舍入状态标志在候选和值之间进行选择,该舍入状态标志可以提供关于在对齐移位中移出较小操作数有效位的位的值和/或求和结果的最低有效位的信息。对于典型的浮点加法器,通常在对较小操作数有效位执行对齐移位之后,基于移位器移出的位来确定舍入状态标志。
然而,在下面讨论的方法中,舍入状态确定电路可以基于较小操作数有效位的未移位版本来确定舍入状态标志的子集。这意味着舍入状态标志子集的确定的至少一部分可以与由对齐移位电路执行对较小操作数有效位的移位的至少一部分并行地执行,这通过减少相加操作的总体延迟来提高性能。例如,舍入状态确定电路可以基于第一浮点操作数和第二浮点操作数的指数之间的差来确定至少一个掩码。舍入状态确定电路可以将至少一个掩码应用于较小操作数有效位的未移位版本,以确定舍入状态标志的子集。
特别地,可以使用这样的掩码来确定的舍入状态标志的子集可以包括至少一个保护标志和至少一个粘性标志。保护标志可以表示在执行对齐移位时从较小操作数有效位移出的最低有效位的位值(即,在成为移位器较小操作数有效位的最低有效位的位的右边一位的位)。
舍入状态标志还可以包括至少一个最低有效位标志,该标志基于由相加电路中一个执行的相加来确定。最低有效位标志可以对应于
将较大操作数有效位和移位的较小操作数有效位相加(根据基于0的舍入增量的较大操作数有效位的第一版本)得到的总和中最低有效位的值。虽然最低有效位标志不能通过掩蔽来确定,但它通常在相加电路的相加的早期仍是可用的,因为相加电路倾向于比较高有效位更早地计算较低的位,因此,这可以提供足够的时间来控制基于最低有效位标志的候选和值之间的舍入选择。此外,还可以基于相加电路中的一个执行的相加来确定在溢出的情况下要使用的保护标志,因为它可能等于非溢出情况下的最低有效位标志。
如上所述,基于较大操作数有效位和移位的较小操作数有效位执行的相加可能导致溢出。因此,选择电路不仅可以基于舍入状态标志,还可以基于指示第一浮点操作数和第二浮点操作数的对齐的有效位的相加是否导致溢出的溢出指示,在候选和值之间进行选择。例如,如果存在溢出,并且需要舍入增量,则可以由选择电路选择基于较大操作数有效位的第三版本的候选和值,而如果不存在溢出,并且需要舍入增量,可以选择基于较大操作数有效位的第二版本的候选和值。
是否需要舍入增量可以针对溢出和非溢出情况单独确定。为了帮助实现这一点,舍入状态确定电路可以与相加电路中的至少一个一起确定假定不存在溢出时的非溢出舍入状态标志集,以及假定存在溢出时的溢出舍入状态标志集。在确定发生溢出的结果可用之前,可以确定非溢出舍入状态标志集和溢出舍入状态标志集二者。同样,这有助于提高性能,因为通常,确定是否发生了溢出必须等到相加电路执行的相加的最有效位可用,而这可能相对较慢。因此,在计算相关的舍入状态标志之前,等待获知是否发生了溢出会导致明显的延迟。通过针对溢出情况和非溢出情况确定单独的舍入状态标志集,可以允许与其他方式中的可能情况相比,在候选和值之间更早地进行选择。溢出/非溢出保护和粘性标志可通过掩蔽来计算(如上所述),溢出/非溢出最低有效位标志可计算为较大操作数有效位(第一版本)和移位的较小操作数有效位的相加的结果的最低两位。
候选和值之间的选择可以分为几个阶段,其中执行三个单独的选择。第一舍入选择电路可以基于假定不存在溢出而生成的非溢出舍入状态标志集合来选择第一候选和值和第二候选和值中的一个。第二舍入选择电路可以基于假设存在溢出而确定的溢出舍入状态标志集,在第一候选和值和第三候选和值之间进行选择。第一候选和值、第二候选和值和第三候选和值可以是基于上述较大操作数有效位的第一版本、第二版本和第三版本的和值,其舍入增量分别为0、1或2。第一舍入选择电路和第二舍入选择电路可以彼此并行地工作,并且与溢出指示本身的确定的一部分并行地工作。随后,当溢出指示可用时,溢出选择电路基于溢出指示在第一舍入选择电路和第二舍入选择电路的输出之间进行选择,而溢出选择电路所选择的输出可以用作对第一浮点操作数/第二浮点操作数进行相加的舍入结果。与进行3向选择相比,此方法提高了性能,因为舍入选择在溢出选择之前已知。由于控制逻辑(选择是基于舍入和溢出的逻辑功能的,并且选择逻辑比舍入和溢出输入中最慢的那个更慢)和较大的3路多路复用器,组合舍入和溢出多路选择逻辑将产生延迟。
如上所述,用于将较小操作数有效位与较大操作数有效位对齐的对齐移位可能是浮点相加过程中相对较慢的部分。为了提高对齐移位的性能,对齐移位电路可以在确定第一浮点操作数和第二浮点操作数中哪一个具有较小的指数的结果可用之前开始移动第一浮点操作数和第二浮点操作数的有效位。例如,指数差可以通过从一个指数中减去另一个指数来确定,并且由于减法通常可以使用进位传递加法器来执行,指数差的低位可以在高位之前可用,因为高位的计算要等到低位的进位传递到高位。哪个操作数具有较小的指数可以基于指数差的最有效位来确定,因此,只有在已确定指数差的较低部分之后才能确定。因此,为了提高性能,可以根据指数差的低位部分开始对每个浮点的有效位的移位,而无需知道实际需要移位的操作数,然后一旦知道哪个操作数的指数较小,就可以选择相应的部分移位的有效位进行进一步移位。
因此,对齐移位电路可以包括:第一移位电路,该第一移位电路用于基于第一指数差的低位部分来对第一浮点操作数的有效位进行移位,从而生成第一移位值,其中,第一指数差对应于从第二浮点操作数的指数减去第一浮点操作数的指数的结果;第二移位电路,该第二移位电路用于基于第二指数差的低位部分来对第二浮点操作数的有效位进行移位,从而生成第二移位值,其中,第二指数差对应于从第一浮点操作数的指数减去第二浮点操作数的指数的结果;有效位选择电路,该有效位选择电路用于当第一浮点操作数具有较小的指数时选择第一移位值,当第二浮点操作数具有较小的指数时选择第二移位值;以及第三移位电路,该第三移位电路用于基于第一指数差和第二指数差中对应的一个差值的高位部分,对由有效位选择电路所选择的第一移位值和第二移位值中的一个进行移位。
因此,通过这种方法,第一移位电路和第二移位电路的延迟可以与确定第一浮点操作数和第二浮点操作数中的哪个具有较小的指数并行地发生,这意味着当已确定哪个操作数具有较小的指数时,超过该时间点的延迟较低。通过这种方法,第三移位电路可以与增量电路生成较大操作数有效位的替代版本并行地执行移位。
数据处理设备可以包括上面讨论的浮点相加电路。上面讨论的浮点相加电路可能不是为添加浮点操作数提供的唯一处理路径。上面讨论的浮点相加电路可用于远路径浮点相加(类似符号操作数的相加、非类似符号操作数的减法、指数差大于1的非类似符号操作数的相加,或指数差大于1的类似符号操作数的减法)。可提供单独的近路径相加电路,用于处理指数差为0或1的非类似符号操作数的相加或指数差为0或1的类似符号操作数的减法。对于近路径相加电路,不需要多位对齐移位,但可能需要标准化移位以处理结果中的前导零,并且结果可能为次正规值。因此,包括上述对齐移位电路、增量电路、相加电路和选择电路的浮点相加电路可用于数据处理装置中的浮点相加单元的远路径处理电路。
浮点表示法
浮点(FP)是一种使用少量位来近似实际数字的有效方法。IEEE 754-2008FP标准为FP数提出了多种不同的格式,而ARM关注的是二进制64(也称为双精度,或DP)、二进制32(也称为单精度,或SP)和二进制16(也称为半精度,或HP)。数字64、32和16是指每种格式所需的位数。
FP数与科学课上教的“科学记数法”很相似,其中我们写的是-2.0×106,而不是-2,000,000。该数的各部分为:符号(在本示例中为负数)、有效位(2.0)、指数的基数(10)和指数(6)。所有这些部分在FP数中都有类似物,虽然有区别,但其最重要之处为各组成部分以二进制数储存,而指数的基数总是2。
更准确地说,FP数由符号位、一些有偏指数位、以及一些小数位组成。一些感兴趣的FP格式提供以下位:
格式 符号 指数 小数 指数偏位
DP[63:0] 63 62:52(11位) 51:0(52位) 1023
SP[31:0] 31 30:23(8位) 22:0(23位) 127
HP[15:0] 15 14:10(5位) 9:0(10位) 15
负数的符号是1,正数的符号是0。包括零在内的每一个数字都有符号。
指数是有偏的,这意味着真实指数与存储在该数字中的指数不同。例如,有偏SP指数的长度为8位,范围从0到255。指数0和255是特殊情况,而所有其他指数都有127的偏差,这意味着真实指数比有偏指数少127。最小的有偏指数是1,对应于-126的真实指数。最大有偏指数为254,对应于127的真实指数。HP和DP指数的工作方式相同,其具有如上表所示的偏差。
SP指数255(或DP指数2047或HP指数31)经保留用于无穷大和称为NaN(非数字)的特殊符号。无穷大(可以是正的也可以是负的)的小数为零。指数为255且小数非零的任何数都是NaN。无穷大提供了饱和值,所以它实际上意味着类似于“这个计算产生的数字大于我们可以此格式所表示的数字”的情况。对于在实数上没有数学定义的运算,NaN对于未在实数上数学定义的操作将返回,例如零除数或者取负数的平方根。
在任何一种格式中,指数零都经保留用于次正规数和零。正规数表示值:-1符号×1.小数×2e,其中e是根据有偏指数计算的真实指数。“1.小数”这项被称为有效位,1不作为FP数的一部分存储,而是从指数中推断出来。除0和最大指数外,所有指数都表示“1.小数”形式的有效位。指数0表示的有效位形式为“0.小数”,以及表示针对给定格式的等于1-偏差的真实指数。这样的数字被称为次正规(历史上这些数字被称为异常,但现代用法更倾向于术语次正规)。指数和小数都等于零的数字是零。
下表有一些HP格式的示例数。这些项是二进制的,添加了“_”字符以提高可读性。请注意,次正规项(表的第4行,其指数为零)生成的有效位与前一行的正常项不同。
符号 5位指数 10位小数 11位有效位
0 01111 00_0000_0000 100_0000_0000 1.0×2<sup>0</sup>
1 01110 10_0000_0000 110_0000_0000 -1.1×2<sup>-1</sup>
0 00001 10_0000_0000 110_0000_0000 1.1×2<sup>-14</sup>
0 00000 10_0000_0000 010_0000_0000 0.1×2<sup>-14</sup>
1 11111 00_0000_0000 -无限大
0 11111 00_1111_0011 NaN
FP实施的复杂性的大部分是归因于次正规的,因此其通常通过微码或软件处置。与软件或微码实施方式相比,处置硬件中的次正规的处理电路系统可将这些运算加速10至100倍。
整数、定点、浮点
处置符号的FP方式称为符号量值,并且该方式不同于通常整数储存于计算机中的方式(二的补码)。在符号量值表示法中,相同数目的正负版本仅符号位不同。4位符号量值整数(由符号位及3个有效位数字节成)将令加减一表示为:
+1=0001
-1=1001
在二的补码表示中,n位整数i是通过二进制n+1位值2n+i的低阶n位表示的,因此4位二的补码整数将令加减一表示为:
+1=0001
-1=1111
二的补码格式实际上对带符号的整数是通用的,因为该格式简化了计算机运算。
定点数看起来完全像一个整数,但实际上其表示具有一定数量分数位的值。传感器数据通常为定点格式,并且在广泛采用FP之前,存在大量已编写的定点软件。定点数字的使用非常繁琐,因为程序员必须追踪“二进制点”,亦即数字的整数与分数部分之间的分隔符,并且还必须不断将数字移位以保持位在正确的位置。FP数字则没有此困难,因此期望能够在定点数字和FP数字之间转换。能够进行转换表示我们仍可使用定点软件及数据,但当编写新的软件时不限于定点。
FP数的舍入
IEEE-754标准要求对大多数FP运算进行计算,就好像该运算是在无限制的范围及精度下进行的,且随后经舍入以适合FP数。若计算与FP数完全匹配,则该值始终被返回,当通常该计算产生位于两个连续浮点数之间的值。舍入为选择应返回两个连续数中哪一者的过程。
存在称为舍入模式的多个舍入方式;六个该等舍入模式如下:
模式 定义
RNE 最近舍入,取偶数值 取最接近的值,或若两个值同样接近,则取偶数值
RNA 最近舍入,取较远值 取最接近的值,或若两个值同样接近,则取离零最远的值
RZ 向零舍入 取最接近零的值
RP 向正无限大舍入 取最接近正无限大的值
RM 向负无限大舍入 取最接近负无限大的值
RX 向奇数舍入 取奇数值
该定义未告诉我们如何以任何实际方式进行取舍。一种常见的实施方式为进行运算,查找截断值(亦即,适合FP格式的值)以及所有剩余位,且随后在满足某些条件的情况下调整截断值。所有计算全部是基于:
L(最低)截断值的最低有效位
G(保护)下一最高有效位(亦即,未包括在截断中的第一位)
S(黏性)并非截断的一部分的所有剩余位的逻辑或。
给定这三个值及截断值,我们可根据下表(表1)计算经正确舍入的值:
表1
例如,考虑将两个4位有效位数相乘,且随后舍入至4位有效位数。
sig1=1011(十进制11)
sig2=0111(十进制7)
将收益相乘
sig1×sig2=1001_101(十进制77)
L Gss
模式 改变至截断值
RNE 若(L&G)|(G&S),则递增
RNA 若G,则递增
RZ
RP 若为正数&(G|S),则递增
RM 若为负数&(G|S),则递增
RX 若G|S,则设置L
经截断的4位结果的最低有效位被标记为L、下一位G,并且S为标记为s(即,S=0|1=1)的剩余位的逻辑或。为了舍入,我们根据上表中的舍入模式及计算来调整我们的4位结果(1001)。因此例如在RNA舍入中,G经设定,因此我们返回1001+1=1010。对于RX舍入,G|S为真,因此我们将L设定为1(其已经为1,因此在该情况下无任何变化)并且返回1001。
示例
图1示意性地示出了数据处理装置2的示例。该数据处理装置具有包括多个流水线阶段的处理流水线4。在本示例中,流水线阶段包括提取阶段6,用于从指令缓存8提取指令;解码阶段10,用于解码提取程序指令,以生成要由流水线的其余结算处理的微操作;发出阶段12,用于检查寄存器文件14中是否微操作所需的操作数是否可用,并在给定微操作所需的操作数可用时发出微操作以供执行;执行阶段16,用于执行对应于微操作的数据处理操作,通过处理从寄存器文件14读取的操作数来生成结果值;以及写回阶段18,用于将处理结果写入寄存器文件14。应理解,这仅仅是可能的流水线体系结构的一个示例,并且其他系统可以具有附加阶段或不同配置的阶段。例如,在无序处理器中,可以包括附加的寄存器重命名阶段,用于将由程序指令或微操作指定的体系结构寄存器映射到识别寄存器文件14中的物理寄存器的物理寄存器说明符。
执行阶段16包括多个处理单元,以用于执行不同类别的处理操作。例如,执行单元可以包括标量算术/逻辑单元(ALU)20,该算术/逻辑单元(ALU)20用于对从标量寄存器文件21读取的标量操作数执行算术或逻辑操作;浮点单元22,用于对浮点值执行操作;分支单元24,用于评估分支操作的结果并相应地调整表示当前执行点的程序计数器;加载/存储单元28,用于执行加载/存储操作以访问存储器系统8、30、32、34中的数据。在本示例中,存储器系统包括一级数据缓存30、一级指令缓存8、共享二级缓存32和主系统存储器34。可以理解,这只是可能的存储器层次结构的一个示例,并且可以提供缓存的其他安排。执行阶段16中所示的特定类型的处理单元20到28只是一个示例,其他实现方式可以具有不同的处理单元集合,或者可以包括相同类型的处理单元的多个实例,从而可以并行地处理相同类型的多个微操作。应理解,图1仅仅是可能的处理器流水线体系结构的一些组件的简化表示,并且处理器可以包括出于简洁性而未示出的许多其他元件,例如分支预测机构或地址转换或存储器管理机构。
浮点单元22支持的一个操作可以是对两个操作数opa、opb的相加,opb、opb表示为浮点数。因此,浮点单元22可以包括如图2所示的浮点加法器40,其可以包括近路径处理电路42和远路径处理电路44,以及用于在近路径处理电路42和远路径处理电、44的输出之间进行选择的多路复用器或选择器46。浮点相加单元可以处理相加和减法运算二者。对于相加运算,如果两个浮点操作数opa、opb具有相同的符号(均为正或均为负),则这是有效相加;而如果两个操作数具有不同的符号(一个为正,另一个为负),则这是有效减法。对于减法运算,如果两个操作数有不同的符号,则这实际上是相加;如果两个操作数有相同的符号,则这实际上是减法。远路径加法器或近路径加法器的选择取决于两个操作数的相对符号以及正在执行的指令是相加指令还是减法指令。下文中,类似符号相加(LSA)这样的术语是指有效相加运算,即两个操作数具有相同符号的相加运算或两个操作数具有不同符号的减法运算。术语非类似符号相加(USA)是指有效减法,即两个操作数具有不同符号的相加运算或两个操作数具有相同符号的减法运算。
近路径加法器42具有处理USA(其中两个操作数的指数相同或仅相差1)的特定逻辑。远路径加法器44用于LSA(不考虑指数差的大小)和指数差大于1的USA。因此,复用器46基于opa、opb的符号的比较,opa、opb的指数的比较以及请求了相加还是减法运算来选择近/远路径输出。
近路径逻辑42可以包括前导零计数器,用于处理和结果具有多个前导零的可能情况,其中,这些前导零需要通过移位来消除,以生成具有有效位1.F的标准化浮点值。此外,近路径电路逻辑42可以具有用于处理次正规输出的电路。在远路径加法器44中,可能不需要这样的前导零计数和次正规处理。任何已知的方法都可用于近路径加法器42。然而,可用于近路径加法器42的一种设计是由与本申请相同的申请人和发明人提交的美国专利申请15/793,063中描述的设计。US 15/793,063的内容通过引用整体并入本文。
下面将更详细地讨论远路径相加电路44的设计。远路径操作通常需要对齐,因为我们只能加或减表示2的相同幂次的位。所以如果我们要计算:
1.100×26–1.100×24
我们首先必须将较小操作数与较大的操作数对齐。我们是这样实现的:通过对较小操作数的有效位(并增加指数)向右移位直到两个指数相等,从而将问题转换为等价问题:
1.100×26–0.011×26
然后,我们完成有效位的相加或减法,执行一个数学上简单的(零位或一位)标准化,并对结果进行舍入。通常,远路径加法器首先将有效位对齐,将对齐的较小操作数有效位添加到较大操作数有效位,如果发生溢出,则执行标准化,并通过应用舍入增量来对结果进行舍入。然而,在现代处理器支持的时钟频率下,将所有这些工作打包到一个时钟周期中是非常困难的,因此在实践中,大多数远路径加法器需要多个周期来完成此操作。
图3示出了远路径相加电路44的一部分的示例。在此技术中,opa,opb的远路径相加可以通过以下操作更快地执行:将用于应用舍入增量的相加与较小操作数有效位的对齐移位并行地执行,基于可应用的每个可能的舍入增量(包括考虑溢出)生成若干候选和值,然后根据基于较小操作数有效位确定的舍入状态标志以及求和结果在候选和值之间进行选择。
因此,如图3所示,远路径加法器44可以包括对齐移位电路50、增量电路52、多个加法器电路54、选择电路56和舍入状态确定电路58。
对齐移位电路50将操作数opa、opb中具有较小指数的一个的有效位移位若干位位置(基于两个操作数的指数差确定),以将较小操作数有效位与较大操作数有效位对齐。标签“sigs”用于表示较小操作数有效位(即,sigs是opa、opb中指数较小的一个的有效位)。标签“sigl”用于指较大操作数有效位(即opa、opb中指数较大的另一个的有效位)。
与由对齐移位电路50执行的对齐移位(以生成移位的较小操作数有效位(移位sigs))并行地,增量电路52将0、1和2的不同舍入增量应用于较大操作数有效位sigl以生成sigl的多个替代版本60,这些替代版本被提供给各个加法器电路54。每个加法器电路54将移位的sigs添加到sigl的替代版本60中的相应的一个,以生成相应的候选和值62。因此,生成三个候选和值62,一个对应于sigl+sigs,一个对应于sigl+sigs+1,一个对应于sigl+sigs+2。
选择电路56基于以下条件在三个候选和值62之间进行选择:
(i)由舍入状态确定电路58使用未移位的较小操作数有效位确定的舍入状态信息的子集(溢出/非溢出情况下的保护标志和粘性标志(G,S));
(ii)由加法器电路54中的一个生成的舍入状态信息的另一子集(溢出/非溢出情况的最小(L)标志),该加法器电路54将sigs添加到基于舍入增量0的sigl的第一版本;以及
(iii)溢出指示63,其指示sigl和sigs的相加中是否有溢出。
由舍入状态确定电路58对G,S标志的确定可以基于对sigs的未移位版本进行掩蔽而与对齐移位50并行地执行,而不需要等待移位的结果。
因此,通过基于可能需要的所有舍入增量推测性地生成较大操作数有效位的多个替代版本,并生成较大操作数有效位的相应替代版本与移位的较小操作数有效位的多个候选和,这允许与舍入增量相加相关联的延迟隐藏在对齐移位的阴影中,以加快操作并使远路径相加逻辑更实际地适合于单个周期。这使得处理器整体上能够在更高的时钟频率下工作,而无需将浮点相加分为多个周期。
如图3所示,远路径加法器44还可以具有电路逻辑66,该电路逻辑66用于计算与opa、opb相加对应的结果值的符号S和指数E。对于LSA,在不存在溢出的情况下,结果指数E可以简单地等于两个操作数opa、opb中较大者的指数,而如果存在溢出,则结果指数等于较大操作数的指数加一。对于USA,非溢出指数是较大操作数的指数减去1,而溢出指数是较大操作数的指数。如果是类似符号相加的情况,则结果符号等于两个输入操作数的符号,如果是非类似符号相加的情况,则结果符号等于指数较大的操作数的符号。因此,符号/指数计算逻辑66的逻辑深度可能比有效位计算逻辑短得多。实际上,在给定的时钟频率下,有效位的生成在满足电路时间方面更为复杂,因此剩余的描述集中在有效位的生成上。任何已知的技术都可以用来计算结果的符号和指数。
图4更详细地示出了远路径加法器44内的有效位生成逻辑。在本示例中,远路径加法器44的输入是两个64位双精度(DP)FP数:opa[63:0]和opb[63:0],它们包括符号signa和signb、指数expa[10:0]和expb[10:0]以及小数fraca[51:0]和fracb[51:0]。我们通过在对应于相关指数是零(0)还是非零(1)的位的前面加上位来构造有效位siga[52:0]和sigb[52:0]。
对齐移位电路50将较小数字的有效位向右移位,使其与较大数字的有效位对齐。对齐偏移是由相应的指数差给出的,因此如果例如expa>expb,则我们将sigb向右移位expa-expb个位位置。有偏指数0和1实际上表示相同的指数,这是一个复杂的问题(有偏指数0表示小数非零时的次正规值),因此,如果指数为0,我们在计算指数差时替换指数1。
我们在不知道哪个数的指数较大的情况下开始对齐移位,所以我们实际上使用加法器70做了两个减法:expa-expb和expb-expa。这些减法的低阶位比高阶位更早可用,因此一旦expa-expb和expb-expa的低阶部分可用,第一移位电路72开始对siga进行移位(移位expb-expa个位位置),第二移位电路74开始对sigb进行移位(移位expa-expb个位位置),使得我们在知道哪个指数更大时,就得到部分移位的结果。不需要跟踪从有效位移位出的保护位和粘性位,并且移位出的位被简单地丢弃,因为在使用舍入状态确定电路58对较小操作数进行移位之前,我们将通过对较小操作数应用掩码来获得关于移位出的位的较早信息。我们还避免了针对零指数的校正移位,因为我们已将指数=0替换为指数=1。
一旦确定expa和expb中的哪一个较大,如果操作数opa具有较小的指数,则对齐移位单元50内的选择电路76选择第一移位电路72的输出(部分移位的siga),如果操作数opb具有较小的指数,则选择第二移位电路74的输出(部分移位的sigb)。siga和sigb中对应于较小指数的一个是较小操作数有效位sigs,另一个是较大的操作数sigl。然后,第三移位电路78基于相应的第一/第二指数差中的一个的高位部分,完成较小操作数有效位sig的对齐移位。即,如果sigs多路复用器76选择对siga进行部分移位,则第三移位电路78基于expb-expa的高位对sigs进行移位,而如果sigs多路复用器76选择对sigb进行部分移位,则第三移位电路78基于expa-expb的高位对sigs进行移位。
同时,多路复用器79一旦确定哪个操作数具有较大的指数,就选择较大操作数有效位sigl。注意,与sigs多路复用器76不同,sigl多路复用器79选择sigl的未移位版本,而不是由第一移位电路72/第二移位电路74生成的sigl的部分移位版本。
左移位器80、81分别设置在将sigl和移位的sigs传递到增量电路52和加法器电路54的信号路径上。这些左移位器在执行USA时应用1位左移位,而在执行LSA时不应用1位左移位。这样做是为了确保无论是执行LSA还是USA,有效位溢出都发生在同一位置,这使得检测溢出和处理溢出的舍入更加简单。此外,如果执行USA,sigs路径上的左移位器81反转sigs(而对于LSA的情况,则不反转sigs)。这是因为浮点有效位表示为符号-大小,而不是2的补码,因此为了提供USA,就需要对较小操作数求反,这是通过反转所有位并加1来完成的。通过基于正在执行LSA还是USA以及基于保护/粘性标志来控制每个加法器电路54的进位输入来处理1的相加。加法器电路54的进位对于LSA为零,对于在保护标志或粘性标志中设置了任何位的USA为零,对于保护和粘性位都为零的USA为一。这是因为我们需要为2的补码USA加1,但是添加的1加在移位出的位的末尾,所以只有当sigs的非反转版本的移位出的位全部为零(即,如果反转版本的移位出的位全部为1)时,添加的1才到达54位加法器。
因此,左移位器的输出(移位1位或不移位,取决于执行USA还是LSA)分别提供给增量电路52和加法器电路54。
同时,与基于哪个指数较大的有效位的对齐移位和选择并行地,舍入状态确定电路58确定保护标记g和粘性标记s,以用于确定是否应用舍入增量。多路复用器83基于expa和expb中哪个较小的确定,来选择sigs的未移位版本。
掩码生成电路84构造用于应用于sigs的未移位版本的掩码,首先构造指数差粘性掩码ediff_smask[54:0],该掩码具有一定数量的零,后面紧跟着d个拖尾1,其中d是指数差expl–exps(其中expl是expa和expb中的较大者,exps是expa和expb中的较小者)。掩码ediff_smask[54:0]有对应于每一位的掩码的1,该1最终将从较小操作数中移出。
期望避免需要移位器来生成掩码ediff_smask[54:0],因为这将导致等同于sigs移位的延迟,这将使起初通过掩蔽来计算保护/粘性标志的优点无效。对于DP浮点,指数差是包含位d10-d0的11位值d,而生成掩码的一种方法(其中较低的d位设置为1,所有其他位设置为0)使用根据以下逻辑设计的与(&)和或(|)门的组合(Emask[i]是ediff_smask[54:0]的位i的缩写):
Figure BDA0002419618470000201
Figure BDA0002419618470000211
因此,用组合逻辑而非移位器来生成指数差掩码,该生成可以更快。
有一点复杂的是,针对有效减法(非类似符号相加,或USA)的有效位如上文所述使用移位器80、81左移位1位位置,因此有效位溢出与有效相加(类似符号相加或LSA)发生在同一位置。此左移位由针对USA的ediff_smask的1位右移位进行补偿,使得即使当对有效位应用人为的1位左移位时,仍然可以选择正确的保护位。指数差掩码ediff_smask中的最高位“1”位表示保护位的位置,我们使用gmask找到它:
gmask0[53:0]=ediff_smask[53:0]^ediff_smask[54:1];
gmask[52:0]=({53{~usa_v1}}&f_gmask0[52:0])
|({53{usa_v1}}&f_gmask0[53:1]);
创建gmask0的XOR(^)定位第一个非零位,gmask mux在LSA(未移位)和USA(1位右移位)版本之间进行选择。
指数差掩码中剩余的“1”位表示用于形成粘性标志的移位出的位的位位置,因此通过将ediff_smask右移位一个附加位置,然后再次在USA和LSA版本之间进行选择来形成粘性掩码。
smask[52:0]=({53{~usa_v1}}&ediff_smask[53:1])
|({53{usa_v1}}&ediff_smask[54:2]);
因此,给出粘性位s(粘性舍入状态标志),通过将掩码应用于未移位的较小有效位sigs[52:0],并查看是否使用归约或(不是按位或,归约或结果对应于对同一二进制值中每个单独位被一起进行或运算,例如(位3|(位2|(位1|位0),等等)设置了任何位:
assign s=|(sigs_unshifted[52:0]&smask[52:0]);
在计算最后的粘性位时,我们不必担心操作是LSA还是USA,因为对于USA,移位出的位被无效。这意味着所有为零的移位出的位将保持为零(因为-0=0),而具有设置了1的移位出的位将保持为非零(因为-非零仍然为非零)。
保护比特有点更复杂。
raw_g=|(sigs_unshifted[52:0]&gmask[52:0]);
对于LSA,f_raw_g是保护位。但是,USA将该保护位反转,如果有低阶位进位,则再次反转。我们只在s为零的情况下得到这个进位,所以g由下式给出:
g_cin=~s&usa;
g=(raw_g^usa)^g_cin;
LSA或USA的高阶位都可以进位,我们称之为有效位溢出。其导致g和s出现在与非有效位溢出位置相比的左一位。这由位附加逻辑解释
ovfl_s=raw_g|s;
值ovfl_g(溢出情况下的保护标志)与未舍入和(sigs+sigl)的位0完全相同,并且由于该值生成的时间远早于该和的其余部分,因此我们不需要使用舍入确定电路58来预计算ovfl_g,而是,ovfl_g将可从加法器电路54获得,该加法器电路54对sigs和sigl进行相加。
给定两个低阶位的未舍入ovfl_l和l,我们可以用通常的方法精确地计算舍入(如上表1所示)。
下一个问题是舍入增量,这可能发生在非溢出情况(和+1)或溢出情况(和+2)。考虑到将逻辑深度拟合到单个时钟周期中的目的,以及相对较高的频率,在加法器电路54生成和之后,甚至对于(一个或多个)最终加法器前的3:2CSA,没有时间生成该附加增量,那么我们如何获得该增量?
答案是,应注意,当较小操作数被移位时,较大的操作数基本上什么也不做(不是完全不做,如上所述,在移位器80处,针对USA有一位左移位),但这是很早就完成的)。我们可以使用更长的较小操作数移位时间来在两个位置对更大的操作数进行增加,这样我们最终得到三个更大的操作数:sigl、sigl+1和sigl+2。这些增加的值与最终和的舍入位置完全对齐。因此,增量电路52包括两个加法器,一个用于确定sigl+1,另一个用于确定sigl+2。结果连同sigl的增加版本一起作为sigl的三个替代版本传递给加法器电路54。
三个加法器电路54计算三个最终和:
(1)sigl+移位的sigs
(2)sigl+1+移位的sigs
(3)sigl+2+移位的sigs
这些值中的一个是正确舍入的远路径和,选择电路56使用预计算的舍入信息(l、g、s、ovfl_l、ovfl_g、ovfl_s)以及溢出指示63来选择正确的答案。在这些舍入状态标志中,已由舍入状态确定电路58使用如上所述的掩码计算了g、s和ovfl_s。非溢出最低有效位标志(l)和溢出保护标志(ovfl_g)都等于加法器电路54中的一个所执行的sigl+移位的sigs求和的最低有效位,溢出最低有效位标志(l)等于sigl+移位的sigs求和的第二最低有效位。
事实上,舍入信息在我们知道是否发生有效位溢出之前就已经可用,因此选择电路实际上包括三个复用器:第一复用器90和第二复用器91(舍入选择电路)首先分别针对非溢出和溢出情选择未增加值和增加值。因此,如果基于所选择的舍入模式,舍入状态标志(l、g、s)的非溢出集指示根据上文表1不需要增量,则第一舍入选择电路90选择第一候选和值sigl+移位的sigs,如果针对当前选择的舍入模式,根据l、g、s,需要增量,则选择第二候选和值sigl+1+移位的sigs。如果对于当前选择的舍入模式,舍入状态标志(ovfl_l、ovfl_g、ovfl_s)的溢出集指示:根据表1所示的逻辑,不需要舍入增量,则第二舍入选择电路选择第一候选和值sigl+移位的sigs,如果舍入状态标志的溢出集指示针对所选舍入模式需要舍入增量,则选择第三候选和值sigl+2+移位的sigs。所选择的舍入模式可以在控制寄存器中指示,也可以在导致处理器执行浮点相加的指令指定的参数中指示。然后,第三复用器(溢出选择电路)92基于溢出指示63在第一复用器90和第二复用器91的输出之间进行选择。因此,如果溢出指示63指示发生了溢出,则使用第二复用器91的输出作为最终结果,而如果没有发生溢出,则选择第一复用器90的输出作为最终结果。如果舍入状态标志指示不需要增量,则溢出指示63等于sigl+移位的sigs和的高位;如果舍入状态标志指示需要增量,则溢出指示63等于sigl+移位的sigs和的高位。
图5是示出了使用图4的电路逻辑来处理远路径中操作数opa、opb的浮点相加的方法的流程图。在步骤100处,对齐移位电路基于相应指数差(expb–expa、expa–expb)的低位部分开始对操作数opa、opb的有效位进行移位。同时,在步骤102处,确定指数expa、expb中哪个较小。当已确定哪个操作数具有较小的指数时,然后在步骤104处,对齐移位电路50的复用器76选择较小操作数的有效位sigs的部分移位版本。并且,在步骤106处,复用器79选择较大操作数有效位sigl。此外,在步骤108处,舍入状态确定电路58开始基于指数差exp–exps生成舍入掩码,其中expl是expa和expb中较大指的数,exps是较小的指数。
在步骤110处,对齐移位电路50基于指数差expl–exps的高位继续对较小操作数有效位sigs进行移位,并且,在步骤112处,如果该操作是非类似符号相加,则移位器81应用额外的1位左移位,并且移位的较小操作数有效位也被反转以处理对较小操作数有效位的2的补码。
类似地,在步骤114处,如果操作是USA,则对较大操作数有效位sigl应用1位左移位(针对LSA,不对sigl执行移位)。在步骤116处,增量电路52分别生成对应于0、1和2的不同舍入增量的较大操作数有效位sigl的替代版本。较大操作数有效位sigl被简单无变化地传递以生成第一替代版本sigl,而分别基于1和2的舍入增量的第二替代版本和第三替代版本由增量电路52的进位传播加法器53生成。
在步骤118处,各个相加电路54各自将在步骤116处生成的较大操作数有效位sigl的替代版本中的一个加到由对齐移位电路50和移位器81生成的移位的较小操作数sig。对于LSA或USA,每个加法器电路54的进位被确定为0,而对于保护位和粘性位都为0的USA,进位被确定为1。每个加法器电路54执行的相加生成多个候选和值62,其中,每个候选和值62表示可能的舍入和结果,该舍入和结果可以根据舍入状态和溢出的存在与否来选择。
同时,与较小操作数有效位的增相加移位并行地,在步骤120处,舍入状态确定电路58使用在步骤108处生成的掩码来使用上面讨论的掩码逻辑计算粘性标志的相应溢出和非溢出集合以及非溢出保护标志。将未增加的较大操作数有效位sigl与移位的较小操作数sigl相加的加法器电路54还提供最低有效位标志的溢出版本和非溢出版本,以及等于非溢出最低有效位标志的保护标志的溢出版本。
在步骤122处,溢出舍入状态标志集和非溢出舍入状态标志集用于是否应用舍入工具的两个单独的选择,其中一个用于溢出情况,另一个用于非溢出情况。在步骤124处,选择了舍入的非溢出结果,如果非溢出情况的当前舍入模式和状态标志指示不应应用增量,则使用对应于舍入增量0的第一候选和值;或者,如果要在非溢出情况下应用增量,则选择对应于舍入增量1的第二候选和值。类似地,基于溢出舍入状态标志集和当前舍入模式,确定针对溢出情况是否需要增量,如果不需要增量,则使用基于较大操作数有效位sigl(舍入增量为0)版本替代候选和值,如果针对溢出情况需要舍入增量,则选择对应于舍入增量为2的替代sigl版本候选和。
与在步骤122、124处的选择并行地,在步骤126处,基于加法器电路54的相加来确定是否发生溢出,一旦准备好溢出指示63,则在步骤128处,溢出选择电路确定在步骤124处获得的舍入的非溢出和溢出结果中的哪一个应被选择为操作数opa、opb的远路径相加的最终标准化和舍入结果。
因此可以看出,舍入的许多处理(包括由增量电路52进行增相加由舍入状态确定电路58计算舍入状态标志)可以与由对齐移位电路50对较小操作数有效位sig进行移位并行地执行,这使得即使在相对较高的时钟频率下,远路径相加也能被打包到单个时钟周期中。这将显著提高性能。
样例
下面示出了使用此技术的浮点相加的示例。在这个示例中,我们使用了奇怪的混合表示方法,该表示包括二进制有效位和十进制指数。没有一台机器能做到这一点,但它能给出明确的解释。
远路径操作通常需要对齐,因为我们只能对表示两个的相同幂的位进行相加或相减。所以如果我们要计算
opa–opb=1.1×26–1.01×2-15
我们首先必须将较小操作数与较大的操作数对齐。我们通过对较小操作数的有效位进行向右移位(并隐式地增加指数)直到两个指数相等,从而将问题转化为等价问题:
1.1×26–0.00000000000000101×26
当我们开始操作时,我们不知道哪个指数更大,所以我们做两个指数差6-(-15)=21(二进制010101)和-15-6=-21(二进制101011)。减法的低阶位比高阶位更早可用,因此我们开始通过两个不同的向右移位来对有效位进行移位:
假设siga更大,我们开始将sigb向右移位010101
1.01->0.101(针对低阶移位位,移位一位)
->0.101(不移位两位,因为下一移位位是零)
->0.0000101(移位四位)
->0.0000101(不移位八位)
假设sigb更大,我们开始向右移动siga到101011
1.1->0.11(针对低阶移位位,移位一位)
->0.0011(移位两位)
->0.0011(不移位四位)
->0.000000000011(移位八位)
经过这样的多次移位,我们知道哪个指数差是正的,所以我们知道sigb更小,我们完成sigs=sigb的移位。
->0.00000000000000000000101(移位16位)
->0.00000000000000000000101(不移位32位)
sigl正好是未移位的siga=1.1
当我们对sigl和sigs进行相相加相减时,可能会有来自最高有效位的进位,我们称之为有效位溢出。使该进位处于一个预定的位置中简化了我们的处理过程,我们通过针对非类似符号相加(USA,也称为有效减法)对sigl和sigs进行1位左移来实现这一点。USA还要求sigs反转(2的补码减法的定义是sigl+~sigs+1)。
移位的sigs(扩展到53位二进制)是
0_0000_0000_0000_0000_0000_1010_0000_0000_0000_0000_0000_0000_0000
倒置和USA-1位左移信号(54位二进制)是
11_1111_1111_1111_1111_1110_1011_1111_1111_1111_1111_1111_1111_1111
当我们对sigs进行移位时,我们使用未移位的sigs计算舍入信息。我们基于指数差d=expl-exps(本例中d=21)制作了掩码ediff_smask[54:0]。掩码构建的细节如上图所示。掩码由34个0和21个1组成。我们使用逻辑异或来操作这个掩码
赋值gmask0[53:0]=ediff_smask[53:0]^ediff_smask[54:1];
掩码为33个零后跟随单个,后面再跟随120个零。该掩码用于标识保护位g。因为我们针对USA对sigs执行1位左移,所以对于USA,掩码也必须左移1位(这意味着我们可以通过将掩码应用于未移位的sigs来针对USA和LSA二者找到正确的g)。
赋值gmask[52:0]=({53{~usa}}&gmask0[52:0])
|({53{usa}}&gmask0[53:1]);
我们现使用掩码来在未移位的sigs中定位g
raw_g=|(sigs_unshifted[52:0]&gmask[52:0]);
在我们的示例中,raw_g为零。我们使用类似的掩码技术来计算粘性标志(s)
赋值smask[52:0]=({53{~usa}}&ediff_smask[53:1])
|({53{usa}}&ediff_smask[54:2]);
赋值s=|(sigs_unshifted[52:0]&smask[52:0]);
在我们的示例中,s也是零。
到目前为止,我们只计算了raw_g,它是由于USA逻辑导致的可能改变前的保护位。回想一下,USA反转sigs并加1,因此真正的保护位需要更多的计算:
赋值n g_cin=~s&usa;//向保护位进位
赋值g=(raw_g^usa)^g_cin;
我们不尝试预计算l(sigl–sigs的最低有效位),因为它在加法器中很早就可用了。给定l,g,s,我们现在可以计算舍入。在这个示例中,g=s=0,所以没有舍入增量。
非常相似的逻辑用于计算lo,go,so(l,g,s的有效位溢出版本)。同样,go=so=0,因此在有效位溢出的情况下,结果没有舍入增量。
减法的非溢出情况的舍入选择(sigl–sigs)和(sigl–sigs+1)。
我们注意到sigl–sigs+1=(sigl+1)–sigs
由于sigl路径上几乎没有逻辑,我们通过计算sigl+1来填补这个空白。
类似地,减法溢出情况的舍入选择(sigl–sigs)和(sigl–sigs+2),
sigl–sigs+2=(sigl+2)–sigs,所以我们也计算sigl+2。
然后我们计算3种不同的和:
(1)sigl–sigs公司
(2)(信号+1)–信号
(3)(信号+2)–信号
舍入多路复用器选择:
(非有效位溢出)(1)和(2)之间
(有效位溢出)(1)和(3)之间
在我们的示例中,我们总是选择未修正的值(1),因为g=s=go=so=0。
最后,我们在溢出和非溢出情况之间进行选择。如果设置了sigl-sigs的第53位,或者设置了舍入增量和(sigl+1)–sigs的第53位,则会发生溢出情况。我们最后的总和(opl+~ops+1)是
11_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
11_1111_1111_1111_1111_1110_1011_1111_1111_1111_1111_1111_1111_1111
1
其给出
10_1111_1111_1111_1111_1110_1100_0000_0000_0000_0000_0000_0000_0000
位53已设置,因此我们选择溢出结果(位53:1)。
在本申请中,“配置为…”一词用于表示装置的元件具有能够执行所定义的操作的配置。在这种情况下,“配置”是指硬件或软件的互连布置或方式。例如装置可以具有提供所定义的操作的专用硬件,或者处理器或其他处理设备可以被编程为执行该功能。“配置为”并不意味着需要以任何方式改变装置元件来提供定义的操作。
尽管本发明的说明性实施例已经参考附图在本文中详细描述,但应理解,本发明不限于那些精确的实施例,并且本领域技术人员可以在不脱离范围和如所附权利要求所限定的本发明的精神的情况下对其进行各种改变和更改。

Claims (20)

1.一种浮点相加电路,用于将第一浮点操作数和第二浮点操作数相加,所述第一浮点操作数和所述第二浮点操作数各自包括有效位和指数,所述浮点相加电路包括:
对齐移位电路,所述对齐移位电路用于基于指数差对较小操作数有效位进行移位,以将所述较小操作数有效位与较大操作数有效位对齐,所述指数差表示所述第一浮点操作数和所述第二浮点操作数的指数之间的差,其中,所述较小操作数有效位是所述第一浮点操作数和所述第二浮点操作数中具有较小指数的那个操作数的有效位,所述较大操作数有效位是所述第一浮点操作数和所述第二浮点操作数中具有较大指数的那个操作数的有效位;
增量电路,所述增量电路用于生成所述较大操作数有效位的多个替代版本,所述较大操作数有效位的每个替代版本是基于应用于所述较大操作数有效位的不同舍入增量的;
多个相加电路,所述多个相加电路用于生成多个候选和值,每个候选和值表示以下二者之和:由所述对齐移位电路生成的经移位的较小操作数有效位、以及由所述增量电路生成的所述较大操作数有效位的所述多个替代版本中的相应一个替代版本;以及
选择电路,所述选择电路用于选择由所述多个相加电路生成的所述多个候选和值中的一个候选和值,所选择的和值表示将所述第一浮点操作数和所述第二浮点操作数相加的舍入结果。
2.根据权利要求1所述的浮点相加电路,其中,所述增量电路被配置为执行至少一次相加,每次相加将相应的舍入增量加到所述较大操作数有效位;
其中,所述增量电路被配置为:与由所述对齐移位电路执行对所述较小操作数有效位的移位的至少一部分并行地,执行所述至少一次相加。
3.根据权利要求1和2中任一项所述的浮点相加电路,其中,所述较大操作数有效位的所述多个替代版本包括:
第一版本,针对所述第一版本的舍入增量为0;
第二版本,针对所述第二版本的舍入增量为1;以及
第三版本,针对所述第三版本的舍入增量为2。
4.根据前述权利要求中的任一项所述的浮点相加电路,其中,所述选择电路被配置为基于多个舍入状态标志来选择所述多个候选和值中的所述一个候选和值。
5.根据权利要求4所述的浮点相加电路,包括舍入状态确定电路,所述舍入状态确定电路用于基于所述较小操作数有效位的未移位版本来确定所述多个舍入状态标志的子集。
6.根据权利要求5所述的浮点相加电路,其中,所述舍入状态确定电路被配置为:与由所述对齐移位电路执行对所述较小操作数有效位的移位的至少一部分并行地,执行对所述多个舍入状态标志的所述子集的确定的至少一部分。
7.根据权利要求5和6中任一项所述的浮点相加电路,其中,所述舍入状态确定电路被配置为基于所述指数差来确定至少一个掩码,并且基于使用所述至少一个掩码对所述较小操作数有效位的所述未移位版本进行掩蔽来确定所述多个舍入状态标记的所述子集。
8.根据权利要求5至7中任一项所述的浮点相加电路,其中,所述多个舍入状态标志的所述子集包括至少一个保护标志和至少一个粘性标志。
9.根据权利要求8所述的浮点相加电路,其中,所述多个舍入状态标志还包括至少一个最低有效位标志,所述至少一个最低有效位标志是基于所述多个相加电路中的一个相加电路所执行的相加来确定的。
10.根据前权利要求中任一项所述的浮点相加电路,其中,所述选择电路被配置为基于多个舍入状态标志并基于溢出指示来选择所述候选和值中的所述一个候选和值,所述溢出指示指示所述第一浮点操作数和所述第二浮点操作数的对齐有效位的相加是否导致溢出。
11.根据权利要求10所述的浮点相加电路,包括舍入状态确定电路,其中:
所述多个相加电路中的至少一个和所述舍入状态确定电路被配置为:在确定是否发生溢出的结果可用之前,确定假定不存在溢出时的非溢出舍入状态标志集和假定存在溢出时的溢出舍入状态标志集。
12.根据权利要求10和11中任一项所述的浮点相加电路,其中,所述选择电路包括:
第一舍入选择电路,所述第一舍入选择电路用于:基于假设不存在溢出时确定的非溢出舍入状态标志,在第一候选和值和第二候选和值之间进行选择;
第二舍入选择电路,所述第二舍入选择电路用于:基于假设存在溢出时确定的溢出舍入状态标志,在所述第一候选和值和第三候选和值之间进行选择;以及
溢出选择电路,所述溢出选择电路用于:基于所述溢出指示在所述第一舍入选择电路和所述第二舍入选择电路的输出之间进行选择,以提供所选择的和值,所述所选择的和值表示将所述第一浮点操作数和所述第二浮点操作数相加的所述舍入结果。
13.根据权利要求12所述的浮点相加电路,其中,所述第一舍入选择电路和所述第二舍入选择电路被配置为:与对所述溢出指示的确定的至少一部分并行地,确定要选择哪个候选和值。
14.根据权利要求12和13中任一项所述的浮点相加电路,其中:
所述第一候选和值是基于所述较大操作数有效位的第一版本的,针对所述第一版本的舍入增量为0;
所述第二候选和值是基于所述较大操作数有效位的第二版本的,针对所述第二版本的舍入增量为1;
所述第三候选和值是基于所述较大操作数有效位的第三版本的,针对所述第三版本的舍入增量为2。
15.根据前述权利要求中任一项所述的浮点相加电路,其中,所述对齐移位电路被配置为:在确定所述第一浮点操作数和所述第二浮点操作数中的哪一个具有较小指数的结果之前,开始对所述第一浮点操作数和所述第二浮点操作数二者的有效位都进行移位。
16.根据前述权利要求中任一项所述的浮点相加电路,其中,所述对齐移位电路包括:
第一移位电路,所述第一移位电路用于:通过基于第一指数差的低位部分对所述第一浮点操作数的有效位进行移位,来生成第一移位值,其中,所述第一指数差对应于从所述第二浮点操作数的指数减去所述第一浮点操作数的指数的结果;
第二移位电路,所述第二移位电路用于:通过基于第二指数差的低位部分来对所述第二浮点操作数的有效位进行移位,从而生成第二移位值,其中,所述第二指数差对应于从所述第一浮点操作数的指数减去所述第二浮点操作数的指数的结果;
有效位选择电路,所述有效位选择电路用于:当所述第一浮点操作数具有较小指数时选择所述第一移位值,当所述第二浮点操作数具有较小指数时选择所述第二移位值;以及
第三移位电路,所述第三移位电路用于:对所述第一移位值和所述第二移位值中由所述有效位选择电路选择的那一个进行移位,该移位基于所述第一指数差和所述第二指数差中对应的一个指数差的高位部分。
17.根据权利要求16所述的浮点相加电路,其中,所述第三移位电路被配置为:与由所述增量电路生成所述较大操作数有效位的所述多个替代版本并行地执行移位。
18.一种数据处理装置,包括根据前述权利要求中任一项所述的浮点相加电路。
19.一种浮点相加电路,用于将第一浮点操作数和第二浮点操作数相加,所述第一浮点操作数和所述第二浮点操作数各自包括有效位和指数;所述浮点相加电路包括:
用于移位的装置,其基于指数差对较小操作数有效位进行移位,以将所述较小操作数有效位与较大操作数有效位对齐,所述指数差表示所述第一浮点操作数和所述第二浮点操作数的指数之间的差,其中,所述较小操作数有效位是所述第一浮点操作数和所述第二浮点操作数中具有较小指数的那个操作数的有效位,所述较大操作数有效位是所述第一浮点操作数和所述第二浮点操作数中具有较大指数的那个操作数的有效位;
用于生成的装置,用于生成所述较大操作数有效位的多个替代版本,所述较大操作数有效位的每个替代版本是基于应用于所述较大操作数有效位的不同舍入增量的;
多个用于相加的装置,其用于生成多个候选和值,每个候选和值表示以下二者之和:由所述用于移位的装置生成的经移位的较小操作数有效位、由所述用于生成的装置生成的所述较大操作数有效位的所述多个替代版本中的相应一个替代版本;以及
用于选择的装置,用于选择由所述多个用于相加的装置生成的所述多个候选和值中的一个候选和值,所选择的和值表示将所述第一浮点操作数和所述第二浮点操作数相加的舍入结果。
20.一种用于将第一浮点操作数和第二浮点操作数相加的方法,所述第一浮点操作数和所述第二浮点操作数各自包括有效位和指数;所述方法包括:
基于指数差对较小操作数有效位进行移位,以将所述较小操作数有效位与较大操作数有效位对齐,所述指数差表示所述第一浮点操作数和所述第二浮点操作数的指数之间的差,其中,所述较小操作数有效位是所述第一浮点操作数和所述第二浮点操作数中具有较小指数的那个操作数的有效位,所述较大操作数有效位是所述第一浮点操作数和所述第二浮点操作数中具有较大指数的那个操作数的有效位;
生成所述较大操作数有效位的多个替代版本,所述较大操作数有效位的每个替代版本是基于应用于所述较大操作数有效位的不同舍入增量的;
执行多次相加以生成多个候选和值,每个候选和值表示以下二者之和:由所述移位所生成的经移位的较小操作数有效位、所述较大操作数有效位的所述多个替代版本中的相应一个替代版本;以及
选择由所述多次相加生成的所述多个候选和值中的一个候选和值,所选择的和值表示将所述第一浮点操作数和所述第二浮点操作数相加的舍入结果。
CN202010201747.9A 2019-03-28 2020-03-20 浮点相加 Pending CN111752526A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/367,672 2019-03-28
US16/367,672 US11119729B2 (en) 2019-03-28 2019-03-28 Alignment shifting and incrementing to determine a rounded result of adding first and second floating-point operands

Publications (1)

Publication Number Publication Date
CN111752526A true CN111752526A (zh) 2020-10-09

Family

ID=69725878

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010201747.9A Pending CN111752526A (zh) 2019-03-28 2020-03-20 浮点相加

Country Status (3)

Country Link
US (1) US11119729B2 (zh)
CN (1) CN111752526A (zh)
GB (1) GB2585406B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112230882B (zh) * 2020-10-28 2021-06-01 海光信息技术股份有限公司 浮点数处理装置、浮点数加法装置及浮点数处理方法
CN113672198B (zh) * 2021-08-18 2024-01-26 南京英锐创电子科技有限公司 二进制浮点数加法运算电路控制方法、电路及计算装置
GB2614207B (en) * 2021-11-18 2024-01-24 Imagination Tech Ltd Floating point adder
GB2621785B (en) * 2021-11-18 2024-09-18 Imagination Tech Ltd Floating point adder
GB2607364B (en) * 2021-11-18 2023-05-24 Imagination Tech Ltd Floating point adder

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088715A (en) * 1997-10-23 2000-07-11 Advanced Micro Devices, Inc. Close path selection unit for performing effective subtraction within a floating point arithmetic unit
US6199089B1 (en) 1998-09-18 2001-03-06 Ati International Srl Floating point arithmetic logic unit rounding using at least one least significant bit
US6366942B1 (en) * 1999-02-01 2002-04-02 Compaq Information Technologies Group Lp Method and apparatus for rounding floating point results in a digital processing system
US7433911B2 (en) 2004-12-21 2008-10-07 Arm Limited Data processing apparatus and method for performing floating point addition
US8965945B2 (en) * 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition

Also Published As

Publication number Publication date
GB2585406B (en) 2021-07-21
GB2585406A (en) 2021-01-13
US20200310754A1 (en) 2020-10-01
US11119729B2 (en) 2021-09-14
GB202001170D0 (en) 2020-03-11

Similar Documents

Publication Publication Date Title
US11347511B2 (en) Floating-point scaling operation
CN107077416B (zh) 用于以选择性舍入模式进行向量处理的装置和方法
US9608662B2 (en) Apparatus and method for converting floating-point operand into a value having a different format
CN111752526A (zh) 浮点相加
KR100239029B1 (ko) 가산기와 함께 사용하기 위한 결과 정규화기 및 결과 정규화 방법과 그를 포함하는 데이터 프로세서
CN107769791B (zh) 用于定点到浮点的转换的装置和方法及2的负幂检测器
GB2267589A (en) Performing integer and floating point division using a single SRT divider
KR20090014292A (ko) 비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서
GB2539265A (en) Apparatus and method for controlling rounding when performing a floating point operation
US10061561B2 (en) Floating point addition with early shifting
GB2549153B (en) Apparatus and method for supporting a conversion instruction
JP7541524B2 (ja) アンカーデータ要素における特殊値の符号化
US7401107B2 (en) Data processing apparatus and method for converting a fixed point number to a floating point number
US6598065B1 (en) Method for achieving correctly rounded quotients in algorithms based on fused multiply-accumulate without requiring the intermediate calculation of a correctly rounded reciprocal
EP0840207A1 (en) A microprocessor and method of operation thereof
TWI822952B (zh) 迭代運算的處理
US10963245B2 (en) Anchored data element conversion
US6615228B1 (en) Selection based rounding system and method for floating point operations
US20240004611A1 (en) Tininess detection
US20230305805A1 (en) Chained multiply accumulate using an unrounded product
He et al. Multiply-add fused float point unit with on-fly denormalized number processing
EP0837390A1 (en) Improvements in or relating to microprocessor integrated circuits
JP3100868B2 (ja) 浮動小数点数のための算術演算装置
WO1998006029A1 (en) Apparatus and methods for execution of computer instructions
JPH08115206A (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