扩展精度的整数除的方法

文档序号:6649226阅读:240来源:国知局
专利名称:扩展精度的整数除的方法
技术领域
本发明通常涉及微处理器和计算机系统领域。更准确地说,本发明涉及用于扩展精度的整数除算法的方法和设备。
背景技术
计算机系统在我们的社会中已经变得日益普遍。计算机的处理能力已经在广泛的行业中提高了工人的效率和生产率。随着购买并拥有一台计算机的成本继续下降,越来越多的消费者已经能够利用更新更快的机器。此外,许多人因为方便自由而喜欢使用笔记本计算机。移动计算机使得用户能够在离开办公室或旅游时随身携带他们的数据和工作。销售人员、公司主管甚至是学生非常熟悉这种情况。
随着处理器技术的进步,也正在产生更新的软件代码以运行在采用这些处理器的机器上。用户通常期望并要求他们的计算机有更高的性能,而不管正在使用的软件的类型。一个这样的问题就从实际正在处理器中被执行的指令和操作的种类中而产生了。根据操作的复杂度和/或所需电路的类型,某些类型的操作需要更多时间来完成。这就提供了一个优化某些复杂操作在处理器中被执行的方式的机会。

发明内容
通过进行扩展精度的整数除算法以便增加扩展精度的整数除计算的性能并减少用于执行扩展精度的整数除的内部操作的处理器的制造成本,本发明方法的一个实施例实现了改进的内部处理器操作的技术效果。在一个实施例的方法中,对大于内部运算装置中的任何之一的扩展精度的整数进行扩展精度的整数除计算的技术问题通过以下步骤得到解决把L位宽的整数被除数分成两个部分,其中第一整数格式部分包括所述第一整数被除数的低M位,第二整数格式部分包括所述第一整数被除数的高M位。
通过把第一和第二整数部分从内部整数格式转换成内部浮点格式部分,并把N位宽的整数除数从内部整数格式转换成内部浮点格式;一个实施例的方法实现了减少增加了扩展精度的整数除计算的性能的改善的内部处理器操作的制造成本。在内部浮点格式下用第一和第二部分除以除数以获得第一和第二内部浮点格式的商。然后把第一和第二商从内部浮点格式转换成第一和第二内部整数格式的商并加和在一起以产生整数商,由此解决了对大于内部运算装置中的任何之一的扩展精度的整数进行扩展精度的整数除计算的技术问题。
根据本发明,提供一种方法包括把第一L位宽的整数被除数分成两个等宽的部分,其中第一整数格式部分包括所述第一整数被除数的低M位,第二整数格式部分包括所述第一整数被除数的高M位,其中M等于1/2·L;把所述第一整数格式部分转换成第一浮点格式部分;把N位宽的整数除数从整数格式转换成浮点格式的除数;用所述第一浮点格式部分除以所述浮点格式的除数以获得第一浮点格式的商;把所述第一浮点格式的商转换成第一整数格式的商;把所述第二整数格式部分转换成第二浮点格式部分;用所述第二浮点格式部分除以所述浮点格式的除数以获得第二浮点格式的商;把所述第二浮点格式的商转换成第二整数格式的商;并且把所述第一和第二整数格式的商加在一起以产生第三整数格式的商。
根据本发明,还提供一种方法包括把扩展精度整数除指令译码成微操作以使整数除操作发生;启动除算法以通过使用浮点除执行所述整数除操作;把整数被除数和整数除数分别转换成浮点被除数和浮点除数;用所述浮点被除数除以所述浮点除数以得到浮点商;把所述浮点商转换成整数商;根据所述整数被除数、所述整数除数和所述整数商计算整数余数;根据对所述整数除数和所述整数商的求值检查错误;并调整所述整数余数和所述整数商以解决用所述浮点除执行所述整数除所需要的任何修正。
根据本发明,再提供一种方法包括把L位宽的有符号整数被除数转换成L位宽的无符号整数被除数,并把M位宽的有符号整数除数转换成M位宽的无符号整数除数;把所述L位宽的无符号整数被除数分成N位宽的第一段和N位宽的第二段,其中所述第一段由所述无符号整数被除数的最低N位组成,所述第二段由所述无符号整数被除数的最高N位组成;把所述第一段转换成第一浮点被除数,把所述第二段转换成第二浮点被除数,把所述整数除数转换成浮点除数;用所述第一浮点被除数除以所述浮点除数以产生第一浮点商;把所述第一浮点商转换成第一无符号整数商;用所述第二浮点被除数除以所述浮点除数以产生第二浮点商;把所述第二浮点商转换成第二无符号整数商;把所述第一和第二无符号整数商加在一起以获得第三无符号整数商;并且把所述第三无符号整数商转换成有符号整数商。


通过示例来说明本发明,但本发明并不局限于附图中的图表,在附图中相同的附图标记指示相似的元件,在这些附图中图1是一种计算机系统的框图,该计算机系统是依照本发明的一种实施方案用一种包括了执行扩展精度的整数除算法指令的执行单元的处理器形成的;图2是包括本发明的一种实施方案的处理器的框图;图3是一种实施方案的处理器的微体系结构的框图,该实施方案包括逻辑电路来执行依照本发明的扩展精度的整数除操作;图4A是一个流程图,依照本发明的一种实施方案说明了一种执行128位值除以64位值的无符号整数除操作的方法;图4B是一个流程图,说明了图4A中执行128位除以64位整数除操作的方法的一种实施方案的128位被除数的低64位部分的无符号除操作;图4C是一个流程图,说明了图4A中执行128位除以64位整数除操作的方法的一种实施方案的128位被除数的高64位部分的无符号除操作;图4D是一个流程图,说明了图4A的实施方案中128位被除数的高64位和低64位部分的除后(post-divide)处理;图5A是一个流程图,说明了依照本发明的另一种实施方案执行有符号128位值除以有符号64位值的有符号整数除操作的方法;以及图5B是一个流程图,说明了对图5A的128位除以64位整数除操作的结果的除后处理。
具体实施例方式
公开了用于扩展精度的整数除算法的方法和设备。这里所描述的实施方案是在微处理器范围内描述的,但并不仅仅局限于此。虽然后面的实施方案是根据处理器描述的,但其它实施方案也适用于其它类型的集成电路和逻辑设备。本发明的相同技术和教义可以很容易地应用到能够从更高的流水线吞吐量和改良的性能获益的其它类型的电路或半导体设备。本发明的教义也适用于能够执行数据操作的任意处理器或机器。然而,本发明并不局限于执行128位、64位、32位或16位数据操作的处理器或机器,并且可以应用到需要扩展精度整数除的任意处理器或机器。
在下面的描述中,为说明起见,阐述了大量特定的细节以提供对本发明的彻底理解。但本领域的技术人员将意识到这些特定的细节并不是实践本发明所必需的。在其它实例中,没有特别详细地阐述那些众所周知的电气结构和电路,为的是避免不必要的模糊本发明。
在今天的处理器中,使用了大量不同的执行单元来处理并执行多种代码和指令。并不是所有的指令都被创建为相等的,因为有些指令能较快地完成,而其它指令则需要占用大量的时钟周期。指令的吞吐越快,处理器的整体性能就越高。因而,拥有许多能够尽可能快地执行的指令将会非常有利。但有些指令复杂性较高并需要更多的执行时间和处理器资源。例如,浮点指令、装载/存储操作、数据移动等等。
微处理器及相似类型的逻辑电路中除指令的实现通常涉及很多问题。此外,除操作的复杂性常常导致需要额外的电路来正确地执行除。目前很多处理器把大量的硬件专门用于浮点除指令,因为浮点除操作通常对性能非常关键。例如,很难证明在N位的处理器(像32位处理器)上为整数除包含专用硬件是合理的。因而也更难证明为双倍大小的2N(即64位)整数加上专用硬件以便用为较小类型设计的运算器解决较大的数据类型是合理的。
64位硬件的除逻辑通常能够处理被除数和除数是64位或更少位的数值时的除操作。例如,能够执行的除操作包括64位除以64位、64位除以32位、32位除以16位、16位除以8位,等等。然而,在某些情况下涉及由大于64位表示的数值的操作就很难得到,甚至是不可能的。因而拥有64位除法器电路的处理器在没有本发明的实施方案的情况下就不能处理128位除以64位的除操作。
例如,如果在一个处理器上需要扩展精度的除指令,设计者就面临着有限数量的选择。设计者可以加进专用硬件来处理扩展精度的除指令,这种方法增加了整体设计的成本和复杂度,或者在可用的浮点硬件上模拟该指令。因此,可以期望能帮助促进用现有硬件实现整数除操作的新的解决方案减轻设计负担。依照本发明的一种算法的实施方案允许用零花费或最少的硬件在处理器体系结构中加入有符号和无符号128位除以64位的整数除指令。
本发明的实施方案提供了一种途径来把扩展精度的整数除指令实现为一种算法,该算法利用浮点除指令和浮点硬件。就一种实施方案来说,该算法是基于下面的思想128位值除以64位值的整数除可以用128位值除以64位值的除(其中被除数的64最低有效位被清除)和64位值除以64位值的除来估算。64最低有效位被清除的128位被除数是XH的缩位版本(scaled version)。一种实施方案的浮点加法器能够用128位值除以64位值,只要被除数只有前64位是非零。因而,64位除以64位除法器实际上在用上部被除数执行128位除以64位除。通过利用现有的能够执行双倍扩展精度除的浮点指令,可以实现两个64位除以64位除来利用浮点除法器单元。在一个实例中,双倍扩展精度意味着有64位有效(significands)的浮点数。因为整数除指令的128位和64位值都是整数格式,因而在用于浮点硬件之前必须换算并转换成浮点格式。同样,来自浮点除的输出也必须进行换算并转换成整数格式。在完成整数除指令之前合并两个单独的除的结果并对其进行调整。可以在处理器实现依照本发明的整数除算法的实施方案以在不使用额外硬件(例如整数除法器)并且不会严重损害整体性能的情况下有效地支持扩展精度的128位除以64位整数除。
一种实施方案中,扩展精度的整数除算法是基于对浮点除指令的使用。整数除调整浮点除以通过浮点硬件实现整数计算。换句话说,包括本发明的实施方案的处理器能够在不使用整数除硬件的情况下执行扩展精度的整数除操作。对一种实现方式来说,浮点除指令的精度至少是整数被除数的一半。此外,对该实现方式来说除数的精度不高于浮点除指令的精度。这些条件下,可以实现有效的扩展精度除算法的实现方案以利用浮点除法器单元。
本发明的实施方案能够用64位除以64位的除法器硬件逻辑实现128位除以64位的除操作。一种实施方案中的64位除以64位除法器硬件实际上是能够除以双倍扩展精度浮点数的浮点除法器。对本发明的一种实施方案来说,由64位值Y(除数)去除128位值X(被除数)来获得64位的商Q和64位的余数R。为了实现这种除操作,本发明的实施方案把128位除操作分成两个独立的64位除操作,其中第一64位除是在被除数的低64位上执行的,第二64位除是在被除数缩放过的高64位上执行的(即,低64位被清除的128位值)。因而64位除以64位的整数除法器能够执行128位除以64位的除操作。这些操作可以表示如下X=Q·Y+RXL=QL·Y+RLXH·264=QH·Y+RH其中,X=XL+XH·264,Q=QL+QH,R=RL+RH这个实例及下文中所描述的位数是根据特定实现方式中的最大允许位。例如,这里64位值指的是能够用来各自表示商和余数的位数。因而用少于全部64位能够表示的商中的数可有一串前导零。在下面的论述中通常分别把项″QH″和″RH″称作与被除数的上半部″XH″的除相关的商和余数。QH和RH也可被分别称作″高位商″和″高位余″。
现在参考图1,显示了一个示例性的计算机系统100。系统100包括一个部件(例如处理器102)以依照本发明(例如这里所描述的实施方案)使用包括执行扩展精度的整数除算法的逻辑在内的执行单元。系统100是基于Santa Clara,California的Intel公司的PENTIUMII ,PENTIUM4,ItaniumTM,XScaleTM和/或StrongARMTM微处理器,尽管也可以使用其它系统(包括拥有其它微处理器的PC、工程技术工作站、置顶盒等)。一种实施方案中,样本系统100可以执行来自Redmond,Washington的Microsoft公司的WINDOWSTM操作系统版本,尽管也可以使用其它操作系统(例如UNIX和Linux)、嵌入式软件和/或图形用户界面。因而,本发明并不局限于任何特定的硬件电路和软件的组合。
本发明也不局限于计算机系统。本发明的选择实施方案可以用在像手持设备和嵌入式应用这样的其它设备中。手持设备的一些实例包括蜂窝电话、Internet协议设备、数字照相机、个人数字助理(PDA)和手持PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(Net PC)、置顶盒、网络集线器、广域网(WAN)交换机或在操作数上执行整数除操作的任意其它系统。此外,已经实现了一些体系结构以使得指令能够同时在几个数据在操作以提高多媒体应用的效率。随着数据的类型和量的增加,必须增强计算机和它们的处理器以用更有效的方法操作数据。
图1是带有处理器102的计算机系统100的框图,处理器102包括执行单元108以依照本发明执行扩展精度的整数除算法。本实施方案是在单处理器的桌面或服务器系统的环境中描述,但在多处理器系统中也可包括选择实施方案。系统100是集线器体系结构的一个示例。计算机系统100包括处理器102来处理数据信号。例如,处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算机(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器、或任意其它处理器设备(例如数字信号处理器)。处理器102耦合到处理器总线110,处理器总线110能够在处理器102和系统100的其它部件之间传输数据。系统100的元件执行它们的对熟悉本领域的人来说众所周知的常规功能。
一种实施方案中,处理器102包括1级(L1)内部高速缓冲存储器104。根据体系结构,处理器102可以有单个内部高速缓存或多级内部高速缓存。作为选择,在另一种实施方案中,高速缓冲存储器可以位于处理器102之外。其它实施方案根据特定实现方式和需求还可以包括内部和外部高速缓存的组合。处理器102还包括为某些宏指令存储微代码的微代码(ucode)ROM 106。包括执行整数和浮点操作的逻辑在内的执行单元108也驻留在处理器102中。执行单元108的替代实施方案也可用在微控制器、嵌入式处理器、图形设备、DSP和其它类型的逻辑电路中。系统100包括存储器120。存储器120可以是动态随机访问存储器(DRAM)设备、静态随机访问存储器(SRAM)设备、快闪存储器设备或其它存储器设备。存储器120能够存储由数据信号所表示的指令和/或数据,这些指令和/或数据可以由处理器102执行。
系统逻辑芯片116耦合到处理器总线110和存储器120。在所说明的实施方案中的系统逻辑芯片116是一个存储控制器集线器(MCH)。处理器102能够通过处理器总线110和MCH 116通信。MCH 116为指令和数据存储、图形命令的存储、数据和结构提供一个到存储器120的高带宽存储器通路118。MCH 116是为了在处理器102、存储器120和系统100的其它部件之间导向数据,并在处理器总线110、存储器120和系统I/O 122之间接通数据信号。在一些实施方案中,系统逻辑芯片116能够为耦合到图形控制器112提供图形端口。MCH 116通过存储接口118耦合到存储器120。图形卡112通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100使用专有集线器接口总线122耦合MCH 116到I/O控制器集线器(ICH)130。ICH 130通过局部I/O总线提供到一些I/O设备的直接连接。局部I/O总线是用于连接外设到存储器120、芯片组和处理器102的高速I/O总线。一些实例是音频控制器、固件集线器(闪存BIOS)128、无线收发器126、数据存储124、包括用户输入和键盘接口的传统I/O控制器、串行扩展端口(例如通用串行总线USB)和网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、快闪存储器设备或其它大容量存储设备。
对系统的另一种实施方案来说,执行用于扩展精度整数除的算法的执行单元可以和片上的系统一起使用。片上系统的一种实施方案包括处理器和存储器。用于一种这样的系统的存储器是快闪存储器。快闪存储器可以和处理器和其它系统部件位于同一管芯上。另外,其它逻辑块,例如存储控制器或图形控制器,也可位于片上系统上。
图2是处理器200的框图,处理器200包括执行单元的一种实施方案以依照本发明执行扩展精度的整数除操作。处理阶段的前端202通过分配器/重命名器210和重调度器重放队列220耦合到调度器230。Ucode ROM 204也耦合到前端202以为所选的复杂的宏指令提供微代码程序,否则这些宏指令将占用大量的时钟周期进行解码。微操作(微-op或uop)形式的指令可被从调度器230投机性地分派。因而调度器230能够在不先确定指令所需的数据是否有效或可用的情况下分派指令。当指令将到达执行时执行指令所需的输入数据被表示为就绪时调度器230将从前端202分派指令。
处理器200还包括一个通过校验器260、分级队列250和重放多路复用器235实现的重放机制。另外重放可以从重放队列220完成,当校验器260选择这样做时。重放系统可以重新执行那些在被调度器230调度后没有被正确执行的指令。执行单元240能够在执行指令中进行数据推测。执行单元240可以是算术逻辑单元(ALU)、浮点ALU、存储发生单元,等等。执行单元240也可被共同称为执行集群。对这个实施方案来说,执行单元240包括一个整数ALU和一个浮点ALU,整数ALU用来处理除操作的整数方面,浮点ALU用来处理算法的浮点部分。这种实施方案的一个执行单元240包括一个64位乘以64位的整数乘法器,另一个执行单元240包括一个依照本发明的浮点除法器。与执行单元240相耦合的寄存器文件可以存储在指令执行和处理期间所用的操作数和其它数据。虽然图2的示例显示了三个执行单元240和三个分级队列250以简化描述,但根据特定的设计和实现方式耦合到多个调度器230的执行单元240和分级队列250的数量是可变的。执行单元240可以耦合到存储器设备的多级上,可以从存储器设备检索数据或向其存入数据。在一种实施方案中,执行单元240可以通过存储请求控制器242耦合到L0高速缓存244、L1高速缓存246和外部存储器设备284、286、288。
如果在L0高速缓存244或L1高速缓存246中没有找到所请求的数据,执行单元240可以试图从存储器附加级中检索所需数据。可以通过存储器请求控制器242实现这样的请求。外部总线接口248耦合到存储器请求控制器242和外部总线248。在一种实施方案中,外部存储器设备可以包括L2高速缓存284、主存储器286、磁盘存储器288以及可以耦合到外部总线282的其它存储设备。对外部存储器设备的访问要比对片上高速缓冲存储器的访问慢得多。在试图从存储器载入数据到寄存器时,执行单元240试图按照由快到慢的顺序从每个存储器设备载入数据。在一种实施方案中,首先检验最快级别的存储器设备L0高速缓存244,接着是L1高速缓存246,L2高速缓存284,主存储器286和磁盘存储器288。装载存储器的时间随着访问每一额外的存储器级而增加。当最后找到所需的数据时,由执行单元240检索的数据可被存储在最快的可用存储器设备中以用于将来的访问。
这里所用的术语″寄存器″指的是被用作宏指令的一部分以识别操作数的板载处理器存储单元。换句话说,这里所指的寄存器是那些从处理器外(从程序员的角度)可以看到的。但是,这里所描述的寄存器可以使用任意数量的不同的技术,例如专用物理寄存器、用寄存器重命名而动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等等,由处理器内的电路来实现。
在这种实施方案中,分级队列250能够把指令延迟固定数量的时钟周期,以便报告在执行单元240中执行指令过程中的问题并且指令可以在相同时刻及时进入校验器260。在不同的实施方案中,分级队列250中的级数根据每个执行通道中所期望的分级或延迟的数量而变化。已经分派的指令的副本可以并行地通过分级队列250分级以通过执行单元240执行。采用这种方式,分级队列250中所维护的指令副本被提供给校验器260。如果指令没有成功执行,指令的这个副本可以由校验器260发回重放多路复用器235用于重新执行。
在这种体系结构中,校验器单元260位于执行核心240之后。校验器260能够分析指令的数据依赖性以及是否有任何错误存在。此外,校验器260还检查执行结果的状态以确定是否需要重放。如果一条指令已经成功执行,校验器260把该指令标记为完成并声明该指令为″重放安全″。″重放安全″指令可以被转发到退出单元270。对另一种实施方案来说,可以使用多个校验器(一个快速校验器[或称前期校验器])和一个慢校验器[或称后期校验器]),并允许在流水线的不同点上检测不正确的指令执行。同样,另一种实施方案可以有多个重放通道。其它条件也能产生重放。如果指令被更快地重放,处理器200的性能就能够提高。校验器260耦合到退出单元270。调度器230和执行单元240假定一切正常。校验器260和退出单元270检查问题。执行后,微操作和结果被暂时存储以等待提交到体系状态。如果没有执行问题,就退出指令并把结果提交到体系状态。
图3是用于一种实施方案的处理器的微体系结构的框图,该处理器包括依照本发明执行扩展精度的整数除操作的逻辑电路。顺序前端301是处理器300的一部分,处理器300取出要执行的宏指令并准备它们以随后在处理器流水线中使用。这种实施方案的前端包括几个单元。指令预取器326从存储器取出宏指令并把它们提供给指令译码器328,指令译码器328随后把指令译码成称作微指令或微操作(也称作微op或uop)的原始操作,机器知道怎样执行这些原始操作。跟踪高速缓存330获取译码后的uop并把它们汇编在uop队列334中的程序有序的序列或跟踪文件中以便执行。当跟踪高速缓存330遇到复杂的宏指令时,微代码ROM 332提供所需的uop来完成操作。
许多宏指令被转换成单个微操作,其它的需要几个微操作来完成整个操作。在这个实施方案中,如果需要超过4个微操作来完成一条宏指令,译码器328就访问微代码ROM 332来执行宏指令。因为需要大量的微操作来实现除操作,因而依照本发明的扩展精度的整数除算法的实施方案可以存储在微代码ROM 332中。指令译码器328确定指令是否是复杂指令。如果是复杂指令,指令译码器328就参考入口点可编程逻辑阵列(PLA)以确定正确的微指令指针用于读取微代码ROM332中的除算法微代码序列。对一种实施方案来说,前4个微操作是从跟踪高速缓存330中取出的,剩下的微操作来自微代码ROM 332,这种情况下指令译码器328将把前4个微操作发送到跟踪高速缓存330,并把微指令指针发送到微代码ROM 332。在微代码ROM 332完成了对当前宏指令的微操作的排序之后,机器的前端301恢复从跟踪高速缓存330取微操作。
这种实施方案的扩展精度的整数除指令被看作是一个复杂指令。大部分与浮点有关的指令都是复杂指令。这样,当指令译码器328遇到这个整数除宏指令时,就在适当的位置访问微代码ROM 332以为本发明的整数除算法的一种实施方案检索微代码序列。整数除算法的这种实施方案所需的不同微操作被通信给无序执行引擎303以在适当的整数和浮点执行单元上执行。
无序执行引擎303是为执行而准备微指令的地方。无序执行逻辑有大量的缓冲器以在微指令走下流水线并被调度执行时平滑并重排微指令流以优化性能。分配器逻辑分配机器缓冲器以及每个uop为了执行需要的资源。寄存器重命名逻辑对寄存器文件中的入口上的逻辑寄存器重新命名。分配器还为指令调度器(存储调度器、快速调度器302、慢/通用浮点调度器304和简单浮点调度器306)之前的两个微操作队列之一中的每个微操作分配一个入口,这两个微操作队列一个用于存储器操作另一个用于非存储器操作。微操作调度器302、304、306根据它们相关的输入寄存器操作数来源的就绪和微操作需要用来完成它们的操作的执行资源的可用性确定微操作何时即将执行。这种实施方案的快速调度器302能够在主时钟周期的每一半上调度,而其它调度器每个主处理器时钟周期只能调度一次。调度器对分派端口做出仲裁以调度微操作用于执行。
寄存器文件308、310位于执行块中调度器302、304、306和执行单元312、314、316、318、320、322、324之间。对整数和浮点操作分别有一个单独的寄存器文件308和310。这个实施方案的每个寄存器文件308、310还包括一个旁路网络,它能绕过或转发刚完成还没有写入寄存器文件的结果到新的相关微操作。整数寄存器文件308和浮点寄存器文件310还能相互进行数据通信。对一种实施方案来说,整数寄存器文件308被分成两个独立的寄存器文件,一个寄存器文件用于数据的低32位,第二寄存器文件用于数据的高32位。一种实施方案的浮点寄存器文件310有128位宽的入口,因为浮点指令的操作数宽度通常是64到128位。
执行块311包含执行单元312、314、316、318、320、322、324,指令在这里被实际执行。这部分包括寄存器文件308和310,它们存储微指令需要执行的整数和浮点数据操作数值。这个实施方案的处理器300由大量执行单元组成地址发生单元(AGU)312、AGU 314、快速ALU 316、快速ALU 318、慢ALU 320、浮点ALU 322、浮点移动单元324。对这个实施方案来说,浮点执行块322、324,执行浮点、MMX以及流动单指令多数据(SIMD)扩展操作。这个实施方案的浮点ALU 322包括一个64位除以64位的浮点除法器来执行除、平方根和余数微操作。对本发明的实施方案来说,涉及浮点值的任何动作都是随着浮点硬件而发生的。例如,在整数格式和浮点格式之间的转换涉及浮点寄存器文件。同样,浮点除操作发生在浮点除法器。另一方面,非浮点数和整数类型是用整数硬件资源处理的。简单的、非常频繁的LAU操作转到高速ALU执行单元316、318。这个实施方案的快速ALU 316和318能够用半个时钟周期的有效等待时间执行快速操作。对一种实施方案来说,大部分复杂的整数操作转到慢ALU 320,因为慢ALU 320包括用于长等待时间类型操作的整数执行硬件,例如乘法器、移动、标志逻辑和分支处理。存储器装载/存储操作由AGU 312和314执行。对这个实施方案来说,整数ALU 316、318和320是在对64位数据操作数执行整数操作的环境中描述的。在可选实施方案中,可以实现ALU316、318和320来支持多种数据夹盘(data chuck),包括16、32、128、256,等等。同样,可以实现浮点单元322和324来支持一个具有可变宽度位数的操作数区域。
在这个实施方案中,微操作调度器302、304和306在父装载完成执行之前分派相关的操作。因为微操作在处理器300中是被投机地调度并被执行的,处理器300还包括处理存储器缺失的逻辑。如果在数据高速缓存中发生数据装载缺失,就会有还在流水线中执行的相关操作,这些操作带着暂时错误的数据离开调度器。重放机制跟踪并重新执行使用了错误数据的指令。只有相关的操作才需要重放,允许独立的操作完成。处理器的一种实施方案的调度器和重放机制还设计用来捕获扩展精度整数除操作的指令序列。
依照本发明的一种算法的一个实施方案主要处理无符号数。这个实施方案的128位除操作由被除数的低64位XL上的第一64位除和高64位XH上的第二64位除组成。第一64位除可以表示为XL=QL·Y+RL。同样,第二64位除可以表示为XH·264QH·Y+RH。
图4A是一个流程图,描述依照本发明的一种实施方案执行128位值除以64位值的无符号整数除操作的方法。操作数(被除数和除数)以整数格式提供。同样,这个整数除操作的结果(商和余数)也以整数格式退出。但是,实际的除算法是在浮点执行单元在被除数和除数的浮点版本上发生的,以用浮点格式产生商。对这个实施方案来说,128位被除数上的除操作实际上是由两个单独的64位除处理的,第一除是被除数的低64位除以64位除数,第二除是被除数的高64位除以同一除数。
对这个实施方案来说,执行单元通常能够为执行处理64位宽的操作数。换句话说,无符号数的范围在0到264-1。但是,某些指令(例如扩展精度的整数除指令)涉及128位宽的操作数,这样无符号的范围就变成了0到2128-1。从执行硬件输出的值的范围依然在0到264-1之间。在块402,进行检查以确定除数是否等于0。如果除数等于0,则操作无效,因为该指令正在试图用零去除一个数,这在数学上是没有定义的。如果发现除数等于0就在块403设置一个标记指示除以″0″异常。结束这个除指令。
如果除数不等于0,整数除算法继续到块404,在这里在浮点执行单元中用除数去除被除数的低64位部分。这第一除表示为XL/Y。因为被除数和除数是以整数格式的操作数提供的,这些数在用于浮点执行单元中之前必须被转换成浮点格式,因为浮点执行单元只能接受浮点格式。来自浮点单元的合成的商也被从浮点格式转换成整数格式。用整数执行单元处的整数乘法器计算被除数的低位部分的余数。图4B中将更详细地描述低64位部分除。
在块406执行检查以确定被除数的高位部分是否等于0。如果被除数的高64等于0,那么高位部分除就不需要了,因为结果将是0。因而最后产生的128位除的商和余数由低64位除的商和余数组成。结果被存储起来,整数除微操作从执行单元继续到校验器和退出单元。
如果在块406被除数的高位部分不等于0,这个实施方案的整数除算法继续执行对128位被除数的除,在块408,由除数在浮点执行单元中去除64最低有效位部分被清除的128位被除数。最低有效64位被清除的128位被除数X是XH的缩放版本(除以264)。XH是128位被除数的按比例缩小版本。该第二除可以表示为(264·XH)/Y。像上面对低位部分所做的一样,被除数的高64位部分也必须从整数格式转换成浮点格式。对这个实施方案来说,已经从块404的早期转换保存了除数的浮点版本并在这里重复使用。来自浮点单元的这次高位部分除的合成的商也被从浮点格式转换成整数格式。用整数执行单元计算被除数高位部分的余数。图4C中将更详细地描述高64位部分除。
依照本发明的实施方案能够不使用整数除法器而正确地执行128位除以64位的整数除,因为″(264·XH)/Y″高位部分除可以用64位扩展精度的浮点除来实现。这种扩展精度的浮点除返回与被除数的高位部分相关的商QH。在商的浮点版本上执行溢出检查,像下面图4C的块434中那样。如果商>=264,那么结果将溢出并且用信号通知除错误。如果没有溢出,就把浮点格式的商转换成整数格式作为QH。浮点除必须使用舍位舍入取整模式。其它舍入模式会导致计算错误。
该算法在块410执行溢出检查并确定是否有错误发生。如果在块410检测到任何溢出错误,就在块403把错误标记为异常。下面将用图4D更详细地描述溢出检查的实例。如果没有发现错误,就在块412从高位结果和低位结果计算出最终的商和余数。在这个实施方案的被除数上进行的两个独立的除操作的结果就被加在了一起。需要这样做是为了为扩展精度的整数除指令到达正确的商和余数,因为依照本发明的除算法的这个实施方案已经把128位除以64位的除分成了一对64位除以64位的除操作,它们一起在算术上产生等价的结果。低64位除操作的商连同高64位除操作的商被加在一起。同样,低64位除的余数连同高64位除的余数也被加在一起。在块413执行除以0的错误检查。如果检测到错误,就在块403标记除以0的异常。
图4B是一个流程图,为执行图4A中的128位除以64位整数除操作的一种方法的一个实施方案描述128位被除数的低64位部分的无符号除操作。这个实例的流程是图4A的块404中″XL/Y″除活动的更详细描述。在块420,整数除算法的这个实施方案在一个浮点寄存器文件上把128位被除数的低位部分从整数格式转换成浮点格式。在块422,64位除数被从它的整数格式转换成浮点格式。在这个实施方案中,在块424,一个64位除以64位的除法器以舍位舍入模式用低64位的浮点版本除以64位除数的浮点版本。除法器以浮点格式输出商。在块426这个低位商被转换成整数格式并放入整数寄存器文件。在块428计算这低64位部分的余数。对整数除算法的这个实施方案来说,余数实际上是用整数硬件计算的。更准确地说,从被除数的低64位减去低位商和除数的乘积产生低位余数。这个计算可以表示为RL=XL-(QL·Y)。
图4C是一个流程图,为执行图4A中的128位除以64位整数除操作的一种方法的一个实施方案描述128位被除数的高64位部分的无符号除操作。这个实例的流程是图4A的活动的块406、408和412的更详细的描述。对这个实施方案来说,该算法能工作是因为可以用64位扩展精度浮点除操作完成″(264·XH)/Y″除。在块406执行检查以确定被除数的高位部分是否等于0。如果被除数的高64位等于0,就不需要高位部分除,因为结果将为0。如果在块406被除数的高位部分不等0,整数除算法的这个实施方案就在浮点执行单元中继续执行被除数的高64位部分除以除数的除。在块430,128位整数被除数的高64位在浮点寄存器文件上被从整数格式转换成浮点格式。这样这个浮点数就被按照因子264缩小。以这种方式完成这个操作是因为在这个实施方案中128位整数不能被直接转换成浮点数。因为这个128位整数比较特殊,它的低64位已被清除,整数到浮点的转换可以按两步发生。首先,被除数的高64位整数部分XH被转换成浮点值。其次,XH的浮点表示被乘以264以进行换算。因而就得到了XH·264的精确浮点表示,或者说64最低有效位被清除的被除数X。从早先为低64位除而进行的转换中得到64位除数的浮点版本并重新使用以避免不必要的重复。在另一个实施方案中,如果浮点版本目前不可用,就把除数从它的整数格式转换成浮点格式。在这个实施方案中,在块432,64位除以64位的浮点除法器以舍位舍入模式用缩放的高64位的浮点版本除以64位除数的浮点版本。除操作的第二部分的按比例缩放的高64位被除数实际上就是264·初始被除数的上半部。除法器以浮点格式输出高位部分除的商。在块434执行检查以确定是否发生了除溢出。如果除溢出条件存在,就在块435用信号通知除溢出错误。规定正在执行的除溢出检查实际上是商>=264。
如果在块434没有检测到除溢出,整数除算法的这个实施方案继续在块436把高位商转换成整数格式并把它放置在整数寄存器文件中。在块438计算该高64位部分的余数。对这个实施方案来说,余数是用整数硬件计算的。更准确地说,从被除数的高64位减去高位商和除数的乘积产生高位余数。这个计算可以表示为RH=(XH·264)-(QL·Y)。虽然RH的这个等式意味着需要128位的整数运算以便对RH求值,目前的实施方案能够简单地用64位整数运算计算RH,因为确定RH只需要128位表达式的64最低有效位。得到的RH由取低有效64位组成。因而能够主要用64位扩展精度的浮点除和64位整数运算有效地实现本发明的128位除以64位整数除算法的实施方案。
对整数除算法的这个实施方案来说,可以进行优化来促进对″RH=(XH·264)-(QH·Y)″求值,以便得到与被除数的高位部分XH相关的余数RH。这个实施方案的优化由两部分组成。第一部分是根据这样的事实RH必须大于或等于0且小于264,因而只有乘积″QH·Y″的低位部分(最低有效64位)必须计算。高位部分不必计算。同样,第二部分是根据如下事实乘积″XH·264″的低位部分(最低有效64位)是0,因而RH就是乘积″QH·Y″的低位部分关于2的补码。结果,就以对64位量(乘积″QH·Y″的低位部分)关于2求补简单地代替了本来计算RH必需的128位减。此外,乘法器不需要返回完整的128位乘积。因而,不需要进行乘法器返128位以及减/加处理128位量所必需的128位运算。
图4D是一个流程图,为图4A的实施方案描述了128位被除数的高64位和低64位部分的除后处理。这个实例的流程是图4A的块410和412上的活动的更详细的描述。在块440,来自低64位和高64位部分的除操作的整数格式的商在整数执行单元上被加在一起以产生初始的128位被除数的最终的商。这个实施方案的等式是Q=QL+QH。在块442,来自低64位和高64位部分的除操作的整数格式的余数在整数执行单元上被加在一起以产生128位除的最终的余数。在块444执行检查以确定是否已经设置了进位标志。这里进位标志可以表示余数相加有溢出并且有来自该操作的进位。在块446调整最后的商和余数。这个调整包括从余数值减去除数的量并把商加1以反映从余数发现并移除的额外的除数值。
如果在块444没有设置进位标志,就在块445进行检查以确定从块442获得的余数的和是否大于除数的值。如果余数大于或等于除数,就在块446调整最后的商和余数。如果余数小于除数,则不需要执行任何调整。块444和445的检查可以表示如下if[(RH+RL)>=Y]or[进位标志=1,根据″RH+RL″操作]then{R=RH+RL-Y;Q=QH+QL+1;}else{R=RH+RL;Q=QH+QL;}如果对商或余数值没有进行任何调整,在块440得到的加和的商与块442得到加和的余数就是整个128位除以64位除操作的最后得到的商和余数。如果对加和值进行了调整,那么从块446得到的调整后的值就是128位除以64位除操作的最终的商和余数的结果。这时就完成了对扩展精度的整数除指令的这个实施方案的执行,可以发送该指令使其退出。
算法的另一种实施方案还能处理有符号数的除操作。该算法还适用于处理有符号数,这样上述无符号除实施方案就充当有符号除实施方案的子程序。为了利用上述实施方案的无符号除算法,为无符号除算法补充了某些除前和除后处理过程。除前处理包括把有符号的数,被除数和除数,从有符号格式转换成无符号格式。然后这个实施方案继续像在无符号除实施方案中那样进行除操作。除后处理由若干检查组成,以捕获溢出条件以及确定商和余数的符号。因而,除前和除后过程通过处理符号使得能够重用无符号除算法。下面将更详细地描述有符号除操作。
图5A是一个流程图,描述依照本发明的另一个实施方案执行有符号128位值除以有符号64位值的有符号整数除操作的一种方法。对这个实施方案来说,有符号整数除算法的核心由与图4A的算法类似的无符号整数除算法599组成。在有符号除的这个实施方案中,对符号的处理和操纵是在无符号除序列之前和之后在整数领域处理的。被除数和除数被以有符号整数格式提供为指令的操作数。同样,也希望这条指令的商和余数结果以有符号整数格式退出。其中因为无符号64位数的范围是0到264,因而有符号64位有符号数的范围实际扩展到了从-263到+(263-1)。有符号128位被除数的除操作包括对符号的处理、在浮点执行单元上由被除数的低64位除以64位除数的第一除操作、由被除数的高64位除以64位除数的第二除操作、以及对符号的除后处理和检查。
这个实施方案的除前处理发生在块502。在块502,有符号的被除数和除数操作数被从有符号整数格式转换成无符号整数格式。到无符号整数的转换也可称作″转换成正数″操作,因为有符号数的绝对值可被当作无符号值处理。对这个实施方案来说,有符号整数除算法调用无符号整数除算法599来在浮点单元上执行除操作。这里无符号除算法599由块504和512之间的活动组成。在块504,进行检查以确定除数是否等于0。如果除数等于0,就在块503标记除以″0″异常并结束整数除指令。
如果在块504除数不等于0,就在块506像在浮点操作中那样用被除数的无符号低64位除以无符号除数。在用在浮点除法器中之前,被除数和除数都被转换成浮点格式。从浮点单元产生的商被从浮点格式转换成无符号整数格式。被除数的低位部分的余数是用整数乘法器在整数执行单元上计算出来的。通过从被除数的低64位减去低位商和除数的乘积计算出这个无符号余数。这个计算可以表示为RL=XL-(QL·Y)。
在块508执行检查以确定被除数的高位部分是否等于0。如果被除数的高64位等于0,就不需要进行高位部分的除操作,因为结果将是0。如果被除数的高位部分不等于0,在块510,这个实施方案继续在浮点单元中用被除数的无符号高64位(128位被除数经264成比例缩放的高位部分)除以无符号除数。像先前的低位部分除操作一样,128位被除数的其最低有效64位被清除以留下被除数的高64位部分,它也必须从整数格式被转换成浮点格式。这里可以重用来自块506的除数的浮点版本。在一种实施方案中,对商的浮点版本执行溢出检查。如果商>=264,则结果将溢出并且被错误检查检测到。如果有溢出,就用信号通知除错误。如果没有溢出,就把浮点格式的商作为QH转换成整数格式。从执行高位部分除的浮点单元产生的商也被从浮点格式转换成无符号整数格式。用整数执行单元计算被除数的高位部分的余数。这个无符号高位余数是通过从被除数的高64位减去高位商和除数的乘积而计算出来的。这个计算可以表示为RH=XH·264-(QL·Y)。
在块512执行溢出检查。如果检测到任何错误,就在块503标记异常。在块514,从高位和低位结果计算出最终的商和余数。在块514把这个实施方案的128位被除数上两个独立的64位除以64位无符号除的结果加在一起。低64位除操作的无符号结果分别和高64位除操作的无符号结果加在一起。用有符号除,在块515有额外的溢出检查。任何检测到的错误都会在块503产生异常。在块516组合后的无符号商和余数被转换成最终的有符号值。下面用图5B更详细地描述包括这个实施方案的块512的初始溢出检查、块514的相加、块515的附加错误检查以及块516的符号转换。如果没有发现错误,就存储最终的有符号结果,整数除微操作从执行单元继续到校验器与退出单元。
图5B是一个流程图,描述图5A的128位除以64位整数除操作的结果的除后处理。在块520,低64位除和高64位除的无符号商被加在一起以获得128位除的商的无符号值或绝对值。因为64位数的数值范围在有符号和无符号领域是不同的,在处理有符号数时需要附加的检查。块522处的检查是为了确定来自块520的最终的商的绝对值是否大于有符号64位格式中能够处理的最大值。对这个实施方案,把最终的商的绝对值与263相比,因为64位2的补码格式能够表达的数的范围是从263到263-1。如果商的绝对值大于263这个限制,就不能用来自整数硬件的64位输出表示该数。在块540用信号通知除溢出错误。
如果商的绝对值小于或等于263。就在块524确定最终的商的符号。对这个实施方案来说,用初始128位有符号被除号的符号和初始64位除有符号除数的符号的″逻辑异或″(XOR)来计算商的符号SIGNQUOTIENT=SIGNDIVIDBNDXOR SIGNDIVISOR因此如果被除数和除数的初始符号相同,则最终的商的符号为正(+)。但果被除数和除数的原始符号不同,则最终的商的符号为负(-)。在块526,执行检查以确定最终的商的有符号值是否在有符号64位格式能够处理的最大值之内。对这个实施方案来说,最终商的可表示值在-263到+(263-1)之间,包括-263和+(263-1)。在块526的检查中,如果最终商的绝对值等于263并且最终商的符号为正,则该数无法表示,因为正数的上限是263-1。当商等于263并且商的符号为正时就检查到了溢出。在块540信号通知除溢出错误。如果最终商的绝对值等于263且最终商的符号为负,该数就是可表示的,因为负数的下限为-263。在块528把正确的符号施加到最终商的绝对值上作为128位除操作的商,这里的结果是有符号整数。
如果余数的绝对值小于除数,就在块536确定最终的余数的符号。对这个实施方案来说,余数采用和被除数相同的符号SIGNREMAINDBR=SIGNDIVIDEND。在块538把正确的符号施加到最终的余数的绝对值上作为128位除操作的余数,这里的结果是有符号的整数。最终的有符号的商和余数被存储在整数寄存器文件中并等待它的扩展精度的整数除指令的退出以及把结果应用到体系结构状态。
虽然是在128位除以64位除的环境中描述了上述示例和论述,但应该认识到其它扩展精度的整数除可以有不同的长度。例如,本算法的另一种实施方案可被实现在有整数和/或浮点硬件的处理器中以支持更宽的操作数,例如256位除以64位、256位除以128位等等。同样,整数和浮点操作和操作数的精度在可选实施方案中是可变的。上述实施方案所在的环境是把一个除操作当作两个除操作来执行,其中被除数的高位部分和低位部分是在单独的除操作中处理的。可以为L位被除数和M位除数的任意除操作实现本发明的其它实施方案,这里L/M是任意整数。例如,可以把逻辑外推来把L位被除数的除操作分成被除数的四个不同部分的四个独立除法。可在其它实施方案中扩展本发明的技术和教义以为特定的整数除支持想要的位数和精度。
虽然上述示例把指令的执行描述为执行单元和逻辑电路环境中的半快操作,但也可通过软件实现本发明的其它实施方案。这样的软件可以存储在系统内的存储器中。同样,可以通过网络或经由其它计算机可读介质发布代码。例如,可以通过一种计算机可读介质,例如软盘或CD-ROM,甚至通过在Internet上的传输来发布计算机程序。因而,机器可读介质可以包括以机器(例如,计算机)可读的形式存储或传输信息的任意机制。例如,机器可读介质可以包括只读存储器(ROM)、随机访问存储器(RAM)、磁盘存储介质、光存储介质、闪存设备,以及电、光、声或其它形式的传播信号(例如,载波、红外信号、数字信号等)。
此外,可以电子形式通信或传输依照本发明的集成电路设计的实施方案。例如,可以通过fab来处理或制造一种实施方案中的处理器的集成电路设计的电子形式以获得计算机部件。在另一个实例中,电子形式的集成电路设计可由机器处理,以模拟计算机部件。因而一些实施例中处理器的电路布局计划和/或设计可以通过机器可读介质发布或在其上实现,制造成电路或对其进行模拟,处理器的电路布局计划和/或设计在由机器处理时模拟一个处理器。机器可读介质在其它实施方案中还能够存储依照本发明表示预先确定的功能的数据。
在前面的说明书中,已经根据关于本发明的具体的示例性实施方案对其进行了描述。但显然在不偏离所附权利要求中阐明的本发明的更广的精神和范围的情况正可对其进行多种更改和变化。因而说明书和附图将被看作是说明性的,而不是用于限制。
权利要求
1.一种在处理装置中产生扩展精度整数除操作的商和余数的方法,包括把扩展精度整数除指令译码成微操作以使整数除操作发生;启动除算法以通过使用浮点除执行所述整数除操作;把整数被除数和整数除数分别转换成浮点被除数和浮点除数;用所述浮点被除数除以所述浮点除数以得到浮点商;把所述浮点商转换成整数商;根据所述整数被除数、所述整数除数和所述整数商,通过从所述整数被除数减去所述整数除数和所述整数商的乘积计算整数余数;根据对从所述整数被除数、所述整数除数和所述整数商计算得到的所述整数余数的求值检查错误;并将所述整数余数调整所述整数商的值和将所述整数商调整1以解决用所述浮点除执行所述整数除操作所需要的任何修正。
2.权利要求1的方法还包括为所述扩展精度整数除指令接收第一和第二操作数,其中所述第一操作数是有符号整数被除数,所述第二操作数是有符号整数除数;把所述第一操作数从有符号整数被除数转换成所述整数被除数,其中所述整数被除数是无符号的;并且把所述第二操作数从有符号整数除数转换成所述整数除数,其中所述整数除数是无符号的。
3.权利要求2的方法还包括把所述整数商转换成有符号整数商;通过表示大于2N-1的正值或小于-(2N-1)的负值来确定所述有符号整数商是否已经溢出了有符号整数N位格式可表示的限制;如果存在商溢出就用信号通知除溢出错误;并且把所述整数余数转换成有符号整数余数。
4.权利要求3的方法,其中所述扩展精度整数除指令是为了使128位除以64位的除操作发生,其中所述整数被除数是128位宽,所述整数除数是64位宽。
全文摘要
通过进行扩展精度整数除算法以增加扩展精度的整数除计算的性能并减少用于执行扩展精度整数除的内部操作的处理器的制造成本,一方法实现了改进的内部处理器操作的技术效果。方法包括把大于内部运算装置的L位宽整数被除数分成整数部分,其中第一整数部分包括整数被除数的低M位而第二整数部分包括所述整数被除数的高M位。把第一和第二整数部分从内部整数格式转换成内部浮点格式,并把N位宽整数除数转换成内部浮点格式。在内部浮点格式下用第一和第二部分除以除数以获得第一和第二内部浮点格式的商。然后把第一和第二商从内部浮点格式转换成内部整数格式并加在一起以产生整数商。解决了对大于内部运算装置的扩展精度整数进行整数除计算的问题。
文档编号G06F9/318GK1740963SQ20051010646
公开日2006年3月1日 申请日期2003年12月26日 优先权日2002年12月26日
发明者P·L·鲁塞尔, R·S·帕塔萨拉蒂 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1