CN101324840B - 用于增强处理单元中的独立加载的执行的方法和系统 - Google Patents

用于增强处理单元中的独立加载的执行的方法和系统 Download PDF

Info

Publication number
CN101324840B
CN101324840B CN2008101259893A CN200810125989A CN101324840B CN 101324840 B CN101324840 B CN 101324840B CN 2008101259893 A CN2008101259893 A CN 2008101259893A CN 200810125989 A CN200810125989 A CN 200810125989A CN 101324840 B CN101324840 B CN 101324840B
Authority
CN
China
Prior art keywords
instruction
group
impact damper
register
vector
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.)
Expired - Fee Related
Application number
CN2008101259893A
Other languages
English (en)
Other versions
CN101324840A (zh
Inventor
唐·Q·古延
杭·Q·利
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN101324840A publication Critical patent/CN101324840A/zh
Application granted granted Critical
Publication of CN101324840B publication Critical patent/CN101324840B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

提供了一种用于增强处理单元中的独立加载的执行的方法、系统和计算机程序产品。处理单元检测是否已经遇到与加载指令相关联的长延迟丢失。响应于遇到长延迟丢失,处理单元中进入负载前瞻模式。响应于进入负载前瞻模式,处理单元用相关联的矢量从第一缓冲器分派来自第一组指令的每个指令。处理单元确定来自第一缓冲器的第一组指令是否已经完成执行。响应于来自第一缓冲器的第一组指令的完成执行,处理单元将来自第一矢量阵列的一组矢量复制到第二矢量阵列。然后处理单元用来自第二矢量阵列的相关联的矢量从第二缓冲器分派第二组指令。

Description

用于增强处理单元中的独立加载的执行的方法和系统
技术领域
本申请一般涉及改进的数据处理系统和方法。更具体地,本申请贯注于对于同时的(simultaneous)多线程微处理器、在单线程模式下增强的负载前瞻(load lookahead)预提取。
背景技术
存在计算机用户对最大化性能的持续需求、以及对计算机产业增加微处理器的计算能力和效率的相对应的压力。这在服务器计算机领域尤其明显,其中所有商务依赖于他们的计算机架构执行和监视影响收益、利润等的日常活动。增加的微处理器性能在为计算机制造商提供用来从竞争中区分它们自己的机制的同时,将为计算机用户提供附加的资源。
在这几年中,体现技术发展水平的微处理器已经从相当直接的系统演进到在单个硅衬底上具有数百万晶体管的极端复杂的集成电路。对微处理器做出的许多改进之一是微处理器每周期执行多于一个指令的能力。这种类型的微处理器典型地被称作为“超大规模”。进一步的性能改进是微处理器“无序”执行指令的能力。该无序操作允许指令没有依赖性,从而绕过正在等待要被解决的某个依赖性的其它指令。微处理器的 PowerTM和 
Figure G200810125989301D00012
系列是提供指令的无序处理的超大规模系统的示例。微处理器可以支持无序执行支持的变化级别,意味着用来无序标识和执行指令的能力可以被限制。
限制无序执行支持的一个主要动机是标识哪些指令能够早期执行,并且跟踪和存储无序结果所需要的大量的复杂度。在无序执行的指令依照顺序执行模式被确定为不正确时,额外的复杂性出现了,要求在较旧的指令引起异常时它们的执行不影响处理器的组织状态。随着处理器速度继续增加,消除与无序执行相关联的一些复杂性变得更有吸引力。这将从通常被用来跟踪无序指令的芯片消除逻辑和逻辑的对应芯片区域或“不动产(real estate)”,从而允许额外的“不动产”变得为其它的处理功能可用。
正如本领域所知,存在当由微处理器执行指令时发生的某些状况,在指 令执行被限制或停顿直到该状况被解决的情形中,这些状况将引起停转(stall)发生。一个示例是高速缓冲存储器丢失,当指令要求的数据对一级(L1)高速缓冲存储器不可用、并且微处理器被强迫等待直到该数据能够从较慢的高速缓冲存储器或主存储器检索到时,该高速缓冲存储器丢失发生。从主存储器获得数据是相对慢的操作,并且当无序执行由于前述复杂性被限制时,后续指令不能够被充分执行,直到有效数据从存储器接收到。
更具体地讲,花长时间执行的较旧的指令可以创建停转,这可以防止任何较新的或后续的指令执行,直到耗时的指令完成。例如,在要求存取不在L1高速缓冲存储器(高速缓冲存储器丢失)中的数据的加载指令的情形中,在数据从较慢的高速缓冲存储器或主存储器提取的同时,延长的停转可能发生。没有支持所有无序执行情景的便利性,改变指令排序使得在检索丢失的数据的同时可以执行通过指令流的前向进行也许是不可能的。
发明内容
说明性实施例提供了实现预提取机制,用来为更多的指令提供更深到达指令高速缓冲存储器。在一个实施例中,所述的预提取辅助机制利用在单线程模式发生的通常未使用的指令缓冲器,以增加可以对单线程提取的指令的能力和增加可以预提取的加载指令的数量。在本实施例中,该预提取机制使用两个指令缓冲器,以在单个线程模式下以负载前瞻(LLA)模式发送指令到执行单元。
在另一个实施例中,预提取机制在单线程模式下使用两个线程的指令缓冲器以增加可以被提取的指令的能力。使用两个指令缓冲器显著地增加指令提取带宽和性能,而没有增加更多的硅。此外,来自两个线程的被组织的资源还一起工作以增加结果容量。
在说明性实施例中描述的所述预提取机制通过增加单线程性能而不添加相当数量的硅,相对于已知的系统提供了改进。通过增加单线程性能而不添加相当数量的硅,电力被节省并且处理器的频率被改进。例如,为了加倍指令缓冲器的深度,多达两倍的硅可以被要求,更多的电力可以被消耗并且读取指令可以花费更长时间来执行。
说明性实施例提供了用于增强处理单元中的独立加载的执行。说明性实施例检测是否已经遇到与加载指令相关联的长延迟丢失。说明性实施例响应于遇到长延迟丢失,在处理单元中进入负载前瞻模式。说明性实施例响应于进入负载前瞻模式,用相关联的矢量从第一缓冲器分派来自第一组指令的每个指令。相关联的矢量在第一矢量阵列中的一组矢量中。说明性实施例确定来自第一缓冲器的第一组指令是否已经完成执行。说明性实施例响应于来自第一缓冲器的第一组指令的完成执行,将来自第一矢量阵列的一组矢量复制到第二矢量阵列。然后,说明性实施例用来自第二矢量阵列的相关联的矢量从第二缓冲器分派第二组指令。
在说明性实施例中,第一缓冲器和第一矢量阵列与第一线程相关联,第二缓冲器和第二矢量阵列与第二线程相关联,并且第一组指令和第二组指令与第一线程相关联。
另一说明性实施例从第一组指令的执行接收一组更新的结果。说明性实施例更新与第一组指令中的每个指令相关联的、第一寄存器中的一组项目内的寄存器项目。说明性实施例响应于来自第一缓冲器的第一组指令的完成执行,将来自第一寄存器的该组项目复制到第二寄存器。说明性实施例更新与第二组指令中的每个被执行的指令相关联的、第二寄存器中的该组项目内的寄存器项目。在说明性实施例中,来自第一寄存器的该组项目利用copy_unconditional信号被复制到第二寄存器。
其他说明性实施例响应于进入负载前瞻模式,按序继续提取指令到第一缓冲器中直到第一缓冲器为满。说明性实施例响应于填充第一缓冲器,按序继续提取指令到第二缓冲器中直到第二缓冲器为满。说明性实施例响应于填充第二缓冲器,停止继续提取指令。
在说明性实施例中,处理单元在单线程模式操作。在执行单线程模式中,另一说明性实施例确定是否模式位被设置指示启动单线程模式。说明性实施例响应于模式位被设置,启动单线程模式。说明性实施例清除第一缓冲器、第二缓冲器、第一矢量阵列、第二矢量阵列的内容。然后,说明性实施例提取指令到第一缓冲器中。
其他说明性实施例确定是否负载前瞻模式已经退出。说明性实施例响应于负载前瞻模式的退出,丢弃第二缓冲器、第一矢量阵列、第二矢量阵列和第二寄存器的内容。
在另一说明性实施例中,提供了一种在数据处理系统中用于增强处理单元中的独立加载的执行的装置,包检测模块,用于检测是否已经遇到与加载 指令相关联的长延迟丢失;进入负载前瞻模式模块,用于响应于遇到长延迟丢失,在处理单元中进入负载前瞻模式;第一分派模块,用于响应于进入负载前瞻模式,用相关联的矢量从第一缓冲器分派来自第一组指令的每个指令,其中相关联的矢量在第一矢量阵列中的一组矢量中;第一确定模块,用于确定来自第一缓冲器的第一组指令是否已经完成执行;第一复制模块,用于响应于来自第一缓冲器的第一组指令的完成执行,将来自第一矢量阵列的该组矢量复制到第二矢量阵列;以及第二分派模块,用于用来自第二矢量阵列的相关联的矢量从第二缓冲器分派第二组指令。
本发明的这些和其它特征和优点将在下面本发明的示范性实施例的详细描述中被说明,或者鉴于下面本发明的示范性实施例的详细描述对于本领域普通技术人员将变得清楚。
附图说明
当结合附图阅读时,通过参照下面示范性实施例的详细描述,本发明以及优选的使用方式及其进一步的目的和优点将被最好地理解,在附图中:
图1是其中说明性实施例的各方面可能被实现的示范性数据处理系统的框图;
图2描述了按照说明性实施例、示出功能单元和寄存器的传统的双线程处理器设计的示范性框图;
图3描述了按照说明性实施例的通用寄存器;
图4是按照说明性实施例、用于在负载前瞻(LLA)下增强独立加载的执行的预提取辅助机制的功能性框图;
图5是按照说明性实施例、在没有利用负载前瞻(LLA)的情形下用单线程辅助模式增强独立加载的执行的预提取辅助机制的功能性框图;
图6A和6B描述了按照说明性实施例、概述在负载前瞻(LLA)的情况下增强独立加载的执行的预提取辅助机制的示范性操作的流程图;以及
图7A、7B和7C描述了按照说明性实施例、概述在没有利用负载前瞻(LLA)的情况下、以单线程辅助模式增强独立加载的执行的预提取辅助机制的示范性操作的流程图。
具体实施方式
说明性实施例提供了一种预提取辅助机制,用来在单线程辅助模式下增强独立加载的执行。利用该说明性实施例,数据处理系统提供了一种在单线程模式下增强独立加载的执行的方法。图1被提供作为示范性数据处理系统,其中说明性实施例的各方面可以被实现。数据处理系统100是计算机的示例,其中可以安装实现本发明的说明性实施例的过程的计算机可用代码或指令。
在描述的示例中,数据处理系统100采用了集线器架构,包括北桥和存储器控制器集线器(NB/MCH)102和南桥和输入/输出(I/O)控制器集线器(SB/ICH)104。处理单元106、主存储器108和图形处理器110连接到NB/MCH102。图形处理器110可以通过加速图形端口(AGP)连接到NB/MCH 102。
在描述的示例中,局域网(LAN)适配器112连接到SB/ICH 104。音频适配器116、键盘和鼠标适配器120、调制解调器122、只读存储器(ROM)124、硬盘驱动器(HDD)126、CD-ROM驱动器130、通用串行总线(USB)端口和其它通信端口132和PCI/PCIe设备134通过总线138和总线140连接到SB/ICH104。PCI/PCIe设备134可以包括例如以太网适配器、内插(add-in)卡和笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM 124可以是例如快闪二进制输入/输出系统(BIOS)。
HDD 126和CD-ROM驱动器130通过总线140连接到SB/ICH 104。HDD126和CD-ROM驱动器130可以使用例如集成驱动电子设备(IDE)或串行高级技术附接(SATA)接口。超级I/O(SIO)设备136可以连接到SB/ICH 104。
操作系统在处理单元106上运行。操作系统协调和提供对图1中的数据处理系统100内的各种组件的控制。作为客户机,操作系统可以是商业可用的操作系统,如 
Figure DEST_PATH_GSB00000104722600031
XP(Microsoft和Windows是微软公司在美国、其它国家或者两者的注册商标)。面向对象的编程系统(如JavaTM编程系统)可以结合操作系统运行,并且提供从在数据处理系统100上运行的JavaTM程序或应用对操作系统的调用(Java是Sun Microsystems公司在美国、其它国家或者两者的注册商标)。
作为服务器,数据处理系统100可以例如是 
Figure DEST_PATH_GSB00000104722600032
计算机系统,运行高级交互执行体 
Figure DEST_PATH_GSB00000104722600033
操作系统或 操作系统(eServer,pSeries和AIX是国际商业机器公司在美国、其它国家或者两者的注册商标,而Linux是Linus Torvalds在美国、其它国家或者两者的注册商标)。数据处理系统100可以是在处理单元106中包括多个处理器的对称多处理器(SMP) 系统。或者可以采用单个处理器系统。
操作系统的指令、面向对象的编程系统和应用或程序被安装在存储设备(如HDD 126)上,并且可以被加载到主存储器108中,用于由处理单元106执行。例如,本发明的说明性实施例的过程可以由处理单元106利用可以位于存储器(如例如,主存储器108、ROM 124)或一个或多个外围设备126和130中的计算机可用程序代码执行。
总线系统(如图1所示的总线138或总线140)可以包括一个或多个总线。当然,总线系统可以利用任何类型的通信结构或架构实现,该通信结构或架构在附接到所述结构或架构的不同组件或设备之间提供数据传输。
通信单元(如图1的调制解调器122或网络适配器112)可以包括用于发送和接收数据的一个或多个设备。存储器可以例如是主存储器108、ROM124或如在图1中的NB/MCH 102中发现的高速缓冲存储器。
本领域普通技术人员将理解到,图1中的硬件可以依据实现而变化。除了或者替代图1中描述的硬件外,其它的内部硬件或外围设备(如快闪存储器、等效的非易失性存储器或光盘驱动器等)也可以被使用。而且,说明性实施例的过程可以被应用于多处理器数据处理系统,而不是前述的SMP系统,而不偏离本发明的精神和范围。
而且,数据处理系统100可以采用多个不同数据处理系统中的任何的形式,该不同数据处理系统包括客户机计算设备、服务器计算设备、写字板型计算机、膝上型计算机、电话或其他通信设备、个人数字助理(PDA)等。在一些说明性实施例中,数据处理系统100可以是便携式计算设备,其配置有快闪存储器以提供非易失性存储器用于存储例如操作系统文件和/或用户产生的数据。实际上,数据处理系统100可以是任何已知的或者随后开发的没有架构限制的数据处理系统。
说明性实施例提供实现预提取机制,其为更多指令提供更深入到达指令高速缓冲存储器。在一个实施例中,所述的预提取辅助机制利用在单线程辅助模式发生的通常未使用的指令缓冲器,以增加可以对单线程提取的指令的能力和增加可以预提取的加载指令的数量。在本实施例中,该预提取机制使用两个指令缓冲器,以在单个线程模式下以LLA模式发送指令到执行单元。
在另一个实施例中,预提取机制在单线程模式下使用两个线程的指令缓冲器,以增加可以被提取的指令的能力。使用两个指令缓冲器显著地增加指 令提取带宽和性能,而没有增加更多的硅。此外,来自两个线程的被组织的资源还一起工作以增加结果容量。
在说明性实施例中描述的所述预提取机制通过增加单线程性能而不添加显著的硅,相对于已知的系统提供了改进。通过增加单线程性能而不添加显著的硅,电力被节省并且处理器的频率被改进。例如,为了加倍指令缓冲器的深度,多达两倍的硅可以被要求,更多的电力可以被消耗并且读取指令可以花费更长时间来执行。
参照图2,按照说明性实施例描述显示功能单元和寄存器的传统的双线程处理器设计的示范性框图。在这些说明性实施例中,处理器200可以被实现为图1中的处理单元106。处理器200包括单个集成电路超大规模微处理器,其具有还可以在单线程模式操作的双线程同时的多线程(SMT)。因此,正如在下文进一步讨论的,处理器200包括各种单元、寄存器、缓冲器、存储器和其它部分,它们全部用集成电路形成。而且,在说明性实施例中,处理器200按照精减指令集计算机(RISC)技术操作。
如图2所示,指令提取单元(IFU)202连接到指令高速缓冲存储器204。指令高速缓冲存储器204保持要被执行的多个程序(线程)的指令。指令高速缓冲存储器204还具有与二级(L2)高速缓冲存储器/存储器206的接口。IFU202按照指令地址从指令高速缓冲存储器204要求指令,并且将指令传递给指令解码单元208。在说明性实施例中,IFU 202可以同时为多达两个线程从指令高速缓冲存储器204要求多个指令。指令解码单元208同时为多达两个线程解码多个指令,并且将解码的指令传递给指令分派单元(IDU)209。
IDU 209包括64项目(entry)指令缓冲器(IBUF),IBUF0210和IBUF1211,其从指令解码单元208接收解码的指令。指令被存储在IBUF0210和IBUF1211中,同时等待分派到适合的执行单元。IDU 209为每个线程选择性地分组被存储在IBUF0210和IBUF1211中的解码的指令,并且输出或发布每个线程的指令组到处理器的执行单元212、214、216、218、220、222、224、226和228。
在说明性实施例中,处理器的执行单元可以包括分支单元212、加载/存储单元(LSUA)214和(LSUB)216、定点执行单元(FXUA)218和(FXUB)220、浮点执行单元(FPUA)222和(FPUB)224以及矢量多媒体扩展单元(VMXA)226和(VMXB)228。执行单元212、214、216、218、220、222、224、 226和228完全在两个线程间共享,意味着执行单元212、214、216、218、220、222、224、226和228可以从线程之一或者两者接收指令。处理器包括多个寄存器组230、232、234、236、238、240、242、244和246,它们又被称作为组织的寄存器文件(ARF)。
ARF是一旦指令已经完成执行就存储完成的数据的文件。ARF 230、232、234、236、238、240、242、244和246可以按指令的类型(即通用寄存器(GPR)230和232、浮点寄存器(FPR)234和236、专用寄存器(SPR)238和240和矢量寄存器(VR)244和246),分别为两个线程中的每个存储数据。在处理指令的同时,按类型以及按线程分开存储完成的数据有助于减少处理器争用。
在IDU 209中的dirty_bit矢量247和248每个包括32位,其中的一个对应于处理器200中的GPR230和232中的每个的32组织的通用寄存器中的每个。应当理解到,每个具有32个项目的GPR 230和232仅仅被用作一个示例并且不应该被认为限制。本领域技术人员容易理解到按照说明性实施例的范围如何预期GPR 230和232以及其它类型的组织工具,如其它大小(如8、16、64、128等)的FPR 234和236。在dirty_bit矢量247和248中的各位指示哪个导致GPR 230和232具有有效或无效的结果。在优选实施例中,“0”在那些具有有效结果的寄存器的dirty_bit矢量247和248中被设置,而“1”在那些具有无效结果的寄存器的dirty_bit矢量247和248中被设置。dirty_bit矢量247和248在下面将更详细描述。
处理器额外包括用于保持程序状态的一组共享的专用寄存器(SPR)242,如指令指针、堆栈指针或处理器状态字,它们可以被用在来自两个线程或者其中之一的指令上。执行单元212、214、216、218、220、222、224、226和228通过简化的内部总线结构249连接到ARF 230、232、234、236、238、240、242、244和246。
如果要求执行指令的指令数据完成或者如果该数据已经在流水线(pipeline)中经过了冲洗点(point of flushing),则为了执行浮点指令,FPUA222和FPUB 224从FPR 234和236检索作为要求执行指令的输入数据的寄存器资源操作数信息。完成数据是一旦指令已经完成执行并且被存储在ARF(如ARF 230、232、234、236、238、240、242、244和246)中就由执行单元已经产生的数据。未完成数据是在指令没有完成执行的指令执行期间已经被产生的数据。FPUA 222和FPUB 224按照每个执行指令属于哪个线程输入它们 的数据。例如,FPUA 222输入完成数据到FPR 234而FPUB 224输入完成数据到FPR 236,因为FPUA 222、FPUB 224和FPR 234和236是线程特定的。
在指令的执行期间,当指令已经在流水线中经过了冲洗点时,FPUA 222和FPUB 224输出它们的目的地寄存器操作数数据,或者在指令执行期间产生的指令数据到FPR 234和236。在指令的执行期间,当指令已经在流水线中经过了冲洗点时,FXUA218、FXUB 220、LSUA214和LSUB 216输出它们的目的地寄存器操作数数据,或者在指令执行期间产生的指令数据到GPR230和232。在指令的子集的执行期间,当指令已经在流水线中经过了冲洗点时,FXUA 218、FXUB 220和分支单元212输出它们的目的地寄存器操作数数据到SPR 238、240和242。在指令的执行期间,当指令已经在流水线中经过了冲洗点时,VMXA226和VMXB 228输出它们的目的地寄存器操作数数据到VR 244和246。
数据高速缓冲存储器250还可以与非可高速缓冲存储单元(未示出)相关联,该非高速缓存单元从处理器接受数据,并且将其直接写入二级(L2)高速缓冲存储器/存储器206。用此方式,非可高速缓冲存储单元绕过存储到高速缓冲存储器要求的一致性协议。
响应于从指令高速缓冲存储器204输入并且由指令解码单元208解码的指令,IDU 209按照指令类型和线程选择性地分派指令给执行单元212、214、216、218、220、222、224、226和228。然后,执行单元212、214、216、218、220、222、224、226和228执行特定类或类型的指令的一个或多个指令。例如,FXUA 218和FXUB 220对寄存器资源操作数执行定点算术运算,如加、减、与、或和异或。FPUA222和FPUB 224对寄存器资源操作数执行浮点算术运算,如浮点乘法和除法。LSUA 214和LSUB 216执行加载和存储指令,其在数据高速缓冲存储器250和ARF 230、232、234和236之间移动操作数。VMXA 226和VMXB 228执行包括多个数据的单个指令操作。分支单元212执行分支指令,其通过修改由IFU 202使用的指令地址通过程序有条件地改变执行的流程,以从指令高速缓冲存储器204请求指令。
根据用来执行每个指令要求的操作的可用的执行单元212、214、216、218、220、222、224、226和228和解码指令的混合,IDU 209将由指令解码单元208解码的指令分组在一起以同时执行。例如,因为仅仅存在两个加载/存储单元214和216,所以两个加载/存储类型的指令的最大值可以被分组在 一起。在说明性实施例中,多达7个指令可以被分组在一起(两个定点算术、两个加载/存储、两个浮点算术或两个矢量多媒体扩展和一个分支),并且多达5个指令可以属于相同线程。IDU 209在包括来自较低优先级线程的指令之前,在所述组中包括尽可能多的(多达5)来自较高优先级的线程的指令。线程优先级由线程的优先级值和其进程的优先级类确定。处理系统使用所有可执行线程的基本优先级级别,以确定哪个线程获得处理器时间的下一个片段。线程在每个优先级级别以循环方式被调度,并且仅仅当没有处于较高级别的可执行线程时,处于较低级别的线程的调度才可能发生。
然而,IDU 209分派FPU指令222和224或VMX指令226和228与FXU指令218和220在同一组中。也就是说,IDU 209不将FPU指令222和224和VMX 226和228分派在同一组中。存储在SPR 238和240中的程序状态(如指令指针、堆栈指针或处理器状态字)给IDU 209指示线程优先级252。
指令完成单元254监视内部总线结构249以确定何时在执行单元212、214、216、218、220、222、224、226和228执行的指令完成写入它们的操作数结果到ARF 230、232、234、236、238、240、242、244和246。由分支单元212、FXUA 218、FXUB 220、LSUA 214和LSUB 216执行的指令要求相同数量的周期来执行,而由FPUA 222和FPUB 224、VMXA 226和VMXB228执行的指令要求可变的并且更大数量的周期来执行。
因此,被分组在一起并且同时开始执行的指令不一定同时完成执行。指令的“完成”意味着指令在执行单元212、214、216、218、220、222、224、226或228之一中被完成执行,已经传递冲洗点,并且所有较旧的指令已经在组织的状态下被更新,因为指令必须按序完成。因此,指令现在准备好完成并且更新所述组织的状态,这意味当指令已经完成时,更新所述数据的最后状态。组织的状态可以仅仅按序更新,即指令必须按序完成,并且必须当每个指令完成时更新完成数据。
指令完成单元254监视指令的完成,并且发送控制信息256到IDU 209,以通知IDU 209更多分组的指令可以被分派到执行单元212、214、216、218、220、222、224、226和228。IDU 209发送分派信号258到IFU 202和指令解码单元208以便指示它准备好接收更多解码指令,该分派信号258用作将更多指令沿流水线向下引入分派单元的节流口(throttle)。
为了实现用单线程模式增强独立加载的执行,用于控制通用寄存器的工 具的简洁的讨论按照说明性实施例提供。图3描述按照说明性实施例的这样的通用寄存器。通用寄存器(GPR)302类似于图2的GPR 230和232。然而,GPR 302被实现为一个64位的项目寄存器文件,其中两个线程(线程0和线程1)被交织,使得线程0的GPR占据GPR 302的偶数项目,而线程1的GPR占据GPR 302的奇数项目。相反,图2的GPR 230和232则被实现为两个分开的32位项目寄存器文件。交织的GPR 302提供支持无序执行指令,使得在检索丢失的数据的同时,指令排序通过指令流改变以允许前向进行。当GPR 302以上述方式交织时,从一个线程的GPR项目复制内容到另一个线程的GPR项目可以在一个时钟周期执行。例如,一个线程的所有32个项目可以被同时地复制到其它线程的32项目,因为每个寄存器对彼此位置相邻。然而,如果两个GPR分开,如图2的GPR 230和232的情形,则随着更多写入端口被要求来从第一GPR传递数据到第二GPR,复制第一GPR的内容到第二GPR有更多问题。分开的GPR还涉及大量的写入,因此每个周期的GPR寄存器传输的数量被限制。即,传输第一GPR的32项目中的所有内容到第二GPR将要求多于一个时钟周期来完成。
在GPR 302中,线程0的GPR0位于位置0,而线程1的GPR0位于位置1,线程0的GPR1位于位置2,而线程1的GPR1位于位置3等。处理器(如图2的处理器200)可以产生控制信号以激活各种增强模式。例如,处理器可以产生信号以激活在GPR 302中的GPR0和GPR1之间的内容复制。即,当处理器检测到它能够进入LLA模式,并且处理器也处于单线程模式时,处理器可以产生信号以启动在GPR0和GPR1之间的内容复制。当处理器检测到它可以不在LLA模式操作并且处理器还处于单线程模式时,处理器可以产生信号以通过声明copy_using_mask信号选择性地在GPR0和GPR1之间启动内容复制。因此,处理器通过或门308使用两个信号(copy_unconditional信号304或copy_using_mask信号306)控制在GPR302中的内容复制。当处理器声明copy_unconditional信号304时,线程1的项目的内容在一个时钟周期内被复制到线程0的项目。当处理器声明copy_using_mask信号306时,如通过与门312由select_mask寄存器310的相对应的激活位指定的,线程0的项目的内容选择性地被复制到线程1的项目。
select_mask寄存器310是32位的寄存器,其中select_mask寄存器310的每个位取决于该位是否被激活,控制从线程到线程的相对应的GPR项目的 复制。例如,当处理器声明copy_using_mask信号306时,如果select_mask寄存器310的位M2被激活,则T0GPR2中的项目被复制到T1GPR2。select_mask寄存器310由clear_mask信号314和32个set_mask信号316、标签的set_mask(0)至set_mask(31)控制。当处理器声明clear_mask信号314时,select_mask寄存器310的所有32位被设置为非激活状态。如果处理器声明32个set_mask信号316中的任何一个,则相对应的select_mask寄存器310被设置激活。
而且将dirty_bit矢量阵列318用其与GPR 302的关系和GPR 302相关联。在dirty_bit矢量阵列318中的64位的每个代表GPR 302中的64个项目,即在dirty_bit矢量阵列318中的位0-63直接对应于GPR302中的寄存器0-63。然而,dirty_bit矢量阵列318被实现为一个64位的项目寄存器文件,其中两个线程(线程0和线程1)被交织,使得线程0的dirty_bit矢量占据dirty_bit矢量阵列318的偶数项目,而线程1的dirty_bit矢量占据dirty_bit矢量阵列318的奇数项目。图2的dirty_bit矢量247和248被实现为两个分开的32位项目寄存器文件。出于解释而不是限制的目的,在此描述的dirty_bit矢量阵列318与GPR 302相关联。应该懂得,其它的说明性实施例被预期,其中dirty_bit矢量阵列318可以与其它寄存器相关联,如图2的浮点寄存器234和236,图2的专用寄存器238和240等。
图4是按照说明性实施例、用于在负载前瞻(LLA)下增强独立加载的执行的预提取辅助机制的功能性框图。预提取辅助机制可以在类似于图2的处理器200的处理器400中实现。当由处理器400执行的应用要求处理器400从同时的多线程(SMT)模式切换到单线程模式时,应用可以设置告诉处理器400启动单线程模式的模式位。在处理器400内的硬件继续或者周期性地验证模式位,使得当模式位被设置时,处理器400将启动单线程模式并且相应地行动。在此时,处理器400清除类似于图2的IBUF0210和IBUF1211的指令缓冲器0(IBUF0)402和指令缓冲器1(IBUF1)404中的任何内容。IBUF0402和IBUF1404在类似于图2的指令分派单元(IDU)209的指令分派单元(IDU)406内。此外,当进入单线程模式时,处理器400清除dirty_bit矢量阵列0408和dirty_bit矢量阵列1410中的任何内容。
在单线程模式,指令提取单元(IFU)412按照指令地址从指令高速缓冲存储器414提取指令,并且传递该指令到指令解码单元416。指令解码单元416 解码多个指令并且将解码指令传递给IDU 406中的IBUF0402。在正常执行模式,执行单元418执行由IDU 406按顺序从IBUF 402分派的指令。执行单元418将指令执行的结果写入通用寄存器(GPR)420的GPR0项目422中,接着处理器400解除分配来自IBUF0402的指令。一旦指令从IBUF0402被解除分配,指令解码单元416就可以解码后续指令,并且传递该解码指令给IBUF0402,以按序分配IBUF0402的解除分配的项目。
如果在分派期间,处理器400遇到长延迟丢失,如二级(L2)高速缓冲存储器丢失、转换丢失等,则处理器400进入LLA模式。在LLA模式,指令解码单元416继续传递指令给IBUF0402直到它充满。当IBUF0402满时,指令解码单元416传递解码指令给IDU 406中的IBUF1404。处理器400在负载前瞻(LLA)下时不从IBUF0402解除分配任何指令。即,一旦LLA模式被退出,则引起长延迟丢失的加载指令和比该加载更新的所有指令必须重新被分派并且被重新执行。因此,在IBUF0402中的指令老于IBUF1404中的指令。当IBUF1404满时,IFU 412停止提取指令直到LLA模式被退出。IFU412停止提取,因为当处理器400退出LLA模式时,处理器400将丢弃在IBUF 1404中的所有指令并且恢复从IBUF0402中分派。
在LLA模式中,执行单元418执行在IBUF0402中的指令,而不改变机器的组织的状态,并且加载/存储单元执行独立加载指令的预提取请求。一旦进入LLA模式,则处理器400不回写已经经过回写阶段的指令,并且从一旦进入LLA模式就执行指令的结果被防止写入GPR 420。处理器400通过更新在dirty_bit矢量0阵列408中的相关联的dirty_bit矢量,将所有回写阶段后的指令标记为污染(dirty)。在LLA模式,IDU 406用来自dirty_bit矢量0阵列408的相关联的dirty_bit矢量从IBUF0402分派所有指令,如果相关联的dirty_bit是1,则其指示该指令应该被看作是污染的。
当来自IBUF0402的所有指令已经被分派时,处理器400等待,直到来自IBUF0402的所有指令已经执行并且dirty_bit矢量0阵列408已经被更新。处理器400将该dirty_bit矢量从dirty_bit矢量0阵列408复制到dirty_bit矢量1阵列410。接着处理器400通过在一个周期声明copy_unconditional信号,将GPR0项目422的内容复制到GPR1项目424中,如相对于图3的copy_unconditional信号304所述。一旦GPR0项目422的内容已经被复制到GPR1项目424中,则IDU 406开始从IBUF1404分派指令到执行单元418。 同样,处理器400不回写不被处理器400的无序执行机制支持的指令,即,这些指令已经经过回写阶段,并且从一旦进入LLA模式就执行指令的结果被防止被写入GPR 420。处理器400通过更新相关联的dirty_bit矢量1阵列410,将回写阶段之后的所有指令标记为污染。IDU 406在LLA模式下用来自dirty_bit矢量1阵列410的相关联的dirty_bit矢量分派所有指令,这指示该指令应该被看作是污染的。
当长延迟丢失数据被返回到处理器时,处理器400退出LLA模式并且从IBUF1404丢弃全部指令。该丢弃的指令可能在比IBUF0402在正常的执行模式期间开始排出(draining)时较晚的时间被预提取到IBUF0402。当处理器400退出LLA模式时,处理器400还清除从dirty_bit矢量0阵列408到dirty_bit矢量1阵列410的所有的dirty_bit矢量。另外,在GPR1项目424的内容不被允许复制回GPR0项目422时,处理器400从GPR1项目424丢弃所有内容。GPR1项目424的内容仅仅被需要帮助在LLA模式下预提取。处理器400不清除GPR0项目422的内容,因为该内容包含在进入LLA模式之前的最近组织的数据。接着,IDU 406以正常执行模式开始从IBUF0402分派指令到执行单元418。
因此,如图4所述,实现预提取机制为更多指令提供更深入到达指令高速缓冲存储器。所述的预提取辅助机制利用了在单线程模式发生的通常未使用的指令缓冲器,从而增加了可以对单线程提取的指令的能力并且增加了可以被预提取的加载指令的数量。所述预提取机制使用两个指令缓冲器以在单线程模式下发送指令到LLA模式下的指令单元。所述预提取机制通过增加单线程性能而不添加显著的硅,相对于已知系统提供了改进。通过增加性能而不添加硅,电力被节省并且处理器的频率被改善。例如,如果IBUF0402在深度上双倍到128项目,则IBUF0402可以使用多达两倍数量的硅,消耗更多电力并且花更长时间读取,即,处理器操作频率将相应地下降。
图5是按照说明性实施例、在没有利用负载前瞻(LLA)的情形下在单线程辅助模式增强独立加载的执行的预提取辅助机制的功能性框图。由处理器500执行的初始过程与由图4的处理器400执行的初始过程相类似,因为该处理器500通过继续或者周期性地验证模式位、并且清除指令分派单元(IDU)506内的指令缓冲器0(BUF0)502和指令缓冲器1(IBUF1)504中的任何内容,启动单线程模式。初始过程还类似于如图4所述的那些,因为指令提取单元 (IFU)508从指令高速缓冲存储器510提取指令并且传递该指令给指令解码单元512,其中指令解码单元512解码指令并且传递该解码指令给IDU 506中的IBUF0502。
然而,在该说明性实施例中,当IBUF0502满时,指令解码单元512传递该解码指令给IDU 506中的IBUF1504。在IBUF0502中的指令旧于在IBUF1504中的指令。由于指令解码单元512在IBUF0502满之后传递第一指令给IBUF1504,因此与IBUF1504相关联的控制电路将提取到IBUF1504中的第一指令的first_bit设置为1。设置第一指令的first_bit为1被执行,以指示该指令和在IBUF1504中的任何更新的指令必须等待直到IBUF0502已经分派其所有指令给执行单元514。一旦IDU 506分派在IBUF1504中的第一指令,first_bit在该指令被分派给执行单元514时就消失。接着,当IBUF1504再次满时,如果IBUF0502也满,则IFU 508停止提取。如果因为IBUF0502通过由IDU 506分派到执行单元514的指令被排出,所以IBUF1504满而IBUF0502没有满,则IFU 508利用与上述关于IBUF1504的相同方法,通过指令解码单元512从指令高速缓冲存储器510提取指令到IBUF0502。当在IBUF1504中的指令变得旧于在IBUF0502中的指令时,如当IBUF1504正分派并且IBUF0502第一指令现在使first_bit激活时,在IBUF0502中的指令必须等待直到在IBUF1504中的所有指令已经被分派。
使用first_bit确保所有指令按顺序穿过IBUF0502和IBUF1504。如上所述,IDU 506利用first_bit从IBUF0502和IBUF1504按序分派指令到执行单元514。因此IDU 506正从IBUF0502分派时,IBUF1504中的指令等待直到来自IBUF0502的所有指令已经被分派,并且当IDU 506正从IBUF1504分派时,IBUF0502中的指令等待直到来自IBUF1504的所有指令已经被分派。
当由IDU 506从IBUF0502分派的指令由执行单元514执行时,执行单元514将指令执行的结果写入通用寄存器(GPR)516的GPR0项目518中。当来自IBUF0502的所有指令已经被分派时,处理器500等待直到来自IBUF0502的所有指令已经执行并且GPR0项目518被更新。接着处理器500通过在一个周期内声明copy_unconditional信号,复制GPR0项目518的内容到项目520,如相对于图3的copy_unconditional信号304所述的那样。一旦处理器500将GPR0项目518的内容复制到GPR1项目520中,则IDU 506开始从IBUF1504分派指令到执行单元514。执行单元514接着将指令执行的 结果写入到通用寄存器(GPR)516的GPR1项目520中。当更新的结果被写回到GPR1项目520时,处理器500利用如write_back_register_transfer(RT)字段等的字段,在GPR 516中设置select_mask寄存器(如图3所示的select_mask寄存器310)的相对应的select_mask位,以声明相对应的set_mask信号,如图3的set_mask信号316。set_mask信号的一个的声明接着由处理器500使用在设置select_mask寄存器中的相对应位为激活状态中。
一旦IDU 506已经从IBUF1504分派按序指令的最后一个,处理器500就利用在select_mask寄存器中的被声明的位中的一些,将由指令执行更新的GPR1项目520的内容从IBUF1504复制到GPR0项目518。从GPR1项目520复制更新的内容到GPR0项目518通过处理器500激活copy_using_mask信号(如图3的copy_using_mask信号306)执行。当处理器500声明copy_using_mask信号时,处理器500将已经具有所声明的相对应的select_mask寄存器位的所有GPR1项目520复制到相对应的GPR0项目518。因此,GPR0项目518现在包含从IBUF1504的指令执行的所有最近更新。一旦GPR1项目520的内容已经复制到GPR0项目518中,处理器500就声明clear_mask信号以清除在select_mask寄存器中的所有位,并且IDU 506按照如上所述的方式,开始从IBUF0502分派指令到执行单元514。
因此,如图5所述,实现预提取机制提供了增加可以在单线程模式提取的指令的能力。所述的预提取机制在单线程模式使用两个线程的指令缓冲器以增加可以被提取的指令的能力。使用两个指令缓冲器显著地增加指令提取带宽和性能,而没有增加更多的硅。此外,来自两个线程的被组织的资源还一起工作以增加结果容量。所述预提取机制通过增加单线程性能而不添加显著的硅,相对于已知的系统提供了改进。通过增加性能而不添加显著的硅,电力被节省并且处理器的频率被改进。例如,如果IBUF0502在深度上双倍到128项目,则IBUF0502可以使用多达两倍数量的硅,消耗更多电力并且花更长时间读取,即,处理器操作频率将相应地下降。
图6A和6B描述了按照说明性实施例、概述在负载前瞻(LLA)下增强独立加载的执行的预提取辅助机制的示范性操作的流程图。该示范性操作由在如图4的处理器400的处理器中实现的预提取辅助机制执行。当该操作开始时,处理器接收进入单线程模式的请求(步骤602)。处理器启动单线程模式并且相应地动作(步骤604)。此时处理器清除指令缓冲器(IBUF)(如图4的IBUF0 402和IBUF1404)中的任何内容,并且清除dirty_bit矢量阵列(如图4的dirty_bit矢量1阵列410和dirty_bit矢量0阵列408)中的任何内容(步骤606)。
一旦在单线程模式中,如图4的IFU 412的指令提取单元(IFU)就从指令高速缓冲存储器(如图4的指令高速缓冲存储器414)提取指令到IBUF0(步骤608)。在正常执行模式中,如图4的IDU 406的指令分派单元(IDU)从IBUF0按序分派指令到如图4的执行单元418的执行单元(步骤610)。在指令的执行期间,执行单元将指令执行的结果写入通用寄存器(GPR)的GPR0的项目(如图4的GPR0420的GPR0项目422)。还在指令的执行期间,处理器确定是否已经遭遇长延迟丢失(步骤612)。如果在步骤612处理器检测长延迟丢失失败,则处理器确定是否由于指令的完成和其解除分配而在IBUF0中存在打开的项目(步骤614)。如果在步骤614在IBUF0中存在解除分配的项目,则操作返回到步骤608。如果在步骤614,在IBUF0中不存在解除分配的项目,则处理器等待直到指令完成并且相关联的项目从IBUF0解除分配(步骤616),随后操作返回到步骤608。
返回到步骤612,如果处理器检测到长延迟丢失,则处理器进入LLA模式(步骤618)。此时,操作可以执行两个同时的功能。首先,IFU继续提取到IBUF0直到IBUF0为满(步骤620)。当IBUF0为满时,IFU将开始提取到IBUF1(步骤622)。处理器在LLA模式下时不从IBUF0解除分配任何指令。即,一旦LLA模式被退出,则引起长延迟丢失的加载指令和所有比该加载更新的指令必须被重新分派和重新执行。当IFU确定IBUF1为满时,IFU停止提取指令直到LLA模式退出(步骤624),操作继续到步骤626。IFU停止提取,因为当处理器退出LLA模式时,处理器将丢弃IBUF1中的所有指令并且从IBUF0恢复分派。
在从步骤618的第二操作中,IDU继续从IBUF0分派指令(步骤626)。在LLA模式,执行单元可以执行来自IBUF0的指令而不改变机器的组织的状态。一旦进入LLA模式,则处理器不回写已经经过回写阶段的指令,并且从一旦进入LLA模式就执行指令的结果被防止写入GPR。处理器通过更新来自IBUF0的指令的dirty_bit矢量0阵列中的相关联的dirty_bit矢量,将回写阶段之后的所有指令标记为污染(步骤628)。在LLA模式,IDU用来自dirty_bit矢量0阵列的相关联的dirty_bit矢量从IBUF0分派所有指令,这指 示如果相关联的dirty_bit是1,则该指令应该被看作是污染的。
处理器接着确定是否LLA模式(步骤630)。如果在步骤630LLA模式还没有退出,则IDU已经退出确定是否所有指令已经从IBUF0分派(步骤632)。如果在步骤632所有指令还没有分派,则操作返回到步骤626。如果在步骤632所有指令已经从IBUF0分派,则处理器等待直到来自IBUF0的所有指令已经执行并且dirty_bit矢量0阵列已经被更新(步骤634)。接着处理器将dirty_bit矢量从dirty_bit矢量0阵列复制到dirty_bit矢量1阵列(步骤636)。处理器接着通过声明copy_unconditional信号将GPR的GPR0项目的内容复制到GPR1项目(步骤638)。
一旦已经将GPR0项目的内容复制到GPR1项目,IDU就开始将来自IBUF1的指令分派给执行单元(步骤640)。同样,处理器不回写已经经过回写阶段的指令,并且从一旦进入LLA模式就执行该指令的结果被防止写入GPR。处理器通过更新dirty_bit矢量1阵列中的相关联的dirty_bit矢量,将回写阶段之后的所有指令标记为污染的(步骤642)。在LLA模式中,由IDU从IBUF1分派的所有指令被分派有来自dirty_bit矢量1阵列的相关联的dirty_bit矢量,这指示该指令应该被看作是污染的。
处理器接着确定是否已经退出LLA模式(步骤644)。如果在步骤644LLA模式还没有退出,则IDU确定是否所有指令已经从IBUF1分派(步骤646)。如果在步骤646还没有分派所有指令,则操作返回到步骤640。如果在步骤646所有指令已经从IBUF1分派,处理器等待LLA模式退出(步骤648)。从步骤630、644和648,当长延迟丢失数据被返回到处理器时,处理器退出LLA模式。接着处理器从IBUF1、GPR1项目、dirty_bit矢量0阵列和dirty_bit矢量1阵列丢弃所有指令(步骤650),操作返回到步骤610。被丢弃的指令可以在比IBUF0开始在正常执行模式期间排出时的较晚的时间被预提取到IBUF0。GPR1项目的内容不被允许复制回到GPR0项目。GPR1项目的内容仅仅被要求有助于在LLA模式下预提取。
因此,说明性实施例提供了增强处理单元中的独立加载的执行。说明性实施例检测是否已经遇到与加载指令相关联的长延迟丢失。响应于遇到长延迟丢失,处理单元进入到负载前瞻模式。响应于进入负载前瞻模式,来自第一组指令的每个指令用相关联的矢量从第一缓冲器分派,其中相关联的矢量在第一矢量阵列的矢量组中。说明性实施例确定是否来自第一缓冲器的第一 组指令已经完成执行,并且响应于来自第一缓冲器的第一组指令的完成执行,将来自第一矢量阵列的矢量组复制到第二矢量阵列。接着,说明性实施例用来自第二矢量阵列的相关联的矢量从第二缓冲器分派第二组指令。
图7A、7B和7C描述了概述按照说明性实施例、在没有利用负载前瞻(LLA)下在单线程辅助模式增强独立加载的执行的预提取辅助机制的示范性操作的流程图。预提取辅助机制在如图5的处理器500的处理器中实现。当操作开始时,处理器接收进入单线程模式的请求(步骤702)。处理器启动单线程模式并且相应地动作(步骤704)。此时处理器清除指令缓冲器(IBUF)(如图5的IBUF0502和IBUF1504)的任何内容(步骤706)。
一旦在单线程模式中,则如图5的IFU 508的指令提取单元(IFU)从如图5的指令高速缓冲存储器510的指令高速缓冲存储器提取指令到IBUF0(步骤708)。尽管没有执行将第一指令初始提取到IBUF0,但是对于后续的到IBUF0的指令提取,在IBUF0中的控制电路将第一指令的first_bit设置为1,这将在下文描述(步骤710)。在正常执行模式,如图5的IDU 506的指令分派单元(IDU)从IBUF0开始按序分派指令到如图5所示的执行单元514的执行单元(步骤712)。此时,操作可以执行两个同时的功能。在第一操作中,IFU确定在IBUF0中是否存在打开的按序项目(步骤714)。如果在步骤714IBUF0没有满,则操作返回到步骤708。
如果在步骤714IBUF0为满,则指令解码单元提取指令到IBUF1(步骤716)。此时,在IBUF0中的指令旧于在IBUF1中的指令。当指令解码单元在IBUF0为满后提取第一指令到IBUF1时,与IBUF1相关联的控制电路将提取到IBUF1中的第一指令的first_bit设置为1(步骤718)。设置第一指令的first_bit为1被执行,以指示该指令和在IBUF1中的任何更新的指令必须等待直到IBUF0已经分派其所有指令给执行单元。一旦分派在IBUF1中的第一指令,first_bit就随该指令被分派给执行单元消失。接着IFU确定在IBUF1中是否存在打开的按序项目(步骤720)。如果在步骤720IBUF1没有满,则操作返回到步骤716。如果在步骤720IBUF1为满,则操作返回到步骤714。即,当因为IBUF0正通过由IDU正分派到执行单元的指令而被排出、所以IBUF1为满而IBUF0没有满时,指令解码单元然后提取指令到IBUF0,并且在IBUF0内的控制电路利用第一指令设置first_bit,并且在IBUF0中的指令将必须等待直到在IBUF1中的所有指令已经分派。
在从步骤712执行的第二操作中,IDU确定是否所有指令已经按序从IBUF0分派(步骤722)。如果从步骤722还没有分派IBUF0中的所有指令,则IDU继续从IBUF0分派指令(步骤724),操作随后返回到步骤722。当由IDU从IBUF0分派的指令由执行单元执行时,执行单元将指令执行的结果写入通用寄存器(GPR)的GPR0项目。如果在步骤722,从IBUF0已经分派所有指令,则处理器等待直到来自IBUF0的所有指令已经执行并且GPR0项目被更新(步骤726)。接着处理器通过在一个周期内声明copy_unconditional信号,复制GPR0项目的内容到GPR1项目,如相对于图3的copy_unconditional信号304所述(步骤728)。一旦复制完成,IDU就开始从IBUF1分派指令到执行单元(步骤730)。执行单元接着将指令执行的结果写入到GPR的GPR1项目。当更新的结果被写回到GPR1项目时,处理器利用字段(如write_back_register_transfer(RT)字段等)在GPR中设置select_mask寄存器(如图3所示的select_mask寄存器310)的相对应的select_mask位,以声明相对应的set_mask信号(如图3的set_mask信号316)(步骤732)。关于set_mask信号之一的声明接着由处理器应用在设置select_mask寄存器中的相对应位为激活状态中。
接着,IDU确定是否所有指令已经按序从IBUF1分派(步骤734)。如果在步骤734还没有分派IBUF1中的所有指令,则操作返回到步骤730,在此IDU继续从IBUF1分派指令的情况。如果在步骤734,已经从IBUF1分派所有指令时,则处理器等待直到来自IBUF1的所有指令已经执行并且GPR1项目被更新(步骤736)。接着处理器利用声明的select_mask寄存器中的一些位,将由指令执行更新的GPR1项目的内容从IBUF1复制到GPR0项目(步骤738)。处理器通过激活copy_using_mask信号将更新的内容从GPR1项目复制GPR0项目。当处理器声明copy_using_mask信号时,处理器将已经具有所声明的相对应的select_mask寄存器位的所有GPR1项目复制到相对应的GPR0项目。因此,GPR0项目现在包含由来自IBUF1的指令执行的全部最近更新。一旦GPR1项目的内容已经复制到GPR0项目,处理器就声明clear_mask信号,以清除在select_mask寄存器中的所有位(步骤740)。
接着IDU开始从IBUF0分派指令到执行单元(步骤742)。执行单元将指令执行的结果写入GPR的GPR0项目。当更新的结果被写回到GPR0项目时,处理器如上所述设置select_mask寄存器的相对应的select_mask位(步骤744)。 接着,IDU确定是否所有指令已经按序从IBUF0被分派(步骤746)。如果在步骤746还没有分派IBUF0中的所有指令,则操作返回到步骤742,在此IDU继续从IBUF0分派指令。如果在步骤746所有指令从IBUF0已经分派,则处理器等待直到来自IBUF0的所有指令已经执行并且GPR0项目被更新(步骤748)。接着,处理器利用在select_mask寄存器中声明的一些位,将通过指令的执行更新的GPR0项目的内容从IBUF0复制到GPR1项目(步骤750)。处理器通过激活copy_using_mask信号将更新的内容从GPR0复制到GPR1项目。当处理器声明copy_using_mask信号时,处理器将已经具有所声明的相对应的select_mask寄存器位的所有GPR0项目复制到相对应的GPR1项目。因此,GPR1项目现在包含由来自IBUF0的指令执行的全部最近更新。一旦GPR1项目的内容已经复制到GPR0项目,处理器就声明clear_mask信号以清除在select_mask寄存器中的所有位(步骤752)。
一旦已经将GPR0项目的内容复制到GPR1项目,则IDU开始将来自IBUF1的指令分派给执行单元(步骤754)。执行单元接着将指令执行的结果写入到GPR的GPR1项目。当更新的结果被写回到GPR1项目时,处理器如上所述设置select_mask寄存器的相对应的select_mask位(步骤756)。接着,IDU确定是否所有指令已经按序从IBUF1分派(步骤758)。如果在步骤758还没有分派IBUF1中的所有指令,则操作返回到步骤754,在此IDU继续从IBUF1分派指令。如果在步骤758已经从IBUF1分派所有指令时,则操作返回到步骤736。
因此,说明性实施例提供了增强处理单元中的独立加载的执行。说明性实施例按序从第一缓冲器分派第一组指令用于执行。更新从第一组指令的执行接收,并且在第一寄存器中,与在第一组指令中的每个指令相关联的至少一个寄存器项目被用更新的结果更新。说明性实施例确定是否来自第一缓冲器的第一组指令已经完成执行,并且响应于来自第一缓冲器的第一组指令的完成执行,将来自第一寄存器的该组项目复制到第二寄存器。
要理解到,说明性实施例可以采用全部硬件实施例、全部软件实施例或包含硬件和软件元素的实施例的形式。在一个示范性实施例中,说明性实施例的机制以软件实现,该软件包括但不限于固件、驻留软件、微代码等。
而且,说明性实施例可以采用可从计算机可用或计算机可读介质访问的计算机程序产品的形式,该计算机可用或计算机可读介质提供由或者结合计 算机或者任何指令执行系统使用的程序代码。出于描述的目的,计算机可用或计算机可读介质可以是包含、存储、通信、传播或传输用于由或者结合指令执行系统、装置或设备等使用的程序的任何装置。
该介质可以是电子的、磁的、光学的、电磁的、红外的或者半导体系统(或者装置或者设备)或者传播介质。计算机可读介质的示例包括半导体或者固态存储器、磁带、可移除计算机盘、随机访问存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的目前示例包括致密盘-只读存储器(CD-ROM)、致密盘-读/写(CD-R/W)和DVD。
适合于存储和/或执行程序代码的数据处理系统将包括通过系统总线直接或间接耦合到存储器元件的至少一个处理器。该存储器元件可以包括在程序代码的实际执行期间采用的本地存储器、海量存储和高速缓冲存储器,该高速缓冲存储器提供至少一些程序代码的暂时存储,以便减少在执行期间代码必须从海量存储检索的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指示设备等)可以直接或通过中介的I/O控制器耦合到所述系统。网络适配器还可以通过中介的私有或公共网络耦合到系统,以使得所述数据处理系统能够与其它数据处理系统或远程打印机或存储设备耦合。调制解调器、线缆调制解调器和以太网卡仅是目前可用的几种类型的网络适配器。
出于解释和说明的目的已经呈现本发明的描述,并且不旨在穷举或者限制本发明于所公开的形式。许多修改和变化对于本领域普通技术人员是显然的。实施例被选择和描述以便最好地理解本发明的精神、实际应用,并且使得本领域普通技术人员能够对于具有适于预期的特定使用的各种修改的各种实施例理解本发明。

Claims (14)

1.一种在数据处理系统中用于增强处理单元中的独立加载的执行的方法,所述方法包括:
检测是否已经遇到与加载指令相关联的长延迟丢失;
响应于遇到长延迟丢失,在处理单元中进入负载前瞻模式;
响应于进入负载前瞻模式,用相关联的矢量从第一缓冲器分派来自第一组指令的每个指令,其中相关联的矢量在第一矢量阵列中的一组矢量中;
确定来自第一缓冲器的第一组指令是否已经完成执行;
响应于来自第一缓冲器的第一组指令的完成执行,将来自第一矢量阵列的一组矢量复制到第二矢量阵列;以及
用来自第二矢量阵列的相关联的矢量从第二缓冲器分派第二组指令。
2.如权利要求1所述的方法,其中第一缓冲器和第一矢量阵列与第一线程相关联,其中第二缓冲器和第二矢量阵列与第二线程相关联,并且其中第一组指令和第二组指令与第一线程相关联。
3.如权利要求1所述的方法,还包括:
接收从第一组指令的执行得到的一组被更新的结果;
更新与第一组指令中的每个指令相关联的、第一寄存器中的一组项目内的寄存器项目;
响应于来自第一缓冲器的第一组指令的完成执行,将来自第一寄存器的该组项目复制到第二寄存器;以及
更新与第二组指令中的每个被执行的指令相关联的、第二寄存器中的该组项目内的寄存器项目。
4.如权利要求3所述的方法,其中来自第一寄存器的一组项目利用copy_unconditional信号被复制到第二寄存器。
5.如权利要求1所述的方法,还包括:
响应于进入负载前瞻模式,按序继续提取指令到第一缓冲器中直到第一缓冲器为满;
响应于填充第一缓冲器,按序继续提取指令到第二缓冲器中直到第二缓冲器为满;以及
响应于填充第二缓冲器,停止继续提取指令。
6.如权利要求1所述的方法,其中处理单元在单线程模式操作,并且其中处理单元执行单线程模式包括:
确定是否模式位被设置指示启动单线程模式;
响应于模式位被设置,启动单线程模式;
清除第一缓冲器、第二缓冲器、第一矢量阵列、第二矢量阵列的内容;以及
提取指令到第一缓冲器中。
7.如权利要求1所述的方法,还包括:
确定是否负载前瞻模式已经退出;以及
响应于负载前瞻模式的退出,丢弃第二缓冲器、第一矢量阵列、第二矢量阵列和第二寄存器的内容。
8.一种在数据处理系统中用于增强处理单元中的独立加载的执行的装置,包括:
检测模块,用于检测是否已经遇到与加载指令相关联的长延迟丢失;
进入负载前瞻模式模块,用于响应于遇到长延迟丢失,在处理单元中进入负载前瞻模式;
第一分派模块,用于响应于进入负载前瞻模式,用相关联的矢量从第一缓冲器分派来自第一组指令的每个指令,其中相关联的矢量在第一矢量阵列中的一组矢量中;
第一确定模块,用于确定来自第一缓冲器的第一组指令是否已经完成执行;
第一复制模块,用于响应于来自第一缓冲器的第一组指令的完成执行,将来自第一矢量阵列的该组矢量复制到第二矢量阵列;以及
第二分派模块,用于用来自第二矢量阵列的相关联的矢量从第二缓冲器分派第二组指令。
9.如权利要求8所述的装置,其中第一缓冲器和第一矢量阵列与第一线程相关联,其中第二缓冲器和第二矢量阵列与第二线程相关联,并且其中第一组和第二组指令与第一线程相关联。
10.如权利要求8所述的装置,还包括:
接收模块,用于接收从第一组指令的执行得到的一组被更新的结果;
第一更新模块,用于更新与第一组指令中的每个指令相关联的、第一寄存器中的一组项目内的寄存器项目;
第二复制模块,用于响应于来自第一缓冲器的第一组指令的完成执行,将来自第一寄存器中的该组项目复制到第二寄存器;以及
第二更新模块,用于更新与第二组指令中的每个被执行的指令相关联的、第二寄存器中的该组项目内的寄存器项目。
11.如权利要求10所述的装置,其中来自第一寄存器的一组项目利用copy_unconditional信号被复制到第二寄存器。
12.如权利要求8所述的装置,还包括:
第一提取模块,用于响应于进入负载前瞻模式,按序继续提取指令到第一缓冲器中直到第一缓冲器为满;
第二提取模块,用于响应于填充第一缓冲器,按序继续提取指令到第二缓冲器中直到第二缓冲器为满;以及
停止提取模块,用于响应于填充第二缓冲器,停止继续提取指令。
13.如权利要求8所述的装置,其中所述装置在单线程模式操作,并且所述装置还包括:
第二确定模块,用于确定是否模式位被设置指示启动单线程模式;
启动模块,用于响应于模式位被设置,启动单线程模式;
清除模块,用于清除第一缓冲器、第二缓冲器、第一矢量阵列、第二矢量阵列的内容;以及
第三提取模块,用于提取指令到第一缓冲器中。
14.如权利要求8所述的装置,还包括:
第三确定模块,用于确定是否负载前瞻模式已经退出;以及
丢弃模块,用于响应于负载前瞻模式的退出,丢弃第二缓冲器、第一矢量阵列、第二矢量阵列和第二寄存器的内容。
CN2008101259893A 2007-06-15 2008-06-16 用于增强处理单元中的独立加载的执行的方法和系统 Expired - Fee Related CN101324840B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/763,760 2007-06-15
US11/763,760 US8145887B2 (en) 2007-06-15 2007-06-15 Enhanced load lookahead prefetch in single threaded mode for a simultaneous multithreaded microprocessor

Publications (2)

Publication Number Publication Date
CN101324840A CN101324840A (zh) 2008-12-17
CN101324840B true CN101324840B (zh) 2011-09-21

Family

ID=40133444

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101259893A Expired - Fee Related CN101324840B (zh) 2007-06-15 2008-06-16 用于增强处理单元中的独立加载的执行的方法和系统

Country Status (2)

Country Link
US (1) US8145887B2 (zh)
CN (1) CN101324840B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8443168B2 (en) * 2007-08-17 2013-05-14 O2Micro Inc. Microcontroller comprising a plurality of registers and instruction modes
US20090303990A1 (en) * 2008-06-06 2009-12-10 Emulex Design & Manufacturing Corporation Off-Chip Interface for External Routing
US8918626B2 (en) 2011-11-10 2014-12-23 Oracle International Corporation Prefetching load data in lookahead mode and invalidating architectural registers instead of writing results for retiring instructions
US20140082333A1 (en) * 2011-12-22 2014-03-20 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing an absolute difference calculation between corresponding packed data elements of two vector registers
US9870340B2 (en) 2015-03-30 2018-01-16 International Business Machines Corporation Multithreading in vector processors
CN106650923B (zh) * 2015-10-08 2019-04-09 上海兆芯集成电路有限公司 具有神经存储器与神经处理单元与定序器的神经网络单元
US10552152B2 (en) * 2016-05-27 2020-02-04 Arm Limited Method and apparatus for scheduling in a non-uniform compute device
US10579499B2 (en) * 2017-04-04 2020-03-03 International Business Machines Corporation Task latency debugging in symmetric multiprocessing computer systems
CN107172181B (zh) * 2017-06-07 2020-12-04 河南辉煌城轨科技有限公司 一种基于双线程的文件传输方法
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
DE112018004006B4 (de) * 2017-10-06 2021-03-25 International Business Machines Corporation Verarbeiten von synonymen von effektiven adressen in einer lade-speicher-einheit, die ohne adressumsetzung arbeitet
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10394558B2 (en) 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US20230315460A1 (en) * 2022-04-02 2023-10-05 Intel Corporation Synchronous microthreading

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4521850A (en) * 1977-12-30 1985-06-04 Honeywell Information Systems Inc. Instruction buffer associated with a cache memory unit
US5093778A (en) * 1990-02-26 1992-03-03 Nexgen Microsystems Integrated single structure branch prediction cache
JP3345787B2 (ja) * 1993-04-13 2002-11-18 三菱電機株式会社 データ処理装置
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
US6604191B1 (en) * 2000-02-04 2003-08-05 International Business Machines Corporation Method and apparatus for accelerating instruction fetching for a processor
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US7421567B2 (en) 2004-12-17 2008-09-02 International Business Machines Corporation Using a modified value GPR to enhance lookahead prefetch
US7444498B2 (en) 2004-12-17 2008-10-28 International Business Machines Corporation Load lookahead prefetch for microprocessors
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US20070113056A1 (en) * 2005-11-15 2007-05-17 Dale Jason N Apparatus and method for using multiple thread contexts to improve single thread performance

Also Published As

Publication number Publication date
US8145887B2 (en) 2012-03-27
US20080313425A1 (en) 2008-12-18
CN101324840A (zh) 2008-12-17

Similar Documents

Publication Publication Date Title
CN101324840B (zh) 用于增强处理单元中的独立加载的执行的方法和系统
US10061588B2 (en) Tracking operand liveness information in a computer system and performing function based on the liveness information
US5961636A (en) Checkpoint table for selective instruction flushing in a speculative execution unit
US6857064B2 (en) Method and apparatus for processing events in a multithreaded processor
EP0751458B1 (en) Method and system for tracking resource allocation within a processor
US5630149A (en) Pipelined processor with register renaming hardware to accommodate multiple size registers
US5887161A (en) Issuing instructions in a processor supporting out-of-order execution
US8769539B2 (en) Scheduling scheme for load/store operations
US9311084B2 (en) RDA checkpoint optimization
CN100449499C (zh) 在微处理器恢复单元中进行写队列读数据的方法和装置
US20110238962A1 (en) Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors
US5913048A (en) Dispatching instructions in a processor supporting out-of-order execution
US7093106B2 (en) Register rename array with individual thread bits set upon allocation and cleared upon instruction completion
US20070043934A1 (en) Early misprediction recovery through periodic checkpoints
US7603543B2 (en) Method, apparatus and program product for enhancing performance of an in-order processor with long stalls
CN106170768B (zh) 在计算机中分派多个线程
CN101601009A (zh) 用于被错误预测分支的分段管线冲洗
US6073231A (en) Pipelined processor with microcontrol of register translation hardware
US20140047216A1 (en) Scalable Decode-Time Instruction Sequence Optimization of Dependent Instructions
JP3142813B2 (ja) レジスタの名前変更を管理するための情報処理システムおよび方法
JP2003523574A (ja) 2次リオーダ・バッファ・マイクロプロセッサ
CN114675882A (zh) 用于可缩放预留站的方法、系统和装置
US8082423B2 (en) Generating a flush vector from a first execution unit directly to every other execution unit of a plurality of execution units in order to block all register updates
US6134645A (en) Instruction completion logic distributed among execution units for improving completion efficiency
CN102163139A (zh) 微处理器融合载入算术/逻辑运算及跳跃宏指令

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110921