使用相关矩阵追踪解除分配的加载指令的制作方法

文档序号:6348690阅读:135来源:国知局
专利名称:使用相关矩阵追踪解除分配的加载指令的制作方法
技术领域
本申请一般地涉及一种改进的数据处理装置和方法,更具体地说,涉及一种用于使用相关矩阵追踪解除分配的加载指令的装置和方法。
背景技术
微处理器是现代计算机的心脏,其是由组织成特定功能操作单元(包括算术单元、高速缓冲存储器和存储器管理、预测性逻辑以及数据移动)的数百万个晶体管及其他元件组成的芯片。现代计算机中的处理器在过去十年中已在性能、能力及复杂性方面有了巨大增长。任何计算机程序都包括用于对数据执行操作的许多指令。可将处理器分类为有序处理器或无序处理器。在现代高性能处理器中,可调度指令以便无序执行。指令可被调度为在其源操作数可用后执行。公知的动态指令调度器可使用相关矩阵(也称为唤醒数组)来追踪源操作数。相关矩阵最初被引入以在处理器中用作一种追踪加载和存储之间的存储器相关性的方式,并且相关矩阵已用于追踪发出队列中的寄存器相关性。在一些实施方式中,可能希望在来自发出队列的指令已被发出后尽可能快地解除分配这些指令以便为新指令腾出空间。然而,在与生产方关联的指令仍位于发出队列中的情况下,公知相关矩阵仅追踪生产方的可用性。因此,如果消费方指令仍正在追踪其结果的可用性,则可能不会解除分配来自队列的指令。

发明内容
根据第一方面,提供了一种在数据处理系统中用于追踪解除分配的加载指令的方法,所述方法包括检测发出队列内的一组指令中的加载指令是否未命中;响应于所述加载指令的未命中,将所述加载指令分配给加载未命中队列;解除分配来自所述发出队列的所述加载指令;判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项; 响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据;及将所述数据写入所述相关矩阵的与所述加载未命中队列关联的加载未命中队列部分中的新表项内。根据第二方面,提供了一种处理器,所述处理器包括指令调度器;发出队列;及加载未命中队列,其中所述指令调度器响应于所述发出队列中的加载指令的未命中,将所述加载指令分配给所述加载未命中队列,其中由所述处理器检测一组指令中的所述加载指令的未命中;解除分配来自所述发出队列的所述加载指令;判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项;响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据;及将所述数据写入所述相关矩阵的与所述加载未命中队列关联的加载未命中队列部分中的新表项内。
根据第三方面,提供了一种装置,所述装置包括处理器;及耦接至所述处理器的存储器,其中所述存储器包括当由所述处理器执行时使所述处理器执行以下操作的指令 检测发出队列内的一组指令中的加载指令是否未命中;响应于所述加载指令的未命中,将所述加载指令分配给加载未命中队列;解除分配来自所述发出队列的所述加载指令;判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项;响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据;及将所述数据写入所述相关矩阵的与所述加载未命中队列关联的加载未命中队列部分中的新表项内。在示例性实施例中,提供了一种包括具有计算机可读程序的计算机可用或可读介质的计算机程序产品。所述计算机可读程序当在计算设备上执行时使所述计算设备执行以上关于方法概述的操作中的各种操作和操作组合。在另一示例性实施例中,提供了一种系统/装置。所述系统/装置可包括一个或多个处理器及耦接至所述一个或多个处理器的存储器。所述存储器可包括当由所述一个或多个处理器执行时使所述一个或多个处理器执行以上关于方法概述的操作中的各种操作和操作组合的指令。本发明的这些和其他特征和优点将在以下对本发明的实例实施例的详细描述中予以描述,或将鉴于以下对本发明的实例实施例的详细描述而变得对本领域技术人员显而易见。


现在将仅通过实例的方式并参考附图描述本发明的实施例,这些附图是图1描绘可实施示例性实施例的方面的实例分布式数据处理系统的图形表示;图2展示可实施示例性实施例的方面的实例数据处理系统的方块图;图3是根据一个示例性实施例的展示功能单元和寄存器的常规双线程处理器设计的例示性方块图;图4描绘根据一个示例性实施例的使用相关矩阵追踪解除分配的加载指令的例示性方块图;图5描绘根据一个示例性实施例的例示性基本相关矩阵;图6描绘根据一个示例性实施例的例示性扩展的相关矩阵;及图7描绘根据一个示例性实施例的在使用相关矩阵追踪解除分配的加载指令中执行的操作的流程图。
具体实施例方式示例性实施例提供了一种允许加载指令的相关方在加载被从发出队列解除分配之前和之后追踪加载结果的可用性的机制。示例性实施例提供并非为N行和N列而是通过 L个额外列扩展的相关矩阵,其中L是加载未命中队列中的表项数。当已知加载指令在Ll 高速缓存中未命中且被分配给加载未命中队列时,可解除分配该加载指令在发出队列中的表项。当解除分配加载指令时,读取标记加载指令的所有相关方的矩阵的列,且将此列写入属于加载未命中队列表项的新列中。因此,示例性实施例允许在加载指令的结果可用之前将加载指令从发出队列解除分配,同时仍允许相关指令使用相关矩阵追踪它们的源操作数的可用性。通过在加载指令的结果可用之前解除分配加载指令,将新指令置于发出队列中。 队列利用率的增加改进了处理器性能。另外,示例性实施例允许在将指令置于发出队列中之后修改指令的相关信息,这在先前使用相关矩阵的情况下是不可能的,即,在将指令首先置于发出队列时,该指令的生产方在任何时刻的位置可与该指令追踪的资源相同或不同。所属技术领域的技术人员知道,本发明可以体现为系统、方法或计算机程序产品。 因此,本发明可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明还可以采取体现在任何有形的表达介质中的计算机程序产品的形式,该介质中包含计算机可用程序代码。可以使用一个或多个计算机可用或计算机可读介质的任何组合。计算机可用或计算机可读介质例如可以是-但不限于-电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或传播介质。计算机可读介质的更具体的例子(非穷举的列表)包括以下有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑盘只读存储器 (CD-ROM)、光存储器件、诸如支持因特网或内部网的传输介质,或磁存储器件。注意,所述计算机可用或计算机可读介质甚至可以是程序被打印在其上的纸张或其他适合的介质,因为所述程序可以通过例如光扫描所述纸张或其他介质被电子地捕获,然后被编译、解释或另外以适合的方式被处理(如果必要),然后被存储在计算机存储器中。在此文档的上下文中,计算机可用或计算机可读介质可以是任何能够包含、存储、传送、传播或传输由指令执行系统、装置或设备使用或与指令执行系统、装置或设备有关的程序的介质。计算机可用介质可以包括其中包含计算机可用程序代码(在基带中或作为载波的一部分)的传播数据信号。可以使用任何适当的介质(包括但不限于无线、有线、光缆、射频(RF)或其他装置)来传输计算机可用程序代码。用于执行本发明的操作的计算机程序代码,可以以一种或多种编程语言的任何组合来编写,所述编程语言包括面向对象的编程语言-诸如Java、Smalltalk, C++之类,还包括常规的过程编程语言-诸如“C”编程语言或类似编程语言(Java和所有基于Java的商标和徽标是Sun Microsystems, Inc.在美国、其他国家或两者中的商标;其他产品和服务名称可能是IBM或其他公司的商标)。程序代码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络-包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以 (例如利用因特网服务提供商来通过因特网)连接到外部计算机。以下参考根据本发明的示例性实施例的方法、装置(系统)和计算机程序产品的方块图和/或流程图在下面描述了本发明的示例性实施例。将理解,所述方块图和/或流程图的每个方块以及所述方块图和/或流程图中的方块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生一种机器,以便通过所述计算机和/或其他可编程数据处理装置的处理器执行的所述指令将创建用于实现所述方块图和/或流程图方块(多个)中指定的功能/操作的装置。这些计算机程序指令也可以被存储在能够以特定方式引导计算机或其他可编程数据处理装置执行功能的计算机可读存储器中,以便存储在所述计算机可读介质中的所述指令将产生一件包括实现在所述方块图和/或流程图方块(多个)中指定的功能/操作的指令装置的制品。所述计算机程序指令还可以被加载到计算机或其他可编程数据处理装置上以导致将在所述计算机或其他可编程装置上执行一系列的操作步骤以产生计算机实现的过程, 以便在所述计算机或其他可编程装置上执行的所述指令将提供用于实现在所述方块图和/ 或流程图方块(多个)中指定的功能/操作的过程。附图中的流程图和方块图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实施方式的体系结构、功能和操作。在此方面,所述流程图或方块图中的每个方块都可以表示代码的模块、段或部分,所述代码包括用于实现指定的逻辑功能(多个) 的一个或多个可执行指令。还应指出,在某些备选实施方式中,在方块中说明的功能可以不按图中说明的顺序发生。例如,示出为连续的两个方块可以实际上被基本同时地执行,或者某些时候,取决于所涉及的功能,可以以相反的顺序执行所述方块。还将指出,所述方块图和/或流程图的每个方块以及所述方块图和/或流程图中的方块的组合可以由执行指定功能或操作的基于专用硬件的系统或专用硬件和计算机指令的组合来实现。因此,示例性实施例可用于包括分布式数据处理环境、单个数据处理设备等的许多不同类型的数据处理环境中。为了提供示例性实施例的具体元件和功能性的描述的上下文,下文将图1和图2提供为可实施示例性实施例的各方面的实例环境。虽然遵循图1和图2的描述将主要地聚焦于用于使用假相关性在无序处理器中有序地发出指令的单个数据处理设备实施,但这只是实例且并非旨在陈述或暗示关于本发明的特征的任何限制。相反,示例性实施例旨在包括分布式数据处理环境和其中指令是使用假相关性在无序处理器中有序地发出的指令的实施例。现在参考附图,具体地说参考图1至图2,提供其中可实施本发明的示例性实施例的数据处理环境的实例图。应了解,图1至图2仅为实例且并非旨在断言或暗示关于其中可实施本发明的方面或实施例的环境的任何限制。可在不脱离本发明的精神和范围的情况下做出对所描绘环境的许多修改。参考附图,图1描绘可实施示例性实施例的方面的实例分布式数据处理系统的图形表示。分布式数据处理系统100可包括可实施示例性实施例的方面的计算机网络。分布式数据处理系统100含有至少一个网络102,网络102是用于在分布式数据处理系统100内连接在一起的各种设备和计算机之间提供通信链路的介质。网络102可包括诸如有线、无线通信链路或光缆之类的连接。在所描绘的实例中,服务器104及服务器106与存储单元108 —起连接至网络 102。此外,客户端110、112及114亦连接至网络102。例如,这些客户端110、112及114可为个人计算机、网络计算机等。在所描绘的实例中,服务器104将诸如引导文件、操作系统映像和应用之类的数据提供至客户端110、112及114。在描绘的实例中,客户端110、112及 114是至服务器104的客户端。分布式数据处理系统100可包括额外服务器、客户端及未图示的其他设备。
在所描绘的实例中,分布式数据处理系统100是因特网,同时网络102代表全球范围内使用传输控制协议/网际协议(TCP/IP)协议集来相互通信的网络和网关的集合。在因特网的核心是主节点或主机之间的高速数据通信线路的主干,它包括数以千计的商业、政府、教育以及其他路由数据和消息的计算机系统。当然,分布式数据处理系统100也可以被实现为包括许多不同类型的网络,例如企业内部互联网、局域网(LAN)或广域网(WAN)等。 如上所述,图1旨在作为一个实例,并非旨在作为对本发明的不同实施例的体系结构限制, 因此,图1中所示的特定元件不应被视为限制关于其中可实施本发明的示例性实施例的环
^Ml O现在参考图2,展示了其中可实施示例性实施例的方面的实例数据处理系统的方块图。数据处理系统200是诸如图1中的客户端100之类的计算机的一个实例,实现本发明的示例性实施例的诸过程的计算机可用代码或指令可以位于其中。在所描绘的实例中,数据处理系统200采用集线器架构,其包括北桥和存储器控制器集线器(NB/MCH)202以及南桥和输入/输出(I/O)控制器集线器(SB/ICH)204。处理单元206、主存储器208及图形处理器210连接至NB/MCH 202。图形处理器210可经由加速图形端口(AGP)连接至NB/MCH 202。在所描绘的实例中,局域网(LAN)适配器212连接至SB/ICH 204。音频适配器 216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM) 224、硬盘驱动器(HDD) 226、 ⑶-ROM驱动器230、通用串行总线(USB)端口和其他通信端口 232及PCI/PCIe设备2;34经由总线238和总线240连接至SB/ICH 204。PCI/PCIe设备可包括(例如)以太网适配器、 附加卡和用于笔记型计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用卡总线控制器。例如,ROM 2 可以是闪速基本输入/输出系统(BIOS)。HDD 226 及 CD-ROM 驱动器 230 经由总线 240 连接至 SB/ICH 204。HDD 226 及 CD-ROM驱动器230可使用(例如)集成驱动电子设备(IDE)或串行高级技术附件(SATA) 接口。超级I/0(SI0)设备236可连接至SB/ICH 204。操作系统在处理单元206上运行。所述操作系统协调并提供对图2中的数据处理系统200内的各种组件的控制。作为客户端,操作系统可为可以从市面上购买的操作系统, 如Micr0S0ft \Vind0WS xp(Micr0S0f 1^tlwindows *Microsoft Corporation在美国、 其他国家或两者中的商标)。诸如Java 编程系统之类的面向对象的编程系统可以与操作系统一起运行并从在数据处理系统200上执行的Java 程序或应用来提供对操作系统的调用(Java为Sun Microsystems, Inc.在美国、其他国家或两者中的商标)。作为服务器,数据处理系统200可为(例如)运行高级交互执行(AIX )操作系
统或LEVUX 操作系统的IBM e%rver System ρ 计算机系统(必erver、System ρ及 AIX 为 International Business Machines Corporation 在美国、其他国家或两者中的商标,而LINUX为Linus Torvalds在美国、其他国家或两者中的商标)。数据处理系统200可为在处理单元206中包括多个处理器的对称多处理器(SMP)系统。备选地,可使用单处理器系统。用于操作系统、面向对象的编程系统及应用或程序的指令位于诸如HDD 226之类的存储设备上且可被载入主存储器208以供处理单元206执行。本发明的示例性实施例的处理可由处理单元206使用计算机可用程序代码来执行,所述计算机可用程序代码可位于诸如主存储器208、ROM 224之类的存储器中或位于(例如)一个或多个外围设备2 及 230 中。总线系统(如图2所示的总线238或总线M0)可包括一个或多个总线。当然,可使用任何类型的通信结构或架构来实施总线系统,所述通信结构或架构在附接至结构或架构的不同组件或设备之间提供数据传输。通信单元(如图2的调制解调器222或网络适配器21 可包括用于传输和接收数据的一个或多个设备。存储器可为(例如)图2中的主存储器208、ROM 224或诸如在NB/MCH 202中发现的高速缓存。本领域的技术人员将理解,图2中的硬件可以根据实现方式而变化。除了图2中所示的硬件以外,或替代图2中所示的硬件,还可以使用诸如闪速存储器、等同的非易失性存储器或光盘驱动器等其他内部硬件或外围设备。此外,在不脱离本发明的精神和范围的情况下,示例性实施例的处理可应用于除上述SMP系统以外的多处理器数据处理系统。此外,数据处理系统200可采用许多不同数据处理系统中的任一者的形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或其他通信设备、个人数字助理(PDA)等。例如,在一些示例性实例中,数据处理系统200可为携带型计算设备, 其具备闪存以提供用于存储操作系统文件及/或用户生成的数据的非易失性存储器。实质上,在无架构限制的情况下,数据处理系统200可为任何已知的或稍后开发的数据处理系统。参看图3,描绘根据一个示例性实施例的展示功能单元及寄存器的常规双线程处理器设计的例示性方块图。在这些示例性实例中,处理器300可实施为图2中的处理单元 206。处理器300包括具有也可在单线程模式下操作的双线程同时多线程(SMT)的单个集成电路超标量微处理器。因此,如下文进一步论述,处理器300包括皆由集成电路形成的各种单元、寄存器、缓冲器、存储器及其他部件。此外,在一个示例性实施例中,处理器300根据精简指令集计算机(RISC)技术操作。参看图3,描绘根据一个示例性实施例的展示功能单元及寄存器的常规双线程处理器设计的例示性方块图。在这些示例性实例中,处理器300可实施为图2中的处理单元 206。处理器300包括具有也可在单线程模式下操作的双线程同时多线程(SMT)的单个集成电路超标量微处理器。因此,如下文进一步论述,处理器300包括皆由集成电路形成的各种单元、寄存器、缓冲器、存储器及其他部件。此外,在一个示例性实施例中,处理器300根据精简指令集计算机(RISC)技术操作。如图3中所示,指令取回单元(IFU)302连接至指令高速缓存304。指令高速缓存 304保存用于待执行的多个程序(线程)的指令。指令高速缓存304还具有至2级(L2)高速缓存/存储器306的接口。IFU 302根据指令地址请求来自指令高速缓存304的指令,且将指令传递至指令解码单元308。在一个示例性实施例中,IFU 302可同时请求来自指令高速缓存304的多个指令用于多达两个线程。指令解码单元308同时解码多个指令用于多达两个线程,且将解码后的指令传递至指令分派单元(IDU) 309。IDU 309自指令解码单元308接收解码后的指令,且可选择性地将解码后的指令分组以用于每个线程。IDU 309将指令输出至指令调度器310,指令调度器310使用相关矩阵追踪与指令关联的源操作数。一旦IDU 309识别了所接收指令之间的相关性,指令调度器310就将指令发出至发出队列311,发出队列311将用于每个线程的一组指令输出或发出至处理器的执行单元312、314、316、318、320、322、324、3洸及328。当加载指令在Ll高速缓存(未示出)中未命中时,指令调度器310将加载指令分配给加载未命中队列360,且解除分配来自发出队列311的该指令。以下将详细描述由指令调度器310执行的处理的详细描述。在一个示例性实施例中,处理器的执行单元可包括分支单元312、加载/存储单元 (LSUA) 314 及(LSUB) 316、定点执行单元(FXUA) 318 及(FXUB) 320、浮点执行单元(FPUA) 322 及(FPUB) 3 ,以及向量多媒体扩展单元(VMXA)3^及(VMXB)328。执行单元312、314、316、 318,320,322,324,326及3 跨两个线程被完全共享,意味着执行单元312、314、316、318、 320,322,324,326及3 可自任一或两个线程接收指令。处理器包括多个寄存器集合330、 332,334,336,338,340,342,344及;346,它们亦可被称为架构式寄存器文件(ARF)。ARF是一旦指令已完成执行即存储完成的数据的文件。ARF 330、332、334、336、 338、340、342、344及346可针对两个线程中的每个线程且按照指令类型(即,通用寄存器 (GPR) 330及332、浮点寄存器(FPR) 3;34及336、专用寄存器(SPR) 338及;340,及向量寄存器 (VR) 344及346)单独地存储数据。按照类型及按照线程单独地存储完成的数据有助于减少在处理指令期间的处理器竞争。处理器额外地包括一组共享的专用寄存器(SPR) 342用于保存程序状态,如指令指针、堆栈指针或处理器状态字,它们可用于来自任一或两个线程的指令上。执行单元312、 314、316、318、320、322、324、3洸及3 经由简化的内部总线结构349连接至ARF 330,332, 334、336、338、340、342、344 及 346。为了执行浮点指令,如果执行该指令所需的指令数据是完整的或如果数据已通过了管线中的清除(flushing)点,则FPUA 322及FPUB 3M从FPR 3;34及336检索寄存器源操作数信息,该信息是执行指令所需的输入数据。完整数据是一旦指令已完成执行且存储在ARF(如ARF 330、332、334、336、338、340、342、344及346)中时由执行单元生成的数据。 不完整的数据是在指令尚未完成执行的指令执行期间生成的数据。FPUA 322及FPUB 324 根据每个正在执行的指令属于哪一线程来输入它们的数据。例如,FPUA 322将完成的数据输入至FPR 334,而FPUB 3 将完成的数据输入至FPR 336,因为FPUA 322,FPUB 3 以及 FPR 334和336是线程特定的。在指令的执行期间,当指令已通过管线中的清除点时,FPUA 322及FPUB 3M将其目的地寄存器操作数数据或在指令的执行期间生成的指令数据输出至FPR 334及336。在指令的执行期间,当指令已通过管线中的清除点时,FXUA 318,FXUB 320,LSUA 314及LSUB 316将其目的地寄存器操作数数据或在指令的执行期间生成的指令数据输出至GPR 330及 332。在指令子集的执行期间,当指令已通过管线中的清除点时,FXUA 318、FXUB 320及分支单元312将其目的地寄存器操作数数据输出至SPR 338、340及342。在指令的执行期间, 当指令已通过管线中的清除点时,VMXA3^及VMXB 328将其目的地寄存器操作数数据输出至 VR ;344 及;346。数据高速缓存350还可关联有不可缓存单元(未示出),该不可缓存单元从处理器接受数据且将数据直接写入2级高速缓存/存储器306。以此方式,不可缓存单元绕过存储至高速缓存所需的一致性协议。
响应于从指令高速缓存304输入且由指令解码单元308解码的指令,IDU 309根据指令类型和线程将指令选择性地分派至执行单元312、314、316、318、320、322、3对、3沈及 328。接下来,执行单元312、314、316、318、320、322、324、3沈及3 执行具有特定指令类别或类型的一个或多个指令。例如,FXUA 318及FXUB 320针对寄存器源操作数执行定点算术运算,如加法、减法、“与”运算、“或”运算及“异或”运算。FPUA322及FPUB 3 针对寄存器源操作数执行浮点算术运算,如浮点乘法及除法。LSUA 314及LSUB 316执行加载和存储指令,所述指令在数据高速缓存350与ARF 330、332、334及336之间移动操作数数据。VMXA 3 及VMXB 3 执行包括多个数据的单一指令运算。分支单元312执行分支指令,所述分支指令通过修改由IFU 302用于从指令高速缓存304请求指令的指令地址来有条件地更改通过程序的执行流。取决于已解码指令与可用执行单元312、314、316、318、320、322、324、3洸及328的混合,IDU 309将由指令解码单元308解码的指令分组在一起以同时执行,以便针对每个指令执行所需运算。例如,因为仅存在两个加载/存储单元314及316,所以最多可将两个加载/存储型指令分组在一起。在一个示例性实施例中,可将高达七个指令分组在一起(两个定点算术、两个载入/存储、两个浮点算术或两个向量多媒体扩展及一个分支),且高达五个指令可属于同一线程。在包括来自较低优先级线程的指令前,IDU 309在组中包括来自较高优先级线程的尽可能多的指令(高达五个)。线程优先级由线程的优先级值及其进程的优先级类别确定。处理系统使用所有可执行线程的基本优先级级别来确定哪一线程获得处理器时间的下一分配。指令调度器310在每个优先级级别处按循环方式调度线程,且仅当在较高级别处不存在可执行线程时,才发生在较低级别处调度线程。然而,IDU 309将同一组中的FPU指令322及324或VMX指令3 及3 与FXU 指令318及320 —起分派。也就是说,IDU 309不分派同一组中的FPU指令322及3M与 VMX指令3 及328。存储于SPR 338及340中的诸如指令指针、堆栈指针或处理器状态字之类的程序状态向IDU309指示线程优先级352。指令完成单元邪4监视内部总线结构349以判定正在执行单元312、314、316、318、 320,322,324,326及328中执行的指令何时结束将它们的操作数结果写入ARF 330、332、 334、336、338、340、342、344 及 346。由分支单元 312、FXUA 318,FXUB 320,LSUA 314 及 LSUB 316执行的指令需要相同数目的循环来执行,而由FPUA 322、FPUB 324、VMXA 326及VMXB 3 执行的指令需要变量,且因而需要较大数目的循环来执行。因此,被分组在一起且同时开始执行的指令未必同时结束执行。指令的“完成”意味着指令正在结束在执行单元312、 314、316、318、320、322、324、3沈及3 之一中的执行、已通过了清除点,且所有较旧的指令已经在架构的状态下更新(因为必须有序地完成指令)。因此,指令现在准备完成且更新架构的状态,这意味着当指令已经完成时更新数据的最终状态。仅可有序地更新架构的状态, 即,指令必须按其被分派的次序完成,且当每个指令完成时必须更新完成的数据,使得下一个指令使用最完整的数据。指令完成单元邪4监视指令的完成,且将控制信息356发送至IDU 309以通知IDU 309可将更多指令组分派至执行单元312、314、316、318、320、322、324、326及328。IDU 309 将分派信号358(其充当节流阀以沿着管线向下将更多指令携带至IDU 309)发送至IFU 302及指令解码单元308以指示其准备接收更多解码后的指令。
图4描绘根据一个示例性实施例的使用相关矩阵追踪解除分配的加载指令的例示性方块图。指令调度器402从指令分派单元404接收指令,且使用相关分析器406生成相关矩阵以追踪源操作数,即,将在指令执行中使用的数据。相关矩阵追踪加载和存储之间的存储器相关性,且追踪来自发出队列408中的指令的寄存器相关性。图5描绘根据一个示例性实施例的例示性基本相关矩阵。在基本相关矩阵500中,存在N个行502及N个列 504,其中N为发出队列408中的指令数。对于在发出队列408中等待执行的每个指令都存在一行。对于给定行和列,行中的指令依赖于该指令在列中的结果的可用性(如果矩阵的该列和该行中的位为“1”)。可存在额外列来指示诸如执行单元的其他资源之间的相关性。 例如,在图5中,行3中的加法指令506依赖于行1中的寄存器r5的加载508的结果。因此,指令调度器402将表示加载指令的列1、表示加法指令的行3的位更新至“1”。返回图4,再次地,需要在已发出指令后尽可能快地解除分配来自发出队列408的指令以为新指令腾出空间;然而,先前相关矩阵(如图5的基本相关矩阵500)的缺点在于, 如果指令生产方仍位于发出队列408内,则指令仅追踪该生产方的可用性。因此,如果消费方指令(即,依赖于先前指令的结果的指令)仍正在追踪指令结果的可用性,则指令调度器 402不能解除分配来自发出队列408的指令。示例性实施例描述了一种允许加载指令的相关方在从发出队列解除分配加载之前及之后追踪加载结果的可用性的方式。因此,相关分析器406生成含有N行及N+L列的相关矩阵414,其中N为发出队列408中的指令数,且L为加载未命中队列410中的指令数。 如果发出队列408发出加载指令且该加载指令在1级(Li)数据高速缓存中未命中,则加载未命中队列410分配用于该加载指令的表项。在相关矩阵414中,如果行418中的指令416 具有相关性(诸如,对由与发出队列关联的列420中的1指示的指令426的相关性),则指令调度器402解除分配列420中指示的相关性,且将相关性分配给与加载未命中队列关联的列422。即,指令调度器402读取指示与加载指令420关联的相关性的列中的任何表项, 且将相关性写入与相关矩阵414的加载未命中队列关联的关联列422。在此实例中,表项由箭头似4指示。图6描绘根据一个示例性实施例的例示性扩展后的相关矩阵。扩展后的相关矩阵提供当指令被分配在发出队列中时及在加载指令已从发出队列解除分配且被分配给加载未命中队列(在加载未命中的情况下)后允许加载指令的相关方追踪加载指令结果的可用性的方式。在扩展后的相关矩阵600中,存在与发出队列408及加载未命中队列410关联的 N-I个行602及Ν+L-l个列604。继续以上实例,行3中的加法指令606依赖于行1中的寄存器r5的加载608的结果。如果发出队列408发出加载指令608且加载指令608在1级 (Li)数据高速缓存中未命中,则指令调度器402从列610解除分配加载指令608的关联表项,且将该表项分配给扩展后的相关矩阵600中与加载未命中队列关联的列612。S卩,指令调度器402读取扩展后的相关矩阵600中的列610中的表项(通过其识别具有相关性的加载指令),且将该表项写入扩展后的相关矩阵600的列N+1^612 (由箭头614指示)。因此, 在示例性实施例中,对发出队列中的第二指令的指令相关性被转换成对发出队列外的第二指令的相关性。 返回图4,指令调度器402还可包括追踪在发出队列408中等待的所有指令的队列位置的映射器412。当指令调度器402首先将指令分配给发出队列408时,指令通过读取映射器412获得它们的源操作数的位置。当指令调度器402从发出队列408解除分配加载指令以将加载指令分配给加载未命中队列410时,映射器412使用加载指令的加载未命中队列表项替换加载指令的发出队列表项。图7描绘根据一个示例性实施例的在使用相关矩阵追踪解除分配的加载指令过程中执行的操作的流程图。当操作开始时,处理器检测到加载指令在1级(Li)高速缓存中未命中(步骤702)。如果在步骤702,处理器未能检测到未命中,则操作返回步骤702。如果在步骤702,处理器判定加载指令在Ll高速缓存中未命中,则指令调度器将加载指令分配给加载未命中队列(步骤704)。指令调度器接着从发出队列解除分配加载指令(步骤 706)。指令调度器接着判定在相关矩阵的发出队列部分中是否存在用于加载指令的相关表项(步骤708)。如果在步骤708处,指令调度器判定在相关矩阵的发出队列部分中不存在用于加载指令的相关表项,则操作返回步骤702。如果在步骤708处,指令调度器判定在相关矩阵的发出队列部分中存在用于加载指令的相关表项,则指令调度器从相关矩阵的与加载指令关联的列读取指定哪些指令依赖于加载指令的数据(步骤710)。指令调度器接着将所述数据写入与加载未命中队列关联的相关矩阵的与加载指令关联的新列中(步骤 712),其后,操作返回步骤702。示例性实施例提供了一种允许加载指令的相关方在加载被从发出队列解除分配之前和之后追踪加载结果的可用性的机制。示例性实施例提供并非为N行和N列而是通过 L个额外列扩展的相关矩阵,其中L是加载未命中队列中的表项数。当已知加载指令在Ll 高速缓存中未命中且被分配给加载未命中队列时,可解除分配该加载指令在发出队列中的表项。当解除分配加载指令时,读取标记加载指令的所有相关方的矩阵的列,且将此列写入属于加载未命中队列表项的新列中。示例性实施例允许在加载指令的结果可用之前将加载指令从发出队列解除分配, 同时仍允许相关指令使用相关矩阵追踪它们的源操作数的可用性。通过在加载指令的结果可用之前解除分配加载指令,将新指令置于发出队列中。队列利用率的增加改进了处理器性能。另外,示例性实施例允许在将指令置于发出队列中之后修改指令的相关信息,这在先前使用相关矩阵的情况下是不可能的,即,在将指令首先置于发出队列时,该指令的生产方在任何时刻的位置可与该指令追踪的资源相同或不同。如上指出,应了解,示例性实施例可采用完全硬件实施例、完全软件实施例或者含有硬件及软件元素两者的实施例的形式。在一个实例实施例中,示例性实施例的机制以软件或程序代码实施,所述软件或程序代码包括(但不限于)固件、驻留软件、微码等。适合于存储和/或执行程序代码的数据处理系统将包括至少一个直接或通过系统总线间接连接到存储器元件的处理器。所述存储器元件可以包括在程序代码的实际执行期间采用的本地存储器、大容量存储装置以及提供至少某些程序代码的临时存储以减少必须在执行期间从大容量存储装置检索代码的次数的高速缓冲存储器。输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备等)可以直接或通过中间I/O控制器与系统相连。网络适配器也可以被连接到系统以使所述数据处理系统能够通过中间专用或公共网络变得与其他数据处理系统或远程打印机或存储设备相连。调制解调器、电缆调制解调器和以太网卡只是当前可用的网络适配器类型中的少数几种。
出于示例和说明目的给出了对本发明的描述,并且所述描述并非旨在是穷举的或是将本发明限于所公开的形式。对于本领域的技术人员来说,许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且当适合于所构想的特定使用时,使得本领域的其他技术人员能够理解本发明的具有各种修改的各种实施例。
权利要求
1.一种在数据处理系统中用于追踪解除分配的加载指令的方法,所述方法包括检测发出队列内的一组指令中的加载指令是否未命中;响应于所述加载指令的未命中,将所述加载指令分配给加载未命中队列;解除分配来自所述发出队列的所述加载指令;判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项;响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据;及将所述数据写入所述相关矩阵的与所述加载未命中队列关联的加载未命中队列部分中的新表项内。
2.如权利要求1的方法,其中所述检测由所述数据处理系统中的处理器执行,并且其中所述分配、解除分配、判定、读取及写入由所述数据处理系统中的指令调度器执行。
3.如权利要求1或2的方法,还包括由相关分析器基于所述发出队列中的所述一组指令生成所述相关矩阵,其中所述相关矩阵包括用于所述发出队列内的所述一组指令中的每个指令的表项以及用于指令具有的对所述发出队列内的所述一组指令中的另一指令的每个相关性的表项。
4.如权利要求3的方法,还包括由指令调度器基于所述一组指令中被分配给所述加载未命中队列的一个或多个指令将额外表项分配给所述相关矩阵。
5.如权利要求1至4中的任一权利要求的方法,还包括由映射器追踪所述一组相关指令在所述发出队列中的队列位置。
6.如权利要求1至5中的任一权利要求的方法,其中所述相关矩阵追踪所述发出队列中的所述一组指令和所述加载未命中队列中的一组指令之间的相关性。
7.如权利要求1至6中的任一权利要求的方法,其中将指令对所述发出队列内的所述一组指令中的第二指令的相关性转换为对所述发出队列以外的所述第二指令的相关性。
8.如权利要求1至7中的任一权利要求的方法,其中所述加载指令在一级(Li)高速缓存中未命中。
9.一种处理器,包括指令调度器;发出队列;及加载未命中队列,其中所述指令调度器响应于所述发出队列中的加载指令的未命中,将所述加载指令分配给所述加载未命中队列,其中由所述处理器检测一组指令中的所述加载指令的未命中;解除分配来自所述发出队列的所述加载指令;判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项;响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据;及将所述数据写入所述相关矩阵的与所述加载未命中队列关联的加载未命中队列部分中的新表项内。
10.如权利要求9的处理器,其中所述处理器还包括相关分析器,并且其中所述相关分析器基于所述发出队列中的所述一组指令生成所述相关矩阵,其中所述相关矩阵包括用于所述发出队列内的所述一组指令中的每个指令的表项以及用于指令具有的对所述发出队列内的所述一组指令中的另一指令的每个相关性的表项。
11.如权利要求10的处理器,其中所述指令调度器进一步基于所述一组指令中被分配给所述加载未命中队列的一个或多个指令将额外表项分配给所述相关矩阵。
12.如权利要求9至11中的任一权利要求的处理器,其中所述处理器还包括映射器,并且其中所述映射器追踪所述一组相关指令在所述发出队列中的队列位置。
13.如权利要求9至12中的任一权利要求的处理器,其中所述相关矩阵追踪所述发出队列中的所述一组指令和所述加载未命中队列中的一组指令之间的相关性。
14.如权利要求9至13中的任一权利要求的处理器,其中将指令对所述发出队列内的所述一组指令中的第二指令的相关性转换为对所述发出队列以外的所述第二指令的相关性。
15.一种装置,包括处理器;及耦接至所述处理器的存储器,其中所述存储器包括当由所述处理器执行时使所述处理器执行以下操作的指令检测发出队列内的一组指令中的加载指令是否未命中;响应于所述加载指令的未命中,将所述加载指令分配给加载未命中队列;解除分配来自所述发出队列的所述加载指令;判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项;响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据;及将所述数据写入所述相关矩阵的与所述加载未命中队列关联的加载未命中队列部分中的新表项内。
16.如权利要求15的装置,其中所述指令还使所述处理器基于所述发出队列中的所述一组指令生成所述相关矩阵,其中所述相关矩阵包括用于所述发出队列内的所述一组指令中的每个指令的表项以及用于指令具有的对所述发出队列内的所述一组指令中的另一指令的每个相关性的表项。
17.如权利要求16的装置,其中所述指令还使所述处理器基于所述一组指令中被分配给所述加载未命中队列的一个或多个指令将额外表项分配给所述相关矩阵。
18.如权利要求15至17中的任一权利要求的装置,其中所述指令还使所述处理器追踪所述一组相关指令在所述发出队列中的队列位置。
19.如权利要求15至18中的任一权利要求的装置,其中所述相关矩阵追踪所述发出队列中的所述一组指令和所述加载未命中队列中的一组指令之间的相关性。
20.如权利要求15至19中的任一权利要求的装置,其中将指令对所述发出队列内的所述一组指令中的第二指令的相关性转换为对所述发出队列以外的所述第二指令的相关性。
21.一种包括程序代码装置的计算机程序,当所述程序在计算机上运行时,所述程序代码装置适于执行如权利要求1至8中的任一权利要求的方法。
全文摘要
本发明提供一种用于追踪解除分配的加载指令的机制。处理器检测发出队列内的一组指令中的加载指令是否未命中。响应于所述加载指令的未命中,指令调度器将所述加载指令分配给加载未命中队列且解除分配来自所述发出队列的所述加载指令。所述指令调度器判定相关矩阵的发出队列部分中是否存在用于所述加载指令的相关表项。响应于所述相关矩阵的所述发出队列部分中存在用于所述加载指令的相关表项,所述指令调度器从所述相关矩阵的所述发出队列部分的所述相关表项读取指定依赖于所述加载指令的一组相关指令的数据,且将所述数据写入所述相关矩阵的加载未命中队列部分中的新表项内。
文档编号G06F9/38GK102362257SQ201080013137
公开日2012年2月22日 申请日期2010年3月16日 优先权日2009年3月24日
发明者C·M·阿伯内西, M·D·布朗, T·A·文特昂, W·E·布尔科 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1