CN1851640A - 浮点处理单元中面向精确异常的流水线调度方法 - Google Patents
浮点处理单元中面向精确异常的流水线调度方法 Download PDFInfo
- Publication number
- CN1851640A CN1851640A CN 200610042864 CN200610042864A CN1851640A CN 1851640 A CN1851640 A CN 1851640A CN 200610042864 CN200610042864 CN 200610042864 CN 200610042864 A CN200610042864 A CN 200610042864A CN 1851640 A CN1851640 A CN 1851640A
- Authority
- CN
- China
- Prior art keywords
- instruction
- abnormal
- floating
- present
- relevant
- 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
Links
Landscapes
- Advance Control (AREA)
Abstract
本发明公开了一种浮点处理单元中面向精确异常的流水线调度方法,包括下述步骤:在浮点译码单元设计精确异常预测逻辑,检查是否发生数据相关、资源冲突、以及在译码级和写回级异常发生的情况;如果预测产生异常,则同步流水线,保证该指令之前的指令执行完毕,该指令之后的指令没有发射,跳到步骤4);如果当前指令不产生数据相关和控制相关,并且当前指令的指令单元空闲,则乱序发射该指令,并且乱序完成;否则停滞当前指令发射至相关消除;顺序执行该指令,如果出现异常,响应精确异常。与现有技术相比,本发明设计的浮点单元在实现精确异常的同时,浮点处理单元面积降低0.18mm2,关键路径提高了0.2ns。
Description
技术领域
本发明涉及一种浮点处理单元中面向精确异常的流水线调度方法。
背景技术
在基于指令级并行的浮点单元的设计中,为了提高指令的吞吐率,普遍采用指令乱序执行机制。实现指令乱序机制的关键是如何处理指令之间的相关。目前处理流水线相关的方法可分为两种。
一种是流水线的静态调度方法。该方法是如果当前发射队列中的指令与已经在流水线中的指令之间存在数据相关,且不能通过旁路技术或直接通路技术来避免时,暂停流水线发射逻辑,直到该相关消除。该方法的主要局限是如果相关指令在流水线中被停顿,那么后继指令都无法前行。因此,若两条紧挨着的指令存在相关关系,就会引起流水线的停顿。该方法的优点是控制逻辑比较简单,易于实现。但是执行效率低,已不被普遍采用。
另一种是流水线的动态调度法,即由流水线中的硬件逻辑动态调整相关的指令执行顺序以减少流水线相关的影响。文献“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 |
Claims (1)
1、一种浮点处理单元中面向精确异常的流水线调度方法,其特征在于,包括下述步骤:
1)在浮点译码单元设计精确异常预测逻辑,检查是否发生数据相关、资源冲突、以及在译码级和写回级异常发生的情况;
2)如果预测产生异常,则同步流水线,保证该指令之前的指令执行完毕,该指令之后的指令没有发射,跳到步骤4);
3)如果当前指令不产生数据相关和控制相关,并且当前指令的指令单元空闲,则乱序发射该指令,并且乱序完成;否则停滞当前指令发射至相关消除;
4)顺序执行该指令,如果出现异常,响应精确异常。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100428645A CN100409181C (zh) | 2006-05-25 | 2006-05-25 | 浮点处理单元中面向精确异常的流水线调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100428645A CN100409181C (zh) | 2006-05-25 | 2006-05-25 | 浮点处理单元中面向精确异常的流水线调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1851640A true CN1851640A (zh) | 2006-10-25 |
CN100409181C CN100409181C (zh) | 2008-08-06 |
Family
ID=37133119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100428645A Expired - Fee Related CN100409181C (zh) | 2006-05-25 | 2006-05-25 | 浮点处理单元中面向精确异常的流水线调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100409181C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706714B (zh) * | 2009-11-23 | 2014-03-26 | 龙芯中科技术有限公司 | 指令发射系统及方法、处理器及其设计方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6571265B1 (en) * | 1999-10-29 | 2003-05-27 | Intel Corporation | Mechanism to detect IEEE underflow exceptions on speculative floating-point operations |
CN1234066C (zh) * | 2001-09-27 | 2005-12-28 | 中国科学院计算技术研究所 | 基于操作队列复用的指令流水线系统和方法 |
CN1266592C (zh) * | 2003-11-26 | 2006-07-26 | 中国人民解放军国防科学技术大学 | 依据确定延迟的动态vliw指令调度方法 |
-
2006
- 2006-05-25 CN CNB2006100428645A patent/CN100409181C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706714B (zh) * | 2009-11-23 | 2014-03-26 | 龙芯中科技术有限公司 | 指令发射系统及方法、处理器及其设计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100409181C (zh) | 2008-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Boggs et al. | The Microarchitecture of the Intel Pentium 4 Processor on 90nm Technology. | |
US8447800B2 (en) | Mode-based multiply-add recoding for denormal operands | |
US5394351A (en) | Optimized binary adder and comparator having an implicit constant for an input | |
US10061588B2 (en) | Tracking operand liveness information in a computer system and performing function based on the liveness information | |
US6112019A (en) | Distributed instruction queue | |
US5699279A (en) | Optimized binary adders and comparators for inputs having different widths | |
US8762444B2 (en) | Fast condition code generation for arithmetic logic unit | |
US9086890B2 (en) | Division unit with normalization circuit and plural divide engines for receiving instructions when divide engine availability is indicated | |
US8452831B2 (en) | Apparatus and method for implementing hardware support for denormalized operands for floating-point divide operations | |
US6341300B1 (en) | Parallel fixed point square root and reciprocal square root computation unit in a processor | |
KR20150006004A (ko) | 프로세서 명령 세트 내의 술어 계산 | |
US5590351A (en) | Superscalar execution unit for sequential instruction pointer updates and segment limit checks | |
US6351760B1 (en) | Division unit in a processor using a piece-wise quadratic approximation technique | |
US20160283247A1 (en) | Apparatuses and methods to selectively execute a commit instruction | |
US6516462B1 (en) | Cache miss saving for speculation load operation | |
Gilani et al. | Exploiting GPU peak-power and performance tradeoffs through reduced effective pipeline latency | |
Atoofian et al. | Reducing energy in GPGPUs through approximate trivial bypassing | |
US6678710B1 (en) | Logarithmic number system for performing calculations in a processor | |
US10228939B2 (en) | Efficient conversion of numbers from database floating point format to binary integer format | |
US6757812B1 (en) | Leading bit prediction with in-parallel correction | |
CN100409181C (zh) | 浮点处理单元中面向精确异常的流水线调度方法 | |
Lutz et al. | Early zero detection [integrated adder/subtracter/zero-detector] | |
CN101615114B (zh) | 完成两次乘法两次加法两次位移的微处理器实现方法 | |
Gilani et al. | Virtual floating-point units for low-power embedded processors | |
US8966230B2 (en) | Dynamic selection of execution stage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080806 Termination date: 20110525 |