CN101930354B - 微处理器及其执行指令的方法 - Google Patents
微处理器及其执行指令的方法 Download PDFInfo
- Publication number
- CN101930354B CN101930354B CN201010239873.XA CN201010239873A CN101930354B CN 101930354 B CN101930354 B CN 101930354B CN 201010239873 A CN201010239873 A CN 201010239873A CN 101930354 B CN101930354 B CN 101930354B
- Authority
- CN
- China
- Prior art keywords
- micro
- order
- floating
- field
- input operand
- 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.)
- Active
Links
Images
Abstract
一种微处理器,用以执行一指令,此指令指定具有预设尺寸的浮点输入操作数且指示微处理器使用舍入模式来将浮点输入操作数舍入至整数数值且将整数数值返回为具有预设尺寸的一浮点结果。微处理器包括一指令转译器,用以将指令转译为第一微指令与第二微指令。微处理器也包括执行单元,用以执行第一微指令与第二微指令。第一微指令接收浮点输入操作数以作为输入操作数且自浮点输入操作数来产生中间结果。第二微指令接收第一微指令的中间结果来作为输入操作数且自中间结果来产生指令的浮点结果。中间结果具有与浮点输入操作数相同的预设尺寸。
Description
技术领域
本发明涉及一种在微处理器中的浮点运算,特别是关于浮点舍入(round)指令。
背景技术
Intel将一组新的相关SSE指令加入至其指令组:ROUNDPD、ROUNDPS、ROUNDSD、以及ROUNDSS,在此统一称为ROUND指令。ROUND指令舍入一浮点输入数值以成为一整数数值,接着将此整数数值恢复至一浮点数值。在由浮点数值转换至整数数值期间的舍入操作是根据舍入控制或舍入模式(rounding mode)而操作。
由浮点至整数的这些转换以及由整数至浮点的转换实际上已众所周知。首要操作需要确定整数最小有效位(least significant bit,LSB)的位置以及确定原始数据数值(藉由一向右移位器而具有关键延迟)内的二进制舍入点的位置,接着需要有条件的非分数数值(non-fractional value)增量。次要操作可能需要前导零列举(leading zero enumeration),接着需要正规化左移位以及适当的指数计算。必须要决定将如何在目标浮点硬件设计上提供此两操作。
习知的多周期或高延迟设计在连续电路连接(sequential circuit connection)上提供了必要的能力,首先,执行向右调正移位,接着是有条件的舍入增量,然后是前导零列举,最后是有条件的正规化左移位。值得注意的是,假使此方式被提供作为有效利用的硬件而不是特殊目的的硬件时,此方式不利于任何其不需某部分本身具有固有延迟的连续连接的计算。假使此方式提供作为特殊目的的硬件,此方式会消耗掉有用的晶粒空间。在强调最大电路组件利用的高效能微处理器中这些方式是不被接受的。
其它的低延迟浮点设计试图使组成电路组件分隔成多个计算种类(例如,近程对远程计算(near versus far calculation))所需要的最小群组。每一种类的特定特性藉由消除非必要电路组件而使得每一计算的整体延迟减少。例如,近程减法计算可能具有非重要的向右调正需求。这些设计类型可能以暂时地连续方式来提供新ROUND所必要的能力,那就是,藉由调度使用一群组而变为整数的转换以及调度使用一不同群组而变为浮点的其次转换。
发明内容
在一方面中,本发明提供一种微处理器,用以执行一指令,此指令指定具有一预设尺寸的一浮点输入操作数,此指令指示微处理器使用一舍入模式来将浮点输入操作数舍入至一整数数值且将整数数值返回为具有与浮点输入操作数相同之预设尺寸的一浮点结果。此微处理器包括一指令转译器,用以将指令转译为一第一微指令与一第二微指令。微处理器也包括一执行单元,用以执行第一微指令与第二微指令。第一微指令接收浮点输入操作数以作为输入操作数,且自浮点输入操作数来产生一中间结果。第二微指令接收第一微指令的中间结果来作为输入操作数,且自中间结果来产生指令的浮点结果。中间结果具有与浮点输入操作数相同的预设尺寸。
根据另一方面,本发明提供一种执行指令的方法,由一微处理器所执行,此指令指定具有一预设尺寸的一浮点输入操作数,此指令指示微处理器使用一舍入模式来将浮点输入操作数舍入至整数数值且将整数数值返回为具有与浮点输入操作数相同的预设尺寸的一浮点结果。此方法包括将指令转译为一第一微指令与一第二微指令,其中,转译步骤由微处理器的一指令转译器所执行。此方法也包括执行第一微指令与第二微指令,其中,执行步骤由微处理器的一执行单元所执行。第一微指令接收浮点输入操作数以作为输入操作数,且自浮点输入操作数来产生一中间结果。第二微指令接收第一微指令的中间结果来作为输入操作数,且自中间结果来产生指令的浮点结果。中间结果具有与浮点输入操作数相同的预设尺寸。
附图说明
图1表示微处理器的方块图;
图2的方块图表示被传送至XROUND2微指令的XROUND1微指令的中间结果的数据格式;
图3A的方块图表示图1的微处理器中用以执行XROUND1微指令的浮点加法器单元的部分电路;
图3B的方块图表示在ROUND溢位情况下图3A的浮点加法器单元的部分电路;
图4表示图1中微处理器的操作流程图;
图5表示图3A的浮点加法器单元用以执行XROUND1微指令的操作流程图;
图6的方块图表示图1的微处理器中用以执行XROUND2微指令的浮点加法器单元的部分电路;
图7表示图6的浮点加法器单元用以执行XROUND2微指令的操作流程图;以及
图8的流程图表示透过XROUND1微指令与XROUND2微指令的代理以及具有图2的数据格式的中间结果而由图1的微处理器100处理的ROUND指令的执行。
【主要组件符号说明】
图1
100~微处理器; 102~指令高速缓存;
104~浮点加法器单元 112~指令转译器;
116~缓存器命名表(RAT);
118~保留站; 122~执行单元;
124~引退单元;
126~缓存器档案与重排缓冲器;
132~微指令;
134~ROUND指令;
图2:
202~X字段; 204~Y字段;
206~Z字段;
第3A-3B图:
302~增量器; 304~舍入逻辑单元;
306~舍入控制; 308~异或门(XOR);
312~RUTRO=’1 316~比较器;
322~与门(AND); 324~比较器;
384~移位器/延伸器; 386~反向器(NOT);
388、394、396、398~多任务器(MUX);
392~增量器;
图4:
402、404、406、408、412、414、416~步骤方块;
图5:
502、504、506、508、512、514、516~步骤方块;
图6:
624~比较器;
626~舍入溢位;
644~参考指数(SP=’24’;DP=’53’);
646~前导零的数量的编码计数;
648~减法器; 652~正规化移位器;
654~增量器; 656~多任务器;
686~反向器; 694、696~多任务器;
图7:
702、704、706、708~步骤方块。
具体实施方式
为使本发明的上述目的、特征和优点能更明显易懂,下文特举一较佳实施例,并配合所附各图,作详细说明如下。
此处叙述的低延迟浮点硬件设计的实施例不需要加入贫于利用且特殊功能电路部件。组成电路组件被分离成多个计算种类所需的最小群组,藉此最小化每一计算的整体电路延迟。为了提供ROUND指令所必要的操作而不需要增加特殊目的硬件,这些操作被调度且连续地被分配至一适当的电路群组。
其次必要的是,决定此两必要操作(在此实施例中是关于微指令,称为XROUND1与XROUND2)是否将被调度且以锁定方式而紧接于另一者而立刻被分配,或者决定此两必要操作是否被视为独立的微指令,其必须是连续的但在时间或时钟周期上可能具有不定(indeterminate)的间隔。
图1的微处理器100提供一种无序(out-of-order)微指令分配结构,其企图藉由极致利用有效的计算电路来最小化每指令周期数的平均以及所引起的软件延迟。本发明已判断出特定情况分配需求(例如对于一特定软件指令,在分配上将两微指令锁定在一起)在分配电路上会需要非期望的复杂度并导致提供非期望的电路延迟。因此,ROUND指令所需的微指令必须容忍不定的短暂分离。
随着无序指令分配,特别期望必要操作(XROUND1及XROUND2)不需要额外结构状态的保护。在储存至缓存器的计算结果位形式下的某些结构状态或者在MXCSR中先前提供的条件码位已经存在了。这些的伴随服务者是相依性侦测与调度逻辑或电路(例如图1的缓存器命名表(register aliastable,RAT)116以及保留站118,以及必要实体导线连接以完成数据记录与递送。此外,缓存器档案(即图1的缓存器档案与重排缓冲器(reorder buffer,ROB)126)提供来储存关于不定时间间隔的数据。由XROUND1微指令至XROUND2微指令的联系而所需要的任何额外结构状态,会使得有意义的相依性检测、调度、与递送逻辑及电路的增加成为必要的,然而,不期望在只有一个软件指令类型的特定情况基础上提供这些能力。
因此,此处所叙述的实施例是采取新的方式来实现ROUND指令所须的操作或微指令,其不需要额外的架构状态来将数据由第一操作转移或传递至第二操作。这有利于低延迟且高时钟频率浮点执行硬件的设计。
参阅图1,其表示微处理器100的方块图。微处理器100包括指令高速缓存102,其快取微处理器100的指令集结构的程序指令。在一实施例中,指令集包括已知的数据流SIMD延伸(Streaming SIMD Extensions,SSE)指令集的指令,其包括上述的ROUND指令134。指令高速缓存102提供指令给指令转译器112,其将程序指令(已知为宏指令)转译为组成指令(constituentinstruction)(已知为微指令或微操作),以由微处理器100的执行单元122来执行。根据一实施例,指令转译器112将ROUND微指令转译成两个微指令132,命名为XROUND1微指令及XROUND2微指令,如同依据图4的方块402及404所述。
指令转译器112提供转译后的微指令至缓存器命名表(register alias table,RAT)116,其产生指令相依性并维持其列表,如同依据图4的方块406所述。微处理器100也包括与执行单元112连接的多个保留站118,用以守住等待被分配至执行单元122的微指令,例如XROUND1微指令以及XROUND2微指令,如同依据图4的方块408及414所述。RAT 116按程序顺序来接收微指令,且可脱离受到相依性限制的程序顺序来将其分配至保留站118。引退单元(retire unit)124按程序顺序来引退指令。程序顺序是由缓存器档案与重排缓冲器(reorder buffer,ROB)126来维持。缓存器档案与ROB 126耦接RAT116、保留站118、执行单元122、以及引退单元124。缓存器档案126包括结构缓存器档案与非结构缓存器档案,以储存中间微指令结果。
执行单元122包括浮点加法器单元104。浮点加法器单元104包括执行XROUND1微指令的近程路径以及执行XROUND2微指令的远程路径,如同依据图4的方块412及416所述。执行单元122也包括用来传递指令结果至另一者的递送路径。
接着,特定数学结果种类被考虑来证明实施例的特征与功能。SSE单精度(single precision,SP)与双精确度(double precision,DP)浮点数格式定义了有限的指数数值组。在此两格式中,具有单一符号位。在SP格式中,指数为8位(范围由-126至+127),且有效位数为23位,而在DP格式中,指数为11位(范围由-1022至+1023),且有效位数为52位。当浮点输入数值处于正规化格式时,此两格式也指明一隐含有效位数。换句话说,在正规化格式中,SP格式将一隐含的第24位指定给二进制点的左侧,其具有数值“1”,且DP格式将一隐含的第53位位指定给二进制点的左侧,其具有数值“1”。此输入数格式引起了两个考虑。
第一个考虑是输入指数字段能指定一数值,使得输入有效位数的所有位为整数字符,即没有分数位存在于有效位数中。换句话说,例如,在SP情况下,假使指数数值为23或更大(即根据一实施例而其考虑到一参考指数数值,指数数值表示2^23或更大),接着,成为一整数数值的转换将不会产生分数位给舍入点的右侧。我们有帮助地将此情况称为ROUND指令的“ROUND溢位”情况。在ROUND溢位情况中,对于指令而言,输入与输出数值之间不存在差异。在此情况下,输入数值已由具有浮点格式的整数来表示,且不需要舍入来产生正确的结果数值。
第二个考虑是隐含有效位数字符在暂时分离第一(转换至整数)与第二操作(转换至浮点)的设计下,可能引发额外结构状态的需要,此于后文解释说明。
在ROUND溢位情况下,由于最后结果已知,因此删除至变为浮点微指令的随后转换是有可能的,但是在指令完成和可能的数据传递至其它指令的期间,这会引起复杂度。假使在分配之后XROUND2微指令有条件地删除,有条件地自XROUND1或XROUND2微指令传递数据将会是必须的,且根据相依性指令是否已经被调度或分配而可能具有或不具有效能优点。这保证的复杂度变为显著。虽然此处所述的实施例是在XROUND1微指令期间检测ROUND溢位情况,但这些实施例可发布与执行XROUND2微指令。由于这减少了在数据传递与指令完成上的复杂度,上述操作是有益的。
如下所述,当浮点加法器单元104侦测到ROUND溢位情况时,其将信息由XROUND1微指令传递至XROUND2微指令。SP与DP输入数可以是非常大的数值。当转换至整数时,其二进制表示的尺寸可以轻易地超过其输入尺寸(SP为32位,而DP为64位)。这引起了对于额外且特例的极端尺寸储存缓存器以及额外结果总线导线的特别不期望的需求。因为这个理由,在ROUND溢位情况下,不期望将输入浮点数值转换为传统二进制整数表示法。
浮点加法器单元104侦测对于XROUND微指令的输入指数的大小(进入至ROUND指令的输入被提供作为输入至XROUND1微指令的输入),如同依据图5的判断方块504所述,且浮点加法器单元104选择性地在ROUND溢位情况下不执行变为整数的转换。这只能微处理器100将传递输入符号、指数、以及有效位数(所以都未改变)给XROUND2微指令,如同依据图5的方块506所述。
此外,此范例证明了由XROUND1微指令至XROUND2微指令的数据传递的格式,如同图2所示。即是,由XROUND1微指令传递至XROUND2微指令的数据的格式包括三个字段标示为图2的X 202、Y 204、及Z 206。X字段202为单一位,其具有ROUND指令输入的符号位的数值。Y字段204为SP格式的8位字段以及DP格式的11位字段,其持有ROUND指令输入指数的有条件增量版本,详细如下文所述。Z字段206为SP格式的23位字段以及DP格式的52位字段,其持有未改变ROUND指令输入有效位数字符或转换的整数字符所得知的位,如依据图5的方块514及516所述。规定符号、指数、以及其它可能有条件地包括转换后的整数数值的数据格式对于新的ROUND指令实施而言是新颖的且独特的。对于效能与降低的复杂度而言,其提供了某些优点。值得注意的是,为了有益地使用现行数据传递总线与缓存器而不需建立特定目的逻辑与伴随的复杂度,这些位的总数量将不会超过输入数据格式尺寸(不论是SP或DP格式)。
假使输入数据数为不是ROUND溢位数值,则必须变为整数操作的转换,如依据图5的方块508所述。在此情况下,用来表示结果整数所需要的位数量一般将不会超过表示输入有效位数(不包括隐含位)所需的位数量。因此,微处理器100不需避免去使用前述由XROUND1微指令至XROUND2微指令的数据格式。
然而,此论点特别的重要:在一输入数值的情况下,在被XROUND1微指令转换为整数的期间,输入有效位数可以上舍入(round up),因此比起不包括隐含位的有效位数字符,其需要多一个表示位。换句话说,输入数据数值可被上舍入以变成ROUND溢位情况。我们将此情况称为上舍入至ROUND溢位(Round Up To ROUND Overflow,RUTRO)情况。在RUTRO情况下,指出一额外位是XROUND1微指令所产生的整数的必要部分变为必要的,且当其由整数转换为浮点表示时,必须被XROUND2微指令所考虑。没有不明确的结构状态或先前技术存在,以保护此额外位数值,尤其是在先前所述由XROUND1微指令传递至XROUND2微指令的形式下,这承接了前述的优点。因此,本案发明人发明一新颖的技术,连同前述的数据格式,用来将RUTRO情况(依据图5的方块512所侦测到)由XROUND1微指令传递至XROUND2微指令。
关于正(positive)的XROUND1数值输入(例如符号位为0),浮点加法器单元104侦测到适当的边界指数数值输入(SP格式时为22,DP格式时为51),且当其侦测到RUTRO情况时有条件地增加该数值。此有条件地增加的指数数值藉由使用前述数据格式而由XROUND1微指令传送至XROUND2微指令,如同依据图5的方块514所述。再有条件增加的指数数值之外,微处理器100将某转换的整数字符由XROUND1微指令传送至XROUND2微指令,如同依据图5的方块514所述。值得注意的是,这些传送的整数字符的位数值稍后将在XROUND2微指令执行期间促进的期望结果产生,并转换为浮点。这些传送的整数字符的数值将会是在RUTRO情况下最终ROUND指令有效位数字符所需要的数值。在一实施例中,在符号转换至整数操作的期间,不需使用特定的规定来最佳化地产生此数值。在使用最有利的此方式来处理具有正符号的输入数值的情况下,藉由依据XROUND1输入符号位来适当地侦测整数有效值的额外位的极性,可简易地侦测RUTRO情况。
图3A是表示图1中执行XROUND1微指令的浮点加法器单元104的部分电路。在一实施例中,浮点加法器单元104包括使用在高速浮点加法的近程与远程。图3A所表示的部分是关于远程的,且用来执行XROUND1微指令。图6表示的部分是关于近程的,且用来执行XROUND2微指令,如以下所讨论。反向器(NOT)386、多任务器(MUX)388、移位器/延伸器384、增量器302、以及舍入逻辑单元304一起操作由XROUND1浮点输入来产生舍入2补码整数数值。在正输入数值的情况下,移位器/延伸器384接收包括隐含整数字符的输入有效位数,且接着零延伸(zero-extend)。在负(negative)输入数值的情况下,移位器/延伸器384接收包括补码的隐含整数字符的输入有效位数,且接着符号位延伸(sign-extend)。移位器/延伸器384根据输入指数来移位输入,以导致输出的最小有效整数字符被提供至增量器302的最小有效位输入。因此,假使输入为正时,移位器/延伸器384输出向右调正零延伸数值;假使输入为负时,移位器/延伸器384输出向右调正符号位延伸1补码数值(在依实施例中,增量器302为具有进位输入的64位2输入操作数加法器(64-bit 2-input operand adder);只有较低的24位被使用在SP情况下,且只有较低的53位被使用在DP情况下;在XROUND1微指令的情况下,第二输入操作数为零)。移位器/延伸器384也提供分数位给舍入逻辑单元304。
图3B的范例是说明一SP输入的RUTRO情况,尽管应该了解浮点加法器单元104能处理DP输入的RUTRO情况。在图3B的范例中,浮点加法器单元104接收23位输入,其有效位数字符被指定为S22至S0。在图3B的范例中,指数数值为2^22(即指数数值表示2^22,根据一实施例,其考虑一参考指数数值),因此,移位器/延伸器384将输入移位,使得S1位被提供至24位增量器302的最小有效位输入(输入位0),而S22位被提供至增量器302的输入位21。换句话说,在此范例中,移位输入数值的二进制点在S 1与S0位之间。增量器302的输入位22接收隐含整数字符(数值“1”),且其输入位23接收数值0。S0位被提供至舍入逻辑单元304,其根据舍入控制306的数值来产生舍入位数值、S0位、以及符号位。在一实施例中,舍入逻辑单元304执行注入舍入(injection rounding),且有条件地执行与一负数的2补码产生相关联的增量,即舍入逻辑单元304考虑被提供至增量器302的1补码数值是否需要被增量以代替任何舍入考虑。舍入逻辑单元304的舍入位输出被提供至增量器302以作为进位位。整数有效值的额外位是增量器302的输出位23,在一范例中其将为“1”。特别是,在SP情况下,假使符号为正,指数数值为22,排除隐含整数字符的有效位数数值为0x7FFFFF,且舍入控制数值导致上舍入,接着出现RUTRO情况,在此情况下,比较器316的输出将为真,且增量器302的输出将为0X800000(即位23为“1”)。
如上所述且由图3B所示,根据侦测RUTRO情况,为了执行XROUND1微指令,浮点加法器单元104将增量指数数值(在SP情况下由22增至23)。此外,由于在增量的指数数值之前该输入不是ROUND溢位情况,浮点加法器单元104将把转换整数字符(即增量器302的所有位但除了最大有效整数字符以外,其在SP情况下为输出位0至22)放置在XROUND1结果数值的Z字段206。在RUTRO情况下,所有的转换整数字符将为零。如同ROUND溢位情况,XROUND2微指令将有利地侦测在RUTRO情况下的XROUND1结果数值(例如,在SP情况下,Y字段204数值为23),且XROUND2微指令将简单地传送其输入数值以作为将成为ROUND指令的结果的输出数值,而输出数值为正确的结果。换句话说,在ROUND指令的结果下有效值的额外位将由浮点格式所固有的“1”数值隐含整数字符所提供。
有利于时序缘故,如图3A及图3B所示,RUTRO边界指数输入数值(RUTRO boundary exponent input value)的侦测可由立即由比较器316来执行,换句话说,与移位器/延伸器384以及增量器302的操作并行。此外,更有利于时序缘故,虽然异或门(XOR)308和与门(AND)322随着比较器316和增量器302而相继执行,但于他们每一个只有2位操作,因此是操作快速的。如图3B所示,XOR 308接收符号位(SB)以及接收由增量器302对输入所执行的舍入至整数操作结果的整数有效值的额外位。因此,假使符号位为0(正输入数值)且结果的整数有效值的额外位为1且假使输入指数数值为输入浮点格式的边界指数数值,则侦测到RUTRO情况。
正输入数值可上舍入至ROUND溢位(RUTRO),而负数值可下舍入至ROUND溢位(Round Down To Round Overflow,RDTRO),即朝向负无限。RDTRO情况需要不同于先前所述正数值RUTRO技术的技术。整数有效值的额外位(有关于符号位)的极性不足以指示RDTRO。换句话说,由于符号位与整数有效值的额外位都为“1”,因此图3A的XOR 308将不会产生数值“1”。这是因为第一个负值(即最大负值表示舍入整数)或边界ROUND溢位数值(即在SP情况下,具有符号位=“1”、指数=22、有效位数=0x7FFFFF字段的输入数值,其产生具有符号位=“1”、Y字段204数值=22、增量输出=0x800000的输出数值)不会引起最大有效转换整数字符的极性改变(即在最大有效四位字中的最大有效位为“1”且因此为符号位),且无法使用前述XOR 308侦测架构来侦测。因此,对于RDTRO的情况,浮点加法器单元104不会增量被侦测到的边界数值。为了应付此情况或具有负输入数值的其它情况,XROUND2微指令(其转换至浮点)将作为最大有效位的输入符号位数值(即X字段202的数值)连结至输入转换整数字符,如图6所示。这提供了来自符号(正或负)2补码整数的正确转换给表示位数值的全部范围。连同前述正RUTRO的技术,舍入至ROUND溢位的正及负数值也正确地计算出。
使用SP情况作为一范例,输入至XROUND1微指令且将引起RDTRO情况的输入数值为负符号位(即数值“1”)、22的指数数值、以及连同一舍入控制数值的23位有位数0x7FFFFF,其中,舍入控制数值导致对24位增量器302的进位,以藉由2补码正朝负无限舍入的效力而变为数值“0”。因此,随着适当的舍入控制数值,增量器302的输出为0x800000,其具有数值“1”的整数有效值的额外位。此0x800000的真24位转换整数数值无法表示在结果的23位Z字段206内。因此,23位0x00000数值被放置在XROUND1微指令结果的23位Z字段206内,且必要的整数有效值的额外位以X字段202的数值“1”而被传送至XROUND2微指令。注意到,0x800000数值指示最大的负2补码整数,其以24位来表示。因此,当XROUND2微指令将0x800000整数转换为浮点数值时,产生了正确结果。
为了RUTRO与RDTRO情况,这些特定X字段202、Y字段204、Z字段206数值到达XROUND2微指令的传送,是使用此述数据格式以将信息由XROUND1微指令传递至XROUND2微指令的附加优点。透过被提供作为XROUND1与XROUND2微指令的两必要操作的任何暂时分离,此数据格式保持了额外整数字符数值的必要有效值。应可了解,在被传送的Y字段204数值小于必要值以指示ROUND溢位情况的正数值情况(例如符号位为“0”)下,根据图6所示的部分浮点加法器单元104,而由XROUND2微指令所执行浮点运算的转换将说明被传送的X字段202位数值如同不具备有效值(由于其为“0”)。
如图7的流程图所示,关于XROUND2微指令,首先,检查由XROUND1微指令的Y字段204数值,在一实施例中,藉由再次使用用来执行关于XROUND1微指令的检查的相同电路。假使Y字段204的数值不表示ROUND溢位情况,浮点加法器单元104使用在Z字段206内且由XROUND1微指令先前提供的转换整数字符,并藉由将X字段202数值连接输入转换整数字符的最大有效位,来选择性地执行成为浮点运算的转换。假使检查过的Y字段204没有表示ROUND溢位情况,如前所述,浮点加法器单元104选择性地不执行成为浮点运算的转换。在此情况下,X、Y、Z字段数值被传送且没有改变,以作为XROUND2微指令的结果并作为ROUND指令整体的正确结果。根据于此,可清楚了解伴随较小的复杂度而有益地提供正确结果。
图8以图示方式来表示执行SSE 4.1ROUND指令的整体程序,详细如下文所述。
虽然已说明为了接收XROUND1微指令的中间结果而使得在XROUND1微指令之后XROUND2微指令开始执行的实施例,然而可考虑微指令预料ROUND溢位情况将存在并使用ROUND指令输入操作数数值(其是与在ROUND溢位情况下XROUND1微指令中间结果相等的数值)来推测地执行XROUND2微指令的实施例;假使推测是不正确的,XROUND2微指令藉由使用XROUND1微指令中间结果来重新执行。这使能XROUND2微指令在XROUND1微指令之前或与同时于XROUND2微指令而实际开始其本身的执行。
此外,虽然已叙述了在X与Z字段数值的中间结果一起表示2补码整数数值的实施例,但也可考虑其表示无符号整数数值或符号大小(sign-magnitude)整数数值或1补码整数数值的实施例。举例来说,无符号或符号大小整数数值表示法可藉由侦测与增量指数(关于在2补码实施例中的RUTRO情况)来提供RDTRO情况所需的独特的溢位边界数值(例如单精度,28位=0x800000)。此外,关于1补码表示法,XROUND1微指令可能在对1补码的转换之前来舍入输入数值、侦测引起导致指数增量的舍入溢位边界数值、以及只有假使没有引起指数增量时对1补码的转换;以及,XROUND2微指令可能侦测溢位指数状态并引起输入被传送至输出,以及侦测较少的溢位指数状态并引发自1补码表示法的转换,接着执行正规化与最后指数计算。在2补码的实施例中,当正传送期望的最终舍入整数数值(对于RUTRO情况,于其中整数的最大有效位被隐含,但在RDTRO情况下不会被提供)时,关于1补码表示法的这些规定会适当地区别出具有适当X位数值以及是当Y字段数值的正与负舍入溢位。这些规定提供了在单一精确度情况下的数值以及其适当且独特的1补码表示法,例如:
1)positive(RUTRO boundary-1):X=0,Y=2e22,Z=0x7FFFFF(23bits)
(由于最大有效位被提供为X,因此1补码整数表示为0x7FFFFF,如同在2补码的实施例中)
2)negative(RUTRO boundary-1):X=1,Y=2e22,Z=0x000000(23bits)
(由于最大有效位被提供为X,因此1补码整数表示为0x800000,如同在2补码的实施例中)
3)positive zero:X=0,Y=0,Z=0x000000(23bits)
(由于最大有效位被提供为X,因此1补码整数表示为0x000000,如同在2补码的实施例中)
4)negative zero:X=1,Y=0,Z=0x7FFFFF(23bits)
(由于最大有效位被提供为X,因此1补码整数表示为0xFFFFFF,如同在2补码的实施例中)
此外,虽然叙述ROUND指令结果的尺寸等于其输入操作数的尺寸的实施例,但是也可考虑结果尺寸不同于输入尺寸的实施例。举例来说,XROUND微指令可被修改来移位输入操作数以将其校准至一相异的舍入点,且XROUND2微指令可被修改来将结果正规化与格式化至新的期望尺寸,可能包括相异指数结果的计算。
本发明的不同实施例已于本文叙述,但本领域具有通常知识者应能了解这些实施例仅作为范例,而非限定于此。本领域具有通常知识者可在不脱离本发明的精神的情况下,对形式与细节上做不同的变化。例如,软件可实现本发明实施例所述的装置与方法的功能、组建(fabrication)、模块化(modeling)、模拟、描述(description)、和/或测试。可透过一般程序语言(C、C++)、硬件描述语言(Hardware Description Languages,HDL)(包括Verilog HDL、VHDL等等)、或其它可利用的程序语言来完成。此软件可配置在任何已知的计算机可使用媒介,例如半导体、磁盘、或光盘(例如CD-ROM、DVD-ROM等等)。本发明所述的装置与方法实施例可被包括于半导体知识产权核心,例如微处理器核心(以HDL来实现),并转换成集成电路产品的硬件。此外,本发明所述的装置与方法可实现为硬件与软件的结合。因此,本发明不应局限于所揭露的实施例,而是依后附的申请专利范围与等同实施所界定。特别是,本发明可实施在使用于一般用途计算机中的微处理器装置内。最后,本发明虽以较佳实施例揭露如上,然其并非用以限定本发明的范围,任何所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可做些许的更动与润饰,因此本发明的保护范围当视后附的权利要求书范围所界定者为准。
Claims (22)
1.一种微处理器,用以执行SIMD延伸(SSE)指令集的一指令,该指令指定具有预设尺寸的一浮点输入操作数,该指令指示该微处理器使用一舍入模式来将该浮点输入操作数舍入至一整数数值且将该整数数值返回为具有与该浮点输入操作数相同的该预设尺寸的一浮点结果,该微处理器包括:
一指令转译器,将该指令转译为一第一微指令与一第二微指令;以及
一执行单元,执行该第一微指令与该第二微指令;
其中,该第一微指令接收该浮点输入操作数以作为输入操作数,且自该浮点输入操作数来产生一中间结果;
其中,该第二微指令接收该第一微指令的该中间结果来作为输入操作数,且自该中间结果来产生该指令的该浮点结果;以及
其中,该中间结果具有与该浮点输入操作数相同的该预设尺寸。
2.如权利要求1所述的微处理器,其中,该微处理器用来执行该第一微指令与该第二微指令,使得该第一微指令与该第二微指令执行的开始在时间上具有不定的分离。
3.如权利要求2所述的微处理器,其中,该第二微指令在该第一微指令之后开始执行,不论该第一微指令的该中间结果,该第二微指令总被执行。
4.如权利要求1所述的微处理器,其中,该浮点输入操作数具有一单一符号位、一M-位指数、以及N-位有效位数,该中间结果包括一第一单一位字段、一第二M-位字段、以及一第三N-位字段,且该执行单元用来执行该第一微指令以产生该中间结果,使得:
(1)当该指数表示2^N或更大时,该中间结果为未改变的该浮点输入操作数;以及
(2)当该指数表示2^(N-1),该有效位数都是二进制的1,且该舍入模式引发上舍入时,该第一字段为该浮点输入操作数的该符号位,该第二字段等于N,且该第三字段都是二进制的0。
5.如权利要求4所述的微处理器,其中,该执行单元执行该第二微指令以产生该浮点结果,使得:
当该第二字段表示2^N或更大时,该浮点结果为未改变的该中间结果。
6.如权利要求5所述的微处理器,其中,该浮点结果具有一单一符号位、一M-位指数、以及一N-位有效位数,该执行单元更执行该第二微指令以产生该浮点结果,使得:
当该第二字段表示小于2^N时,该执行单元考虑将该第一字段的位作为最大有效位来添加至该第三字段以成为一整数数值,且该执行单元将该整数数值转换为该浮点结果。
7.如权利要求6所述的微处理器,其中,当该第二字段表示小于2^N时,该浮点结果的该符号位为该第一字段的位。
8.如权利要求6所述的微处理器,其中,该执行单元执行该第一微指令以产生该中间结果,使得:
当该情况(1)与(2)都不为真时:
该第一字段的位为该浮点输入操作数的该符号位;以及
该第三字段为转换自该浮点输入操作数的N-位舍入2补码整数数值。
9.如权利要求8所述的微处理器,该执行单元执行该第一微指令以产生该中间结果,使得:
当该情况(1)与(2)都不为真时:
该第二字段为未改变的该浮点输入操作数的该指数。
10.如权利要求1所述的微处理器,
其中,该浮点输入操作数具有一单一符号位、一M-位指数、以及N-位有效位数,该中间结果包括一第一单一位字段、一第二M-位字段、以及一第三N-位字段;
其中,该执行单元用来执行该第一微指令以产生该中间结果,使得当该指数表示2^(N-1),该有效位数都是二进制的1,该符号位为负,且该舍入模式指示在负无限方向的舍入时:
该第一字段为该浮点输入操作数的该符号位;
该第二字段为该浮点输入操作数的未改变的该指数;以及
该第三字段为转换自该浮点输入操作数的N-位舍入2补码整数数值;
其中,该浮点结果具有一单一符号位、一M-位指数、以及一N-位有效位数;以及
其中,该执行单元更执行该第二微指令以产生该浮点结果,使得当该第二字段表示2^(N-1)时,该执行单元考虑将该第一字段的位作为最大有效位来添加至该第三字段以成为一整数数值,且该执行单元将该整数数值转换为该浮点结果。
11.如权利要求4或10所述的微处理器,其中在单精度格式中,M为8位且N为23位;而在双精确度格式中,M为11位且N为52位。
12.一种执行指令的方法,由一微处理器所执行,该指令是SIMD延伸(SSE)指令集的指令,用于指定具有一预设尺寸的一浮点输入操作数,该指令指示该微处理器使用一舍入模式来将该浮点输入操作数舍入至一整数数值且将该整数数值返回为具有与该浮点输入操作数相同的该预设尺寸的一浮点结果,该执行指令的方法包括:
将该指令转译为一第一微指令与一第二微指令,其中,该转译步骤由该微处理器的一指令转译器所执行;以及
执行该第一微指令与该第二微指令,其中,该执行步骤由该微处理器的一执行单元所执行;
其中,该第一微指令接收该浮点输入操作数以作为输入操作数,且自该浮点输入操作数来产生一中间结果;
其中,该第二微指令接收该第一微指令的该中间结果来作为输入操作数,且自该中间结果来产生该指令的该浮点结果;以及
其中,该中间结果具有与该浮点输入操作数相同的该预设尺寸。
13.如权利要求12所述的执行指令的方法,其中,执行该第一微指令与该第二微指令的该步骤包括执行该第一微指令与该第二微指令,使得该第一微指令与该第二微指令执行的开始在时间上具有不定的分离。
14.如权利要求13所述的执行指令的方法,其中,该第二微指令在该第一微指令之后开始执行,不论该第一微指令的该中间结果,该第二微指令总被执行。
15.如权利要求12所述的执行指令的方法,其中,该浮点输入操作数具有一单一符号位、一M-位指数、以及N-位有效位数,该中间结果包括一第一单一位字段、一第二M-位字段、以及一第三N-位字段,且执行该第一微指令的该步骤包括执行该第一微指令以产生该中间结果,使得:
(1)当该指数表示2^N或更大时,该中间结果为未改变的该浮点输入操作数;以及
(2)当该指数表示2^(N-1),该有效位数都是二进制的1,且该舍入模式引发上舍入时,该第一字段为该浮点输入操作数的该符号位,该第二字段等于N,且该第三字段都是二进制的0。
16.如权利要求15所述的执行指令的方法,其中,执行该第二微指令的该步骤包括执行该第二微指令以产生该浮点结果,使得:
当该第二字段表示2^N或更大时,该浮点结果为未改变的该中间结果。
17.如权利要求16所述的执行指令的方法,其中,该浮点结果具有一单一符号位、一M-位指数、以及一N-位有效位数,且执行该第二微指令的该步骤包括执行该第二微指令以产生该浮点结果,使得:
当该第二字段表示小于2^N时,该执行单元考虑将该第一字段的位作为最大有效位来添加至该第三字段以成为一整数数值,且该执行单元将该整数数值转换为该浮点结果。
18.如权利要求17所述的执行指令的方法,其中,当该第二字段表示小于2^N时,该浮点结果的该符号位为该第一字段的位。
19.如权利要求18所述的执行指令的方法,其中,执行该第一微指令的该步骤包括执行该第一微指令以产生该中间结果,使得:
当该情况(1)与(2)都不为真时:
该第一字段的位为该浮点输入操作数的该符号位;以及
该第三字段为转换自该浮点输入操作数的N-位舍入2补码整数数值。
20.如权利要求19所述的执行指令的方法,执行该第一微指令的该步骤更包括执行该第一微指令以产生该中间结果,使得:
当该情况(1)与(2)都不为真时:
该第二字段为未改变的该浮点输入操作数的该指数。
21.如权利要求12所述的执行指令的方法,
其中,该浮点输入操作数具有一单一符号位、一M-位指数、以及N-位有效位数,该中间结果包括一第一单一位字段、一第二M-位字段、以及一第三N-位字段;
其中,执行该第一微指令的该步骤包括执行该第一微指令以产生该中间结果,使得当该指数表示2^(N-1),该有效位数都是二进制的1,该符号位为负,且该舍入模式指示在负无限方向的舍入时:
该第一字段为该浮点输入操作数的该符号位;
该第二字段为该浮点输入操作数的未改变的该指数;以及
该第三字段为转换自该浮点输入操作数的N-位舍入2补码整数数值;
其中,该浮点结果具有一单一符号位、一M-位指数、以及一N-位有效位数;以及
其中,执行该第二微指令的该步骤包括执行该第二微指令以产生该浮点结果,使得当该第二字段表示2^(N-1)时,该执行单元考虑将该第一字段的位作为最大有效位来添加至该第三字段以成为一整数数值,且该执行单元将该整数数值转换为该浮点结果。
22.如权利要求15或21所述的执行指令的方法,其中在单精度格式中,M为8位且N为23位;而在双精确度格式中,M为11位且N为52位。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US22904009P | 2009-07-28 | 2009-07-28 | |
US61/229,040 | 2009-07-28 | ||
US12/783,769 | 2010-05-20 | ||
US12/783,769 US8386755B2 (en) | 2009-07-28 | 2010-05-20 | Non-atomic scheduling of micro-operations to perform round instruction |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101930354A CN101930354A (zh) | 2010-12-29 |
CN101930354B true CN101930354B (zh) | 2014-03-12 |
Family
ID=43369552
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010239873.XA Active CN101930354B (zh) | 2009-07-28 | 2010-07-26 | 微处理器及其执行指令的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101930354B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9128701B2 (en) * | 2011-04-07 | 2015-09-08 | Via Technologies, Inc. | Generating constant for microinstructions from modified immediate field during instruction translation |
WO2013101233A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Floating point round-off amount determination processors, methods, systems, and instructions |
CN105849690B (zh) * | 2014-07-02 | 2019-03-15 | 上海兆芯集成电路有限公司 | 融合乘积-累加运算的处理器与方法 |
CN104156241B (zh) * | 2014-07-31 | 2019-08-13 | 中国船舶重工集团公司第七0九研究所 | 处理器微程序的初始化配置方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5696709A (en) * | 1995-03-31 | 1997-12-09 | International Business Machines Corporation | Program controlled rounding modes |
CN101149674A (zh) * | 2006-09-22 | 2008-03-26 | 英特尔公司 | 响应指令执行舍入运算 |
-
2010
- 2010-07-26 CN CN201010239873.XA patent/CN101930354B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5696709A (en) * | 1995-03-31 | 1997-12-09 | International Business Machines Corporation | Program controlled rounding modes |
CN101149674A (zh) * | 2006-09-22 | 2008-03-26 | 英特尔公司 | 响应指令执行舍入运算 |
Also Published As
Publication number | Publication date |
---|---|
CN101930354A (zh) | 2010-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI405126B (zh) | 微處理器及其執行指令之方法 | |
CN109643228B (zh) | 用于浮点乘加运算的低能耗尾数乘法 | |
US8694572B2 (en) | Decimal floating-point fused multiply-add unit | |
TWI625671B (zh) | 微處理器與在微處理器中執行之方法 | |
US8799344B2 (en) | Comparator unit for comparing values of floating point operands | |
US8489663B2 (en) | Decimal floating-point adder with leading zero anticipation | |
US8793294B2 (en) | Circuit for selectively providing maximum or minimum of a pair of floating point operands | |
US8166092B2 (en) | Arithmetic device for performing division or square root operation of floating point number and arithmetic method therefor | |
CN101930354B (zh) | 微处理器及其执行指令的方法 | |
Wahba et al. | Area efficient and fast combined binary/decimal floating point fused multiply add unit | |
CN102349049B (zh) | 快速检测浮点单元中的移位的机制 | |
Del Barrio et al. | Ultra-low-power adder stage design for exascale floating point units | |
Boersma et al. | The POWER7 binary floating-point unit | |
US7373369B2 (en) | Advanced execution of extended floating-point add operations in a narrow dataflow | |
CN102495714B (zh) | 执行浮点减法的装置与方法 | |
Ritpurkar et al. | Design and simulation of 32-Bit RISC architecture based on MIPS using VHDL | |
US8019805B1 (en) | Apparatus and method for multiple pass extended precision floating point multiplication | |
US7024439B2 (en) | Leading Zero Anticipatory (LZA) algorithm and logic for high speed arithmetic units | |
US7475104B2 (en) | System and method for providing a double adder for decimal floating point operations | |
US7366749B2 (en) | Floating point adder with embedded status information | |
US7444367B2 (en) | Floating point status information accumulation circuit | |
Sokolov et al. | Self-timed fused multiply-add unit performance improvement | |
He et al. | Multiply-add fused float point unit with on-fly denormalized number processing | |
US7016928B2 (en) | Floating point status information testing circuit | |
US7430576B2 (en) | Floating point square root provider with embedded status information |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |