具有对可变长度数的支持的浮点单元的制作方法

文档序号:11142213阅读:453来源:国知局
具有对可变长度数的支持的浮点单元的制造方法与工艺

本发明涉及集成电路,并且更具体而言,涉及处理器和浮点数单元。



背景技术:

处理器被用在从台式计算机到蜂窝电话的各种应用中。在一些应用中,多个处理器或处理器核心可以连接在一起,使得计算任务可以在各个处理器之间共享。无论是单独地还是作为组的一部分被使用,处理器都使用时序逻辑电路、内部存储器等来执行程序指令并对可以用二进制数系统表示的输入数据进行操作。例如,处理器常常以各个数据对象的尺寸(诸如16位)来表征。

现代处理器通常包括各种功能块,每一个功能块具有专门的任务。例如,处理器可以包括指令提取单元、存储器管理单元以及算术逻辑单元(ALU)。指令提取单元可以通过解码程序指令和检查调度风险来准备用于执行的程序指令,而诸如加、减和布尔运算(例如,AND、OR等)的算术运算可以由ALU执行。一些处理器包括用于存储频繁使用的指令或数据的高速存储器(通常被称为“高速缓冲存储器”或“高速缓存”)。

随着数据对象的尺寸增加,数(number)可以以不同的格式表示,从而允许更高的精度和准确性。为了完成期望的功能,对这样的数据对象的处理可能需要多条程序指令。例如,在一些位片(bitslice)应用中,通过在设计为处理16位数据对象的处理器上经多个处理周期执行多条程序指令,可以处理32位的数据对象。

一些处理器可以采用协处理器或其它专用硬件来执行更复杂的算术运算,诸如例如浮点乘法。这样的协处理器可以在单独的集成电路芯片上制造,或者可以作为单独功能块被包括在处理器内。虽然专用算术硬件的使用可能在一些应用中产生改进的计算性能,但是被处理的数的格式可能特定于给定的硬件实现。在这样的情况下,可能需要附加的程序指令来允许不同的处理器硬件对共同的数据对象集合进行操作。



技术实现要素:

公开了用于处理与机器独立的数格式的装置和方法的各种实施例。广泛地说,预期了一种方法和装置,其中处理器包括浮点单元和数单元。数单元可被配置为接收运算以及第一和第二操作数。每一个接收到的操作数可以包括符号/指数块、长度块以及一个或多个尾数数位(digit),并且每个尾数数位可以用第一数位格式来格式化。数单元还可被配置为将第一操作数和第二操作数的每一个尾数数位转换成第二数位格式。然后,可以由数单元利用转换后的尾数数位对第一和第二操作数执行接收到的运算,以生成包括符号/指数块、长度块和一个或多个尾数数位的结果。数单元还可被配置为将结果的每一个尾数数位转换成第一数位格式。

在非限制性实施例中,用第一数位格式格式化的每一个尾数数位可以包括在1和100之间的正整数集合当中的一个。每一个正整数可以对应于在0和99之间的以100为底数的数的集合当中分别的一个。

在一个实现方式中,用第二数位格式格式化的每一个尾数数位可以包括在0和99之间的以100为底数的数的集合中的给定数。

在另一非限制性实施例中,数单元还可被配置为响应于运算是乘法操作或除法操作的确定而将第一操作数和第二个操作数的每一个尾数数位转换成第三数位格式,并且对第一操作数和第二操作数执行操作,以生成结果。数单元还可被配置为利用第二数位格式编码结果的每一个尾数数位。

附图说明

图1是分布式计算单元的实施例的框图。

图2是处理器的实施例的框图。

图3是处理器核心的实施例的框图。

图4图示出了数格式的实施例的框图。

图5图示出了另一数格式的实施例的框图。

图6图示出了描绘用于处理可变长度数格式的方法的实施例的流程图。

图7图示出了描绘用于处理固定长度和可变长度数格式的方法的实施例的流程图。

图8图示出了描绘用于在执行操作之前处理固定长度操作数的方法的实施例的流程图。

图9图示出了描绘用于处理对两个固定长度操作数执行的操作的结果的方法的实施例的流程图。

具体实施例通过示例的方式在附图中示出并且将在本文详细描述。然而,应当理解的是,附图和详细描述不是旨在将权利要求限制到所公开的特定实施例,即使其中关于特定特征仅描述了单个实施例。相反,意图是覆盖对受益于本公开内容的对本领域技术人员将显而易见的所有修改例、等同例和替代例。除非另外说明,否则在公开内容中提供的特征的示例旨在是说明性的而不是限制性的。

如贯穿本说明书所使用的,单词“可以”用于许可的意义(即,意味着有可能)而不是强制的意义(即,意味着必须)。类似地,单词“包括”的意思是包括,但不是限于。

各种单元、电路或其它部件可被描述为“被配置为”执行一个或多个任务。在这种语境下,“被配置为”是一般地指“具有”在操作期间执行一个或多个任务的“电路系统”的结构的广义阐述。因此,即使当单元/电路/部件当前没有开启时,该单元/电路/部件也可以被配置为执行任务。一般而言,构成对应于“被配置为”的结构的电路系统可以包括硬件电路。类似地,为了描述的方便,各种单元/电路/部件可以被描述为执行一个或多个任务。此类描述应当被解释为包括短语“被配置为”。阐述被配置为执行一个或多个任务的单元/电路/部件明确地不是要对那个单元/电路/部件援引35U.S.C.§112第六段的解释。

具体实施方式

在计算系统中,数值可以利用各种位模式的编码被存储和处理。因此,不同的处理器实现会具有给定数值的不同表示。而且,一些处理器可以允许数的多种表示并且各种表示可以在不同的计算系统之间不兼容。然而,可以采用与机器独立的数表示,这种表示的使用可能需要附加的程序指令来处理与机器独立的格式。附加的指令会导致计算性能的降低。附图中图示的和下面描述的实施例可以提供用于在不损失计算性能的情况下处理与机器独立的可变长度数的技术。

图1示出图示出分布式计算单元(DCU)100的一种实施例的框图。在图示出的实施例中,DCU 100包括服务处理器110,其通过可扩展系统接口(SSI)130耦合到多个处理器120a-120c。处理器120a-120c又耦合到系统存储器130和外围存储设备140。DCU 100耦合到网络150,网络150又耦合到计算机系统160。在各种实施例中,DCU 100可以被配置为机架式服务器系统、独立的系统或者具有任何合适的形状因子。在一些实施例中,DCU 100可被配置为客户端系统,而不是服务器系统。

系统存储器130可以包括任何合适类型的存储器,例如,诸如全缓冲双列直插存储器模块(FB-DIMM)、双倍数据速率或双倍数据速率2同步动态随机存取存储器(DDR/DDR2SDRAM)或DRAM应该注意的是,虽然示出了一个系统存储器,但是在各种实施例中,可以采用任何合适数量的系统存储器。

在一些实施例中,外围存储设备140可以包括磁、光、或固态存储介质,诸如硬盘驱动器、光盘、非易失性随机存取存储器设备等。在其它实施例中,外围存储设备140可以包括更复杂的存储设备,诸如盘阵列或存储区域网络(SAN),其可以经由标准的小型计算机系统接口(SCSI)、光纤信道接口、(IEEE 1394)接口或另一种合适的接口耦合到处理器120a-120c。此外,可以预期,在其它实施例中,任何其它合适的外围设备可以耦合到处理器120a-120c,诸如多媒体设备、图形/显示设备、标准输入/输出设备等。

在一种实施例中,服务处理器110可以包括现场可编程门阵列(FPGA)或专用集成电路(ASIC),它们被配置为协调处理器120a-120c的诸如从上电复位状态的初始化和引导。此外,在一些实施例中,服务处理器110可以包括可以存储指令以执行上电自检(POST)的可编程只读存储器(PROM)。在各种实施例中,服务处理器110可以被配置为允许访问诸如处理器120a-120c的测试和调试模式的管理功能,例如,诸如测试处理器120a-120c中的高速缓冲存储器,或向处理器120a-120c提供测试代码使得处理器120a-120c中每一个可以测试其各自的高速缓冲存储器。

如下面更详细描述的,处理器120a-120c的每一个可以包括一个或多个处理器核心和高速缓冲存储器。在一些实施例中,处理器120a-120c的每一个可以耦合到对应的系统存储器,而在其它实施例中,处理器120a-120c可以共享共同的系统存储器。处理器120a-120c可被配置为对单个计算任务并发地工作并且可以通过SSI总线130彼此通信,以协调对那个任务的处理。例如,计算任务可被划分为三个部分并且每一个部分可被指派给处理器120a-120c中的一个。替代地,处理器120a-120c可以被配置为并发地执行需要处理器120a-120c之间很少协调或不需要协调的独立任务。

在图1中图示出的分布式计算系统的实施例是几个例子中的一个。在其它实施例中,不同数量和配置的部件是可能的和可预期的。

处理器概述

图2示出图示出多线程处理器200的一种实施例的框图。在一些实施例中,处理器200可以对应于图1中DCU 100的处理器120a-120c。在图示出的实施例中,处理器200包括多个处理器核心210a-210h,其也被指定为“核心0”至“核心7”。需要注意的是,虽然示出了8个核心,但是在各种实施例中,可以采用任何合适数量的处理器核心。核心210的每一个经由交叉开关220耦合到L3高速缓存230。L3高速缓存230耦合到相干单元260,该相干单元260又耦合到输入/输出(I/O)接口250、相干/可扩展性接口270。此外,相干单元260耦合到一个或多个存储器接口240,该存储器接口240又耦合到系统存储器的一个或多个存储体(bank)(未示出)。如下面更详细描述的,I/O接口250可以将处理器200耦合到外围设备和网络。相干/可扩展性接口270可以将处理器200耦合到引导和/或服务设备,诸如例如DCU 100中的服务处理器110。在一些实施例中,包括在处理器200中的元件可以被制造为例如单个半导体管芯上的单个集成电路(IC)的一部分。

核心210可被配置为根据特定的指令集体系架构(ISA)执行指令和处理数据。在一种实施例中,核心210可被配置为实现V9ISA,尽管在其它实施例中,预期可以采用任何期望的ISA,诸如例如x86、或在图示出的实施例中,核心210的每一个可被配置为独立于其它核心操作,使得所有核心210可以并行执行。此外,在一些实施例中,核心210的每一个可被配置为并发地执行多个线程,其中给定的线程可以包括可独立于来自其它线程的指令而执行的指令集合。(例如,诸如应用的单独软件进程可以包括可由操作系统调度用于执行的一个或多个线程。)这样的核心210也可被称为多线程(MT)核心。在一种实施例中,核心210的每一个可被配置为并发地执行来自八个线程的指令,用于跨处理器200并发地执行的总共64个线程。但是,在其它实施例中,预期可以提供其它数量的核心210,并且这些核心210可以并发地处理不同数量的线程。

交叉开关220可被配置为管理核心210与共享的L3高速缓存230之间的数据流。在一种实施例中,交叉开关220可以包括允许任何核心210访问L3高速缓存230的任何存储体,并且反过来允许数据从任何L3存储体返回到任何核心210的逻辑(例如,诸如多路复用器或交换架构)。交叉开关220可被配置为并发地处理从核心210到L3高速缓存230的数据请求以及从L3高速缓存230到核心210的数据响应。在一些实施例中,交叉开关220可以包括使数据请求和/或响应排队的逻辑,使得请求和响应不会在等待服务时阻塞其它活动。此外,在一种实施例中,交叉开关220可被配置为仲裁当多个核心210试图访问L3高速缓存230的单个存储体时可能发生的冲突。

L3高速缓存230可被配置为高速缓存供核心210使用的指令和数据。在图示出的实施例中,L3高速缓存230可被组织成每一个可被独立访问的八个单独可寻址的存储体,使得在没有冲突出现时,每一个存储体可以并发地将数据返回到分别的核心210。在一些实施例中,每一个单独的存储体可以利用集合关联或直接映射技术来实现。例如,在一种实施例中,L3高速缓存230可以是48兆字节(MB)高速缓存,其中每一个存储体是具有64字节线尺寸的16路集合关联,尽管其它高速缓存尺寸和几何形状也是可能的和可预期的。在一些实施例中,L3高速缓存230可被实现为回写高速缓存,其中直到对应的高速缓存线被逐出,写入的(脏)数据才能被写到系统存储器。

在一些实施例中,L3高速缓存230可被配置为在允许对高速缓冲存储器直接访问的诊断模式下操作。例如,与其中高速缓存的一些方面不能被直接选择(诸如,例如,各个高速缓存路)的高速缓存操作的常规模式相比,在这样的模式中,L3高速缓存230可以允许诸如各个集合、存储体、路等的具体高速缓存结构的显式寻址。诊断模式可被实现为到L3高速缓存230的直接端口,其可以被例如服务处理器110用来将数据存储到L3高速缓存230中。替代地,交叉开关220可被配置为允许由处理器核心210对L3高速缓存230的直接访问或者通过网络接口270或I/O接口250。

L3高速缓存230还可被配置为实现内建自检(BIST)。地址生成器、测试模式生成器和BIST控制器可被包括在L3高速缓存230中。地址生成器、测试模式生成器和BIST控制器可以用硬件、软件或其组合来实现。BIST可以执行,诸如例如棋盘、行走1/0、滑动对角线等测试来确定L3高速缓存230内的数据存储单元能够存储逻辑0和逻辑1两者。在其中BIST确定L3高速缓存230中不是所有数据存储单元都工作的情况下,标志或其它信号可被发送到服务处理器110或者一个或多个处理器核心210,指示L3高速缓存230有故障。

在一些实施例中,L3高速缓存230可以实现针对来自交叉开关220的请求和要被发送到交叉开关220的结果的队列。此外,在一些实施例中,L3高速缓存230可以实现被配置为存储来自存储器接口240的填充数据的填充缓冲区、配置为存储要被写入到存储器的脏逐出数据的回写缓冲区、和/或被配置为存储不能作为简单的高速缓存命中被处理的L3高速缓存访问(例如,L3高速缓存未命中、匹配较老的未命中的高速缓存访问,诸如可能需要多次高速缓存访问的原子操作的访问,等等)的未命中缓冲区。L3高速缓存230可以不同地被实现为单端口或多端口(即,能够处理多个并发读和/或写访问)。在任一情况下,L3高速缓存230都可以实现仲裁逻辑来区分各种高速缓存读和写请求器之间的高速缓存访问的优先次序。

存储器接口240可被配置为,例如,响应于L3填充请求和数据驱逐而管理L3高速缓存230和系统存储器之间的数据的传送。在一些实施例中,可以实现存储器接口240的多个实例,其中每一个实例被配置为控制系统存储器的相应存储体。存储器接口240可被配置为对接到任何合适类型的系统存储器,诸如以上参考图1所描述的。在一些实施例中,存储器接口240可被配置为支持对接到多种不同类型的系统存储器。

在图示出的实施例中,处理器200还可被配置为从除系统存储器之外的其它来源接收数据。I/O接口250可被配置为向此类来源提供中央接口,以经由相干单元260与核心210和/或L3高速缓存230交换数据。在一些实施例中,I/O接口250可被配置为经由相干单元260和存储器接口240协调外部外围设备和系统存储器之间的数据的直接存储器访问(DMA)传送。除了协调交叉开关220和其它接口逻辑之间的访问之外,在一种实施例中,I/O接口250还可被配置为将处理器200耦合到外部引导和/或服务设备。例如,处理器200的初始化和启动可以由可被配置为提供引导指令和数据的特定于实现或系统的序列的外部设备(诸如,例如,FPGA)控制。这种引导序列可以,例如,在引导过程前进到从盘或网络设备加载数据之前协调复位测试、外围设备的初始化和处理器200的初始执行。此外,在一些实施例中,这样的外部设备可被配置为在请求时将处理器200置于调试、诊断或其它类型的服务模式。

I/O接口250可被配置为协调处理器200和一个或多个外围设备之间的数据传送。这种外围设备可以包括,但不限于,存储设备(例如,基于磁或光介质的存储设备,包括硬盘驱动器、带驱动器、CD驱动器、DVD驱动器等)、显示设备(例如,图形子系统)、多媒体设备(例如,音频处理子系统),或任何其它合适类型的外围设备。在一种实施例中,I/O接口250可以实现接口的一个或多个实例,诸如外围组件接口快递(PCI ExpressTM),但是预期任何合适的接口标准或标准的组合都可以被采用。例如,在一些实施例中,作为PCI ExpressTM的附加或替代,I/O接口250可被配置为实现某个版本的通用串行总线(USB)协议或IEEE 1394(火线,)协议。

I/O接口250还可被配置为协调处理器200和经由网络耦合到处理器200的一个或多个设备(例如,其它计算机系统)之间的数据传送。在一种实施例中,I/O接口250可被配置为执行数据处理,以便实现以太网(IEEE 802.3)联网标准,诸如千兆位以太网或10千兆位以太网,但是预期任何合适的联网标准都可以被实现。在一些实施例中,I/O接口250可被配置为实现多个分立的网络接口端口。

核心概述

图3图示出配置的核心210的可能实施例。在图示出的实施例中,核心210包括耦合到存储器管理单元(MMU)320的指令提取单元(IFU)310、交叉开关接口370、陷阱逻辑单元(TLU)380、L2高速缓冲存储器390、以及多个执行单元330。执行单元330耦合到浮点/图形单元(FGU)340和加载存储单元(LSU)350两者。后者中的每一个单元也被耦合,以将数据发送回到执行单元330的每一个。FGU 340和LSU 350两者都耦合到加密处理单元360。FGU 340包括数单元345。此外,LSU 350、加密处理单元360、L2高速缓冲存储器390和MMU 320耦合到交叉开关接口370,其又可以耦合到在图2中示出的交叉开关220。

指令提取单元310可被配置为向核心210的其余部分提供指令用于执行。在图示出的实施例中,IFU 310可被配置为执行与从高速缓存或存储器中提取指令、从各个线程选择指令用于执行、以及在将指令发出到各个功能单元用于执行之前解码此类指令有关的各种操作。指令提取单元310还包括指令高速缓存314。在一种实施例中,IFU 310可以包括逻辑来维护对应于被核心210执行的每一个线程的(例如,从程序计数器得到的)提取地址,以及协调根据那些提取地址从指令高速缓存314中取回指令。此外,在一些实施例中,IFU 310可以包括逻辑来预测分支结果和/或提取目标地址,诸如例如分支历史表(Branch History Table,BHT)、分支目标缓冲区(Branch Target Buffer,BTB)或其它合适的结构。

在一种实施例中,IFU 310可被配置为维护从由核心210执行的每一个线程中取出的提取的、准备好用于发出的指令的池。例如,IFU 310可以实现对应于每一个线程的相应的指令缓冲区,其中可以存储从对应的线程中最近提取的几条指令。在一些实施例中,IFU 310可被配置为选择多条准备好发出的指令并且并发地将选定的指令发出到各种功能单元而不约束从中选择发出指令的线程。在其它实施例中,基于线程的约束可被采用来简化指令的选择。例如,线程可被指派给为其独立执行指令选择的线程组(例如,通过选择每线程组的一定数量的指令,而不考虑其它线程组)。

在一些实施例中,IFU 310可被配置为,例如通过解码指令、检测调度风险、仲裁对竞争资源的访问等,来进一步准备指令用于执行。而且,在一些实施例中,来自给定线程的指令可以被推测性地从IFU 310发出用于执行。例如,来自某个线程的给定指令会落入以下指令的影子中:来自被预测为被采用或不被采用的那个同一线程的条件分支指令,或来自被预测为命中数据高速缓存352但其实际结果尚未确定的那个同一线程的加载指令。在这种实施例中,在接收到诸如分支预测错误或加载未命中的推测错误的通知之后,IFU 310可被配置为从给定线程取消推测错误的指令以及取消依赖于推测错误指令或在推测错误指令之后从给定线程发出的指令,并且适当地重定向指令提取。

执行单元330可被配置为执行从IFU 310发出的某些类型的指令并且为其提供结果。在一种实施例中,执行单元330可被配置为执行在所实现的ISA中定义的某些整数类型指令,诸如算术、逻辑和移位指令。在一些实施例中,可预期的是核心210可以包括多于一个执行单元330,并且执行单元的每一个可以是或可以不是功能对称的。最后,在示出的实施例中,去往FGU 340或LSU 350的指令经过执行单元330。但是,在可替代的实施例中,可预期的是此类指令可以直接从IFU 310发出到其相应的单元,而不经过执行单元330。

浮点/图形单元340可被配置为执行在所实现的ISA中定义的某些浮点和面向图形的指令并且为其提供结果。例如,在一种实施例中,FGU 340可以实现与用于二进制浮点算术的电气和电子工程师协会(IEEE)754标准(更简单地称为IEEE 754标准)的版本兼容的单精度和双精度浮点算术指令,诸如加、减、乘、除和某些超越函数。而且,在一种实施例中,FGU 340可以实现由可视化指令集(VISTM)体系架构的版本,诸如VISTM 2.0,定义的分区算术和面向图形的指令。此外,在一种实施例中,FGU 340可以实现某些整数指令,诸如整数乘、除,和总体计数指令,并且可被配置为代表流处理单元240执行乘法运算。依赖于FGU 360的实现,一些指令(例如,一些超越或扩展精度指令)或指令操作数或结果情况(例如,某些非规格化的操作数或预期结果)可以被软件设陷和处理或仿真。

在图示出的实施例中,FGU 340可被配置为存储用于浮点寄存器文件中的每一个线程的浮点寄存器状态信息。在一种实施例中,FGU 340可以为浮点加/乘、除/方根和图形运算实现单独的执行流水线,而在其它实施例中,由FGU 340实现的指令可以被不同地分区。在各种实施例中,依赖于指令类型,由FGU 340实现的指令可以被完全流水线化(即,FGU 340可以能够每执行周期开始一条新指令)、部分流水线化或者可以在完成之前一直阻塞发出。例如,在一种实施例中,浮点加运算可以被完全流水线化,而浮点除运算可以在完成之前一直阻塞其它除/平方根运算。

如下面更详细描述的,数单元345可被配置为执行在所实现的ISA中包括的特殊指令并且为其提供结果。在各种实施例中,指令可以针对固定和可变长度的与机器独立的数的处理。此类数可以在各种应用中使用,诸如例如,数据库,以允许数跨不同的硬件平台被共享。数单元345可以被包括在FGU 340中,或者在其它实施例中,数单元345可以是单独的功能块。

在图示出的实施例中,数单元345可被配置为改变与机器独立的数中的各个尾数数位的格式,或清除各个尾数数位(即,设置为零)。数单元345可以包括用于执行加、乘等的专用逻辑电路。在其它实施例中,数单元345可以与另一浮点单元,诸如例如FGU 340,共享算术电路系统。

加载存储单元350可被配置为处理数据存储器引用,诸如整数和浮点加载和存储指令以及可能源自流处理单元360的存储器请求。在一些实施例中,LSU 350还可被配置为辅助源自IFU 310的指令高速缓存314未命中的处理。LSU 350可以包括数据高速缓存352以及被配置为检测高速缓存未命中和响应性地经由交叉开关接口370从L3高速缓存230请求数据的逻辑。在一种实施例,数据高速缓存352可被配置作为写通高速缓存,其中所有存储被写到L3高速缓存230,无论它们是否在数据高速缓存352命中;在一些这样的实施例中,在数据高速缓存352中未命中的存储会导致在高速缓存内分配对应于存储数据的条目。在其它实施例中,数据高速缓存352可被实现为回写高速缓存。

在一种实施例中,LSU 350可以包括未命中队列,其被配置为存储已在数据高速缓存352中未命中的未决存储器访问的记录,使得目标在于对其未命中未决的存储器地址的附加存储器访问可以不生成附加的L3高速缓存请求流量。在图示出的实施例中,可以由EXU 330的一个执行用于加载/存储指令的地址生成。依赖于由指令指定的寻址模式,EXU 330的一个可以执行算术运算(例如,诸如向基值添加索引值),以得到期望的地址。此外,在一些实施例中,LSU 350可以包括被配置为将由EXU 330生成的虚拟数据地址翻译成物理地址的逻辑,诸如数据翻译后备缓冲区(DTLB)。

加密处理单元360可被配置为在硬件中实现一个或多个具体的数据处理算法。例如,加密处理单元360可以包括被配置为支持加密/解密算法的逻辑,算法诸如高级加密标准(AES)、数据加密标准/三重数据加密标准(DES/3DES),或Ron’s代码#4(RC4)。加密处理单元360还可以包括逻辑来实现散列或校验和算法,诸如安全散列算法(SHA-1、SHA-256)、消息摘要5(MD5)或循环冗余校验和(CRC)。加密处理单元360还可被配置为实现模算术,诸如模乘、约减和幂。在一种实施例中,加密处理单元360可被配置为利用包括在FGU 340中的乘法阵列用于模乘。在各种实施例中,加密处理单元360可以实现若干前面提到的算法以及没有具体描述的其它算法。

加密处理单元360可被配置为作为协处理器执行,独立于整数或浮点指令发出或执行。例如,在一种实施例中,加密处理单元360可被配置为经由可经由软件访问的控制寄存器来接收运算和操作数;在图示出的实施例中,加密处理单元360可以经由LSU 350访问这样的控制寄存器。在这样的实施例中,加密处理单元360可以间接地由从IFU 310发出的指令,诸如读或写控制寄存器的指令,编程或配置。然而,即使由这种指令间接地编程,加密处理单元360也可以独立地执行,而无需与IFU 310的进一步互锁或协调。在另一种实施例中,加密处理单元360可以接收由IFU 310从指令流解码和发出的操作(例如,指令)和操作数,并且可以响应于这种操作而执行。即,在这种实施例中,加密处理单元360可被配置为可从指令流调度的附加功能单元,而不是作为独立的协处理器。

在一些实施例中,加密处理单元360可被配置为跨其各种算法子单元自由地调度操作,独立于其它功能单元的活动。此外,加密处理单元360可被配置为生成例如对系统存储器的存储器加载和存储活动。在图示出的实施例中,加密处理单元360可以与用于这种存储器活动的交叉开关接口370直接交互,而在其它实施例中,加密处理单元360可以通过LSU 350协调存储器活动。在一种实施例中,例如通过访问附加的控制寄存器,软件可以通过一个或多个控制寄存器轮询加密处理单元360,以确定结果状态并取回准备好的结果。在其它实施例中,FGU 340、LSU 350或其它逻辑可被配置为以一定的间隔轮询加密处理单元360,以确定它是否具有准备好回写的结果。在还有其它实施例中,加密处理单元360可被配置为当结果准备好时生成陷阱,以允许软件协调结果取回和处理。

L2高速缓冲存储器390可被配置为高速缓存由执行单元330使用的指令和数据。在图示出的实施例中,L2高速缓冲存储器390可被组织成可各自被独立访问的多个单独可寻址的存储体。在一些实施例中,每一个单独的存储体可以利用集合关联或直接映射技术来实现。

在一些实施例中,L2高速缓冲存储器390可被实现为回写高速缓存,其中,直到对应的高速缓存线被驱逐,写入的(脏)数据才能被写入系统存储器。L2高速缓冲存储器390可以不同地被实现为单端口或多端口(即,能够处理多个并发的读和/或写访问)。在任一种情况下,L2高速缓冲存储器390都可以实现仲裁逻辑来区分各种高速缓存读和写请求器之间的高速缓存访问的优先次序。

在一些实施例中,L2高速缓冲存储器390可被配置为在允许对高速缓冲存储器直接访问的诊断模式下操作。例如,与其中高速缓存的一些方面不能被直接选择(诸如,例如,各个高速缓存路)的高速缓存操作的常规模式相比,在这种模式下,L2高速缓冲存储器390可以允许诸如各个集合、存储体、路等的具体高速缓存结构的显式寻址。诊断模式可被实现为到L2高速缓冲存储器390的直接端口。替代地,交叉开关接口370或MMU 320可被配置为允许经由交叉开关接口对L2高速缓冲存储器390的直接访问。

L2高速缓冲存储器390还可被配置为实现BIST。地址发生器、测试模式生成器和BIST控制器可被包括在L2高速缓冲存储器390中。地址生成器、测试模式生成器和BIST控制器可以用硬件、软件或其组合来实现。BIST可以执行诸如例如棋盘、行走1/0、滑动对角线等测试来确定L2高速缓冲存储器390内的数据存储单元能够存储逻辑0和逻辑1两者。在其中BIST确定L2高速缓冲存储器390中不是所有数据存储单元都工作的情况中,可以激活标志或其它信号,指示L2高速缓冲存储器390有故障。

如前面所描述的,指令和数据存储器访问可以涉及把虚拟地址翻译成物理地址。在一种实施例中,这种翻译可以在页面级粒度发生,其中某个数量的地址位(bit)包括对给定地址页的偏移量,并且剩余的地址位包括页号。例如,在采用4MB页、64位虚拟地址和40位物理地址的实施例中,22个地址位(对应于4MB的地址空间,并且通常是最不显著的地址位)可以构成页偏移量。虚拟地址剩余的42位可以对应于那个地址的虚拟页号,并且物理地址剩余的18位可以对应于那个地址的物理页号。在这样的实施例中,虚拟到物理地址翻译可以通过把虚拟页号映射到特定的物理页号来发生,留下页偏移量不被修改。

这样的翻译映射可以存储在ITLB或DTLB中,用于指令高速缓存314或数据高速缓存352查找过程中虚拟地址的快速翻译。在用于给定虚拟页号的翻译在适当的TLB中没有找到的情况下,存储器管理单元320可以配置为提供翻译。在一种实施例中,MMU 250可以配置为管理存储在系统存储器中的一个或多个翻译表并且响应于诸如来自ITLB或DTLB未命中的对地址翻译的请求,而遍历这种表(在有些实施例中,这种表可以是分层组织的)。(这种遍历也被称为页表行走。)在一些实施例中,如果MMU 320不能导出有效的地址翻译,例如如果其中一个包括页表的存储器页面不驻留在物理存储器中(即,页面未命中),则MMU 320可以配置为生成陷阱,以允许存储器管理软件例程处理翻译。可预期的是,在各种实施例中,可以采用任何期望的页面尺寸。另外,在一些实施例中,可以并发地支持多个页面尺寸。

图示出的核心210的实施例中的多个功能单元可被配置为生成离核存储器和I/O请求。例如,IFU 310或LSU 350可以响应于它们各自的高速缓存未命中而生成对L3高速缓存230的访问请求。加密处理单元360可被配置为独立于LSU 350而生成其自己的加载和存储请求,并且MMU 320可被配置为在执行页表行走的同时生成存储器请求。其它类型的离核访问请求是可能的和可预期的。在图示出的实施例中,代表可以生成遍历交叉开关220的访问的各种功能单元,交叉开关接口370可被配置为向与具体核心210关联的交叉开关220关联的端口提供一个集中式接口。在一种实施例中,交叉开关接口370可被配置为维护未决交叉开关请求的队列并且在未决请求当中进行仲裁,以确定哪个请求或哪些请求可以在给定的执行循环期间被传送到交叉开关220。例如,交叉开关接口370可以实现最近最少使用或其它算法,以便在交叉开关请求者当中进行仲裁。在一种实施例中,交叉开关接口370还可被配置为接收经由交叉开关110,诸如从L3高速缓存230或I/O接口250,返回的数据,并且把这种数据指引到适当的功能单元(例如,数据高速缓存352,用于由于未命中造成的数据高速缓存填充)。在其它实施例中,从交叉开关220返回的数据可以在交叉开关接口370外面被处理。

在核心210的一些实施例的操作过程期间,可能发生异常事件。例如,由挑选单元316挑选的用于执行的来自给定线程的指令对于由核心210实现的ISA来说可能不是有效指令(例如,该指令可能具有非法操作码),浮点指令可能产生需要在软件中进一步处理的结果,MMU 320可能由于页面未命中而不能够完成页表行走,可能检测到硬件错误(诸如高速缓存或寄存器文件中不可纠正的数据损坏)或者各种其它可能的体系架构定义或特定于实现的异常事件中的任意一者都有可能发生。在一种实施例中,陷阱逻辑单元380可被配置为管理这种事件的处理。例如,TLU 380可以配置为接收特定线程执行过程中发生的异常事件的通知,并且使对那个线程的执行控制被引导到对应于所检测到的事件的超级用户模式软件处理器(即,陷阱处理器)。这种处理器可以包括,例如,配置为向与设陷线程关联的应用返回错误状态指示并且有可能终止该应用的非法操作码陷阱处理器、配置为修复不精确结果的浮点陷阱处理器,等等。

在一种实施例中,TLU 380可被配置为,在不破坏其它非设陷线程执行的情况下,从核心210中的任何处理阶段清洗来自设陷线程的所有指令。在一些实施例中,当来自给定线程的具体指令造成陷阱时(与独立于指令执行的陷阱造成条件,诸如硬件中断请求,相反),TLU 380可以把这种陷阱实现为精确陷阱。即,TLU 380可以确保在设陷指令之前发生的来自给定线程的所有指令(以程序次序)都完成并且更新体系架构状态,同时没有在设陷指令之后发生的来自给定线程的指令(以程序次序)完成或更新体系架构状态。

数格式

处理器,诸如例如,如图2图示的处理器200,按位的分组表示数值,通常被称为计算机数格式。数值和对应位模式之间的各种编码是可能的,并且可以依赖于具体到给定处理器的电路系统。因此,不同的处理器实现可以具有给定数值的不同表示。

一些处理器可以允许数的多个表示(在本文中也被称为数格式)。可以由软件控制对如何在处理器中表示给定的数的选择。例如,用户可以选择让软件程序中的某个变量存储为固定点数,其中固定的位数用来存储数的整数和小数部分。例如,在32位宽的处理器中,16位可用来存储数的整数部分,并且16位可用来存储数的小数部分。

为了允许在处理器中表示更大的数范围,可以采用浮点数格式。浮点数格式可以包括编码尾数(或有效数)的一连串位、编码指数的一连串位,以及符号位。一起利用尾数、指数和符号,可以在处理器中表示宽范围精度的数。各种浮点数格式是可能的,诸如电气和电子工程师协会(IEEE)754-2008标准。

但是,在一些情况下,上面提到的数格式可以从一个计算系统翻译成另一个。例如,在一个计算机系统中由32位浮点数表示的数值可能无法在支持16位宽数的计算机系统中正确表示。而且,一些应用,诸如例如数据库存储和处理,可能需要专门的数格式。在这种情况下,可以采用与硬件独立的数格式。图4中图示出描绘出与机器独立的数格式的实施例的框图。在图示出的实施例中,数值由固定个数的尾数字节(数位块402至数位块404)和符号/指数节(符号/指数块401)表示。

每一个尾数字节(在本文也被称为“数位”(digit)或“尾数数位”)可以编码数值尾数的在1和100之间的单个数位。应当注意的是,每一个尾数数位可以包括所采用的编码方案可能需要的任何合适数量的数据位。在各种实施例中,每一个数位可以分别对应于0和99之间的以100为底数的值,从而导致向每一个尾数字节的一的固有添加。以这种格式编码的负数可以包括补码形式的数位,并且具有2和101之间的值。在一些实施例中,数位的补码可以通过从102的值中减去该数位来创建。

在一些实施例中,诸如由图4的框图描绘出的数之类的数的使用可以允许采用不同固有处理器位宽度的不同计算系统对数执行计算,而无需数格式之间的任何翻译。软件程序指令可用来允许计算系统内给定的处理器处理以与机器独立的数格式表示的数。在各种实施例中,此类程序指令会降低系统的性能和计算吞吐量。

应当注意的是,图4中所示的框图仅仅是一个例子。在其它实施例中,可以采用不同数量的数位和不同的编码方案。

图5图示出与机器独立的数格式的另一实施例。在图示出的实施例中,浮点数由任意长度的一连串数位块(数位503至数位505)表示。长度块501编码是浮点数的部分的多个数位块。符号/指数块502编码浮点数的符号以及指数,即,集体数位块与其相乘的100的幂。

就像对于上面在图4中描述的实施例,每一个数位块(或尾数字节)可以利用各种数位格式之一进行编码。例如,每一个数位块可被编码为使得1和100之间的单个数位被用来存储由每一个数位块表示的数位的值。在各种实施例中,每一个数位可以分别对应于0和99之间的以100为底数的值,从而导致向每一个尾数字节的一的固有添加。以这种格式编码的负数可以包括补码形式的数,并且具有2和101之间的值。在一些实施例中,数位的补码可以通过从102的值中减去该数位来创建。

可以依赖于各种算术运算调整或设定长度字节的值。舍入或截断操作也会影响由于对两个或更多个操作数执行的算术运算产生的数的长度字节。

在一些实施例中,以诸如图5中图示的格式之类的格式表示的数的使用可以允许不同的数以依赖于应用的不同精度或准确度表示。例如,在一些数据库应用中,在数据库的一个部分中的数可以要求某个准确度,而在数据库的另一部分中的数可以要求不同的准确度。

应当注意的是,图5中图示出的数格式仅仅是一个例子。在其它实施例中,可以采用不同数量的数位块和不同的编码方案。

处理数格式

转向图6,图示出用于让处理器对可变长度的数执行操作的方法的实施例。在一些实施例中,可以由专用的数单元(诸如例如数单元345)来执行处理可变长度的与机器独立的数的以下操作的一个或多个。该方法开始于方框601,然后,可以接收操作数(方框602)。操作数可以是可变长度的数、固定长度的数,或它们的组合。在一些实施例中,操作数可以从数据高速缓存,诸如例如图3中图示的数据高速缓存352,接收。在其它实施例中,操作数可以从其它存储器,诸如例如系统存储器130,接收。

然后,可以修改用于每一个操作数的单独尾数字节(诸如图5中图示的数位503)的编码(方框603)。在一些实施例中,单独尾数字节的编码可被转换成二进制编码的百进位(binary coded centimal,BCC)。BCC是将两个十进制数位作为以100为底数的值存储在单个二进制字节(即八个单独的二进制数据位)中的编码方案。在其它实施例中,转换过程可以包括求表示负值的尾数字节的补码并从该值减去一,以除去先前描述的向每一个尾数字节的一的固有添加。

一旦用于每一个操作数的每一个尾数字节已被转换,可以将未被使用的尾数字节清除(方框604)。在一些实施例中,将未被使用的字节清除的过程依赖于每一个操作数的长度,(如由长度块,诸如例如长度块501)所指示的。在一些实施例中,如果所指示的操作数的长度小于21,那么当从存储器中取回时未被使用的尾数字节可以包含未被使用的值。未被使用的尾数字节,即,操作数的长度和尾数字节的最大允许数量之间的尾数字节,可被设置为零或任何其它合适的值。也可以清除包含值102的任何终止或非终止尾数字节。

然后,该方法可以依赖于要执行的运算的类型(方框605)。在一些实施例中,如果要执行的运算被确定为是加法或减法运算,则随后可以执行加法或减法运算(方框606)。在各种实施例中,加法和减法运算可以是频繁使用的运算。因此,数引擎,(诸如图3中示出的数引擎345)可被配置为对BCC编码的尾数字节直接操作,而无需进一步的格式改变。通过这样配置的数,在一些实施例中,可以从加法和减法运算的关键路径中除去由于进一步格式转换产生的附加等待时间。

一旦加法或减法操作已完成,就可以执行前沿零检测(LZD)和尾随零检测(TZD),并且规格化结果(方框607)。在一些实施例中,用于并行地检测前沿和尾随零的逻辑电路可被包括在处理该运算的数单元内。尾随零可以用来确定结果的长度,而前沿零可以用来确定规格化量。在一些实施例中,也可在确定前沿和尾随零之后执行取整增量(round increment)运算。

然后,可以将单独的尾数字节从当前BCC格式转换回原始接收格式,并且也可以清除未被使用的尾数字节(方框608)。在一些实施例中,转换回原始数格式可以包括向每一个尾数字节添加一。如果操作的最终结果导致负值,则也可以执行求补操作。当结果为负并且小于最大允许长度(诸如例如21)时,可将终止尾数字节附加到结果。在一些实施例中,终止尾数字节可以包含值102。通过将每一个尾数字节转换回原始接收格式,并且清除未被使用的字节,随后可以在方框608结束该方法。

如果确定要执行的运算是乘法或除法运算,则操作数的尾数字节的格式可以被转换成另一格式(方框610)。在一些实施例中,每一个操作数的每一个尾数字节的格式可以从BCC转换成二进制编码的十进制(BCD)。BCD是通过固定数量的位(诸如例如四位)表示每一个十进制数位(零到9)的编码方案。

一旦已转换每一个操作数的每一个尾数字节,就可以执行乘法或除法运算(方框611)。在一些实施例中,乘法运算可以采用移位/相加顺序算法,其中每一个BCD数位生成一个或两个部分乘积。这种迭代方法可以采用进位加法以及被乘数倍数的快速生成。在一些实施例中,不为了后续的循环存储倍数。在各种实施例中,可以使用上面提到的用于加法和减法运算的BCC加法器来执行最终的进位传播。

在一些实施例中,除法运算可以利用移位/相减顺序恢复操作。这样的算法可能对每一个BCD数位需要查找表以及一至三个减法运算。在一些实施例中,可以采用进位传播减法。

单个部分乘积生成器可以在专用于执行乘法和除法运算的电路之间共享。在一些实施例中,部分乘积生成器可以在乘法和除法运算的迭代循环的执行期间按需生成2倍、4倍和5倍的倍数。可以基于前面提到的倍数来计算并存储其它倍数,诸如例如3倍。在其它实施例中,可以利用所存储的3倍的倍数按需生成6倍的倍数。如果需要其它倍数,则乘法和除法算法可以利用上面提到的倍数按需生成它们。

一旦乘法和除法算法的迭代部分已经完成,就可以转换结果的每一个尾数字节的格式(方框612)。在一些实施例中,可以将每一个尾数字节的格式转换成BCC或任何其它合适的格式。通过转换结果的每一个尾数字节的格式,可以像上面一样从方框606继续进行操作,其中上面提到的数引擎的BCC加法器执行乘法操作的最后进位传播,或者执行除法运算的取整增量。

应当注意的是,图6中图示的方法的操作被描绘为以顺序的方式执行。在其它实施例中,可以并行地执行一个或多个操作。

在各种实施例中,处理特定数格式的专用硬件会导致附加的芯片面积和功率。在一些情况下,面积和功率的增加可以通过采用处理多个数格式的专用硬件来抵消。例如,设计为用于利用可变长度的操作数执行操作的数单元,诸如图6中所描述的,可以修改为利用可变长度和固定长度的操作数执行操作。

在一些情况下,固定长度和可变长度的与机器独立的数可能都需要被处理。可以用数单元(诸如图3中所示的数单元345)处理固定长度和可变长度的与机器独立的数二者。在图7图示出描绘用于处理可变长度和固定长度的操作数的方法的实施例的流程图。该方法开始于方框701。

然后,数单元可以接收操作数(方框702)。在一些实施例中,操作数可以是可变长度的操作数、固定长度的操作数,或它们的组合。在各种实施例中,也可以接收运算符。数单元可以是独立的单元或者,在其它实施例中,数单元可以被包括作为浮点单元、图形处理单元或处理器核心中任何其它合适的功能块(诸如例图3中所示的处理器核心301)的一部分。

然后,该方法可以依赖于接收到的操作数的长度类型(方框703)。如果操作数是可变长度的操作数,则可以执行由接收到的运算符指示的运算(方框708)。在一些实施例中,方框708可以对应于如在图6中图示的流程图中描绘出的操作603至612。一旦该操作已经完成,该方法就可以在方框707结束。

如果接收到的操作数是固定长度的操作数,则可以预处理每一个操作数,以使它们与可变长度的数引擎兼容(方框704)。如在下面将更详细描述的,在一些实施例中,预处理可以包括清除操作数的一个或多个尾数字节。

一旦已预处理接收到的操作数,就可以执行指定的操作(方框705)。如上面关于方框708所描述的,在各种实施例中,方框705可以对应于如在图6中图示的流程图中描绘出的操作603至612。

通过指定操作的完成,随后可以重新格式化结果,以匹配最初接收到的操作数的格式(方框706)。在一些实施例中,重新格式化可以包括将可变长度的数转换成固定长度的数。如在下面将更详细描述的,重新格式化过程可以包括在尾数字节中确定的位置附加终止字节。一旦已经将结果的格式调整成匹配原始接收到的操作数的格式,该方法就可以在方框707结束。

应当注意的是,图7中图示的方法仅仅是一个例子。在其它实施例中,不同的操作和操作的不同次序是可能的和可预期的。

转向图8,图示出了用于利用被配置为处理可变长度的操作数的浮点单元处理固定长度的操作数的方法。在一些实施例中,图8中图示的方法可以对应于如在图7中所示的流程图的方框704中绘出的操作数操作的过程。每一个操作数可以如下所述地处理。

选择操作数的第一个尾数字节(方框802)。然后该方法可以依赖于所选择的尾数字节的值(方框803)。在一些实施例中,如果所选择的尾数字节的值是零,那么可以将该尾数字节清除(方框806)。在尾数字节清除之前,可以将格式转换成BCC,在各种实施例中,这可以包括求值的补码并从该值减去一。

然后,该方法可以依赖于当前选择哪个尾数字节(方框807)。如果当前选定的尾数字节是当前正在被处理的操作数的最后一个尾数字节,则该方法可以在方框809中结束。当当前选定的尾数字节不是当前正在处理的操作数的最后一个尾数字节时,选择下一个尾数字节(方框808),并且方法如上所述从方框803继续。

当当前选定的尾数字节的值是非零时,该方法可以再次依赖于当前选定的尾数字节的值(方框804)。在一些实施例中,如果当前选定的尾数字节的值等于102(或者在终止容量中或者在非终止容量中)并且当前正在被处理的操作数为负,则可以将当前选定的尾数字节清除(方框806)。如上所述,清除当前选定的尾数字节可以包括到BCC的格式转换。一旦已经将当前选定的尾数字节清除,该方法就可以如上所述从方框806继续进行。

如果当前正在被处理的操作数为正,或者当前选定的尾数字节的值不是102,则该方法可以依赖于当前选定的尾数字节的位置(方框805)。如果当前选定的尾数字节的位置大于或等于当前正在被处理的操作数的长度,则可以将当前选定的尾数字节清除(方框806)。如上所述,清除当前选定的尾数字节可以包括到BCC的格式转换。一旦已经将当前选定的尾数字节清除,该方法就可以如上所述从方框806继续进行。

如果当前选定的尾数字节的位置小于当前正在被处理的操作数的长度,则该方法可以依赖于哪个尾数字节当前被选择(方框807),然后该方法可以如上所述从方框807继续进行。

应当注意的是,图8中图示的方法仅仅是一个例子。可以在各种其它实施例中采用不同的操作和操作的不同次序。

如上所述,可以预处理固定长度的数,使得它们可由被设计为处理可变长度的数的数引擎使用。在这种情况下,结果可以是可变长度格式,并可能需要被转换回固定长度格式。在图9中图示的流程图中描绘出用于将可变长度结果处理成固定长度结果的方法的实施例。在一些实施例中,图9中所示的方法可以对应于如在图7中所示的流程图的方框706中绘出的过程结果操作。该方法开始于方框901。然后,可以选择要处理的第一个数位(方框911)。

然后,该方法可以依赖于正在被处理的结果的符号(方框902)。当正在被处理的结果为正时,将结果的长度的当前值设定为中间值(方框908)。在访问该结果之前,可以将格式从BCC转换成原始接收到的操作数的格式。在一些实施例中,格式转换可以包括一向当前选定的尾数数位的值的添加以及,如果最后的结果为负,求当前选定的尾数字节的值的补码。然后,该方法可以依赖于当前选定的尾数字节的位置(方框909)。当当前选定的尾数数位的位置大于或等于结果的长度的当前值时,可以随后将当前选定的尾数数位的值清除(方框910)。一旦当前选定的尾数数位已被清除,该方法就可以依赖于当前数位的位置。

当当前数位位置是最后一个数位位置时,该方法可以在方框907结束。如果当前数位位置不是最后一个数位位置,则可以选择下一个数位(方框913),并且该方法可以从如上所述的方框902继续。当当前选定的尾数字节的位置小于当前长度值时,该方法可以如上所述从方框912开始。

如果正在被处理的结果为负,则该方法可以依赖于中间长度的值(方框903)。在一些实施例中,当中间长度大于或等于最大值(诸如例如21)时,该方法可以如上所述从方框908继续进行。当中间长度小于最大值时,该方法可以依赖于当前选定的尾数数位在整个结果中的位置(方框904)。

当当前选定的尾数数位的位置不等于中间长度时,该方法可以如上所述从方框908继续进行。如果当前选定的尾数数位的位置等于中间长度,则更新结果的长度的当前值(方框905)。在一些实施例中,将结果的长度的当前值设定为等于中间长度值加一。一旦结果的长度的当前值已经被更新,当前选定的尾数数位的值就被设置为终止值,诸如例如102(方框906)。一旦已经设定终止值,该方法就可以如上所述从方框912继续进行。

应当注意的是,图9中图示的流程图中描绘的方法仅仅是一个例子。在其它实施例中,不同的操作和操作的不同次序是可能的和可预期的。

虽然以上已经相当详细地描述了实施例,但是,一旦完全理解了以上公开内容,诸多变化和修改将对本领域技术人员变得显而易见。下列权利要求意在被解释为包含所有此类变化和修改。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1