当前位置: 首页 > 专利查询>英特尔公司专利>正文

检测推测性浮点运算IEEE下溢异常的机制制造技术

技术编号:2878005 阅读:251 留言:0更新日期:2012-04-11 18:40
公开了一种机制,用来检测以推测方式执行的浮点运算的下溢情况。浮点状态寄存器包括一个状态标志,当浮点指令产生的结果“细小”的时候将它置位。清除这个状态标志,屏蔽所有异常,以推测方式执行指令。读出“细小”异常标志,以确定以推测方式执行的指令是否会导致未屏蔽下溢异常。如果处理器到达跟这个指令有关的一个注册点就会发生这一异常。如果没到达这一点就可以忽略这一异常。(*该技术在2020年保护过期,可自由使用*)

【技术实现步骤摘要】
【国外来华专利技术】
技术介绍
一条指令可以被安排成跟一组指令并行执行,也就是这条指令能够跟这一组指令同时执行,如果这条指令不需要这一组指令中任何一个指令产生的结果,也就是说这个指令不依赖于任何其它指令的结果。为了提高ILP,一些编译器在被安排的代码部分的指定范围内寻找独立指令,安排这些独立指令跟这个指令部分中的指令同时执行。分支指令在处理器执行的指令序列(“执行路径”)中增加了不确定因素,因而使得指令的安排更加复杂。随着有关分支条件的分解度不同,分支指令使处理器沿着两条或者更多条执行路径中的一条往下走。我们说在这一分支指令以后一条执行路径上的指令受到这一分支指令的“保护”,因为它的执行状态,也就是是否执行这条指令,取决于这一分支是如何分解的。控制推测是编译器的优化,由此来重新安排指令,在保护其执行的分支之前执行。在保护它的分支之前执行这一指令必定是推测性的,因为除非分支条件被随后分解,否则就不会知道是否需要实际执行这一指令。以推测方式执行一条指令的时候,不应当寄存指令可能触发的特定事件,除非分解了指令的执行状态。例如,处理器对每个浮点指令产生的结果进行各种检查,以确定这一结果是否满足特定的大小或者格式标准。不满足这些标准的结果必定是异常的,可以触发对“异常处理程序”的调用。二进制算术运算(IEEE 754)的IEEE 754-1985标准给浮点运算的异常下了定义。例如,当数值结果太大(小),不能够用为这个结果指定的格式表示的时候,就出现了上溢(下溢)。是否出现异常可以用对应状态标志的状态来说明,它们在产生这一结果的浮点硬件的控制下被置位。当异常被允许(未加屏蔽),并且对应的状态标志说明发生了异常的时候,就调用一个异常处理程序来处理这一异常。如果异常被禁止(被屏蔽),就不调用异常处理程序,即使对应的状态标志说明发生了异常。为推测性指令屏蔽所有异常能够防止处理器在确定指令的执行状态之前将资源耗费在这条指令上。如果以推测方式执行的指令不在处理器的执行路径上,那么用来处理它产生的异常的任何资源都是一种浪费。关于以推测方式执行的浮点指令的一个难题是在IEEE 754下,下溢状态标志是在不同条件下置位的,具体取决于是否屏蔽了下溢异常。当下溢异常未屏蔽的时候,如果计算出来的数比为这个数指定的格式能够表示的最小数小,也就是说,这个结果毫无疑问地“细小”,就将下溢状态标志置位。如果下溢异常被屏蔽,那么当结果“细小”以及“不精确”,也就是不能够精确地表示它的时候,都要将下溢异常状态标志置位。这样,指令能够产生不同的结果,具体取决于它是被正常执行,也就是按照它的原始顺序执行的,还是以推测方式执行的。本专利技术提供一种机制,用来解决跟推测方式执行的指令的异常处理有关的这些难题和其它难题。专利技术简述本专利技术提供一种机制,用来在以推测方式执行的浮点指令中检测下溢情况。本专利技术的一种方法对浮点指令的下溢异常进行屏蔽,并执行这一指令。如果这个指令产生的结果小于指定的一个最小值,就将状态标志置位。在本专利技术的一个实施方案中,如果到达跟这个指令有关的注册点,就读取这个状态标志,如果这个状态标志被置位,就产生一个未屏蔽的下溢异常。在本专利技术的另一个实施方案中,状态标志是浮点状态寄存器中的一个粘性位,通过执行一个清除标志指令来清除这个状态标志。附图说明图1是适合于本专利技术中一个浮点状态寄存器实施方案的框图。图2是图1所示浮点状态寄存器中一个状态字段的一个实施方案框图。图3是包括采用本专利技术的下溢报告机制的一个处理器计算机系统框图。图4是本专利技术一个方法的流程图,该方法用于检测以推测方式执行的浮点指令的未屏蔽下溢异常。专利技术详述下面给出许多具体细节,以便全面理解本专利技术。但是,在本专利技术的启发下,本领域中的普通技术人员会明白可以实践本专利技术而不需要这些具体细节。此外,没有对众所周知的方法、程序、部件和电路进行详细描述,以便将注意力集中在本专利技术的特征上。描述本专利技术的时候针对的是IEEE 745,但是本专利技术并不限于这一标准。在IEEE 745下,定义下溢的时候考虑的是“细小”和“不精确”,将结果舍入以后检查它是否“细小”。如果在指数范围没有限制的情况下计算出来的结果是严格在+2Exp(min)和-2Exp(min)范围内的一个非零值,就认为这个结果“细小”。在这里,Exp(min)是给定表示中的最小指数。检测“细小”的结果常常是非常重要的,因为在后续计算中将它们作为除数会导致下溢。在同样的标准下,如果它跟指数范围和精度没有限制的时候计算出来的结果相差很大,这个结果就是“不精确的”。根据IEEE 745,按照下溢异常被屏蔽(禁止)还是未屏蔽(允许),会在不同的情况下出现下溢异常。当下溢异常捕获未被禁止的时候,运算结果“细小”的时候会出现下溢异常。当下溢异常捕获被屏蔽的时候,如果算术运算结果“细小”同时“不精确”就出现下溢异常。如上所述,这种差别使得对以推测方式执行的浮点指令下溢异常的检测更加困难。执行这些指令的时候所有异常,包括下溢异常,通常都是被屏蔽的。屏蔽异常能够防止处理器在分辨出“异常”指令的情况以前投入资源。如果以推测方式执行的指令来自分支绕过去的执行路径,那么对以推测方式执行的指令产生的异常进行处理就会浪费处理器资源。在这种情况下,只有在指令产生的结果既“细小”又“不精确”的时候才检测以推测方式执行的指令的下溢异常。如果这一指令是以正常方式也就是以非推测方式执行的,同时下溢异常未屏蔽,那么当指令产生的结果“细小”的时候就会检测下溢异常,而不管它是否“不精确”。指令正常执行跟以推测方式执行的时候会产生不同结果这一可能性使得推测的优势丧失殆尽。本专利技术能够在指令以推测方式执行的时候,也就是在下溢异常被屏蔽的时候,检测未屏蔽下溢异常。它是通过在浮点指令产生一个“细小”结果的时候将状态标志置位来做到这一点的。状态标志是按照IEEE745置位/复位,可以被屏蔽的下溢异常状态标志以外的一个标志。将“细小”状态标志设置为选定的值,例如1,能够说明出现了未屏蔽的下溢异常,而不管下溢异常是否被屏蔽。对于本专利技术的一个实施方案,下溢异常通过有关的屏蔽位和异常标志被初始化而加以屏蔽。初始化可以通过例如清除IEEE状态标志的一个指令来完成,只要这个指令同时清除“细小”状态标志。然后可以以推测方式执行浮点指令,按照产生的结果更新下溢状态标志。检查“细小”状态标志的状态来确定这一条指令是否产生了一个未屏蔽下溢异常。这可以在确定了控制流中以推测方式执行的指令依赖于处理器的执行路径的点来完成。例如,当处理器到达控制流中正常,也就是非推测方式执行的指令点的时候,处理器可以读“细小”标志,如果需要产生一个下溢异常。更加一般地,处理器可以在它非常清楚这条指令会更新处理器的结构状态,例如当处理器到达指令的注册点的时候,产生异常。图1是适合于本专利技术的浮点状态寄存器(FPSR)100的一个实施方案框图。FPRS 100包括浮点运算的动态控制和状态信息。这一信息说明,例如,要用几种不同模式中的哪一种来确定浮点运算的数值结果,以及如果这一运算结果产生一个特殊异常是否做出响应。公开的FPSR 100的这个实施方案包括一个捕获字段110以及一个或者多个状态字段120。捕获字段110包括一系列屏蔽位112,它们中间的每一个都可以本文档来自技高网...

【技术保护点】
检测下溢的一种方法,包括:清除第一个状态标志;屏蔽下溢异常;执行浮点指令;读取状态标志以确定这一浮点指令是否会导致未屏蔽下溢异常。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:S斯托里
申请(专利权)人:英特尔公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1