CN108139912A - 在浮点运算期间计算和保留误差边界的装置和方法 - Google Patents

在浮点运算期间计算和保留误差边界的装置和方法 Download PDF

Info

Publication number
CN108139912A
CN108139912A CN201680061906.1A CN201680061906A CN108139912A CN 108139912 A CN108139912 A CN 108139912A CN 201680061906 A CN201680061906 A CN 201680061906A CN 108139912 A CN108139912 A CN 108139912A
Authority
CN
China
Prior art keywords
boundary
operand
index
result
point
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.)
Granted
Application number
CN201680061906.1A
Other languages
English (en)
Other versions
CN108139912B (zh
Inventor
艾伦·A·约根森
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Publication of CN108139912A publication Critical patent/CN108139912A/zh
Application granted granted Critical
Publication of CN108139912B publication Critical patent/CN108139912B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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
    • 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/49989Interval arithmetic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers

Landscapes

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

Abstract

一种用于在浮点运算期间计算和保留误差边界的装置和方法,将附加的边界字段插入标准浮点格式中,该边界字段在保留不足时用通知来记录计算的保留的有效位。用于取整和抵消误差的边界字段包括两部分:丢失位D字段和累积取整误差R字段。D字段表示浮点表示中不再有意义的位的数量。所表示的实际值的边界根据截断的浮点值(第一边界)和由丢失位的数量(第二边界)所确定的误差共同确定。真正的实际值绝对包含第一和第二边界。允许的有效位的丢失(可选可编程的)提供了有效位丢失的故障安全的实时通知。

Description

在浮点运算期间计算和保留误差边界的装置和方法
技术领域
本发明总体上涉及在浮点处理设备中执行某些浮点算术运算的逻辑电路,尤其涉及通过对数据的顺序或内容进行操作来处理数据以计算和保留由对齐和规格化引入的误差的边界的方法或配置。
背景技术
在浮点处理设备中使用的浮点算术系统的设计中,即使使用不同的计算机系统解决问题,也希望结果仍然是一致的,以便在计算和问题的解决方案中实现一致性。
为了提供统一的规则来管理浮点算术系统的实现,制定了美国国家标准。该标准确定为IEEE标准号754-2008和国际标准ISO/IEC/IEEE 60599:2011,这两个标准的全部内容通过引用并入本申请。该标准指定了基本和扩展的浮点数格式、算术运算、整数和浮点格式之间的转换、不同浮点格式之间的转换、基本格式浮点数和十进制字符串之间的转换以及对某些浮点异常的处理。
典型的浮点算术运算可以用各种(通常为标准)宽度(例如,32位、64位等)的格式来完成。这些格式中的每一个都使用符号、指数和尾数字段(或有效位),其中各个字段占据浮点数的预定义的部分。例如,对于32位单精度数,符号字段为1位,占据最高有效位位置;指数字段为8位,占据次高有效位位置;尾数字段为23位,占据最低有效位位置。类似地,对于64位双精度数,符号字段为1位,指数字段为11位,尾数字段为52位。其他的格式提供了相同的信息,但具有不同的字段宽度,更大的字段宽度可提供更高的精度和数值范围。
在获得每个浮点结果之后,必须将其规格化,然后取整。当结果被规格化时,对尾数字段中前导零的数量进行计数。然后从指数减去该数量;并将尾数左移,直到尾数字段的最高有效位位置为“1”。某些浮点结果不能规格化,因为指数已经是其可能的最低值而尾数字段的最高有效位不是“1”。这种有效位少于标准个数的数是一个“非规格化数”。
在根据该标准设计用于执行浮点算术运算的硬件和逻辑电路时,需要并希望将某些附加的指示位并入到浮点硬件操作中。这些指示位被插入到浮点数的尾数字段中,并且由算术控制逻辑用来指示在浮点运算中何时存在某些情况。例如,在非-非规格化(规格化)的数字中,当浮点数的指数为非零值时,由算术控制逻辑创建“隐式”位(通常称为“隐藏位”)。该“隐藏位”在存储格式中并不存在,是假定的。它是在浮点数被加载到算术寄存器时插入的,占据该浮点数的尾数字段的最高有效位位置。在加法运算过程中,浮点控制逻辑在某些算术运算期间设置一个“警戒”位,作为正在处理的浮点数的有效位丢失的指示符。当为了规格化而从尾数字段位置的右侧向右移动一位时,设置警戒位。警戒位占据尾数字段的一部分。最后,在某些浮点算术运算中设置一个“粘滞”位,作为浮点数已丢失一些有效位的指示符。
尾数字段中的这些附加位在结果被规格化后专门用于取整操作。警戒位被视为尾数的一部分,在规格化和指数对齐过程中与尾数的其余部分一起移位,并由算术运算使用。粘滞位不随尾数移位,但被算术运算使用。它充当从尾数右侧移出的位的“捕获器”;当1从尾数的右侧移出时,粘滞位保持为1,直到规格化和取整结束。
通常有如下四种取整方式:(1)最近取整;(2)向正无穷取整;(3)向负无穷取整;(4)向0取整。这其中的每一种方式都可能在计算中引入误差。
虽然该标准被广泛使用并且对许多运算都很有用,但是该标准将“精度”定义为可用于实数表示的有效位的最大位数,而不是将精度定义为实数表示的正确位数。该标准也没有提供对误差信息的计算和存储,因此允许误差传播,包括所有有效位的潜在丢失的误差。当前标准中的这些问题可能会导致大量累积取整误差和灾难性的抵消误差。当非常相近的值相减时发生抵消,这会在结果中引入重大误差,却没有对该误差的相应提示。
很多人对该标准做出了贡献或者指出了这些重大问题,但问题依然存在。
1962年授予Sierra的美国专利,专利号3037701,确立了由硬件执行固定字长浮点运算(包括规格化、取整和零转换)的基础。Sierra专利描述了在浮点运算中引入包括完全丢失有用信息在内的误差的可能性。没有描述任何方法来计算或保留任意类型的误差信息。
2010年,在“Handbook of Floating-Point Arithmetic(浮点运算手册)”一书中,Muller等人描述了包括ISO/IEC/IEEE 60599:2011在内的浮点应用的技术现状,并描述了误差问题。他们表示,“有时,即使是正确执行的浮点运算,计算的结果也远不是预期的那样”。
1991年,David Goldberg在“What Every Computer Scientist Should KnowAbout Floating-Point Arithmetic(每位计算机科学家都应该知道的浮点运算)”中对浮点误差做了详细描述和数学分析。该文描述了取整误差(第6页)、相对误差和最后一位误差(error units in the last place,Ulps)(第8页)、警戒位的使用(第9页)以及灾难性和良性(第10页)类型的抵消误差。推荐的误差减小方法仅限于扩展精度(仍被定义为可用实数表示的位数),这需要额外的存储空间来存储计算结果(第17页),并且需要对给定问题进行数值误差分析,以确定用于使由计算引入的误差最小化或限制误差的方法。
因此,很多人承认当前浮点运算标准中存在这些类型的误差。相应地,也做了许多解决这些重大问题的尝试。
在2012年的文章“Floating-Point Numbers with Error Estimates(带误差估计的浮点数)”中,Glauco Masotti描述了在标准浮点格式中添加数据结构以包含累积浮点误差的统计估计。这一技术增加了所需的存储空间,增加了计算时间,却不提供误差边界。
在2008年的“The Pitfalls of Verifying Floating-Point Computations(验证浮点计算的缺陷)”中,David Monniaux介绍了用静态程序分析来确定由代码执行一系列浮点运算而产生的预期误差方面的限制。然而,静态误差分析容易出错,并且依赖于并采用冗长且开销大的算法误差分析来确保算法能提供足够准确的结果。
总之,现有技术不会在相关联的浮点数据结构中保留误差信息。当前,对浮点误差的边界的任何保留方法都需要明显更多的存储空间和计算时间(或相应更多的硬件)来执行误差区间计算。
此外,在当前标准中,当通过相减来比较两个值时,如果发生了抵消,基于这种错误的比较的程序流决策可能导致不正确的结论。标准惯例没有提供比较结果的有效性。
重要的是,当计算结果不再提供足够数量的有效位数时,该标准没有给出任何指示。
此外,从外部到内部格式的转换或浮点格式之间的转换可能会在实数的初始表示中引入误差,而不记录该误差。
此外,即使输出数据中不存在有效位,浮点值也会转换为外部表示,而不指示有效位丢失了。
值得注意的是,当前的技术不允许程序员指定所需保留的有效位的数量。
因此,现有技术提供的用于减小浮点误差的各种方法中存在未解决的问题。因此,需要一种在浮点运算期间计算和保留误差边界的装置和方法。
以上讨论内容仅是一般背景信息,其不用于确定所要求保护的主题的范围。
发明内容
本发明涉及一种浮点处理设备和相关方法,用于通过将附加的边界字段插入到ANSI/IEEE 754-2008标准的浮点算术格式中来在浮点运算期间计算和保留误差边界。边界B字段有两个主要部分:丢失位字段(D字段)和累积取整误差字段(N字段)。N字段又分成取整位字段(R字段)和取整误差计数字段(C字段),C字段表示来自R字段的和的进位的和。丢失位D字段是浮点表示中不再有效的位的数量。所表示的实际值的边界由截断(取整至零)的浮点值(第一边界)以及由丢失位的数量(第二边界)确定的误差的和确定。将丢失位D字段与(可选可编程的)不可接受的有效位丢失进行比较,以提供关于有效位丢失的故障安全(fail-safe)的实时通知。
本发明的浮点格式的C字段是来自R字段和的进位的和。(除非上下文中另有定义,否则术语“字段”是指数据结构的一部分或数据结构的那部分的值。)当扩展计数超过当前丢失的位时,丢失位加1,同时C字段设置为1。R字段是截断期间丢失的、取整误差的被取整的最高有效位的和
本发明的装置和方法能够与实现当前浮点标准的装置和方法结合使用。如果需要,可以在本发明格式和当前格式之间进行转换;因此,无需丢弃依赖于当前浮点标准的现有软件。在传统的浮点标准中添加新的边界字段,以提供界定所表示的实数的误差边界的累积信息。
当前的浮点标准无法测量和/或记录浮点取整和抵消误差。本发明提供了一种对由浮点运算产生的有效位的(可接受或不可接受的)累积丢失进行分类的装置和方法。这通过将当前运算的有效位的丢失与有效位的丢失的不可接受界限进行比较来完成。能够通过硬件或编程两种方式来提供不同宽度的浮点数的不可接受界限。硬件提供一个默认值。例如,在单精度(32位)中,默认值可能需要3个有效的十进制数位,这就要求有效位保留10个有效位。例如,在64位双精度中,默认值可能需要6个有效的十进制数位,这就要求有效位保留20个有效位。提供不可接受界限的第二种方法是通过一个特殊的浮点指令,其为指定精度设置误差边界的界限。本发明提供了测量、累积、记录和报告这些误差的方法,并且可选地允许程序员指定不可接受的误差量。
这相对于不允许对可接受误差进行任何控制的现有技术来说是一个优势。本发明不仅允许检测有效位的丢失,而且可选地允许指定所需保留的有效位数。
当有效位的丢失大于或等于不可接受界限时,生成表示有效位不足的创造性的信令NaN,称为“sNaN(isb)”,表示结果不再具有所需数量的有效位。这与现有技术相反,当计算结果不提供足够数量的有效位时,现有技术不提供指示。
与不在相关联的浮点数据结构内保留误差信息的常规浮点标准相反,本发明在浮点数据结构内的丢失位D字段中提供误差信息。提供了两个边界。第一边界是由指数和截断的有效位表示的实数,第二边界是通过第一边界加上丢失位D字段表示的最大误差值确定的。
利用现有技术,能够通过增加计算时间和/或存储空间来减少误差。本发明在创造性的数据结构内提供误差信息,对空间和性能几乎没有影响。
在标准浮点实现中,抵消引入重大误差,而结果中没有相应的指示。相比之下,本发明在丢失位D字段中说明了抵消误差。
本发明提供了一种记录由外部表示转换为本发明的内部表示而引入的误差的方法(或一种记录内部表示之间转换的误差的方法)。
现有技术中,即使不存在有效位,浮点值在转换为外部表示时也不指示有效位丢失了。相比之下,本发明在有效位不足时提供创造性的信令Not-a-Number,sNaN(isb)。
在现有技术中,静态误差分析需要大量的数学分析,且不能实时确定实际误差。这项工作必须由高度熟练的数学家程序员完成。因此,因为所需成本和时间大大增加,所以误差分析仅用于关键项目。相比之下,本发明提供实时误差计算,最多会使计算时间少量增加以及可用于有效位的最大位数少量减少。
在现有技术中使用的通过误差引入进行的动态误差分析具有类似的问题,需要多次执行需要浮点的算法。当使用自适应算法或实时需要误差信息时,这些技术几乎没有用处。本发明消除了多次执行的需要并实时提供误差信息。
增加额外的存储空间以保留关于误差的统计信息(这是通常提出的解决方案),显著增加了计算时间和所需的存储空间。本发明使可用于实数表示的有效位的最大位数略有下降,以便为误差信息提供空间。本发明所需的存储空间与标准浮点相同。
虽然内部运算提供了一种计算用于浮点计算的边界的方法,但它需要大大增加的计算时间和至少两倍的存储空间。相比之下,本发明的用于计算和保留边界的装置计算所表示的实数的第一和第二边界并且在单个指令的执行中进行计算。不需要额外的内存。计算出的边界是故障安全的。
本发明的一个目的是在浮点处理设备中执行某些浮点算术运算时限制浮点误差。
通过附图和随后的优选实施例的详细描述,本发明的这些和其他目的、特征和优点将变得更加明显。
附图说明
下面将结合附图描述本发明的优选实施例,附图用于说明本发明而不是限制本发明,其中相同的附图标记表示相同的元件。
图1是本发明的有界浮点格式的示意图,其示出了本发明的新的边界B字段,它由丢失位D字段和N字段组成,其中N字段又由C字段和R字段组成。
图2A-2B是示出了本发明在示例性加法或减法运算中的误差边界的浮点运算的逻辑和控制的图解示例。
图3是本发明的提供了图2A、图4和图7的边界逻辑中使用的信息的指数计算的图。
图4是本发明的误差边界的主导边界逻辑和控制的图。
图5是从图7获得的后规格化结果的格式图,该后规格化结果的格式有助于确定本发明的边界B字段。
图6A-6B是本发明的创造性的主边界计算逻辑和控制的图,该主边界计算逻辑和控制提供图2B和图8中使用的信息。
图7是产生规格化结果的规格化逻辑和控制的图,该规格化结果有助于确定本发明的边界B字段并被图2B、图6A和图6B所使用。
图8是本发明的异常逻辑和控制的图,该异常逻辑和控制确定是否超过了误差边界,这生成了本发明的sNaN(isb)并且还确定结果是否明显为零。
图9是有界浮点系统900的图。
在附图的各个视图中,相同的附图标记表示相同的部分。
具体实施方式
如附图中所示,本发明涉及一种包括有界浮点处理单元(BFPU)950的有界浮点系统900以及一种用于在浮点运算期间计算和保留误差边界的方法,附图标记200(图2A-2B)示出其一个示例。与引入误差而没有通知或警告的标准浮点实现相比,本发明的有界浮点格式100提供了新的误差边界B字段52(图1),其标识并记录误差的边界,并且当剩余的有效位不足时,通过用本发明的sNaN(isb)262替换结果来启用丢失有效位的通知。
使用现有的浮点标准,可能在对齐或规格化过程中引入误差。在本发明的装置和方法中,减法和其他浮点运算过程中的规格化也可能导致有效位丢失,比如由抵消导致的有效位丢失。当这种丢失在当前计算中很显著时,该丢失被记录在丢失的有效位数的边界中,该边界称为“结果边界丢失位D”54F(图8),存储在丢失位字段(D字段54)中。
当计算结果产生的有效位不足时,用无效的有界浮点值的特殊表示来替换有界浮点值(“计算结果”260),其中,该特殊表示不是数字(NaN),而是本发明的表示有效位不足的信令NaN,称为“sNaN(isb)”262(图2B),其表示有效位的过度丢失。硬件中设置有存储器,其用于对记录的累积误差进行比较以确定是否保留了足够的有效位或者是否应该生成sNaN(isb)262。与其他NaN一样,sNaN(isb)262也被传播到后续的计算中。sNaN(isb)262可以是用于生成硬件浮点异常的信令。
用于确定有效位丢失的电路可以包含可选地可编程的边界界限存储器802,以允许由用户确定通过浮点计算得到的用户所需的有效位的数量。边界界限存储器802包含每个精确浮点宽度的默认值,并且用户能够对其进行编程。
当实现本发明的有界浮点格式100时,它可以与现有浮点标准的实现同时使用。因此,不需要丢弃依赖于现有浮点标准的已有软件。
在传统的浮点标准中插入新的边界B字段52,以提供关于界定了所表示的实数的误差边界的累积信息。
图1提供了字宽为宽度k 101的有界浮点格式100的虚拟的位布局,其示出了创造性的边界B字段52(宽度为b 103)以及标准浮点格式字段,其中边界B字段由丢失位D字段54(宽度为d 105)和N字段55(宽度为n 106)两部分组成。N字段55进一步由C字段56(宽度为c107)和R字段57(宽度为r 108)两个字段组成。标准字段包括符号位字段(即,S字段50)、指数E字段51(宽度为e 102)以及有效位字段,即T字段53(宽度为t 104)。
该边界B字段52是插入在浮点标准格式内的新字段,用以提供关于所表示的实数的边界的累积信息。边界B字段52说明取整和抵消误差。边界B字段52跟踪由所有先前运算以及当前运算导致的有效位的丢失。记录有效位的丢失使得能够确定保留的有效位是否不足。当丢失了足够的有效位时,通过sNaN选择控制811(图8)将这一情况通知给主处理单元910。当保留有效位不足时,BFPU为有界浮点结果280选择sNaN(isb)262(从计算结果260值、sNaN(isb)262的表示、BFP零261的有界浮点表示中选择)。
丢失位D字段54(图1)包含对浮点表示中不再有效的位的数量的表示。
N字段55是对齐和规格化中出现的取整误差的累积。
C字段56包含R字段57R(图5)的进位的和的表示,与R字段57类似地,其宽度为r108,其中的“R”表示规格化后的结果。使用扩展的取整误差X字段60R(宽度为x 502)的位的逻辑或来代替传统的进位和警戒位。当C字段56的值超过丢失位D字段54的值时,将丢失位D字段54的值加1,同时将C字段56设为1(图6)。
R字段57包含当前R 57和产生的取整位R 57R(图5)之和,取整位R57R是因规格化后的结果720的截断而丢失的最高有效的r 108个位。图2A所示的示例性有界浮点加法/减法图200示出了用于在浮点运算期间计算和保留误差边界的装置和方法,图2B示出了其延续。该图提供了示例性浮点加法或减法运算的逻辑和控制,示出了本发明的创造性的(通常由对齐和规格化引起的)浮点误差的边界。
有界浮点系统包括具有多个寄存器990(图9)的处理设备、主处理单元910和可通信地耦接到主处理单元910的有界浮点单元(BFPU)950。主处理单元910执行内部指令并将至少两种类型的BFPU指令930、830输出到BFPU 950。第一种类型是有界浮点运算指令930,其指示BFPU 950执行算术运算的类型并提供两个输入操作数201、202。第二种类型是边界界限指令830,其是用于设置默认边界界限833或设置编程设定的边界界限831的指令。
对两个输入操作数201、202执行算术运算,在图2A、2B的示例中,操作数201、202分别存储在第一操作数寄存器210和第二操作数寄存器220中。然后,BFPU 950通过对有界浮点数输入201、202执行FPU指令,生成结果值,即有界浮点结果280。该有界浮点结果280包括根据累积的抵消误差和累积的取整误差获得的误差边界值。当有界浮点结果280中的有效位不足时,BFPU 950产生指示有效位不足的sNaN选择控制811。BFPU 950还经由主处理单元910将有界浮点结果280写入多个寄存器990的的解寄存器中,由此存储来自有界浮点单元950的运算的结果。
图2A的第一操作数寄存器210是包含有界浮点格式100的第一操作数201的寄存器(其中寄存器可以是硬件寄存器、寄存器文件中的位置或存储器位置)。
图2A的第一操作数201是用于加法运算的有界浮点数第一加数或者是减法运算的被减数。第一操作数201包括第一操作数S值50A、第一操作数指数E值51A、第一操作数边界B值52A和第一操作数有效位T值53A。
图2A的第二操作数寄存器220是包含有界浮点格式100的第二操作数202的寄存器(其中寄存器可以是硬件寄存器、寄存器文件中的位置或存储器位置)。
第二操作数202是用于加法运算的有界浮点数第二加数或者是减法运算的减数。第二操作数202包括第二操作数符号位S 50B、第二操作数指数E 51B、第二操作数边界B52B和第二操作数有效位T 53B。
图2A-2B的该有界浮点加/减图200中的许多步骤是传统步骤(一般由虚线表示),但是来自这些传统步骤的一些结果被用于本发明的装置和方法中。
参考图2A、图3的指数逻辑的步骤300,在指数比较器301中对第一操作数指数E51A(来自图2A的第一操作数201)和第二操作数指数E 51B(来自图2A的第二操作数202)进行比较以确定最大指数控制302。最大指数控制302是控制信号,其控制第一和第二有效位交换多路复用器230、231(图2A),控制最大和最小指数选择多路复用器310、311,并控制第一和第二边界交换多路复用器401、402(图4)。
此外,如图3所示,最大指数控制302是识别第一操作数指数E 51A或第二操作数指数E 51B中较大者的控制信号,并且其控制最大指数选择多路复用器310。最大指数选择多路复用器310由最大指数控制302控制,从第一操作数指数E 51A和第二操作数指数E 51B中选择最大指数E 51D。最小指数选择多路复用器311也由最大指数控制302控制,并从第一操作数指数E 51A和第二操作数指数E 51B中选择最小指数E 51E。指数减法器320从最大指数E 51D中减去最小指数E 51E来计算指数差321。指数差321控制对齐移位器240(图2A)并被丢失位减法器410(图4)使用。
此外,如图2A所示,最大指数控制302提供对第一和第二有效位交换多路复用器230、231(图2A)的控制。第一有效位交换多路复用器230从第一操作数有效位T 53A或第二操作数有效位T 53B中进行选择,产生具有最小指数E 53D的操作数的有效位T。类似地,第二有效位交换多路复用器231从第一操作数有效位T 53A或第二操作数有效位T 53B中选择具有最大指数E 53E的操作数的有效位T。
对齐移位器240(图2A)将具有最小指数E 53D的操作数的有效位T向右移动由指数差321(来自指数逻辑300,图3)确定的位数,以产生具有最小指数E 241的操作数的对齐有效位T。只有从对齐移位器240移出的、导致对齐移位丢失242的1位(非零位)被插入到具有最小指数E 241的操作数的对齐有效位T的最低有效位中,以确保能检测到有效位溢出741。
有效位加法器250(图2A)计算具有最小指数E 241的操作数的对齐有效位T与具有最大指数E 53E的操作数的对齐有效位T的和或差251。有效位加法器的虚拟宽度v 501(图5)是所得到的和或差的宽度,其考虑到为适应扩展的有界浮点格式所必需的可能需要多次加法的情况。
图5提供了后规格化结果的格式500的细节,其具有规格化后的有界浮点有效位加法器结果720的格式。该格式包括:(1)标准隐藏位H字段510,规格化后的左对齐隐藏位H字段510;(2)得到的规格化有效位T 53R(宽度为t 104位),即规格化后的得到的有效位;(3)得到的宽度为r 108的取整位R字段57R,其保存所得到的有效位中的由于截断而丢失的最高有效位;和(4)宽度为x 502的扩展的取整误差X字段60R,其包含结果中由于截断而丢失的位,在格式中位于R字段57R的右侧。
所计算的和或差251(图2A)用于图2B的规格化逻辑700中,其在图7中展开示出。参考图7的规格化逻辑700的细节,右移位器703或左移位器712使用和或差251来获得规格化结果720。用于该确定的第一控制是控制右移位器703的右移位控制702,右移位控制702由进位检测701确定。当由右移位控制702指示时,右移位器703将和或差251右移1位,产生右移结果704。右移位丢失705是从右移位结果704移出的一个1位。当这一情况发生时,在右移结果704的最低有效位中插入一个1位,以确保会检测到有效位过剩741。该右移结果704被用在左移位器712中。当没有声明右移位控制702时,右移结果704等于和或差251。
同样在图7中,和或差251被用在最高有效零计数器710中,这是另一个控制。零计数器710对和或差251的最高有效零进行计数,产生对结果进行规格化所必需的前导零数量711。前导零数量711通过使右移结果704向左移位来控制左移位器712,产生规格化结果720,其包括截断的结果有效位T 53C、规格化取整R 57A和规格化扩展X 60A。如果最高有效零计数器710确定不存在前导零,则规格化的结果720等于右移结果704。如果没有右移或左移,则仅传递该值(如果没有进位且没有有效的零,则这一情况会出现)。前导零数量711也用在指数规格化加法器730中,还用于图2B的本发明的主边界逻辑600中,其在图6中展开示出。
仍然在图7中,指数规格化加法器730使用右移位控制702和前导零数量711来调整最大指数E 51D(来自图3)以进行规格化。
从规格化结果720的后规格化结果格式500(图5)的X字段60R导出规格化的扩展X60A。
溢出有效位检测器740产生规格化的扩展X 60A的所有位的逻辑或,从而产生有效位过剩741。有效位过剩741(图2B、6A-6B)由本发明的主边界逻辑600的计数加法器640(图6B)使用。
指数规格化加法器730(图7)使最大指数E 51D加上右移位控制702或者减去前导零数量711,以产生结果指数E 51C,其是图2B的本发明的计算结果260的指数。
图2B的符号逻辑290以传统方式操作,根据操作数符号位S 50A、第二操作数符号位S 50B和右移位控制702来确定结果符号位S 50C。
参考图2B中本发明的装置和方法的逻辑和控制的示例性图200,根据结果符号位S50C、图7的结果指数E 51C、图6A的结果边界B 52C和图7的截断结果有效位T 53C的拼接产生计算结果260。
参考图2A中本发明的装置和方法的逻辑和控制的示例性图200,在图2A的主导边界逻辑400(在图4中被展开示出)中,使用了图2A的第一操作数边界B 52A、图2A的第二操作数边界B 52B、图3的最大指数控制302和图3的指数差321。
在算术运算中,有效位数最少的操作数决定(“主导”)结果的有效位数。在对齐后,当一操作数中的有效位数少于另一个操作数中的有效位数时,有效位较少的操作数的有效位控制或主导结果的基本有效位。主导边界逻辑400从初始操作数、第一操作数边界B 52A和第二操作数边界B 52B中选择边界,以在计算抵消和取整之前确定对结果的边界影响最大的边界。
如在图4的主导边界逻辑400中所示的,比较两个操作数的边界(图2A的第一和第二操作数边界B 52A、52B)-在比较之前调整一个边界。主导边界逻辑400确定主导边界B52H。主导边界B 52H是(1)限制边界B 52G和(2)具有最大指数的操作数的边界(最大指数操作数边界B 52E)中较大的一个。当没有取整或抵消时,这个主导边界B 52H是操作数的最佳边界。在算术运算中,因为具有最大丢失位数的主导边界B 52H(来自边界B 52G或52E,其中限制边界B 52G是由具有最小指数的操作数的调整后的边界B 52F得到的)是该最佳边界,所以有效位数量最少的调整后的操作数主导对结果边界的确定。
参考图4的细节,由最大指数控制302(来自图3)控制的第一边界交换多路复用器401从第一操作数边界B 52A或第二操作数边界B 52B(均来自图2A)中进行选取,产生最小指数操作数边界B 52D。同样由最大指数控制302控制的第二边界交换多路复用器402从第二操作数边界B 52B或第一操作数边界B 52A中进行选取,产生最大指数操作数边界B 52E。
丢失位减法器410是这样的电路:其从最小指数操作数边界丢失位D 54A(最小指数操作数边界B 52D的丢失位部分)中减去指数差321(图3),产生调整的最小指数操作数边界丢失位D 54B。调整的最小指数操作数边界丢失位D 54B与最小指数操作数边界累积取整误差N 55A拼接以形成具有最小指数的操作数的调整边界B 52F。减法可能产生负的调整的最小指数操作数边界丢失位D 54B,这表明在对齐移位器240(图2A)处,在对齐期间没有丢失有效位;这种情况由边界限制420处理。边界限制420阻止具有最小指数的操作数的调整边界B 52F下溢至小于零。这将限制边界B 52G限制为零或大于零。零表示该调整的操作数的所有位都是有效的。
边界比较器430将最大指数操作数边界B 52E与限制边界B 52G进行比较以确定主导边界控制431。当最大指数操作数边界B 52E大于限制边界B 52G时,声明该主导边界控制431。主导边界控制431由主导边界多路复用器440使用,并被用于图6A的主边界逻辑600,其中主导边界多路复用器440从最大指数操作数边界B 52E或限制边界B 52G中选出主导边界B 52H。
参考图6A,主边界逻辑600确定当前运算的计算结果260(图2B)的结果边界B 52C。此处的输入为:(1)图4的主导边界B 52H,(2)前导零的数量711(最高有效零的数量,来自图7),和(3)图6B的进位调整边界B 52M。结果边界B 52C用于确定图2B的计算结果260和图8的结果边界丢失位D 54F。
在该抵消路径中,当右移位时,有效位丢失。这些丢失的有效位必须被加到主导边界丢失位D 54C中。主导边界丢失位D 54C是主导边界B 52H的丢失的位54。丢失位加法器610使用该主导边界丢失位D 54C,将前导零的数量711(来自图7)加到主导边界丢失位D54C,生成调整的丢失位D 54D。调整的丢失位D 54D与主导边界累积取整误差N 55B拼接以产生抵消调整边界B 52J。主导边界累积取整误差N 55B是主导边界B 52H的累积取整误差。
参考图6B,计数加法器640将累积取整误差N55B、规格化取整R 57A(图7)和有效位过剩741(图7)相加,生成更新的累积取整误差N 55C。
当更新的累积取整误差扩展计数C 56A大于图6A的主导边界丢失位D 54C时,计数比较器650声明计数溢出651。更新的累积取整误差扩展计数C 56A是更新的累积取整误差N55C的扩展计数56部分。主导边界丢失位D 54C和计数溢出651由丢失位递增器660和调整边界多路复用器670使用。
当声明了计数溢出651时,丢失位递增器660将主导边界丢失位D 54C加1,产生递增的丢失位D 54E。丢失位调整边界B 52L是由递增的丢失位D 54E、C字段56中值为1的扩展计数和规格化取整R 57A拼接而成的边界。
计数调整边界B 52K是主导边界丢失位D 54C与更新的累积取整误差N 55C拼接的结果。
当声明了计数溢出651时,经调整的边界多路复用器670选择丢失位调整边界B52L,或者选择计数调整边界B 52K,以产生由图6B的计数比较器650所使用的进位调整边界B 52M。
当存在抵消时,抵消检测器620(图6A)通过确定前导零数量711大于1而声明抵消控制621。例如,在具有相同符号的加法运算的过程中,这一条件为假。在减法或可能发生抵消的其他运算的过程中发生抵消时,这一条件为真。
结果边界多路复用器630(图6A)根据抵消控制621选择抵消调整边界B 52J或图6B的进位调整边界B 52M。结果是被包括在当前运算的最终结果(图2B的计算结果260)中的结果边界B 52C。
现在参考图8的异常逻辑800,异常逻辑800为需要专门表示的异常、零和NaN提供控制(821和811)。对于零的特殊表示,当结果的有效位为零时,减法指令的结果产生零表示。这是通过将结果丢失位与当前运算的操作数中可用的位数进行比较来确定的。对于(图2B的)sNaN(isb)262的专门表示,如果确定结果丢失位D 54F大于不可接受界限804,则图2B的有界浮点结果280为“sNaN(isb)”的专门表示。
参考图8的细节,有效位容量存储器803是静态存储器,其将T字段53的大小加上用于隐藏位H字段510的1(t+1,其中宽度t 104是有效位T的宽度,如图1所示)来提供当前运算的宽度。存储器由运算宽度控制801寻址。运算宽度控制801是处理器提供的信号,其以地址的形式表示当前有界浮点运算的宽度。有效位容量存储器803产生有效位容量805,其是结果的有效位(包括隐藏位H 510)的总位数。
结果丢失位D 54F是结果边界B 52C(图2B、6A)的丢失的位。当结果丢失位D 54F大于或等于有效位容量805时,零检测比较器820声明零选择控制821(图2B)。
边界界限存储器802是包含当前运算格式宽度的结果丢失位D 54F的不可接受界限804的存储器(静态或可选动态的)。该边界界限存储器802也由运算宽度控制801寻址,提供不可接受边界界限804。
当结果丢失位D 54F大于或等于不可接受边界界限804时,sNaN检测比较器声明sNaN选择控制811。sNaN选择控制811是提供给异常和结果多路复用器270(图2B)以选择sNaN(isb)262作为有界浮点结果280(图2B)的信号。
在本发明的装置和方法中,初始时,边界界限存储器802包含默认边界界限833值,其可以是静态(默认)或动态(编程设定的边界界限831)的。
在图8右侧所示的可选动态情况下,可以将边界界限从默认边界界限833值改变。编程设定的边界界限831是由可选的有界浮点指令提供的值。该有界浮点指令将不可接受边界界限804的值存储在边界界限存储器802中的由运算宽度控制801确定的位置中,并且在存储器接收到界限写入指令830时发生。可选的有界浮点界限写入指令830提供选择性写入控制。该指令将编程设定的边界界限831存储到边界界限存储器802中由运算宽度控制801确定的地址中。
边界界限存储器默认重置控制832是来自可选特殊有界浮点指令的选择性控制信号,其将边界界限存储器802的所有位置重置为特定于每个边界界限存储器802位置的默认边界界限833,这可以基于精度来设置。可选地,边界界限存储器默认重置控制832能够指定要被重置为由运算宽度控制801确定的默认边界界限833的特定边界界限存储器802位置。
在第一示例中,对于单精度(32位,宽度k 101=32)有界浮点运算,如果T字段53的宽度是16位(t 104=16),其提供包括隐藏位H 510在内的17个有效位(5位有效的十进制数字),那么丢失位D字段54(d 105)和C字段56(c 107)的宽度各自应为3位。这适应了标准的8位指数,E字段51(宽度e 102);并允许R字段57是1位,这使得N字段55为4位(n 106=4)。如果期望的默认有效数(significance)是3个十进制数,则需要包括隐藏位H 510的10个二进制位。这就意味着结果丢失位D字段54F(宽度d105)的可允许数量不能超过7,由运算宽度控制器801选择的用于单精度有界浮点运算的、边界界限存储器802的可接受边界界限804的所需值。
作为另一个例子,对于双精度(64位,宽度k 101=64)有界浮点运算,如果T字段53的宽度为36位(宽度t 104=36),其提供包括隐藏位H 510在内的37个有效位(11+位有效的十进制数字),如在对应于双精度运算的有效位容量存储器803位置中指定的,丢失位D字段54(d 105)和C字段54(c 107)的宽度各自应为6位,以允许4位R字段57(宽度r 108=4),从而使得N字段55为10位(宽度n 106=10)。如果期望的默认十进制有效数是6位十进制数,则需要包括隐藏位H 510在内的20个二进制位。这就意味着结果的丢失位D 54F的可允许数量不能超过17,由运算宽度控制器801选择的用于双精度有界浮点运算的、边界界限存储器802的可接受边界界限804的所需值。
再次参考图2B,异常和结果多路复用器270根据零选择控制821或sNaN选择控制811,从计算结果260、BFP零261或sNaN(isb)262中选择有界浮点结果280。零选择控制821优先于sNaN选择控制811。如果零选择控制821和sNaN选择控制811都没有被声明,则有界浮点结果280是计算的浮点结果260。
其中O是指数偏移量,t是有效位的宽度,T是有效位的值,S是符号0或1,E是指数,D是丢失位,2t是隐藏位H 510:
由非零、非NaN和规格化有界浮点值表示的实数值位于以下值之间:
-1S×((T+2t)/2t-1)E-O和-1S×((T+2t+2D)/2t-1)E-O
对于非规格化值(其中E字段的值为零且没有隐藏位),第一和第二界限如下:
-1S×T/2t-1和-1S×(T+2D)/2t-1
期望值是第一和第二边界的平均值。
从外部十进制表示转换时被引入到浮点值中的误差能够记录在本发明的浮点表示中。到十进制实数的外部表示的转换可以仅限于有效位;或者可以表示为v+/-e形式的有界实数,其中v是被表示为实数的期望的实际值(格式为x×10p,其中x是一个十进制值,p是10的整数次幂),e是误差的第一个和第二个界限,被表示为相似的格式化的实数。
在本发明的装置和方法中,当通过减法比较两个值时,若发生了抵消,则会考虑如下两种情况。
相等的情况,当两个操作数的有效位相等时,结果确实为零。如上所述,当丢失位的数量超过可用于有效位的数量(或超过有效位容量805)时,相等比较运算的结果被设置为0的表示。但是,如果减法运算中的结果非常接近零,并且该结果用于进一步的数学运算,则可能需要保留该零的界限字段。这可能需要单独的有界浮点运算来进行比较和减法运算。
在不相等时,其中通常有四种情况,大于、小于、大于等于、小于等于,只需要考虑两种情况,因为用如上所述的方式处理“等于”的情况。对于大于的情况,如果第一操作数的最大值大于第二操作数的最大值,则第一操作数大于第二操作数。类似地,如果第二操作数的最小值小于第一操作数的最小值,则第一操作数大于第二操作数。
在某些情况下,运算结果的符号不一定反映大于或小于的情况。当第一操作数的最小值小于第二操作数的最大值并且第二操作数的最大值大于第一操作数的最小值时,会出现这种情况。在这种情况下,可以根据传统方法来确定结果。这些实例也可能需要特殊的有限浮点指令。
在本发明的装置和方法中,将一个有界浮点宽度转换为更大的有界浮点宽度(例如,32位转换为64位等)需要将有效位D字段54的丢失从窄宽度转换为更宽的宽度。这要求计算第一宽度的保留的有效位数,然后将其转换为第二宽度的有效位的丢失。例如,在从32位转换为64位有界浮点表示时,当新计算的有效位丢失超过新宽度的界限值(不可接受边界界限804)时,这可能导致产生sNaN(isb)262。类似地,当从较宽的转换到到较窄的有限浮点宽度时,所有的位可以都是有效位,但是从较宽表示中获得的X字段60R(图5)中丢失的位必须累积为有效位的初始丢失。
本文所述示例性实施例描述了在处理器、计算机系统或其他处理装置内的或与处理器、计算机系统或其他处理装置相关联的具有实时误差边界跟踪的有界浮点电路。在本说明书中,阐述了诸如处理逻辑电路、处理器类型、微体系结构条件、事件、启用机制等的许多具体细节,以提供对本发明实施例的更全面的理解。然而,本领域技术人员可以理解,可以在没有这些具体细节的情况下实践本发明。此外,一些公知的结构、电路等未详细示出,以避免不必要地模糊本发明的实施例。
本发明的一个实施例可以提供单核或多核有界浮点处理器,或者可以被包括在其他浮点或通用处理器中。处理器可以包括寄存器文件和耦合到寄存器文件的置换(复用器)单元。寄存器文件可以具有多个寄存器组以及用于接收选择信号的输入。选择信号可以选择寄存器组的一个或多个单位宽度,作为用于读取或写入操作的数据元素边界。
虽然这里描述的实施例是结合处理器描述的,但是其他实施例可应用于其他类型的集成电路和逻辑设备。本发明实施例的类似技术和教导能够应用于其他类型的电路或半导体器件,这些设备能够从更高的管道吞吐量和更高的性能中受益。本发明实施例的教导适用于实现数据操纵的任何处理器或机器。然而,本发明不限于执行特定数据宽度运算的处理器或机器,而是可以应用于执行数据的操纵或管理的任何处理器和机器,不管这些运算是使用二进制、十进制还是二进制编码的十进制数据表示进行的。
另外,虽然本文给出的实施例呈现了用于有界浮点加法和减法的装置和相关方法,但它是作为有界浮点运算的一个示例提出的。通过扩展,用于在浮点运算期间计算和保留误差边界的相同的创造性装置可以用于其他浮点运算,比如乘法、除法、平方根、乘加和其他浮点功能。其他实施例可以包含辅助有界浮点运算,比如浮点格式之间的转换,包括但不限于实数的外部表示、标准浮点、有界浮点,并且还包括宽度不同的格式。
尽管本文提供的示例描述了在执行单元和逻辑电路的上下文中的指令处理和分配,但是本发明的其他实施例可以通过存储在机器可读的有形介质上的数据或指令来实现,这些指令在由机器执行时使机器执行根据本发明的至少一个实施例的功能。在一个实施例中,与本发明的实施例相关联的功能以机器可执行指令实现。这些指令能够用于使利用该指令编程的通用或专用处理器执行本发明的步骤。本发明的实施例可以提供为计算机程序产品或者软件,其可以包括存储有指令的机器或计算机可读介质,所述指令可以用于对计算机(或其他电子设备)进行编程以执行根据本发明实施例的一个或多个操作。替选地,本发明实施例的步骤可以由包含用于执行步骤的固定功能逻辑的特定硬件组件来执行,或者由被编程的计算机组件和固定功能硬件组件的任何组合来执行。
可以将用于对逻辑电路进行编程以执行本发明的实施例的指令存储在系统中的存储器内,比如DRAM、高速缓存、闪存或其他存储器。此外,这些指令可以通过网络或通过其他计算机可读介质分发。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,但不限于:软盘、光盘、光盘只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁或光卡、闪存、或用于通过互联网或其他网络通过电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)传输信息的有形的机器可读存储装置。相应地,计算机可读介质包括适于存储或传输机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形的机器可读介质。
设计可能经历从创建到模拟到制造的各个阶段。表示设计的数据可以以多种方式来表示该设计。首先,如在仿真中有用的,可以使用硬件描述语言(HDL,例如VHDL)或其他功能描述语言来表示硬件。另外,可以产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某个阶段达到了表示硬件模型中各种器件的物理布局的数据级别。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是说明用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁或光学存储器(比如磁或光盘)可以是机器可读介质,用以存储经由光波或电波发送的信息,光波或电波被调制或以其他方式生成以发送这样的信息。当发送指示或携带代码或设计的电载波时,在执行电信号的复制、缓冲或重传的范围内,进行新的复制。因此,通信提供商或网络提供商可以在有形的机器可读介质上至少暂时地存储体现本发明实施例的技术的物品,比如编码成载波的信息。
在现代处理器中,许多不同的执行单元被用来处理和执行各种代码和指令。并非所有的指令都是相同的,因为有些指令可以更快地完成,而其他指令则可以花费许多时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因此,尽可能快地执行尽可能多的指令将会是有利的。但是,某些指令具有较高的复杂性,需要更多的执行时间和处理器资源,例如,浮点指令、加载/存储操作、数据移动等。
随着越来越多的计算机系统应用于互联网、文本和多媒体应用中,随着时间的推移,引入了额外的处理器支持。在一个实施例中,指令集可以与一个或多个计算机相关联,该体系结构包括数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理以及外部输入和输出(I/O)。
在一个实施例中,指令集体系结构(ISA)可以由具有相关微代码的一个或多个微体系结构实现,其包括用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微体系机构的处理器可以共享公共指令集的至少一部分。例如,处理器,酷睿TM处理器和高级微设备公司的处理器实现了几乎相同版本的x86指令集(包括新版本中添加的一些扩展),但具有不同的内部设计。类似地,其他处理器开发公司(如ARM控股有限公司、MIPS、或这些公司的被许可者或采用者)设计的处理可以共享至少一部分通用指令集,但可以包括不同的处理器设计。例如,ISA的相同寄存器体系结构可以使用新的或公知的技术在不同的微体系结构中以不同的方式实现,包括专用物理寄存器、使用寄存器重命名机制(例如使用寄存器别名表(RAT)、重排序缓冲器(ROB)和退役寄存器文件)的一个或多个动态分配的物理寄存器。在一个实施例中,寄存器可以包括一个或多个寄存器、寄存器体系结构、寄存器文件或其他寄存器组,这些寄存器组可以或不可以由软件程序员寻址。
在一个实施例中,浮点格式可以包括指示各种字段(比特数、比特位置等)的附加字段或格式。一些浮点格式可能会进一步细分为数据模板(或子格式)或由其定义。例如,给定数据格式的数据模板可以被定义为具有数据格式字段的不同子集和/或被定义为具有不同解释的给定字段。
科学、金融、自动矢量化通用、RMS(识别、挖掘和综合)以及视觉和多媒体应用(例如2D/3D图形、图像处理、视频压缩/解压、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据流(SIMD)指的是使处理器对多个数据元素执行一个操作的指令类型。SIMD技术可以用在这样的处理器中:能够逻辑上将寄存器中的比特分成多个固定大小或可变大小的数据元素,其中的每个数据元素表示一个单独的值。例如,在一个实施例中,64位寄存器中的比特可以被组织为包含四个单独的16位数据元素的源操作数,其中每个数据元素表示单独的16位值。这种类型的数据可以被称为“打包”数据类型或“矢量”数据类型,这种数据类型的操作数被称为打包数据操作数或向量操作数。在一个实施例中,打包数据项或向量可以是存储在单个寄存器内的打包数据元素的序列,打包数据操作数或向量操作数可以是SIMD指令(或“打包数据指令”或“矢量指令”)的源操作数或目的操作数。在一个实施例中,SIMD指令指定要在两个或更多个源向量操作数上执行的单个向量操作,以生成具有相同或不同大小、相同或不同数据元素数量以及相同或不同数据元素顺序的目的地向量操作数(也称为结果向量操作数)。
在一个实施例中,目的和源寄存器/数据是通用术语,用来表示对应数据或操作的源和目的。在一些实施例中,它们可以通过寄存器、存储器或具有除所描述的那些之外的其他名称或功能的其他存储区域来实现。例如,在一个实施例中,计算结果260可以是临时存储寄存器或其他存储区域,而第一操作数201和第二操作数202可以是第一和第二源存储寄存器或其他存储区域等等。在其他实施例中,操作数和结果存储区域中的两个或更多个可对应于同一存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回到用作目的地寄存器的两个源寄存器中的一个,源寄存器中的一个寄存器还可以充当目的地寄存器。
在一个实施例中,包括所有计算机可读介质(除瞬时传播信号之外)的非暂时性机器可读存储介质可以包含本文所述的全部或部分发明。
术语表
本文示例性公开的本发明可适当地在没有本文未具体公开的任何元素的情况下实施。
由于可以对所描述的本发明的优选实施例进行许多详细的修改、变化和改变,所以在前面的描述中以及在附图中示出的所有内容都被解释为说明性的而不是限制性的。
因此,本发明的范围应由所附权利要求及其合法等同物来确定。

Claims (15)

1.一种计算机实现的方法,包括:
从第一操作数寄存器(210)接收有界浮点格式(100)的第一操作数(201);其中所述有界浮点格式(100)包括符号位S字段(50)、指数E字段(51)、边界B字段(52)和有效位T字段(53);其中所述边界字段(52)包括丢失位D字段(54)和累积取整误差N字段(55),其中所述累积取整误差N字段(55)包括取整误差计数C字段(56)和取整位R字段(57);
从第二操作数寄存器(220)接收所述有界浮点格式(100)的第二操作数(202);
计算所述有界浮点格式(100)的有界浮点结果(280);以及
将所述有界浮点结果(280)存储在最终结果寄存器(285)中。
2.根据权利要求1所述的计算机实现的方法,其中:
计算有界浮点结果(280)包括计算出计算结果(260);
计算有界浮点结果(280)包括在所述计算结果(260)、BFP零(261)和sNaN(isb)(262)中进行选择;以及
在所述计算结果(260)、所述BFP零(261)和所述sNaN(isb)(262)中进行选择包括:
a.如果声明了零选择控制(821),则选择所述BFP零(261);
b.如果声明了sNaN选择控制(811),则选择所述sNaN(isb)(262);以及
c.如果既没有声明所述零选择控制(821)也没声明所述sNaN选择控制(811),则选择所述计算结果(260)。
3.根据权利要求1所述的计算机实现的方法,其中,计算有界浮点结果(280)包括:
计算主导边界(52H),其中计算所述主导边界(52H)包括:
a.计算最大指数控制(302)和指数差(321);
b.计算所述最大指数控制(302)包括将第一操作数指数E(51A)与第二操作数指数E(51B)进行比较;
c.当所述第二操作数指数E(51B)大于所述第一操作数指数E(51A)时,声明所述最大指数控制(302);
d.计算指数差(321)包括计算所述第一操作数指数E(51A)与所述第二操作数指数E(51B)中较大者与所述第一操作数指数E(51A)与所述第二操作数指数E(51B)中较小者之间的差;
e.由所述最大指数控制(302)确定是所述第一操作数(201)还是所述第二操作数(202)具有最大指数,以确定最大指数操作数边界B(52E);
f.由所述最大指数控制(302)确定是所述第一操作数(201)还是所述第二操作数(202)具有最小指数,以确定最小指数操作数边界B(52D);
g.通过减去所述指数差(321)来调整所述最小指数操作数边界B(52D)以产生限制边界B(52G);以及
h.选择所述限制边界B(52G)和所述最大指数操作数边界B(52E)中较大的一个。
4.根据权利要求1所述的计算机实现的方法,其中,所述计算有界浮点结果(280)包括通过主边界逻辑(600)计算结果边界B(52C)。
5.根据权利要求4所述的计算机实现的方法,还包括计算包括主导边界丢失位D(54C)的主导边界(52H);其中计算所述结果边界B(52C)包括:
确定规格化扩展(60A)是否非零;
如果所述规格化扩展X(60A)非零,则声明有效位过剩(741);
通过对具有最小指数E(241)的操作数的对齐有效位T与具有最大指数E(53E)的操作数的有效位T的和或差(251)的前导零进行计数,来确定前导零的数量(711);
将所述前导零的数量(711)加到所述主导边界丢失位D(54C)。
6.一种处理装置,包括:
多个寄存器(990);
主处理单元(910),用于执行内部指令并输出FPU指令(930、830、831);
有界浮点单元(BFPU)(950),可通信地耦接到所述主处理单元(910),所述(BFPU)(950)用于:
从所述主处理单元(910)接收至少两条BFPU指令(930、830),其中所述BFPU指令(930、830)包括浮点运算指令(930)和边界界限选择指令(830、832);
通过对有界浮点输入操作数(201、202)应用所述浮点运算指令(930)的操作来生成计算结果(260);
使用累积了抵消误差的抵消调整边界B(52J)和累积了取整误差的进位调整边界B(52M)来生成结果边界B(52C)误差值;
当所述计算结果(260)值中的有效位不足时,生成表示有效位不足的sNaN选择控制信号(811);
从所述计算结果(260)值、sNaN(isb)(262)的表示和BFP零(261)的有界浮点表示中的一个中选择有界浮点结果(280)值;以及
经由主处理单元(910)将所述有界浮点结果(280)值写入所述多个寄存器(990)的最终结果寄存器(285)中。
7.根据权利要求6所述的处理装置,其中,所述边界界限选择指令包括边界界限存储器默认重置控制(832)指令和用于设置编程的边界界限(831)值的界限写入控制(830)指令中的一个。
8.根据权利要求6所述的处理装置,其中,所述有界浮点输入操作数(201、202)是有界浮点格式(100)的,其中所述有界浮点格式(100)包括符号位S字段(50)、指数E字段(51)、边界B字段(52)和有效位T字段(53);其中所述边界字段(52)包括丢失位D字段(54)和累积取整误差N字段(55),并且其中所述累积取整误差N字段(55)包括取整误差计数C字段(56)和取整位R字段(57)。
9.根据权利要求6所述的处理装置,其中,所述从所述计算结果(260)值、所述sNaN(isb)(262)的表示和所述BFP零(261)的有界浮点表示中的一个中选择所述有界浮点结果(280)值,包括:
如果声明了零选择控制(821),则选择所述BFP零(261);
如果声明了所述sNaN选择控制信号(811),则选择所述sNaN(isb)(262);以及
如果既没有声明所述零选择控制(821)也没声明所述sNaN选择控制(811),则选择所述计算结果(260)。
10.一种非暂时性机器可读存储介质,包括数据,所述数据在被机器访问时使所述机器执行如下操作:
由有界浮点单元(BFPU)(950)从主处理单元(910)接收具有至少一个有界浮点输入操作数(201、202)的浮点运算指令(930)和边界界限选择指令(830、832);
通过对有界浮点输入操作数(201、202)应用所述浮点运算指令(930)的操作来生成计算结果(260)值;
使用累积了抵消误差的抵消调整边界B(52J)和累积了取整误差的进位调整边界B(52M)来生成结果边界B(52C)误差值;
当所述计算结果(260)值中的有效位不足时,生成表示有效位不足的sNaN选择控制信号(811);
从所述计算结果(260)值、sNaN(isb)(262)的表示和BFP零(261)的有界浮点表示中的一个中选择有界浮点结果(280)值;以及
经由主处理单元(910)将所述有界浮点结果(280)值写入所述多个所述寄存器(990)的最终结果寄存器(285)中。
11.根据权利要求10所述的非暂时性机器可读存储介质,其中所述边界界限选择指令包括默认边界界限(833)指令和用于设置编程的边界界限(831)值的界限写入控制(830)指令中的一个。
12.根据权利要求10所述的非暂时性机器可读存储介质,其中所述有界浮点输入操作数(201、202)是有界浮点格式(100)的,其中所述有界浮点格式(100)包括符号位S字段(50)、指数E字段(51)、边界B字段(52)和有效位T字段(53);其中所述边界字段(52)包括丢失位D字段(54)和累积取整误差N字段(55),其中所述累积取整误差N字段(55)包括取整误差计数C字段(56)和取整位R字段(57)。
13.根据权利要求10所述的非暂时性机器可读存储介质,其中所述从所述计算结果(260)值、所述sNaN(isb)(262)的表示和所述BFP零(261)的有界浮点表示中的一个中选择所述有界浮点结果(280)值,包括:
如果声明了零选择控制(821),则选择所述BFP零(261);
如果声明了所述sNaN选择控制信号(811),则选择所述sNaN(isb)(262);以及
如果既没有声明所述零选择控制(821)也没声明所述sNaN选择控制(811),则选择所述计算结果(260)。
14.根据权利要求10所述的非暂时性机器可读存储介质,其中计算所述计算结果(260)值包括:
计算主导边界(52H),其中计算所述主导边界(52H)包括:
i.计算最大指数控制(302)和指数差(321);
j.计算所述最大指数控制(302)包括将第一操作数指数E(51A)与第二操作数指数E(51B)进行比较;
k.当所述第二操作数指数E(51B)大于所述第一操作数指数E(51A)时,声明所述最大指数控制(302);
l.计算指数差(321)包括计算所述第一操作数指数E(51A)与所述第二操作数指数E(51B)中较大者与所述第一操作数指数E(51A)与所述第二操作数指数E(51B)中较小者之间的差;
m.由所述最大指数控制(302)确定是所述第一操作数(201)还是所述第二操作数(202)具有最大指数,以确定最大指数操作数边界B(52E);
n.由所述最大指数控制(302)确定是所述第一操作数(201)还是所述第二操作数(202)具有最小指数,以确定最小指数操作数边界B(52D);
o.通过减去所述指数差(321)来调整所述最小指数操作数边界B(52D)以产生限制边界B(52G);以及
p.选择所述限制边界B(52G)和所述最大指数操作数边界B(52E)中较大的一个。
15.根据权利要求10所述的非暂时性机器可读存储介质,其中
计算所述计算结果(260)值包括通过主边界逻辑(600)计算结果边界B(52C),其中计算所述结果边界B 52C包括:
确定规格化扩展(60A)是否非零;
如果所述规格化扩展X(60A)非零,则声明有效位过剩(741);
通过对具有最小指数E(241)的所述操作数的对齐有效位T与具有所述最大指数E(53E)的操作数的有效位T的和或差(251)的前导零进行计数,来确定前导零的数量(711);
将所述前导零的数量(711)加到所述主导边界丢失位D(54C)。
CN201680061906.1A 2015-10-24 2016-10-24 在浮点运算期间计算和保留误差边界的装置和方法 Active CN108139912B (zh)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201562246021P 2015-10-24 2015-10-24
US62/246,021 2015-10-24
US201662277137P 2016-01-11 2016-01-11
US62/277,137 2016-01-11
US201662375422P 2016-08-15 2016-08-15
US62/375,422 2016-08-15
US15/331,901 US9817662B2 (en) 2015-10-24 2016-10-23 Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
US15/331,901 2016-10-23
PCT/US2016/058551 WO2017070710A1 (en) 2015-10-24 2016-10-24 Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof

Publications (2)

Publication Number Publication Date
CN108139912A true CN108139912A (zh) 2018-06-08
CN108139912B CN108139912B (zh) 2022-08-30

Family

ID=58558203

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680061906.1A Active CN108139912B (zh) 2015-10-24 2016-10-24 在浮点运算期间计算和保留误差边界的装置和方法

Country Status (5)

Country Link
US (1) US9817662B2 (zh)
EP (1) EP3365771B1 (zh)
KR (1) KR102628164B1 (zh)
CN (1) CN108139912B (zh)
WO (1) WO2017070710A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109814834A (zh) * 2019-01-14 2019-05-28 中国人民解放军国防科技大学 一种基于条件数指导的浮点程序精度缺陷检测方法
CN114860190A (zh) * 2022-04-28 2022-08-05 中国人民解放军战略支援部队信息工程大学 一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法及系统

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170177336A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Hardware cancellation monitor for floating point operations
FR3093571B1 (fr) * 2019-03-08 2021-03-19 Commissariat Energie Atomique Procédé et dispositif de représentation en virgule flottante avec précision variable
CN117170622B (zh) * 2023-11-03 2024-03-01 深圳鲲云信息科技有限公司 累加器及用于累加器的方法和芯片电路及计算设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1471077A (zh) * 2002-06-20 2004-01-28 ���µ�����ҵ��ʽ���� 浮点存储方法及浮点运算装置
US20140188968A1 (en) * 2012-12-28 2014-07-03 Himanshu Kaul Variable precision floating point multiply-add circuit
CN104106045A (zh) * 2012-02-09 2014-10-15 高通股份有限公司 浮点常数产生指令
US20150286482A1 (en) * 2014-03-26 2015-10-08 Intel Corporation Three source operand floating point addition processors, methods, systems, and instructions

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3037701A (en) 1956-11-21 1962-06-05 Ibm Floating decimal point arithmetic control means for calculator
US3701976A (en) 1970-07-13 1972-10-31 Bell Telephone Labor Inc Floating point arithmetic unit for a parallel processing computer
FR2448188A1 (fr) 1979-02-02 1980-08-29 Anvar Procede et ensemble de calcul, aleatoirement par exces ou par defaut, pour fournir des resultats de calcul avec le nombre de chiffres significatifs exacts
US4597044A (en) * 1982-10-14 1986-06-24 Honeywell Information Systems, Inc. Apparatus and method for providing a composite descriptor in a data processing system
US4926370A (en) 1989-04-17 1990-05-15 International Business Machines Corporation Method and apparatus for processing postnormalization and rounding in parallel
US5631859A (en) * 1994-10-27 1997-05-20 Hewlett-Packard Company Floating point arithmetic unit having logic for quad precision arithmetic
US6108772A (en) * 1996-06-28 2000-08-22 Intel Corporation Method and apparatus for supporting multiple floating point processing models
US5844830A (en) 1996-08-07 1998-12-01 Sun Microsystems, Inc. Executing computer instrucrions by circuits having different latencies
JPH1055352A (ja) * 1996-08-08 1998-02-24 Fuji Xerox Co Ltd 浮動小数点数累積加算装置
US5954790A (en) 1996-10-17 1999-09-21 Samsung Electronics Company, Ltd. Method and apparatus for parallel prediction and computation of massive cancellation in floating point subtraction
US6049865A (en) * 1997-12-18 2000-04-11 Motorola, Inc. Method and apparatus for implementing floating point projection instructions
US6175847B1 (en) 1998-07-22 2001-01-16 Intrinsity, Inc. Shifting for parallel normalization and rounding technique for floating point arithmetic operations
ATE557343T1 (de) * 1998-08-24 2012-05-15 Microunity Systems Eng Prozessor und verfahren zur durchführung eines breitschaltungsbefehls mit breitem operand
JP4329332B2 (ja) 2002-01-15 2009-09-09 株式会社デンソー 電子制御装置及び制御プログラム
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7698353B2 (en) 2005-09-14 2010-04-13 Freescale Semiconductor, Inc. Floating point normalization and denormalization
US8005885B1 (en) * 2005-10-14 2011-08-23 Nvidia Corporation Encoded rounding control to emulate directed rounding during arithmetic operations
US20070260665A1 (en) * 2006-04-20 2007-11-08 Chengpu Wang Method of Specifying and Tracking Precision in Floating-point Calculation
US7865882B2 (en) * 2006-08-18 2011-01-04 International Business Machines Corporation Fast correctly rounding floating point conversion and identifying exceptional conversion
US8051117B2 (en) 2007-04-26 2011-11-01 International Business Machines Corporation Shift significand of decimal floating point data
US8539451B2 (en) * 2009-05-12 2013-09-17 Nec Laboratories America, Inc. Systems and methods for model checking the precision of programs employing floating-point operations
US8370226B1 (en) 2010-04-19 2013-02-05 Intuit Inc. Technique for correcting round-off errors
US8397187B2 (en) * 2010-04-23 2013-03-12 International Business Machines Corporation Verifying the error bound of numerical computation implemented in computer systems
US8751555B2 (en) * 2010-07-06 2014-06-10 Silminds, Llc, Egypt Rounding unit for decimal floating-point division
US8965945B2 (en) 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
US9223544B2 (en) 2012-09-07 2015-12-29 Intel Corporation Number representation and memory system for arithmetic
US9335996B2 (en) 2012-11-14 2016-05-10 Intel Corporation Recycling error bits in floating point units
US9104515B2 (en) 2012-12-14 2015-08-11 Fujitsu Limited Floating-point error detection and correction
US9317251B2 (en) * 2012-12-31 2016-04-19 Nvidia Corporation Efficient correction of normalizer shift amount errors in fused multiply add operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1471077A (zh) * 2002-06-20 2004-01-28 ���µ�����ҵ��ʽ���� 浮点存储方法及浮点运算装置
CN104106045A (zh) * 2012-02-09 2014-10-15 高通股份有限公司 浮点常数产生指令
US20140188968A1 (en) * 2012-12-28 2014-07-03 Himanshu Kaul Variable precision floating point multiply-add circuit
US20150286482A1 (en) * 2014-03-26 2015-10-08 Intel Corporation Three source operand floating point addition processors, methods, systems, and instructions

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
胡海兵等: "浮点协处理器设计及其在电力电子数字控制平台中的应用", 《中国电机工程学报》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109814834A (zh) * 2019-01-14 2019-05-28 中国人民解放军国防科技大学 一种基于条件数指导的浮点程序精度缺陷检测方法
CN109814834B (zh) * 2019-01-14 2021-04-20 中国人民解放军国防科技大学 一种基于条件数指导的浮点程序精度缺陷检测方法
CN114860190A (zh) * 2022-04-28 2022-08-05 中国人民解放军战略支援部队信息工程大学 一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法及系统

Also Published As

Publication number Publication date
EP3365771A1 (en) 2018-08-29
EP3365771B1 (en) 2020-12-09
US9817662B2 (en) 2017-11-14
WO2017070710A1 (en) 2017-04-27
EP3365771A4 (en) 2019-06-12
KR102628164B1 (ko) 2024-01-24
CN108139912B (zh) 2022-08-30
US20170115986A1 (en) 2017-04-27
KR20180084057A (ko) 2018-07-24

Similar Documents

Publication Publication Date Title
CN108139912A (zh) 在浮点运算期间计算和保留误差边界的装置和方法
US20190079730A1 (en) Round for reround mode in a decimal floating point instruction
US5995991A (en) Floating point architecture with tagged operands
CN104899004B (zh) 一种用于将浮点操作数相乘的数据处理装置和方法
TWI526928B (zh) 向量浮點引數之減少
KR101517762B1 (ko) 벡터 리딩 0, 벡터 트레일링 0, 벡터 오퍼랜드 1 카운트 및 벡터 패리티 계산을 위한 기능 유닛
US7395297B2 (en) Floating point system that represents status flag information within a floating point operand
US10585972B2 (en) Apparatus for performing modal interval calculations based on decoration configuration
CN106528050B (zh) 尾随或前导数字预测器
US8713084B2 (en) Method, system and computer program product for verifying floating point divide operation results
US11797300B1 (en) Apparatus for calculating and retaining a bound on error during floating-point operations and methods thereof
US10540143B2 (en) Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
Muller et al. Software implementation of floating-point arithmetic
CN112394904A (zh) 一种浮点数据处理方法、运算器及电子设备
US11487506B2 (en) Condition code anticipator for hexadecimal floating point
US11061993B2 (en) Apparatus for performing modal interval calculations based on decoration configuration
Kulisch et al. High speed associative accumulation of floating-point numbers and floating-point intervals
JPH01282633A (ja) 非正規化数の処理方式
US8392490B2 (en) Identifying decimal floating point addition operations that do not require alignment, normalization or rounding
Ou et al. Lightweight arithmetic units for VLSI digital signal processors
JP3522387B2 (ja) パイプライン演算装置
Vlăduţiu et al. The Representation of Numbers in Computing Systems
Muller et al. Introduction to Computer Arithmetic
JPH0346069A (ja) ベクトル演算方式
JP2001331305A (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
GR01 Patent grant
GR01 Patent grant