首页> 中国专利> 浮点处理单元中面向精确异常的流水线调度方法

浮点处理单元中面向精确异常的流水线调度方法

摘要

本发明公开了一种浮点处理单元中面向精确异常的流水线调度方法,包括下述步骤:在浮点译码单元设计精确异常预测逻辑,检查是否发生数据相关、资源冲突、以及在译码级和写回级异常发生的情况;如果预测产生异常,则同步流水线,保证该指令之前的指令执行完毕,该指令之后的指令没有发射,跳到步骤4);如果当前指令不产生数据相关和控制相关,并且当前指令的指令单元空闲,则乱序发射该指令,并且乱序完成;否则停滞当前指令发射至相关消除;顺序执行该指令,如果出现异常,响应精确异常。与现有技术相比,本发明设计的浮点单元在实现精确异常的同时,浮点处理单元面积降低0.18mm2,关键路径提高了0.2ns。

著录项

  • 公开/公告号CN1851640A

    专利类型发明专利

  • 公开/公告日2006-10-25

    原文格式PDF

  • 申请/专利权人 西北工业大学;

    申请/专利号CN200610042864.5

  • 申请日2006-05-25

  • 分类号G06F9/38(20060101);

  • 代理机构61204 西北工业大学专利中心;

  • 代理人黄毅新

  • 地址 710072 陕西省西安市友谊西路127号

  • 入库时间 2023-12-17 17:46:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-07-25

    未缴年费专利权终止 IPC(主分类):G06F9/38 授权公告日:20080806 终止日期:20110525 申请日:20060525

    专利权的终止

  • 2008-08-06

    授权

    授权

  • 2006-12-20

    实质审查的生效

    实质审查的生效

  • 2006-10-25

    公开

    公开

说明书

技术领域

本发明涉及一种浮点处理单元中面向精确异常的流水线调度方法。

背景技术

在基于指令级并行的浮点单元的设计中,为了提高指令的吞吐率,普遍采用指令乱序执行机制。实现指令乱序机制的关键是如何处理指令之间的相关。目前处理流水线相关的方法可分为两种。

一种是流水线的静态调度方法。该方法是如果当前发射队列中的指令与已经在流水线中的指令之间存在数据相关,且不能通过旁路技术或直接通路技术来避免时,暂停流水线发射逻辑,直到该相关消除。该方法的主要局限是如果相关指令在流水线中被停顿,那么后继指令都无法前行。因此,若两条紧挨着的指令存在相关关系,就会引起流水线的停顿。该方法的优点是控制逻辑比较简单,易于实现。但是执行效率低,已不被普遍采用。

另一种是流水线的动态调度法,即由流水线中的硬件逻辑动态调整相关的指令执行顺序以减少流水线相关的影响。文献“A Efficient Algorithm for Exploiting Multiple ArithmeticUnits(IBM J.Research and Development,Vol.11,Jan.1967,pp.25-33.)”介绍了一种采用Tomasulo方法来处理指令相关,可以较好的解决指令乱序执行所引起的相关。动态调度算法和静态调度算法相比,使处理器的执行效率有了显著的提高。因此先进微处理器设计中普遍采用该方法来处理相关。但该方法的缺点由于指令乱序执行的控制逻辑比较复杂,限制了该方法在面向精确异常处理的嵌入式处理器设计中的使用;同时,该方法浮点处理单元面积大,浮点处理单元面积为1.90mm2;关键路径延迟时间长,关键路径延迟时间为4ns,增加了设计成本。

发明内容

为了克服现有技术浮点处理单元面积大、关键路径延迟时间长的不足,本发明提供一种在浮点处理单元中面向精确异常的流水线调度方法。该方法实现了浮点指令面向精确异常的动态调度,同时降低了处理器的面积,使处理器的整体性能得到了提高。

本发明解决其技术问题所采用的技术方案是:一种浮点处理单元中面向精确异常的流水线调度方法,其特征在于,包括下述步骤:

1)在浮点译码单元设计精确异常预测逻辑,检查是否发生数据相关、资源冲突、以及在译码级和写回级异常发生的情况;

2)如果预测产生异常,则同步流水线,保证该指令之前的指令执行完毕,该指令之后的指令没有发射,跳到步骤4);

3)如果当前指令不产生数据相关和控制相关,并且当前指令的指令单元空闲,则乱序发射该指令,并且乱序完成;否则停滞当前指令发射至相关消除;

4)顺序执行该指令,如果出现异常,响应精确异常。

本发明的有益效果是,由于采用了基于浮点精确异常预测的动态流水线调度方法,浮点指令可以在浮点处理单元的四个流水线中同时执行,乱序结束。保证如果有异常产生,一定产生所需的精确异常。

使用SPEC95中的浮点基准程序对现有技术和本发明所实现的浮点处理单元进行测试,结果显示,采用本发明设计的浮点单元在实现精确异常的同时,浮点处理单元面积为1.72mm2,比现有技术降低0.18mm2,关键路径为3.8ns,比现有技术提高了0.2ns,提高了处理器的性能。

下面结合实施例对本发明进一步说明。

具体实施方式

在浮点处理单元中,存在四条彼此无关的流水线,乘加流水线,除法/平方根流水线,浮点存取流水线以及移动/类型转换流水线。参见表1,四条彼此无关的流水线中每一条流水线的延迟各不相同。并且除了除法/平方根流水线和存取流水线之外,在没有数据相关发生的情况下,可以每一个时钟周期向乘加流水线和移动/类型转换流水线发射一条指令。

  表1指令及其执行延迟周期

  指令  延时(周期)  Fadd  3  Fsub  3  Fmul  3  Fdiv  8  Fload*  2  Fstore*  1  Fd2i  1  Fmsub  3  Fmadd  3  Fsquare root  18  Fmov  1

表1中标记*的标志表示为浮点处理单元完成此操作所需要的准备时间。

浮点处理单元中,译码控制逻辑检查是否发生数据相关、资源冲突、以及在译码级和写回级异常发生的情况。在没有以上各种情况产生的情况下,主处理器可以连续发送指令。指令在四个流水线中同时执行,乱序结束。如浮点加指令可以先被发射,紧接着浮点移动指令被发射。

本发明的微处理器所支持的浮点异常类型如表2所示:

     表2本发明的微处理器所支持的浮点异常种类

  序号  名称  含义  1  FX  有浮点异常发生  2  FEX  有浮点异常发生,并且被使能  3  OX  发生浮点上溢  4  UX  发生浮点下溢  5  XX  发生浮点不精确异常  6  ZX  发生浮点除零异常  7  VXSNAN  浮点操作数异常,操作数类型是SNaN  8  VXIDI  浮点操作异常,无穷数相除  9  VXISI  浮点操作异常,无穷数相减  10  VXZDZ  浮点操作异常,零相除  11  VXIMZ  浮点操作异常,无穷与零相乘  12  VXVC  浮点比较异常  13  VXSQRT  浮点平方根操作数异常

在采用该方法实现中,对于每一个异常,都有一个异常使能位与之相对应,用来进行必要的屏蔽工作。在所有的异常中,最可能发生是浮点不精确异常,几乎每一条浮点算术运算指令的结果都会进行舍入并且产生非精确结果。因此,在大多数情况下,XX的对应控制位应该关闭。

在所有异常中,VX和ZX可以在指令译码完成、操作数读出后、运算执行之前能够被判断出。并且由于在寄存器堆中,每一个操作数都有属于自身的三位标志位来标志操作数的特性。因此,在译码结束,并且操作数读出后,可以立即判断出所有的VX异常和ZX异常。

对于上溢OX和下溢UX操作,其判断过程相对而言比较复杂。在算术操作之前,检查读出的两个操作数的指数对于当前的有效操作而言,有没有可能发生溢出。如果有,那么控制逻辑将使这条指令按顺序结束,并且顺序结束以后的指令。当这条指令结束后,判断是否真的有异常产生,如果预判断是错误的,那么可以继续乱序执行和乱序结束指令;如果判断正确,那么就等待进入异常处理程序,同时,冲刷浮点处理单元的所有运算单元和中间寄存器。例如:如果两个操作数的指数都是最大数,并且当前操作是有效加,那么必然会产生上溢。具体实现如下:

对于双精度有效加法,判断两个操作数的指数中是否至少有一个是1023。如果是,则结果有可能发生上溢。这是因为当一个操作数的指数是1023时,假如加法的结果大于等于2,则指数会成为1024,大于IEEE754规定的范围,发生上溢。

对于双精度有效减法,判断两个操作数中大数的指数小于-970。如果是,那么有可能会产生下溢。情况如下:

1)两个操作数指数相同时,当两个操作数的指数都是-971时,减法的结果会进行前导零判断,假如结果出了最低位之外都是0,那么指数需要减去52,那么最终的结果的指数是-1023,超出了IEEE754规定的范围;

2)如果两个操作数的指数不同,那么最极端的情况是,大数的指数是-971,小数的指数是-972,并且大数的尾数是1.00...000,小数的尾数是1.111...111。则两者相减的结果是0.000...001。规格化后,结果的指数为-1023,超出了IEEE754规定的范围;

对于双精度乘法和加/减法而言,以上的判断机制比较容易实现。但是对于双精度乘加指令而言,由于存在一个加法源操作数与中间乘法结果的预测比较。因此,在译码结束,并且三个源操作数读出后,很难直接通过上述方法进行预测异常判断。

对于双精度有效浮点乘加指令或者有效乘减指令,假设是D=A×B±C。改进如下:

对于双精度浮点乘加指令。首先预测A×B结果的指数,在多数情况下,即exp(result_from_multi)=exp(A)+exp(B)+1。因为,A×B的结果在大多数情况下是大于等于2的。因此,按照双精度浮点加法的预测方法,当exp(result_from_multi)的值或exp(C)的值有一个是1023时,就有可能发生上溢。

对于双精度浮点乘减指令。首先预测A×B结果的指数,在大多数情况下,即exp(result_from_multi)=exp(A)+exp(B)+1。然后判断两个操作数中大数的指数小于-970。如果是,那么有可能会产生下溢。

由于乘加操作或者乘减操作可以通过操作数的预置而变化成为单纯的乘操作或者加减操作。因此,可以将对乘法操作异常的预测、加减操作异常的预测与乘加操作异常的预测相结合以节省硬件逻辑。

对于单精度操作而言,其判断过程与上类似。不同之处在于单精度异常预测的范围与双精度不同。

如果接收到load/store指令,主处理器将停止发射指令直到load/store指令结束执行。这主要是因为load/store指令,尤其是load指令所需要花费的执行周期不仅仅是与微处理器本身有关,还与外部总线的空闲以及目标存储器的空闲与否有关,因此具有一个不确定的执行周期。并且,当总线交易发生错误的时候,也需要发出精确异常,因此,load/store后面的指令应该暂停执行直到指令执行结束。

本发明在我们设计完成的嵌入式处理器“龙腾R2”中,完成了该处理器浮点单元的设计。表3是对采用Tomasulo方法和本发明所实现的浮点处理单元进行性能比较。其中,比较所使用的测试程序是基准程序SPEC95中的浮点基准程序。结果显示,与Tomasulo方法相比较,采用本方法设计的浮点单元在实现精确异常的同时,浮点处理单元面积降低0.18mm2,关键路径提高了0.2ns。

表3采用两种方法实现的浮点单元的性能比较

  使用方法  关键路径延迟(ns) 面积(mm2)  Tomasulo  4 1.90  本发明  3.8 1.72

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号