CN114514505A - 退役队列压缩 - Google Patents
退役队列压缩 Download PDFInfo
- Publication number
- CN114514505A CN114514505A CN202080067118.XA CN202080067118A CN114514505A CN 114514505 A CN114514505 A CN 114514505A CN 202080067118 A CN202080067118 A CN 202080067118A CN 114514505 A CN114514505 A CN 114514505A
- Authority
- CN
- China
- Prior art keywords
- instruction operation
- instruction
- entry
- processor
- retired
- 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.)
- Pending
Links
- 230000006835 compression Effects 0.000 title abstract description 7
- 238000007906 compression Methods 0.000 title abstract description 7
- 238000000034 method Methods 0.000 claims abstract description 37
- 230000015654 memory Effects 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 7
- 230000000779 depleting effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
公开了用于将多个指令操作一起压缩到单个退役队列条目中的系统、装置和方法。处理器至少包括调度器、退役队列、一个或多个执行单元和控制逻辑。当控制逻辑检测到给定指令操作被调度器分派给执行单元时,控制逻辑确定给定指令操作是否满足与一个或多个其他指令操作压缩到单个退役队列条目中的一个或多个条件。如果满足所述一个或多个条件,则两个或更多个指令操作一起存储在单个退役队列条目中。通过将多个指令操作一起压缩到单独的退役队列条目中,能够更有效地使用退役队列,并且处理器可以推测性地执行更多指令,而不会让退役队列耗尽其可用条目的供应。
Description
背景技术
相关技术的描述
处理器流水线包括对正执行的指令进行操作的许多不同的单元。这些单元包括解码单元、调度器单元、拣选器和执行单元。解码单元将提取的指令解码为指令操作。指令操作在本文中又被称为“操作”或“op”。一般而言,op是执行单元中包括的硬件能够执行的操作。在各种实现方式中,每个指令转换为一个或多个操作,该一个或多个操作在被执行时导致执行根据指令集架构针对该指令定义的操作。
无序处理器需要分派的操作的有序队列,以在操作退役时按顺序更新架构状态。该有序队列在本文中被称为“退役队列”。此外,如本文所使,术语“退役”定义为利用操作的结果来更新处理器的架构状态,同时也释放为该操作分配的临时存储位置。在一些处理器中,复杂指令在分派到执行单元时分解成一个或多个操作,以便限制调度器、算术逻辑和地址生成单元的复杂性。例如,在x86指令集架构(ISA)中,许多指令都支持加载-执行-存储形式。加载-执行-存储形式包括从存储器加载值,对该值执行操作,并且然后将结果写回存储器。这可以作为多达三个操作(诸如加载、算术操作和存储)分派给调度单元。通常,每个分派的操作都会消耗退役队列条目。因此,单个指令可能会消耗多个退役队列条目。这意味着退役队列中可用条目的供应可能很快耗尽。当发生该情况时,处理器将停滞,直到有更多的退役队列条目变得可用。退役队列中的条目的可用性限制了推测处理器可以在多大程度上操作,这影响处理器的性能(例如,每周期指令(IPC))。
附图说明
通过结合附图参照以下描述,可更好地理解本文描述的方法和机制的优点,在附图中:
图1是计算系统的一个实现方式的框图。
图2是处理器流水线的一个实现方式的框图。
图3示出了根据一个实现方式的用于确定op是否可以压缩到退役队列条目中的表。
图4示出了根据一个实现方式的用于追踪op到退役队列条目中的潜在压缩性的表的另一个示例。
图5是保留站的一个实现方式的框图。
图6是示出用于将指令操作压缩到退役队列条目中的方法的一个实现方式的一般化流程图。
图7是示出用于将中间数据存储在保留站中的方法的一个实现方式的一般化流程图。
图8是示出用于在多个指令操作间共享保留站条目的方法的一个实现方式的一般化流程图。
图9是示出用于减少指令操作使用的物理寄存器的数量以便提高退役队列条目的压缩性的方法的一个实现方式的一般化流程图。
图10是示出用于广播来自执行单元的结果数据的方法的一个实现方式的一般化流程图。
具体实施方式
在以下描述中,阐述了众多具体细节以提供对本文呈现的方法和机制的透彻理解。然而,本领域普通技术人员应认识到,可在没有这些具体细节的情况下实践各种实现方式。在一些情况下,并未详细示出众所周知的结构、部件、信号、计算机程序指令和技术,以避免混淆本文所述的方法。应了解,为了说明的简洁性和清晰性,附图中所示出的元件不一定按比例绘制。例如,一些元件的尺寸可能相对于其他元件被放大。
本文中公开了用于压缩退役队列条目的各种系统、装置和方法。一种系统包括耦接到一个或多个存储器的一个或多个处理器。每个处理器至少包括调度器、退役队列、一个或多个执行单元和控制逻辑。由于减少指令消耗的退役队列条目的数量将有利于处理器性能,因此控制逻辑试图将多个指令操作一起压缩到单个退役队列条目中。因此,在一个实现方式中,当控制逻辑检测到给定指令操作被调度器分派给执行单元时,控制逻辑确定第一指令操作是否满足与一个或多个其他指令操作压缩到单个退役队列条目中的一个或多个条件。压缩指令操作的一个或多个条件可以包括指令操作一起被分派、指令操作不超过单个退役队列条目中的可用字段、指令操作能够一起退役、重定向操作不可能存在于指令操作之间和/或其他条件。如果满足这些条件,则两个或更多个指令操作一起存储在单个退役队列条目中。通过将多个指令操作一起压缩到单独的退役队列条目中,能够更有效地使用退役队列,并且处理器可以推测性地执行更多指令,而不会让退役队列耗尽其可用条目的供应。
现在参照图1,示出了计算系统100的一个实现方式的框图。在一个实现方式中,计算系统100至少包括处理器105A-105N、输入/输出(I/O)接口120、总线125、存储器控制器130、网络接口135和存储器设备140。在其他实现方式中,计算系统100包括其他部件,和/或计算系统100不同地布置。处理器105A-105N表示系统100中包括的任意数量的处理器。
在一个实现方式中,处理器105A是通用处理器,诸如中央处理单元(CPU)。在一个实现方式中,处理器105N是具有高度并行架构的数据并行处理器。数据并行处理器包括图形处理单元(GPU)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)等等。在一些实现方式中,处理器105A-105N包括多个数据并行处理器。
存储器控制器130表示可由耦接到I/O接口120的处理器105A-105N和I/O设备(未示出)访问的任何数目和类型的存储器控制器。存储器控制器130耦接到任何数量和类型的存储器设备140。存储器设备140表示任何数量和类型的存储器设备。例如,存储器设备140中的存储器的类型包括动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、NAND闪存存储器、NOR闪存存储器、铁电随机存取存储器(FeRAM)等。
I/O接口120表示任何数量和类型的I/O接口(例如,外围部件互连(PCI)总线、PCI扩展(PCI-X)、PCIE(PCI Express)总线、吉比特以太网(GBE)总线、通用串行总线(USB))。各种类型的外围设备(未示出)耦接到I/O接口120。此类外围设备包括(但不限于)显示器、键盘、鼠标、打印机、扫描仪、操纵杆或其他类型的游戏控制器、媒体记录设备、外部存储设备、网络接口卡等。网络接口135用于跨网络接收和发送网络消息。
在各种实现方式中,计算系统100是计算机、膝上型计算机、移动设备、游戏机、服务器、流式传输设备、可穿戴设备或各种其他类型的计算系统或设备中的任一种。应注意,计算系统100的部件的数量因实现方式而不同。例如,在其他实现方式中,存在与图1所示的数量相比更多或更少的每种部件。还应注意,在其他实现方式中,计算系统100包括图1中未示出的其他部件。另外,在其他实现方式中,计算系统100以与图1中所示不同的其他方式进行结构化。
现在转向图2,示出了处理器流水线200的一个实现方式的框图。在各种实现方式中,(图1的)处理器105A-105N包括处理器流水线200的一个或多个实例化。在一个实现方式中,处理器流水线200至少包括提取单元210、解码单元215、分派单元220、保留站225、执行单元235A-235N和退役单元240。应理解,处理器流水线200还包括为避免混淆附图而未示出的其他部件(例如,分支预测单元、指令高速缓存)。在其他实现方式中,处理器流水线200以其他合适的方式进行结构化。
在一个实现方式中,提取单元210从存储器和/或指令高速缓存提取程序流的指令,并且提取单元210将提取的指令传送给指令解码单元215。指令解码单元215将每个指令解码为一个或多个指令操作(或简称为op)。应注意,op又被称为微op或μop。一般而言,指令操作是执行单元230A-230N中包括的硬件能够执行的操作。在各种实现方式中,每个指令转换为一个或多个op,所述一个或多个op在被执行时导致执行根据指令集架构对所述指令定义的操作。处理器流水线200采用任何类型的指令集架构。
将来自指令解码单元215的op提供给分派单元220,并且分派单元将op分配给队列230A-230N。应注意,队列230A-230N也可以被称为保留站225,其中每个队列被称为保留站。还应注意,保留站225也可被称为“调度器”或“调度器单元”。如处理器流水线200所示,每个队列230A-230N耦接到对应的执行单元235A-235N。然而,在其他实现方式中,一个或多个队列230A-230N可耦接到多个执行单元235A-235N。
在一个实现方式中,分派单元220包括寄存器重命名单元222,其用于将架构寄存器指示符映射到涉及物理寄存器文件(PRF)255中的实际物理寄存器的物理寄存器指示符。在另一个实现方式中,寄存器重命名单元222为来自分派单元220的单独结构。无序微处理器使用寄存器重命名来抽取并行性并提高性能。一旦硬件分配了对应PRF 255中的位置的所有可用物理寄存器号(PRN),指令解码流水线就会停滞,直到PRF 255中的物理寄存器重新可用。在一个实现方式中,为了防止指令解码流水线停滞,在op序列中生成的中间数据直接存储在相关op的保留站中,而无需使用PRF 255。在许多情况下,仅一个相关op需要该中间数据。通过允许无序窗口在物理寄存器耗尽之前跨越更多指令,更有效地使用PRF 255使处理器性能提高。这也允许有更多的机会将多个op压缩到退役队列250中的单个条目中,这将在下面更详细讨论。
例如,当执行具有加载-执行形式的x86指令时,第一操作数来自寄存器,但是第二操作数必须首先从存储器中加载,然后算术逻辑单元(ALU)才可以执行该指令。在该情况下,指令分解为两个op:加载地址生成(AGEN)op和ALU op。在一个实现方式中,为指令分配单个保留站条目,其中该条目含有ALU寄存器操作数和AGEN操作数。在该实现方式中,从同一保留站条目发出两个op。在发出AGEN op后,AGEN操作数以加载数据盖写,使得保留站条目现在含有ALU寄存器操作数和从存储器加载的ALU操作数。针对该加载数据而广播的物理寄存器号(PRN)使用特殊标签来直接寻址适当的保留站条目,而不是对PRF条目寻址。然后,发出ALU op,而无需将中间加载数据写回PRF 255。将中间数据存储在保留站225中可应用于衍生自单个指令或融合在一起的多个指令的微op序列,以便利用该机制。
当解析了依赖性并且op准备好执行时,拣选器(未示出)将从队列230A-230N中拣选op以在执行单元235A-235N上执行。执行单元235A-235N表示任何数量和类型的执行单元。例如,执行单元235A-235N中可以包括各种类型中的任一种,包括但不限于整数执行单元、浮点执行单元、加载/存储单元、算术逻辑单元和地址生成单元。另外,执行单元235A-235N可以包括特定类型的一个以上单元。例如,在一个实现方式中,执行单元235A-235N包括两个整数执行单元。
在分派时,将分配退役队列250中的条目,并将op写入条目中。在执行单元235A-235N执行op后,可以基于执行结果写入退役队列条目的字段中的一些。在退役队列250中维护条目,直到对应op变为非推测性,此时op将按顺序退役。分派单元220包括控制逻辑223,该控制逻辑确定两个或更多个op是否可以压缩到退役队列250的单个条目中。在一个实现方式中,如果两个或更多个op满足一个或多个条件,则将两个或更多个op压缩到退役队列250的单个条目中。取决于实现方式,条件包括:两个或更多个op被一起分派;两个或更多个op被允许在架构上一起退役;两个或更多个op的所有完成可以在单个退役队列条目中进行追踪;由两个或更多个op更新的所有架构状态都可以在单个退役队列条目中进行追踪;以及在两个或更多个op之间不可能发生程序重定向。如果两个或更多个op不满足要求的条件,则每个op都存储在退役队列250的单独条目中。
一旦op的结果变为非推测性,该op的结果就用于更新处理器的架构状态,并且该op将从退役队列250中退役。当两个或更多个op被一起压缩到退役队列250中的给定条目中,并且两个或更多个op准备退役时,来自两个或更多个op的结果将同时更新处理器的架构状态。在一些情况下,处理器需要在给定条目中的第一压缩op之后但在第二压缩op之前恢复架构状态。例如,异常可以导致处理器停止对应指令的退役。在一个实现方式中,为了处理该情况,处理器刷新所有较新的运行中的op,并在不将op压缩到退役队列250中的情况下重放指令。
现在参照图3,示出了根据一个实现方式的用于确定op是否可以压缩到退役队列条目中的表300。表300包括在一个特定实现方式中的示例性程序序列中可能遇到的样本指令。在一个实现方式中,控制逻辑创建表300(或某一其他类似结构),以帮助确定是否可以将一组op一起压缩到单个退役队列条目中。另选地,控制逻辑不是创建表300或类似结构,而是包括基于表300的不同字段335-355指示的值来执行决策的电路。
表300中的第一条目用于“Add[RAX+RBX],RCX”指令。该指令被转换成两个op,其中第一op“Ld Temp,[RAX+RBX]”为加载操作,并且第二操作“Add[RAX+RBX],Temp”为相加操作。在一个实现方式中,“Temp”标识符(ID)不标识物理寄存器号。相反,“Temp”位置指定特定的保留站条目。使用“Temp”ID来指定保留站条目而不是指定物理寄存器号有助于减少物理寄存器的使用。使用“Temp”ID来指定保留站条目也为将op一起压缩到单个退役队列条目中创造更多的机会。
表300中的字段335-350用于指示架构状态的哪些部分将由每个op更新。架构状态的这些部分对应于退役队列条目的将由op占用的不同字段。图的顶部示出了根据一个实现方式的退役队列条目的示例性字段305-330。例如,在一个实现方式中,退役队列条目的字段包括目的地架构寄存器号(Arn)字段305、目的地物理寄存器号(Prn)字段310、目的地标志字段315、目的地自由标志寄存器号(Frn)字段320、算术逻辑单元(ALU)完成字段325和加载/存储完成字段330。在其他实现方式中,退役队列条目可以具有其他类型的字段。例如,在一些实现方式中,退役队列条目可以包括一个或多个任选字段332,以允许将更多op压缩到单个退役队列条目中。
对于表300中用于第一指令的op#0的条目,算术逻辑单元(ALU)完成(comp)字段345被设置为指示op#0需要使用退役队列条目的ALU完成字段325。退役队列条目#0的其他字段不会由op#0使用。对于表300中用于第一指令的op#1的条目,目的地Arn/Prn字段335被设置为指示将使用退役队列条目的目的地Arn字段305和目的地Prn字段310。此外,目的地标志/Frn字段340被设置为指示将使用退役队列条目的目的地标志字段315和目的地Frn字段320。因为对于op#0和op#1在其表300的条目中,字段335-350中没有重叠,所以这两个操作可以共享单个退役队列条目(条目#0)。这在表300的第一条目中通过在退役队列压缩性“RetQ压缩?”字段355中输入“是”来进行指示。一般来讲,如果连续操作占用的退役队列条目字段中没有重叠,则可以将这些操作压缩到单个退役队列条目中。然而,其他因素可以阻止两个没有重叠的连续操作一起压缩到单个退役队列条目中。阻止连续op的压缩的另一个因素的示例将与下一个指令一起示出。
表300中示出的下一个指令为“JNZ 0x04”指令。该指令被标记为指令#1,而op被标记为op#2。“JNZ 0x04”指令仅映射到单个操作。该操作不能与任何后续操作一起压缩到下一个退役队列条目中,因为这将违反分支必须为退役队列条目中的最后一个操作的规则。因此,“JNZ 0x04”操作没有与任何其他操作一起压缩,因此“JNZ 0x04”操作有自己的退役队列条目(条目#1),如字段360所指示。
被标记为指令#2的下一个指令为“MOV R08,[R04]”指令。该指令映射到单个op,其被标记为op#3。在表300的对应条目中为该op设置了目的地Arn/Prn字段335,同时也为该op设置了加载/存储完成字段350。被标记为指令#4的后续指令为“CMP RAX,RBX”指令。该指令解码为单个op,其被标记为op#4。在表300的对应条目中为该op设置了目的地标志/Frn字段340,且也为该op设置了ALU完成字段345。因为对于op#3和op#4,表300中的条目之间没有重叠,并且因为op#3和op#4满足压缩到单个退役队列条目中的其他标准,所以针对表300中的用于op#3的条目,设置了退役队列压缩性字段355。因此,如字段355所指示,op#3和op#4一起压缩到退役队列条目#2中。应注意,可以使用表300中的字段以类似的方式来分析衍生自其他指令的op,以确定是否可以将相邻的op一起压缩到单个退役队列条目中。
现在转向图4,示出了根据一个实现方式的用于追踪op到退役队列条目中的潜在压缩性的表400的另一个示例。表400的示例旨在示出尝试将整数和/或浮点op压缩到单个合并的退役队列条目中的实现方式。表400中列出的第一指令#0为“MOV[RBX],RCX”指令,其具有单个op#0。针对op#0设置了加载/存储完成字段460,并且退役队列压缩性字段470被设置为“否”以指示op#0不可以与其他操作压缩。因此,op#0将自身存储在退役队列条目#0中,如字段475所指示。
表400中列出的下一个指令#1为“VMOVAPD YMM0,[RAX]”指令,其映射到单个op#1。针对op#1设置了浮点目的地Arn/Prn字段445,加载/存储完成字段460和浮点完成字段465也是如此。针对op#1,退役队列压缩性字段470被设置为“是”以指示op#1可以与op#2压缩到同一退役队列条目(条目#1)中。表400中列出的下一个指令#2为“JNZ 0x04”指令。在表400的对应条目中,针对op#2设置的唯一字段为ALU完成字段455。尽管op#2为分支操作,但op#2能够与op#1一起压缩,因为op#2将是存储在退役队列条目(条目#1)中的最后一个操作。
下一个指令“MOV R08,[R04]”映射到单个op#3。op#3的条目设置有整数目的地Arn/Prn字段435以及加载/存储完成字段460。op#3的条目的字段470指示操作#3可与op#4压缩到单个退役队列条目(条目#2)中。op#4衍生自指令#4,其为“ADDPD XMM0,XMM1”指令,如表400的最后一个条目所示。Op#4设置有浮点目的地Arn/Prn字段445、设置有浮点目的地标志/Frn字段450以及设置有浮点完成字段465。
图4的顶部示出了具有字段402-422的退役队列条目的示例。在该示例中,整数目的地架构寄存器号(Arn)字段402和整数目的地物理寄存器号(Prn)字段404对应表400的字段435。类似地,条目的整数目的地标志字段406和整数目的地Frn字段408对应表400的字段440,条目的浮点目的地Arn字段410和浮点目的地Prn字段412对应表400的字段445,条目的浮点目的地标志字段414和浮点目的地Frn字段416对应表400的字段450,并且ALU完成字段418、加载/存储完成字段420和浮点完成字段422分别对应表400中的字段455、460和465。在其他实现方式中,退役队列条目可以具有其他数量和/或类型的字段。在这些实现方式中,表400将具有对应这些其他类型的字段的附加字段。
现在参照图5,示出了保留站505的一个实现方式的框图。在一个实现方式中,保留站505包括队列510和控制逻辑515。队列510包括存储,该存储用于从分派单元(未示出)分派的op的任意数量的条目,存储容量根据实现方式而不同。根据一个实现方式示出了条目520的一个示例。在其他实现方式中,队列510可以支持具有其他类型的字段的其他类型的条目。
如队列510所示,条目520包括操作码字段520A、标签字段520B、第一操作数字段520C、第二操作数字段520D、第三操作数字段520E、中间指示符字段520F以及任意数量的其他字段。在一个实现方式中,条目520能够存储分派单元发出的多个op的操作码和标签。例如,对于加载-执行形式的指令,两个op共享单个条目520,其中两个op都自该单个条目520发出。在该示例中,在ALU寄存器操作数存储在字段520C中并且地址生成(AGEN)操作数存储在字段520D和520E中的情况下,分配单个条目520。在发出AGEN op之后,字段520D中的AGEN操作数以加载自存储器的ALU操作数盖写。针对该加载数据而广播的物理寄存器号(PRN)使用特殊标签来直接寻址保留站505,该保留站将缓冲加载数据,而不是缓冲PRF条目。在一个实现方式中,控制逻辑515检测结果总线上的该特殊标签,并检索加载数据来盖写字段520D。因此,在发出AGEN op之后,条目520包括存储在字段520C中的ALU寄存器操作数以及存储在字段520D中、加载自存储器的ALU操作数。另外,在一个实现方式中,在发出AGEN op之后,设置中间指示符字段520F。在该实现方式中,当设置了中间指示符字段520F时,这表示共享该条目的第二op已经准备好发出。
在其他实现方式中,op的其他组合可以共享保留站505的单个条目520。例如,在另一个实现方式中,来自不同指令的两个或更多个op可以共享保留站505中的单个条目。这两个或更多个op也将从同一条目发出。通过共享保留站505中的条目并在这些共享的条目中存储中间数据,所使用的物理寄存器的数量减少。这允许在不耗尽可用物理寄存器的供应的情况下推测性地执行更多指令。此外,减少物理寄存器的使用为将多个op一起压缩到退役队列条目中提供了额外的机会。
现在转向图6,示出了用于将指令操作压缩到退役队列条目中的方法600的一个实现方式。出于讨论的目的,按照连续的次序示出该实现方式中的步骤和图7-图10的步骤。然而,应注意在所述方法的各种实现方式中,所描述的元件中的一个或多个同时、以不同于所示顺序的顺序执行或者完全被省略。也根据需要执行其他附加元件。本文中描述的各种系统或装置中的任一者都被配置为实现方法600。
控制逻辑接收待存储在退役队列中的第一指令操作和第二指令操作(框605)。在一个实现方式中,第一指令操作和第二指令操作衍生自单个指令。在另一个实现方式中,第一指令操作和第二指令操作衍生自单独指令。控制逻辑确定第一指令操作和第二指令操作是否满足压缩到单个退役队列条目的一个或多个条件(框610)。取决于实现方式,一个或多个条件包括:第一和第二指令操作被一起分派;第一和第二指令操作被允许在架构上一起退役;第一和第二指令操作的所有完成能够在单个退役队列条目中进行追踪;由第一和第二指令操作更新的所有架构状态都能够在单个退役队列条目中进行追踪;以及在第一和第二指令操作之间不可能发生程序重定向。在其他实现方式中,可以在框610中检查其他条件。在一些情况下,在框610中控制逻辑确定是否可以将三个或更多个指令操作一起压缩到单个退役队列条目中。
如果第一和第二指令操作满足一个或多个条件(条件框615,“是”分支),则必要时修改与第一指令操作和第二指令操作对应的字段,以适当压缩第一和第二指令操作(任选框620)。接下来,第一指令操作和第二指令操作一起压缩到单个退役队列条目中(框625)。否则,如果第一和第二指令操作不满足一个或多个条件(条件框615,“否”分支),则第一指令操作和第二指令操作存储在单独的退役队列条目中(框630)。在框625和630之后,方法600结束。应注意,在另一个实现方式中,可以使用方法600将两个以上的不同指令操作压缩到单个退役队列条目中。
现在参照图7,示出了用于在保留站中存储中间数据的方法700的一个实现方式。将给定指令解码为多个指令操作(框705)。在方法700的讨论的其余部分,假设给定指令分成两个指令操作。针对该讨论,这两个指令操作被称为第一指令操作和第二指令操作。然而,应理解,这仅仅指示一个实现方式。在其他实现方式中,给定指令可以分成两个以上的指令操作。接下来,第一指令操作分配给第一保留站条目,并且第二指令操作分配给第二保留站条目(框710)。为了该讨论的目的,还假设第一指令操作生成中间结果,将由第二指令操作对该中间结果进行操作。在另一个实现方式中,第一和第二指令操作存储在单个保留站条目中。
当执行第一指令操作时,第一指令操作的中间结果临时存储在第二保留站条目中,而不是存储在物理寄存器中(框715)。接下来,通过对存储在第二保留站条目中的中间结果进行操作来执行第二指令操作(框720)。第二指令操作的执行还可以对一个或多个其他操作数进行操作。在框720之后,方法700结束。通过将中间结果存储在第二保留站条目中,而不是使用物理寄存器,这使得物理寄存器由另一个指令操作使用。这也有助于防止处理器流水线分配所有可用的物理寄存器号的情况。当处理器流水线耗尽物理寄存器的资源时,处理器流水线将停滞,直到有更多的物理寄存器可用。方法700有助于防止该情况的发生。应注意,在其他实现方式中,可以在保留站条目中存储一个以上的中间结果。此外,在其他实现方式中,如果有使用中间结果的多个相关指令操作,则可以将一个中间结果写入多个保留站条目。
现在转向图8,示出了用于在多个指令操作之间共享保留站条目的方法800的一个实施方案。将指令解码为两个指令操作(框805)。在其他实现方式中,将指令解码为三个或更多个指令操作。分派单元分派两个指令操作以存储在单个保留站条目中(框810)。多个操作数存储在两个指令操作的共享保留站条目中(框815)。在第一指令操作发出到执行单元之后,共享保留站条目中的一个或多个操作数由来自第一指令操作的第一结果数据盖写(框820)。然后,向执行单元发出第二指令操作,以对存储在共享保留条目中的第一结果数据进行操作(框825)。在执行第二指令操作之后,来自第二指令操作的第二结果数据写入一个或多个物理寄存器(框830)。在框830之后,方法800结束。应注意,在其他实现方式中,其他数量的指令操作可以共享单个保留站条目。另外,在一些实现方式中,这些指令操作可以来自不同指令。
现在参照图9,示出了用于减少指令操作使用的物理寄存器的数量以便提高退役队列条目的压缩性的方法900的一个实现方式。指令操作由分派单元分派到保留站(框905)。接下来,如果指令操作的中间结果数据存储在保留站条目中,而不是存储在物理寄存器中,则保留站中的控制逻辑确定该指令操作是否可以与一个或多个其他指令操作一起压缩在退役队列条目中(框910)。应注意,将指令操作压缩在退役队列条目中的能力并不是将保留站用于中间结果的先决条件。应理解,尽管框910将是否将中间结果数据存储在保留站条目中的决定描述为取决于指令操作是否可以与其他指令操作压缩在退役队列条目中,但这仅仅指示一个实现方式。在其他实现方式中,是否将中间结果数据存储在保留站条目中的决定与将指令操作压缩在退役队列条目中无关。在一些情况下,即使指令操作不可以压缩在退役队列条目中,使用保留站来存储中间数据可仍然是有益的。因此,虽然方法900将使中间结果数据存储在保留站条目中并压缩退役队列条目的决策描述为联系在一起,但这呈现为示例为一个实现方式。其他实现方式可以将是否将中间结果数据存储在保留站条目中的决策与是否压缩退役队列条目的决策分开。
如果控制逻辑确定指令操作可以压缩在退役队列条目中(条件框915,“是”分支),则指令操作的中间结果数据存储在适当的保留站条目中(框920)。在一个实现方式中,将中间结果数据存储在保留站条目中的要求是,指令操作的结果只是来自一个其他指令操作,并且由指令操作更新的任何架构状态都会由其他指令操作盖写。通过将指令操作的中间结果数据存储在保留站条目中,这允许物理寄存器由另一个指令操作使用,并减少退役队列条目中指令操作使用的字段的数量,从而增加指令操作能够与其他指令操作压缩的概率。在一个实现方式中,适当的保留站条目是与将对中间结果数据进行操作的相关指令操作相对应的条目。否则,如果控制逻辑确定指令操作不可以压缩在退役队列条目中(条件框915,“否”分支),则指令操作的中间结果数据存储在物理寄存器中(框925)。在框920和925之后,方法900结束。
现在转向图10,示出了用于对来自执行单元的结果数据进行广播的方法1000的一个实现方式。保留站向执行单元发出指令操作,其中保留站向执行单元传送标志,该标志指示结果数据应写入的位置(框1005)。接下来,执行单元执行指令操作并生成指令操作的结果数据(框1010)。如果设置了标志(条件框1015,“是”分支),则执行单元在结果总线上对特殊标签与结果数据进行广播(框1020)。响应于检测到特殊标签,耦接到结果总线的控制逻辑将结果数据转发到适当的保留站(框1025)。然后,保留站将结果数据写入适当的保留站条目(框1030)。在框1030之后,方法1000结束。
如果没有设置标志(条件框1015,“否”分支),则执行单元在结果总线上对普通标签与结果数据进行广播(框1035)。在一个实现方式中,普通标签包括物理寄存器号(PRN),其标识其中结果数据应该写入的物理寄存器。接下来,响应于检测到普通标签,耦接到结果总线的控制逻辑将结果数据写入适当的物理寄存器(框1040)。在框1040之后,方法1000结束。
在各种实现方式中,使用软件应用的程序指令来实现本文描述的方法和/或机制。例如,设想到可由通用处理器或专用处理器执行的程序指令。在各种实现方式中,此类程序指令由高级编程语言表示。在其他实现方式中,程序指令从高级编程语言编译成二进制形式、中间形式或其他形式。另选地,写入描述硬件的行为或设计的程序指令。此类程序指令由诸如C的高级编程语言表示。另选地,使用诸如Verilog的硬件设计语言(HDL)。在各种实现方式中,程序指令存储在多种非暂时性计算机可读存储介质中的任一种上。在使用期间,计算系统可访问存储介质,以将程序指令提供到计算系统以用于程序执行。一般来讲,此类计算系统至少包括一个或多个存储器和被配置为执行程序指令的一个或多个处理器。
应强调,上述实现方式仅是实现方式的非限制性示例。一旦充分了解上述公开内容,许多变型和修改将对本领域技术人员显而易见。所附权利要求意图被解释为涵盖所有此类变型和修改。
Claims (20)
1.一种处理器,所述处理器包括:
退役队列,所述退役队列被配置为存储与未退役的指令操作相对应的条目;以及
控制逻辑,所述控制逻辑被配置为:
接收待存储在所述退役队列中的第一指令操作和第二指令操作;以及
响应于确定所述第一指令操作和所述第二指令操作满足一起压缩到单个退役队列条目中的一个或多个条件,将所述第一指令操作和所述第二指令操作一起压缩到单个退役队列条目中。
2.根据权利要求1所述的处理器,其中所述一个或多个条件包括:
第一条件:允许所述第一指令操作和所述第二指令操作在架构上一起退役,以及
第二条件:由所述第一指令操作和所述第二指令操作引起的对所述处理器的架构状态的所有更新都能够在单个退役队列条目中进行追踪。
3.根据权利要求2所述的处理器,其中所述一个或多个条件还包括:第三条件:所述第一指令操作和所述第二指令操作被一起分派。
4.根据权利要求3所述的处理器,其中所述一个或多个条件还包括:第四条件:所述第一指令操作比所述第二指令操作更老。
5.根据权利要求4所述的处理器,其中所述一个或多个条件还包括:第五条件:所述第一指令操作与所述第二指令操作之间不能够发生程序重定向。
6.根据权利要求1所述的处理器,其中所述控制逻辑还被配置为响应于确定三个或更多个指令操作满足所述一个或多个条件而将所述三个或更多个指令操作存储在单个退役队列条目中。
7.根据权利要求1所述的处理器,其中所述处理器还被配置为将所述第一指令操作的中间输出存储在保留站条目中,而不是存储在物理寄存器中。
8.一种方法,所述方法包括:
接收待存储在退役队列中的第一指令操作和第二指令操作;以及
响应于确定所述第一指令操作和所述第二指令操作满足一起压缩到单个退役队列条目中的一个或多个条件,将所述第一指令操作和所述第二指令操作一起压缩到单个退役队列条目中。
9.根据权利要求8所述的方法,其中所述一个或多个条件包括:
第一条件:允许所述第一指令操作和所述第二指令操作在架构上一起退役,以及
第二条件:由所述第一指令操作和所述第二指令操作引起的对处理器架构状态的所有更新都能够在单个退役队列条目中进行追踪。
10.根据权利要求9所述的方法,其中所述一个或多个条件还包括:第三条件:所述第一指令操作和所述第二指令操作被一起分派。
11.根据权利要求10所述的方法,其中所述一个或多个条件还包括:第四条件:所述第一指令操作比所述第二指令操作更老。
12.根据权利要求11所述的方法,其中所述一个或多个条件还包括:第五条件:所述第一指令操作与所述第二指令操作之间不能够发生程序重定向。
13.根据权利要求8所述的方法,其还包括响应于确定三个或更多个指令操作满足所述一个或多个条件而将所述三个或更多个指令操作存储在单个退役队列条目中。
14.根据权利要求8所述的方法,其还包括将所述第一指令操作的中间输出存储在保留站条目中,而不是存储在物理寄存器中。
15.一种系统,所述系统包括:
存储器;以及
处理器,所述处理器耦接到所述存储器;
其中所述处理器被配置为:
接收待存储在退役队列中的第一指令操作和第二指令操作;以及
响应于确定所述第一指令操作和所述第二指令操作满足一起压缩到单个退役队列条目中的一个或多个条件,将所述第一指令操作和所述第二指令操作一起压缩到单个退役队列条目中。
16.根据权利要求15所述的系统,其中所述一个或多个条件包括:
第一条件:允许所述第一指令操作和所述第二指令操作在架构上一起退役,以及
第二条件:由所述第一指令操作和所述第二指令操作引起的对所述处理器的架构状态的所有更新都能够在单个退役队列条目中进行追踪。
17.根据权利要求16所述的系统,其中所述一个或多个条件还包括:第三条件:所述第一指令操作和所述第二指令操作被一起分派。
18.根据权利要求17所述的系统,其中所述一个或多个条件还包括:第四条件:所述第一指令操作比所述第二指令操作更老。
19.根据权利要求18所述的系统,其中所述一个或多个条件还包括:第五条件:所述第一指令操作与所述第二指令操作之间不能够发生程序重定向。
20.根据权利要求15所述的系统,其中所述处理器还被配置为将所述第一指令操作的中间输出存储在保留站条目中,而不是存储在物理寄存器中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/586,642 | 2019-09-27 | ||
US16/586,642 US11144324B2 (en) | 2019-09-27 | 2019-09-27 | Retire queue compression |
PCT/US2020/052863 WO2021062257A1 (en) | 2019-09-27 | 2020-09-25 | Retire queue compression |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114514505A true CN114514505A (zh) | 2022-05-17 |
Family
ID=72812034
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080067118.XA Pending CN114514505A (zh) | 2019-09-27 | 2020-09-25 | 退役队列压缩 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11144324B2 (zh) |
EP (1) | EP4034994B1 (zh) |
JP (1) | JP2022549493A (zh) |
KR (1) | KR20220065048A (zh) |
CN (1) | CN114514505A (zh) |
WO (1) | WO2021062257A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112540789B (zh) * | 2019-09-23 | 2024-06-18 | 阿里巴巴集团控股有限公司 | 一种指令处理装置、处理器及其处理方法 |
IT202200009998A1 (it) | 2022-05-13 | 2023-11-13 | Vimar Spa | Interruttore elettrico |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5761476A (en) * | 1993-12-30 | 1998-06-02 | Intel Corporation | Non-clocked early read for back-to-back scheduling of instructions |
US5901302A (en) * | 1995-01-25 | 1999-05-04 | Advanced Micro Devices, Inc. | Superscalar microprocessor having symmetrical, fixed issue positions each configured to execute a particular subset of instructions |
US6185672B1 (en) * | 1999-02-19 | 2001-02-06 | Advanced Micro Devices, Inc. | Method and apparatus for instruction queue compression |
US6629233B1 (en) * | 2000-02-17 | 2003-09-30 | International Business Machines Corporation | Secondary reorder buffer microprocessor |
US7398372B2 (en) * | 2002-06-25 | 2008-07-08 | Intel Corporation | Fusing load and alu operations |
JP3816845B2 (ja) * | 2002-07-05 | 2006-08-30 | 富士通株式会社 | プロセッサ及び命令制御方法 |
US6976153B1 (en) * | 2002-09-24 | 2005-12-13 | Advanced Micro Devices, Inc. | Floating point unit with try-again reservation station and method of operation |
US20040168045A1 (en) * | 2003-02-21 | 2004-08-26 | Dale Morris | Out-of-order processor executing speculative-load instructions |
US8090931B2 (en) * | 2008-09-18 | 2012-01-03 | Via Technologies, Inc. | Microprocessor with fused store address/store data microinstruction |
US8856496B2 (en) * | 2010-04-27 | 2014-10-07 | Via Technologies, Inc. | Microprocessor that fuses load-alu-store and JCC macroinstructions |
US8843729B2 (en) | 2010-04-27 | 2014-09-23 | Via Technologies, Inc. | Microprocessor that fuses MOV/ALU instructions |
US9235417B2 (en) * | 2011-12-31 | 2016-01-12 | Intel Corporation | Real time instruction tracing compression of RET instructions |
US9116817B2 (en) * | 2013-05-09 | 2015-08-25 | Apple Inc. | Pointer chasing prediction |
CN106030518B (zh) * | 2014-03-27 | 2019-03-26 | 英特尔公司 | 用于整理和退出存储的处理器、方法、系统和装置 |
US9710268B2 (en) * | 2014-04-29 | 2017-07-18 | Apple Inc. | Reducing latency for pointer chasing loads |
US20160019060A1 (en) * | 2014-07-21 | 2016-01-21 | Qualcomm Incorporated | ENFORCING LOOP-CARRIED DEPENDENCY (LCD) DURING DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA |
US10324724B2 (en) * | 2015-12-16 | 2019-06-18 | Intel Corporation | Hardware apparatuses and methods to fuse instructions |
US10417152B2 (en) * | 2016-06-03 | 2019-09-17 | International Business Machines Corporation | Operation of a multi-slice processor implementing datapath steering |
US10318294B2 (en) * | 2016-06-20 | 2019-06-11 | International Business Machines Corporation | Operation of a multi-slice processor implementing dependency accumulation instruction sequencing |
JP7032647B2 (ja) * | 2018-04-17 | 2022-03-09 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US11016773B2 (en) * | 2019-09-27 | 2021-05-25 | Intel Corporation | Processor trace extensions to facilitate real-time security monitoring |
-
2019
- 2019-09-27 US US16/586,642 patent/US11144324B2/en active Active
-
2020
- 2020-09-25 CN CN202080067118.XA patent/CN114514505A/zh active Pending
- 2020-09-25 JP JP2022519135A patent/JP2022549493A/ja active Pending
- 2020-09-25 KR KR1020227013476A patent/KR20220065048A/ko active Search and Examination
- 2020-09-25 WO PCT/US2020/052863 patent/WO2021062257A1/en active Application Filing
- 2020-09-25 EP EP20789409.8A patent/EP4034994B1/en active Active
-
2021
- 2021-10-08 US US17/497,572 patent/US20220027162A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
KR20220065048A (ko) | 2022-05-19 |
JP2022549493A (ja) | 2022-11-25 |
EP4034994A1 (en) | 2022-08-03 |
US11144324B2 (en) | 2021-10-12 |
EP4034994B1 (en) | 2024-04-10 |
US20220027162A1 (en) | 2022-01-27 |
US20210096874A1 (en) | 2021-04-01 |
WO2021062257A1 (en) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648843B (zh) | 用于改善连续的事务性存储器区的吞吐量的系统、方法和装置 | |
US7711935B2 (en) | Universal branch identifier for invalidation of speculative instructions | |
US9311084B2 (en) | RDA checkpoint optimization | |
US7793079B2 (en) | Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction | |
US20160055004A1 (en) | Method and apparatus for non-speculative fetch and execution of control-dependent blocks | |
JP2014002735A (ja) | ゼロサイクルロード | |
US8266411B2 (en) | Instruction set architecture with instruction characteristic bit indicating a result is not of architectural importance | |
WO1994016385A1 (en) | System and method for assigning tags to instructions to control instruction execution | |
US10007521B1 (en) | Banked physical register data flow architecture in out-of-order processors | |
US9652246B1 (en) | Banked physical register data flow architecture in out-of-order processors | |
US20220027162A1 (en) | Retire queue compression | |
US8683261B2 (en) | Out of order millicode control operation | |
US10474469B2 (en) | Apparatus and method for determining a recovery point from which to resume instruction execution following handling of an unexpected change in instruction flow | |
US11995445B2 (en) | Assignment of microprocessor register tags at issue time | |
US20200034149A1 (en) | Processor with multiple execution pipelines | |
US20140365749A1 (en) | Using a single table to store speculative results and architectural results | |
CN109564510B (zh) | 用于在地址生成时间分配加载和存储队列的系统和方法 | |
US11194577B2 (en) | Instruction issue according to in-order or out-of-order execution modes | |
US11314505B2 (en) | Arithmetic processing device | |
US20130046961A1 (en) | Speculative memory write in a pipelined processor | |
CN114761919A (zh) | 寄存器写入抑制 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |