首页> 中国专利> 最佳化微处理器执行x87浮点加法指令的装置及方法

最佳化微处理器执行x87浮点加法指令的装置及方法

摘要

本发明提供了一种最佳化微处理器执行x87浮点加法指令的装置及方法,其中该微处理器具有精度控制场、指令调度器及浮点单元。该浮点单元从该指令调度器接收浮点加法指令,从其加数中产生总和。该浮点单元判断是否有任何条件存在于该等加数上,该等条件关于该精度控制场的精度及该等加数对舍入运算的贡献。若无条件存在,该浮点单元依舍入运算判断做舍入运算判断。若任何条件存在,该浮点单元将该总和及由该等加数所导出的舍入信息予以储存,并通知该指令调度器重新调度该指令。于重新调度指令时,该浮点单元依该储存的舍入信息及该精度控制场做舍入运算判断,并依舍入运算判断选择性地舍入运算该总和。

著录项

  • 公开/公告号CN101377733A

    专利类型发明专利

  • 公开/公告日2009-03-04

    原文格式PDF

  • 申请/专利权人 威盛电子股份有限公司;

    申请/专利号CN200810169455.0

  • 发明设计人 汤姆·艾尔摩;泰瑞·派克斯;

    申请日2008-10-22

  • 分类号G06F7/57;G06F7/499;

  • 代理机构北京市柳沈律师事务所;

  • 代理人蒲迈文

  • 地址 中国台湾台北县

  • 入库时间 2023-12-17 21:36:28

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-10-06

    授权

    授权

  • 2009-04-29

    实质审查的生效

    实质审查的生效

  • 2009-03-04

    公开

    公开

说明书

技术领域

本发明是关于浮点数的数学运算,更是关于执行高速x87浮点加法运算的方法与系统。

背景技术

浮点数,一般来说,由符号位、指数及包含该浮点数值中有效数字的尾数(故亦称为有效数)所表示。举例而言,以该IEEE标准754对二进制浮点运算的定义,当表示归一化的浮点数时,其尾数包括整数1及在二进制小数点之后的分数。

x87架构为执行浮点运算的常用架构。该x87架构描述于IA-32英特尔架构软件开发者手册第1集-基本架构(2006年6月)之中(并入全文中对各种议题的参考文献,在此简称为「英特尔手册」)。特别的是,其第4.8节,描述实数在各种浮点数形式中的表示法;第8章大体描述其如何以x87浮点运算单元(Floating Point Unit,FPU)进行程序设计;而第5.2节描述特定的x87FPU指令。

x87FPU共支持三种不同的浮点运算形式:单精度形式数字为32位,其又包括1位表示正负号、8位表示指数、以及23位表示尾数;双精度形式数字为64位,其又包括1位表示正负号、11位表示指数、以及52位表示尾数;双扩充精度形式数字为80位,其包括1位表示正负号、15位表示指数、1整数字元、以及63位表示尾数。浮点数字的精度定为其尾数的位数。因此,若在该单精度和双精度形式中,给定隐含整数1的位至该二进制小数点的左侧,及在该双扩充精度形式中给定确实整数1的位至该二进制小数点的左侧时,则该单精度形式的浮点数限制至24位,该双精度形式的浮点数字限制至53位,而该双扩充精度形式被系统默认的浮点数字则限制至64位。然而,执行于双扩充精度形式浮点数的精度计算法可能被限制少于64位,且该精度限制乃由程序设计者所决定。x87 FPU包括精度控制(Precision Control,PC)场以改变x87 FPU执行浮点计算的精度。举例而言,若该程序写至该PC场指定为单精度,就算一个或一个以上的加数可能具有大于该24位的精度,而该x87 FPU仍以24位精度表示其结果。按此,该FPU会将该结果的有效值中、小于该PC场所指定精度的位数予以舍去(即将该位数化为零)。

x87FPU最常执行的浮点运算指令即加法(含减法)指令。浮点加法指令执行Ra+Rb的计算,其中Ra和Rb为浮点加数。Ra的尾数于此标示为A而Rb的尾数于此标示为B。假设Ra为较大的加数而Rb为较小的加数,例如,Ra具有较Rb大的指数。x87 FPU按照Ra与Rb指数的差值移动B数个位,以校准较小加数的尾数以配合较大加数的尾数。然后,该x87 FPU将尾数A与校准后的尾数B予以相加而产生总和。该FPU于是归一化该总和以移除任何前置的零值。最后,该FPU对该归一化总和执行舍入运算。

对于x87 FPU执行浮点加法指令的时机而言,该舍入运算可说相当重要。FPU依照具有频率及周期的频率以执行指令。对已知的半导体制程技术和FPU设计(例如,需要多少门延迟(gate delay)以执行该加法运算)而言,其可能必需延长该频率周期以调整该舍入运算的时机,以完成指令的执行。否则,FPU常需更多频率周期以执行加法运算。在此情况下,对FPU的效能而言,若能以最少的频率周期执行浮点加法指令(常有已知的频率周期、FPU设计以执行该指令的门延迟、以及使用的该半导体制程技术等),则可说是十分理想。

舍入运算可判断执行浮点加法指令时是否需要额外的频率周期,例如:该FPU执行浮点加法指令是在N个频率周期,还是N+1个频率周期。这是因为x87FPU执行加法指令的舍入运算判断(例如该等加数的总和是否需要进位)会随着该等加数与该FPCW的PC场的指定精度而改变。更特别的是,程序设计者可通过该PC场指定一个与该等加数相异的精度,此将导致在某些情况下,耗费较多的时间以进行舍入运算判断。而在那些情况下,耗费较长的时间来进行舍入运算判断将会使整个指令的执行耗费额外的频率周期。因此,举例而言,x87 FPU若在第一情况下(对应该等加数的精度、以及PC场的指定精度)执行浮点加法运算时需费时三个频率周期,在第二情况下(同样对应该等加数的精度,以及PC场的指定精度),若该FPU因为进行舍入运算判断需耗费较多时间,则在此第二情况下可能要四个频率周期方可完成指令的执行。以下是加数精度对应PC场的指定精度的某些情况下、又在该情况下所造成的影响的特殊例子。

假设该PC场指定精度与该等加数的精度皆相同,则仅较小的加数会因为上述讨论的尾数校准的机制,对舍入运算贡献位(于此称做固着位)。在此情况下,简单检视其中较小加数的固着位即可进行舍入运算判断,而最低有效位数在校准期间则会向右移位。而此情况下,进行舍入运算判断的时间大部分将包括于对两加数尾数进行实质加法运算的时间之内。

然而,假设其中较大加数的精度大于该PC场指定精度,则该较大加数也可能对舍入运算判断贡献固着位。在此情况下,x87 FPU必须将该两加数所贡献的所有固着位加入,以进行舍入运算判断。而对固着位进行加法运算所耗时间,可能与对尾数中非固着位的部分进行加法运算相当,例如,其中较上位在该PC场指定精度之内。该x87 FPU在执行该等尾数加法的后检视该等固着位的和,以进行舍入运算判断。在此情况下,很重要的是,与其它情况下只有较小加数贡献固着位不同,该FPU无法仅由较大加数的尾数及校准后的较小加数的尾数来进行舍入运算判断。此外,该FPU尚须等该等固着位的加法运算完成后始可执行上述舍入运算判断。

已有不少努力是为了增进执行快速浮点加法运算。举例而言,如Seidel等所著的「ON THE DESIGN OF FAST IEEE FLOATING-POINT ADDERS」,参照IEEE计算机协会的第15届IEEE计算机运算讨论会公报(ARITH’01)。在该商业可行的x87 FPU当中,程序设计者通过PC场指定浮点运算精度的能力仍存有问题,然而,该论文却未将此需求列入考虑。更特别的是,该论文假设仅有一加数会对舍入运算判断贡献固着位。然而,如上所述,该x87架构的特质,即该PC场的特质,会产生同时对两加数进行舍入运算判断的情形。一些因素如:微处理器的频率、x87 FPU中各电路(加法器、移位器、及控制逻辑电路)的门延迟、以及在某些情况下进行舍入运算判断需要额外的时间(例如两加数皆贡献固着位),都会在某些设计中造成频率周期不必要的延长,或增加x87执行浮点加法指令时额外的频率周期。

解决此问题的方法之一为使该FPU以可变的频率周期执行浮点加法指令。然而,此方法在指令调度,特别是在超量且失序执行的微处理中并不理想。另外的方法则是简单地用一致但较原本多的频率周期(在上述例子中为四个频率周期)去执行所有的浮点加法指令,而不考虑其它情况。然而,此方法明显不是一个高效能的方案。

因此,希望能有一种方法,能够使x87在执行相对耗时的浮点加法指令(例如进行舍入运算判断时,两加数皆贡献固着位时)后产生正确的结果;且不会影响执行相对省时的浮点加法指令(例如当舍入运算判断时,仅有一加数贡献固着位)的时间。

发明内容

有鉴于此,本发明提供一种最佳化微处理器执行x87浮点加法指令的装置,包括x87浮点控制字(Floating Point Control Word,FPCW)、指令调度器(Instruction Dispatcher)。其中该x87浮点控制字包括精度控制(Precision Control,PC)场,其可编程以指定浮点单元(Floating Point,FPU)执行浮点运算的精度;该指令调度器用以将x87浮点加法指令(FloatingPoint Addition Instruction,FPADD)调度至该FPU,而该FPADD具有第一及第二浮点加数,其中该第一及第二浮点加数的尾数的有效位数的位较该PC场的指定精度少;其中该FPU用以将该第一及第二加数相加以产生总和、决定一组预设条件是否存于该第一及第二加数中,其中该等加数对总和的舍入运算判断有所贡献,且与该PC场的指定精度有关;若该组预设条件并不存在,则依照该第一和第二加数中较小者的尾数的位以及该PC场的指定精度来进行舍入运算判断、及依照该舍入运算判断,对该总和选择性地进行舍入运算,以产生该FPADD的结果;以及若该组预设条件存在,则储存该总和及由该第一和第二加数所导出的舍入信息、通知该指令调度器重新调度该FPADD至该FPU、以及对该指令调度器重新调度该FPADD至该FPU之举作出下列回应:依照该储存的舍入信息和该PC场的指定精度作出舍入运算判断、以及依照该舍入运算判断,对该总和选择性地进行舍入运算,以产生该结果。

本发明还提供一种用于微处理器中处理x87浮点加法指令的方法,其中该微处理器包括浮点单元、指令调度器及x87浮点控制字,而该FPCW具有可编程以指定该FPU浮点运算精度的精度控制场,该方法包括于首次调度x87的FPADD至该FPU,该FPADD具有第一及第二浮点加数,其中该第一及第二浮点加数的尾数的有效位数的位较PC场的指定精度少;将该第一及第二加数相加以产生总和;判断一组预设条件是否存于该第一及第二加数中,其中该等加数对总和的舍入运算判断有所贡献,且与该PC场的指定精度有关;若该组预设条件并不存在,则依照该第一和第二加数中较小者的尾数的位以及该PC场的指定精度来进行舍入运算判断;及依照该舍入运算判断,对该总和选择性地进行舍入运算,以产生该FPADD的结果;以及若该组预设条件存在,则储存该总和及由该第一和第二加数所导出的舍入信息,通知该指令调度器重新调度该FPADD至该FPU;以及对该指令调度器重新调度该FPADD至该FPU之举作出下列回应依照该储存的舍入信息和该PC场的指定精度作出舍入运算判断;以及依照该舍入运算判断,对该总和选择性地进行舍入运算,以产生该结果。

为使本发明的上述目的、特征、和优点能更明显易懂,下文特举较佳实施例并配合所附图式做详细说明。

附图说明

图1为依照本发明的一微处理器方块示意图。

图2为依照本发明图1的该执行单元的方块示意图。

图3为依照本发明图1的微处理器的x87FPU的方块示意图。

图4a、4b、4c、4d为两加数在x87浮点加法指令中对应该PC场308指定精度的四种可能组合关系的区块示意图。

图5为依照本发明一实施例发生于浮点加法指令的加数上的一组预设条件(关于对应至图3该FPCW的PC场的指定精度的舍入运算判断)说明图。

图6A和图6B为图1微处理器依照本发明执行x87浮点加法指令的操作方法流程图。

[主要元件标号说明]

100~微处理器,104~x86的巨指令,106~微指令,108~翻译器,112~微指令存储器,116~寄存器配置表,120~指令调度器,124~执行单元,126~退回单元,128~记录缓冲器,204~媒介A单元,206~媒介B单元,212~SINT,216~MOV/BR,220~LD,224~STA,228~STD,304~浮点控制字,308~精度控制场,312~舍入控制场,316~加数A,320~加数B,324A~加法器,324B~加法器,328~控制逻辑单元,388~浮点运算单元,392~多工器,394~多工器,396~多工器,398~多工器,346~储存总和,348~储存的累计固着位,402~较大加数的尾数的精度,404~较小加数的尾数的精度

具体实施方式

一加数在进行浮点加法指令的校准操作之后(例如校准较小的加数),其有效位数中小于图3中该精度控制(Precision Control,PC)场308的指定精度的位称之为-「固着位」。换句话说,该固着位即加数中比该PC场308指定的结果所能呈现最小位数还少的有效位数。

请参照图1,其表示依照本发明的微处理器100的方块示意图。该微处理器100包括翻译器108,其耦接至微指令存储器(MicroinstructionROM)112。该翻译器108接收x86的巨指令104并将其翻译成一个以上的微指令106。在一实施例中,该x86巨指令104包括众所周知的IA-32架构指令,诸如被英特尔手册所指定的指令,此外,该巨指令104尚包括x87浮点加法巨指令。该x87浮点加法巨指令104可包括(但不限至于)下述常用的指令:FADD、FADDP、FIADD、FSUB、FSUBP、FISUB、FSUBR、FSUBRP、FCOM、FCOMP、FCOMPP、FCOMI、FOMIP、FUCOMI、FUCOMIP、FICOM、FICOMP、FILD、FIST、FISTP、FISTTP、FST、FSTP、FISUBR、FUCOM、FUCOMP、及FUCOMPP。该微指令存储器112包括微指令序列,而该翻译器108呼叫该微指令存储器112以响应那些复杂、(且/或)偶尔被执行的x86巨指令,此与直接将该x86巨指令翻译成微指令有别。在一实施例中,该微处理器100的微架构为RISC式微架构,其用以执行微指令106,其一般来说较该x86巨指令简单,且遵守该RISC式的载入/储存典范。

该微处理器100管线也包括耦接至该翻译器108的寄存器配置表(Register Allocation Table,RAT)RAT116、耦接至该RAT116的指令调度器120(或指令调度器120)、耦接至该指令调度器120的执行单元124、以及耦接至该执行单元124的退回单元126。该执行单元124包括媒介A单元(图2)204,其又包括x87浮点运算单元(Floating Point Unit,FPU)388(图3),将详细描述于后。该微处理器100也包括的一记录缓冲器(Recorder Buffer,ROB)128,其又耦接至该RAT 116、指令调度器120、执行单元124和退回单元126。

在一实施例中,该微处理器100为失序执行(out-of-order execution)微处理器。此即为:该执行单元124不依照程序来执行该微指令106。然而,该ROB 128用以保证该微指令106以及其对应的巨指令104将按程序退回。更有甚者,该翻译器108以程序翻译该巨指令104并以程序产生微指令106。此外RAT 116以程序配置入口(ent ry)。该ROB 128为循环先进先出(FirstInFirst Out,FIFO)缓冲器,其可以程序从RAT 116接收微指令106,且可被退回单元126以程序退回微指令106及其关联的巨指令104。

RAT 116从翻译器108接收微指令106,并检测该等微指令106间的相依。特别的是,RAT 116判断微处理指令原始操作数间(如其它微指令的结果中x87浮点加法指令的加数)的相依情况。当RAT 116将其配置于ROB 128中的下一有效入口的指令予以接收,并将微指令106及其对应相依信息储存于该配置的ROB 128入口。

指令调度器120从RAT 116接收微指令106及相依信息。指令调度器120将翻译器108中尚未被调度的微指令106调度至适当的执行单元124。特别的是,指令调度器120将微指令(例如由x87浮点加法指令翻译来的微指令)调度至媒介A单元204(图2),因为其包括该X87 FPU 388(图3)。每个执行单元124包括保留站(图未示),其作为微指令106对其各自执行单元124的缓冲。当指令调度器120判断ROB 128具有微指令106,且其尚未被调度而欲被执行单元124以空的保留站执行时,则指令调度器120将微指令106调度至适当的执行单元124,并更新ROB 128,以指出已被调度的微指令106。一旦微指令106所依附的所有的原始操作数皆可取得时,发送逻辑单元则从该保留站发出微指令106至执行该指令的执行单元的部分。

在一实施例中,ROB 128包括48个入口。各ROB 128入口具有索引或卷标。该卷标作为该ROB入口中的微指令106的识别。当执行单元124执行完微指令106时,执行单元124将已执行完成的微指令106的卷标提供给ROB 128及退回单元126。ROB 128于是在已被执行的微指令106的对应入口处更新旗标,以标示出该微指令106已可被退回。如上所述,退回单元126从ROB 128中以程序退回那些已完成的微指令106及其对应的巨指令104。

有利的是,当任何一组预设条件(关于对应图3该浮点控制字(FloatingPoint Control Word,FPCW)FPCW 304的PC场308指定精度的舍入运算判断)发生于浮点加法指令的加数上时(如图5所示),X87 FPU 388具有请求指令调度器120及ROB 128重新执行x87浮点运算微指令106的功能。

参照图2,此为依照本发明的图1的执行单元124方块示意图。在一实施例中,共有七个不同的执行单元124,分别标示为204~228,其被设计以用来彼此互相配合或各自独立执行。第一执行单元标示为媒介A单元204,执行浮点微指令,且具有图3的X87 FPU 388。第二执行单元标示为媒介B单元208,执行多重操作。第三个执行单元标示为SINT(简单整数,SimpleInteger)212,执行整数ALU操作。第四执行单元标示为MOV/BR(移动/分支,Move/Branch)216,执行移动或分支微指令,以及该SINT也能执行简单ALU操作。第五执行单元标示为LD(加载数据,Load Data)220,其从存储器中将诸如欲进行浮点加法运算的加数等数据加载微处理器100的移位寄存器中。第六个执行单元标示为STA(储存位置,Store Address)224,用以计算储存操作的终端位置,并为该储存操作配置储存缓冲器。第七个执行单元标示为STD(储存数据,Store Data)208,用以从该等移位寄存器中将计算结果储存至该储存位置执行单元224所指定存储器的地址上。

请参照图3,此为依照本发明的图1的微处理器100的X87 FPU 388的方块示意图。在一实施例中,该X87 FPU 388包含于图2的媒介A单元204当中。ROB 128和RAT 116耦接至图1中的指令调度器120,而指令调度器120又耦接至X87 FPU 388。指令调度器120起先将接收自ROB 128的微指令调度,如将翻译自x87浮点巨指令中的x87浮点加法微指令调度至X87 FPU388。当该等指令加数满足至少一组预定情况(关于对应至该FPCW 304的PC场308的指定精度的舍入运算判断)(与图5相关,将于后讨论),指令调度器120也可重新将接收自ROB 128的x87浮点加法微指令调度至X87 FPU 388。指令调度器120控制两个可提供操作数给X87 FPU 388的多工器392、多工器394。多工器392接收加数A316及已储存的总和346(从X87 FPU 388中接收,将于后讨论)。多工器394接收加数B320及储存总和346。当指令调度器120对X87 FPU 388执行一指令其首次调度时,指令调度器120控制多工器392及多工器394选取加数316或320,而当指令调度器120对X87 FPU388重新调度x87浮点加法微指令时,则指令调度器120控制多工器392及多工器394选择储存总和346(关于图6的区块628,将于该处详述)。X87 FPU388包括用以执行x87的所有浮点指令的电路系统;然而,图3只表示用以执行浮点加法指令的部分电路。X87 FPU 388包括双输入舍入计算加法器324A及双输入非舍入计算加法器324B、双输入多工器396、双输入多工器398、控制逻辑单元328,及浮点控制字FPCW 304,而该FPCW 304又包括x87的PC场308及舍入控制(Rounding Control,RC)场312。程序设计者可以设计各种数值的程序于该RC场312中来控制X87 FPU 388所进行的舍入模式,以得到所需的舍入运算结果。

多工器398于其输入端上接收加法器324A及加法器324B的输出。假使没有任何一组预设条件存在,(关于图6的区块612,容后再述),则控制逻辑单元328产生控制信号以使多工器398依照图6区块614所做出的舍入运算判断,选取该等输入端之一作为结果336输出,如图6区块616所示。假使至少一组预设条件存在于该浮点加法指令的首次调度上,如区块612所示,则控制逻辑单元328产生控制信号以使多工器398选择加法器324B的非舍入总和,并储存总和346于移位寄存器中,如图6区块622所述。X87 FPU 388接收该储存总和346以响应指令调度器120对其浮点加法指令的重新调度,如图6区块628所示。为了响应浮点加法指令的重新调度,控制逻辑单元328产生控制信号,以使多工器398依照图6区块632所示的舍入运算判断而选择其中一输入作该结果336而输出,如图6区块634所示。值得注意的是,名词「总和」除非另有说明,在此皆指实质加法或减法运算的结果。实质加法运算包括:该等加数316、320的符号位同号,且该浮点加法指令指定对该等加数实施加法运算;或是该等加数316、320的符号位互为异号,且该浮点加法指令对该等加数实施减法运算。而实质减法运算为:该等加数316、320的符号位互为异号,且该浮点加法指令指定对该等加数实施加法运算;或是该等加数316、320的符号位同号,且该浮点加法指令对该等加数实施减法运算。

加法器324A、324B分别从其输入端上接收多工器392及多工器396的输出。多工器394于其一输入端接收加数B320及其另一输入端接收已储存的总和346。多工器396于其一输入端接收多工器394的输出(例如加数B320或已储存的总和346),并于其另一输入端接收64位的零值。控制逻辑单元328产生控制信号以使多工器396选择其输入端之一以输出至加法器324A、324B,如下所述。此外,加法器324A接收二进制值为1的进位位,而加法器324B接收二进制值为0的进位位。因此,加法器324A在其浮点加法指令的首次调度下,产生该加数A 316与加数B 320的舍入总和,或是在浮点加法指令的重新调度下,产生舍入储存总和346,如下所述。相似地,加法器324B在其浮点加法指令的首次调度下,产生加数A 316与加数B 320的非舍入总和,或在浮点加法指令的重新调度下,产生非舍入储存总和346,如下所述。在一实施例中,加法器324A与加法器324B为64位加法器,其接收64位的加数并产生64位之和。

加数316、320可能来自多个来源。一来源是该IA-32架构浮点寄存器组的寄存器、一来源是将图1的ROB 128中将储存的指令结果予以储存的更名寄存器、一来源是微处理器100的临时寄存器、而另一来源是由各种执行单元124所执行并直接传送至X87 FPU 388的指令结果。

如上所述,PC场308的值决定X87 FPU 388的精度为64、53或是24位;然而X87 FPU 388可能使其于内部计算当中即采用较PC场308指定精度更高的精度。一程序可写入PC场308以改变X87 FPU 388的浮点运算精度。举例而言,若写至PC场308中的程序指定为双精度,则X87 FPU 388产生精度为53位的结果,不论是否有加数其精度超出53位。该FPU将位数较低且未使用的位(换句话说,有效位数少于PC场308指定精度的位)补零,并得到配合条件而增量至53位的结果。

控制逻辑单元328接收的输入为:PC场308的值、多工器392与多工器396的输出、以及加法器324A及加法器324B的输出。控制逻辑单元328利用该等输入来判断是否至少一组预设条件(关于对应至该FPCW 304的PC场308的指定精度的舍入运算判断)发生在该第一加数316和第二加数320上。此外,控制逻辑单元328利用该等输入以产生累计固着位338,如图6区块622所示。控制逻辑单元328也利用该等输入及已储存的累计固着位348进行舍入运算判断,如图6的区块632所示。控制逻辑单元328包括逻辑电路的操作(图未示),其决定浮点加法指令的加数316、320的精度,如图6区块608所示。

假如其中一预设条件存在,则控制逻辑单元328也产生信号340至指令调度器120及ROB128以请求重新进行浮点加法运算,如图6区块624所示。控制逻辑单元328也从指令调度器120接收表示指令调度器120正重新调度浮点加法指令的信号344,如图6区块628所示。

X87 FPU 388也包括移位器(图未示),其将较小加数的尾数按照两加数的指数的差值移动相同数量的位,以校准较小加数的尾数以配合较大加数的尾数,之后才将该等加数提供至加法器324A及加法器324B。较大加数为两加数316、320中具有最大指数者。假设两加数的指数相同,X87 FPU 388则随机选择其中一加数作为该较大加数,如上述随机选择的作法并不正确,则其后尚须修改该结果336的符号。X87 FPU 388也包括移位器(图未示),其接收多工器398的输出,并将所选择的输入移位以归一化该结果336。一旦X87 FPU 388完成浮点加法指令,则X87 FPU 388将该结果336提供给退回单元126,退回单元126随后将该结果336退回至浮点加法指令所指定的该IA-32架构浮点寄存器。

在一实施例中,X87 FPU 388包括两相异路径,分别是「远程路径」及「近程路径」,或称「舍入路径」及「归一化路径」,其为本领域技术人员所熟知。该两路径,一般来说,与论文「ON THE DESIGN OF FAST IEEEFLOATING-POINT ADDERS」(在此并入全文中对各种议题的参考文献,IEEE计算机协会的第15届IEEE计算机运算讨论会公报(ARITH’01),Seidel等人所著)所描述的安排近似。近程路近计算实质减法(加法指令中,两操作数具有相异符号,或是减法指令中,两操作数具有相同符号)时,其操作数间的指数差小于或等于1,而该舍入路径则计算其它情况。舍入路径表示于图3,但其未标示近程路径。各路径同时执行浮点加法运算,而控制逻辑单元328选择其中一路径的结果作为结果336。

参照图4a至图4d,其两加数在x87浮点加法指令中对应该PC场308指定精度的四种可能组合关系的区块示意图。四个区块分别标示为图4a、图4b、图4c及图4d。这些组合乃关于判断是否有一组预设条件(关于该等加数对其中间和的舍入运算判断的贡献度,亦关于PC场308所指定的精度)发生于该等加数316、320之上,请参考图5的描述。在此处,加数316或320的精度指其尾数中介于(包含)第一个二进制值为1的位及最后一个二进制值为1的位间的位数目。在一实施例中,图3的控制逻辑单元328包括精度判断逻辑单元,其可于该等加数316、320被接收时判断其精度。控制逻辑单元328利用从该精度判断逻辑单元取得的精度数据,并配合该最小加数于校准运算时的位移量,来判断该等加数316、320是否必须对舍入运算判断贡献固着位。值得注意的是,此处勿将该精度判断与判断加数大小混淆(较大加数如第4图的402,而较小加数为第4图的404),而判断加数大小乃通过比较该等加数316、320的指数,其为X87 FPU 388所执行,如图6区块604所述。

图4a描述的情况为:较大加数402的尾数的精度及较小加数404的尾数的精度都与图3FPCW 304的PC场308的指定精度相等或较小。在此情况下,较大加数402不会对舍入运算判断贡献任何固着位。然而,较小加数404的尾数在校准后,会依照其校准时向右位移量,对舍入运算判断贡献出固着位。

图4b描述的情况为:较小加数404的尾数的精度与PC场308的指定精度相等或较小,但较大加数402的尾数的精度则较PC场308的指定精度为大。在此情况下,较大加数402的尾数会对舍入运算判断贡献固着位。然而,较小加数404的尾数于校准之后,会依照其校准时向右位移量,对舍入运算判断贡献出固着位。因此,在此情况下,该等加数402/404皆有可能影响舍入运算判断。更特别的是,该等加数402/404(316、320)皆有可能需要于相加后才进行舍入运算判断。

图4c描述的情况为:较大加数402的尾数的精度与PC场308的指定精度相等或较小,而较小加数402的尾数的精度则较PC场308的指定精度为大。在此情况下,较大加数402的尾数不会对舍入运算判断贡献任何固着位。然而,较小加数404在校准后可对舍入运算判断贡献固着位。

图4d描述的情况为:较大加数402的尾数的精度及较小加数404的尾数的精度都较图3FPCW 304的PC场308的指定精度为大。在此情况中,较大加数的尾数402及较小加数的尾数404皆会对舍入运算判断贡献固着位。

参照图5,此为依照本发明一实施例发生于浮点加法指令的加数上的一组预设条件(关于对应至图3该FPCW 304的PC场308的指定精度的舍入运算判断)说明图。图3的X87 FPU 388当检测任何一组预设条件(关于对应至图3该PC场308指定精度的贡献)发生于加数316、320的尾数位时,会请求重新执行浮点加法指令。图5的实施例包括两预设条件。

第一预设条件是:(1)该指令指示X87 FPU 388去执行实质加法运算,或该等加数316、320的指数差值大于1;以及(2)较大加数的尾数的精度较PC场308的指定精度大。当该第一预设条件被满足,该等加数316、320的尾数皆可能对实质加法或实质减法运算贡献出固着位,该固着位的加法或减法需要先被执行,才能进行舍入运算判断,依照该微处理器100制程技术及X87 FPU388的设计的一实施例,这将耗费额外的频率周期以执行浮点加法指令。结果,当控制逻辑单元328检测该第一预设条件在区块612上被满足,则控制逻辑单元328及其它东西,请求将该指令重新执行,如图6区块624所述。

第二预设条件是:(1)该指令指示X87 FPU 388去执行实质减法运算;(2)该等加数316、320的指数差值小于或等于1;且(3)至少一加数316、320的尾数较PC场308指定精度为大。当该第二预设条件被满足,且该等指数316、320相等,则实际的减法运算有可能使该等加数316、320的尾数的多个较高位数被取消掉(有时称其做「大量取消」),造成结果中间差值出现前置的零值,其可能需要左移数个位以将该结果差值归一化。因为向左位移的数量在该减法运算执行前无法得知,控制逻辑单元328无法知道该结果差值中何位会是贡献给舍入运算判断的固着位,此妨碍了控制逻辑单元328进行实质减法运算的同时进行舍入运算判断。结果,当控制逻辑单元328检测该第二预设条件于区块612被满足,控制逻辑单元328及其它东西将会请求重新执行该指令,如图6区块624所示。

当该第二预设条件被满足,且该被减数与减数的指数差值的绝对值等于1时,较小操作数会被向右移一个位。无论如何,该被减数会被选为具有较大指数的操作数。不论一开始的次序,较小操作数都会是被移位的操作数。假使被移位的操作数的最小位数的二进制值为1,则有可能产生65位的差值,而其最小位数的二进制值为1,其可能为仅有的固着位且需要被中间差值舍入。然而,控制逻辑单元328在该减法运算被执行前无法进行舍入运算判断,此将妨碍控制逻辑单元328进行实质减法运算的同时进行舍入运算判断。结果,当控制逻辑单元328检测该第二预设条件在区块612被满足,控制逻辑单元328及其它东西,会请求重新执行该命令,如图6区块624所示。在此情况下,控制逻辑单元328选择由归一化路径所产生的结果。然而,该较大操作数的精度可能与PC场308的指定精度相等或较小,在一实施例中,此情况下该舍入路径能够于理想时间内产生正确结果336(举例而言,在两个频率周期之内)。因此,该舍入路径优先于该归一化路径,使得控制逻辑单元328由该舍入路径提供结果336,而非通过发出该信号340以请求重新执行。

在一实施例中,预设条件又包括图5所述的两种情况。然而,在其它实施例中,预设条件可能有所不同。预设条件依照设计目标,包括执行目标、以及微处理器100和X87 FPU 388的设计特性等而不同,例如,使用特殊半导体制程科技、门延迟的等级、信号传播时间等等。举例而言,可被观察到的是,为了因应更高的复杂性,其可能代价即是采用较图5所述的实施例更为细致的预设条件,而其整体效能亦可能增加(于需要重行执行的程序中减少浮点加法指令)。本发明者亦观察到:微处理器100的一实施例使用图5的预设条件,其在一些商用软件应用程序及基准程序中会显著地改善效能,而原因显然是:对该软件应用程序及基准程序整体运作时间予以观之,浮点加法指令加数及PC场308值无法满足任何一组预设条件的个案比例、与可满足至少一组预设条件的时间比例相较而言大的多,预设条件使前者有较快的执行时间(一实施例中可快2频率周期),可掩后者执行时间较慢(重新执行浮点加法运算之故)之弊。

请参照图6,此为图1微处理器100依照本发明执行x87浮点加法指令的操作方法流程图。图6中的步骤次序及并行关系可能与流程图不同。举例而言,在一实施例中,区块604及608的操作大体并行于图3X87 FPU 388的路径之一。此流程从区块602开始。

在区块602中,图1的指令调度器120开始调度x87浮点加法指令及其操作数至图3的X87 FPU 388。之后流程进入区块604。

在区块604中,指令调度器120控制多工器394选择加数B320、控制多工器392选择加数A316。此外,图3的控制逻辑单元328控制多工器396选择多工器394的输出,换句话说,选择加数B320。控制逻辑单元328计算该等加数316、320的指数差值,并从该差值判断该等加数何为较大加数何为较小加数。控制逻辑单元328按该差值将该较小加数的尾数右移,以校准该较小加数的尾数以配合较大加数的尾数。该较小加数右移之后,其前头空出的位将被补入零值。之后流程进入区块606及区块608。

在区块606中,加法器324A和加法器324B开始将该较大加数与校准后的较小加数相加以分别产生舍入总和与非舍入总和。之后流程从区块606进入区块612。

在区块608中,控制逻辑单元328分析该等加数316、320对应PC场308指定精度时对舍入运算判断的贡献度,以判断是否存在任何一组预设条件。在一实施例中,该预设条件如图5所示。然而,其它实施例中的预设条件可能有所不同。在区块608中,控制逻辑单元328对该等加数316、320进行分析,于此同时,在区块606中,加法器324A与加法器324B分别产生总和。之后流程从区块608进入区块612。

如区块612所示,控制逻辑单元328判断是否任何一组预设条件成立。若是,则流程进入区块622;若否,则流程进入区块614。

区块614中,控制逻辑单元328依照校准后的较小加数所贡献的固着位、以及PC场308指定的精度值,来作出舍入运算判断。控制逻辑单元328判断由加法器324A产生的舍入总和及由加法器324B产生的非舍入总和是否应被多工器398所选出,其乃依照校准后的较小加数的固着位值、以及从FPCW

304的RC场312所指定的舍入模式的角度来进行判断。控制逻辑单元328执行区块614的舍入运算判断(判断于区块612),大约于此同时,在区块606中,该加法器324A与加法器324B分别产生的总和。之后流程进入至区块616。

区块616中,控制逻辑单元328,依照区块614中的舍入运算判断,控制多工器398由加法器324A产生的舍入总和或加法器324B产生的非舍入总和中选出适当者。控制逻辑单元328判断该总和需要舍入,则控制逻辑单元328控制多工器398选择加法器324A产生的舍入总和;否则,控制逻辑单元328控制多工器398选择加法器324B产生的非舍入总和。之后流程进入至区块618。

区块618中,当X87 FPU 388需要产生浮点加法指令的结果336时,其将区块616中选出的适当舍入运算的总和予以归一化。X87 FPU 388执行归一化的方式是将其二进制数值为1的最高位向左移到位左边的位端点,此为本领域技术人员所熟知。此外,该归一化的结果336的有效位较PC场308指定精定为小,则X87 FPU 388会对有效位之后的位补零。退回单元126将该结果336退回至浮点加法指令所指定的IA-32架构浮点寄存器中。一实施例中,在65奈米CMOS制程技术的微处理器100以2GHz的内频运作时,X87FPU388有能力依照区块602到区块606、以及区块612到区块618的步骤,在两个频率周期之内执行浮点加法指令(换句话说,当不需要重新执行时),此举将十分有利。之后流程结束于区块618。

在区块622中,控制逻辑单元328依照校准后的较小加数的尾数的最末位(其不能直接表现于中间的64位形式上)而产生累计固着位338。一实施例中,加法器324A和加法器324B为64位加法器,假如任何校准后的较小加数的尾数中低于第64位位置的位值为1,则控制逻辑单元328产生二进制值为1的累计固着位338;否则,控制逻辑单元328产生二进制值为0的累计固着位338。控制逻辑单元328产生累计固着位338于区块622中(其判断于区块612中),大约于此同时,加法器324A及加法器324B于区块606中分别产生出总和。此外,控制逻辑单元328控制多工器398以选择由加法器324B所产生的非舍入总和。最后,X87 FPU 388将该累计固着位338储存于寄存器,并存入由加法器324B所产生的非舍入总和。该储入的寄存器及由加法器324B产生的非舍入总和中有效位数小于PC场308指定精度的位中,包括了已储存的舍入信息,而该信息随后将被X87 FPU 388用于重新执行浮点加法指令上,以作出舍入运算判断。在一实施例中,X87 FPU 388将加法器324B产生的非舍入总和储存于被浮点加法指令分配的更名寄存器上。在一实施例中,X87 FPU 388将加法器324B所产生的非舍入总和储存于微处理器100的临时寄存器中。之后流程进入区块624。

在区块624中,X87 FPU 388通过该重新执行请求信号340通知指令调度器120及ROB 128该浮点加法指令需要被重新执行。在一实施例中,当X87FPU 388宣告该重新执行请求信号340时,其也提供ROB 128浮点加法指令的卷标,在区块628,当指令调度器120重新调度该浮点加法指令时,指令调度器120储存并随后输出该标签。流程进入区块626。

在区块626中,为了回应区块624中重新执行请求信号340的宣告,ROB128清除执行单元124管线中所有未退回的指令,以避免那些与浮点加法指令结果相依的指令接收到不正确的来源操作数值,因为由X87 FPU 388产生的结果336尚不正确。换句话说,因为仍需对浮点加法指令的重新执行作判断,判断其结果336是否需要进行舍入运算。在执行单元124管线被清空后,ROB 128会一直等,直到该浮点加法指令成为ROB 128中最旧的指令,换句话说,即所有其它较该浮点加法指令更旧的指令都已退出程序。然后,ROB 128重新执行所有未退出的指令,开始处理浮点加法指令。特别的是,ROB 128更新每个未退出指令的状态,以指示其仍需被调度。流程进入区块628。

于区块628中,指令调度器120检验ROB 128,并检测得浮点加法指令需要被调度。为了响应,指令调度器120重新调度浮点加法指令至X87 FPU388,并同时宣告图3的重新调度信号344以通知X87 FPU 388这些为该被重新执行、且先前于区块624中被请求重新执行的浮点加法指令。在一实施例中,指令调度器120知道其需要宣告重新调度信号344,因为,当其从ROB 128中调度指令时,其将欲被调度的指令的ROB 128卷标与存于区块624的ROB 128标签做比较,并检测得知该标签相符。流程进入区块632。

在区块632中,控制逻辑单元328依照储存的舍入信息(例如,储存的累计固着位348,及储存总和346的固着位,换句话说,储存总和346有效位数中较PC场308指定精度小的位)、PC场308指定的精度、以及RC场312指定的舍入模式来进行舍入运算判断。控制逻辑单元328依照储存的舍入信息的值、以FPCW 304的RC场312中指定的舍入模式,来判断加法器324A产生的舍入总和与加法器324B产生的非舍入总和是否应被多工器398所选取。在一实施例中,X87 FPU 388响应从指令调度器120而来的该信号340,修正浮点加法微指令成不同的微指令形式,而其指示X87 FPU 388去转换该储存总和346成PC场308的指定精度,并指示其依照该储存的舍入信息及RC场312进行舍入运算。流程进入区块634。

在区块634中控制逻辑单元328控制多工器398依照区块632做出的舍入运算决定,来选取加法器324A产生的适当舍入总和或加法器324B产生的非舍入总和。此外,X87 FPU 388将该舍入运算后的总和(换句话说,被选取的总和)予以归一化,以产生浮点加法指令的结果336。此外,X87 FPU 388将该归一化的结果336中有效位数较PC场308指定精度小的位补零。退回单元126退回该结果336至浮点加法指令所指定的该IA-32架构浮点寄存器。流程结束于区块634。

虽然本发明及其对象、特征及优点已详述于上,其它实施例仍包含于本发明中。举例而言,虽然实施例中以 x87 FPU为背景,其它实施例中采用其它浮点架构者也可适用,而其中,在上述其它实施例中的浮点架构所创造的条件下,FPU无法在执行浮点加法指令时同步进行舍入运算判断,妨碍了FPU在理想的频率周期内执行指令,且使用此处所述选择性重新执行指令的技巧。此外,虽然实施例以正的逻辑来描述,在本发明的其它实施例中亦可实施负的逻辑。

虽然本发明以前述的较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可做些许的更动与润饰。举例而言,本发明也包括实施于各种硬件之上,如实施于中央处理器(Central Processing Unit,CPU)、微处理器、微控制器、数字信号处理器(Digital Signal Processor,DSP)、处理器核心、系统芯片(System On Chip,SOC)、以及任何其它装置等。本发明亦可实施于软件中,如配置于计算机可用(可读取)媒体中的计算机可读码、程序码、以各种形式配置的指令(又如原始码、目标码或机器语言)。这些软件可运作本发明的装置及方法的功能、建构、模型化、仿真、描述、及(或)测试。举例而言,通过使用常用的程序语言如C、C++、硬件描述语言(Hardware DescriptionLanguages,HDL)如Verilog HDL、VHDL及其它程序,本发明可以软件方式实施。这些软件可配置于任何已知的计算机可读取储存媒体如半导体、碟碟及光盘(如CD-ROM、DVD-ROM等)中。值得注意的是,本发明的装置及方法包含于半导体智慧财产权核心,如微处理器核心(以HDL实施),且被转换成集成电路形式的硬件产品。并且,本发明的装置及方法也可为硬件及软件的组合。因此,本发明不限于此处所述的范例,其保护范围当视所附的权利要求范围所界定者为准。

最后,本发明所属技术领域中具有通常知识者,在不脱离本发明所附权利要求范围的精神下,可以本发明所揭露的概念及实施例为基础,轻易地设计及修改其它用以达成与本发明目标相同的架构。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号