CN103514009B - 零周期加载 - Google Patents

零周期加载 Download PDF

Info

Publication number
CN103514009B
CN103514009B CN201310236291.XA CN201310236291A CN103514009B CN 103514009 B CN103514009 B CN 103514009B CN 201310236291 A CN201310236291 A CN 201310236291A CN 103514009 B CN103514009 B CN 103514009B
Authority
CN
China
Prior art keywords
register
instruction
given
renaming
load
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.)
Active
Application number
CN201310236291.XA
Other languages
English (en)
Other versions
CN103514009A (zh
Inventor
G·R·威廉姆斯三世
J·H·米里尔斯
C·布拉斯考-阿鲁
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.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of CN103514009A publication Critical patent/CN103514009A/zh
Application granted granted Critical
Publication of CN103514009B publication Critical patent/CN103514009B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

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

零周期加载
技术领域
本发明涉及微处理器,尤其涉及有效地减小加载操作的等待时间和功率。
背景技术
微处理器一般包括重叠的管线阶段(pipeline stage)和指令的无序执行。另外,微处理器可以支持同时的多线程,以便增加吞吐量。这些技术利用了源代码中的指令级并行性(ILP)。在每个时钟周期中,对于管线的每个阶段,微处理器理想地产生每个线程最多N条指令的有用执行,其中N是大于一的整数。但是,控制依赖和数据依赖把微处理器的最大吞吐量降至低于每个周期N条指令。
不管源代码中控制依赖,指令的推测性执行还是用于执行指令的并行执行。在指令的操作数依赖于按照程序顺序的较旧指令的结果的时候,会发生数据依赖。数据依赖可以出现在直线代码片段中后续指令的操作数之间或者属于后续循环迭代的指令的操作数之间。在直线代码中,会遇到写后读(RAW)、读后写(WAR)或者写后写(WAW)依赖。尽管存在WAR和WAW依赖,但寄存器重命名还是用来允许指令的并行执行。但是,真正的依赖,或者说RAW依赖,仍然是原封未动的。因此,重复地先用作目的地寄存器随后又用作源寄存器的体系结构寄存器对于关联的源代码片段导致指令执行的串行化。
对于体系结构寄存器来说,常见的RAW依赖的一个例子是试图读取已经被(按照程序顺序)较旧存储指令修改但还没有把其结果提交到该存储器位置的存储器位置的加载指令,或者说读操作。这种类型的RAW依赖在程序执行过程中会频繁地发生。读取存储器位置可以包括能感觉到的等待时间并且降低处理器吞吐量。
鉴于以上所述,期望用于有效地降低加载操作的等待时间的有效方法与机制。
发明内容
提供了用于有效地降低加载操作的等待时间的系统与方法。在一种实施例中,处理器包括寄存器重命名单元,该单元接收解码的指令并且确定解码的给定指令是否有资格成为零周期加载操作(zero-cycle load operation)。合格者的例子可以包括给定加载指令对于给定存储指令的预测存储器依赖(memory dependency)。此外,合格者可以包括存在用于为给定物理寄存器号维护映射的副本计数的可用支持的检测。如果确定为真,重命名寄存器单元可以把与给定存储指令的源操作数关联的物理寄存器号指定给给定加载指令的目的地操作数。
另外,寄存器重命名单元中的控制逻辑可以标记给定的加载指令,以防它从存储器中读取与存储指令的源操作数关联的数据。由于副本重命名,这个数据可以从物理寄存器文件转发到(按照程序顺序)更年轻并且依赖于给定加载指令的指令。在随后的管线阶段中,可以验证预测的存储器依赖。如果存储器依赖是正确的,就可以认为给定的加载指令不需要从存储器(数据高速缓存)或者从存储缓冲区读取操作数数据就能够完成。如果该存储器依赖不正确,则给定的加载指令和(按照程序顺序)更年轻的指令可以从管线中冲刷掉并且重放。
参考以下描述和附图,这些及其它实施例将得到进一步的认识。
附图说明
图1是计算机系统的一种实施例的广义框图。
图2是利用零周期加载操作执行超标量(superscalar)、无序(out-of-order)执行的处理器核心的一种实施例的广义框图。
图3是用于检测零周期加载操作的方法的一种实施例的通用流程图。
图4是用于处理零周期加载操作的方法的一种实施例的通用流程图。
图5是用于提交包括零周期加载操作的指令的方法的一种实施例的通用流程图。
尽管本发明很容易有各种修改与备选形式,但是其具体实施例在附图中作为例子示出并且将在这里详细描述。但是,应当理解,附图及对其的具体描述不是要把本发明限定到所公开的特定形式,而是相反,本发明是要覆盖属于由所附权利要求定义的本发明主旨与范围的所有修改、等同与备选。如贯穿本申请所使用的,“可以”一词是在许可的意义上(即,意味着有可能)而不是在强制的意义上(即,意味着必须)使用的。类似地,“包括”一词意味着包括但不限于。
各种单元、电路或者其它部件可以描述为“配置成”执行一个或多个任务。在这种背景下,“配置成”是结构的广泛记载,通常意味着“具有”在操作过程中执行所述任务的“电路”。因此,即使单元/电路/部件目前未开启,单元/电路/部件也可以配置成执行所述任务。总的来说,构成对应于“配置成”的结构的电路可以包括硬件电路。类似地,为了描述的方便,各种单元/电路/部件可以描述为执行一个或多个任务。这种描述应当解释为包括短语“配置成”。记载配置成执行一个或多个任务的单元/电路/部件明确地不是要对那个单元/电路/部件引用35U.S.C.§112的解释。
具体实施例
在以下描述中,阐述了许多具体细节,以便提供对本发明的透彻理解。但是,本领域普通技术人员应当认识到,本发明没有这些具体细节也能实践。在有些情况下,为了避免模糊本发明,众所周知的电路、结构和技术没有具体示出。
参考图1,示出了计算机系统100的一种实施例的广义框图。如图所示,微处理器110可以连接到一个或多个外围设备150a-150b,及外部计算机存储器,诸如盘存储器130和动态随机存取存储器(DRAM)140。盘存储器130可以存储用于计算机系统100的操作系统(OS)。软件应用的指令可以加载到微处理器110中的高速缓存存储器子系统116中。软件应用可以已经存储在盘存储器130、DRAM140和外围设备150a-150b之一中的一个或多个当中。
尽管示出了单个处理器核心,但是微处理器110可以包括多个处理器核心。每个处理器核心可以连接到关联的高速缓存存储器子系统。此外,每个处理器核心可以共享另一高速缓存存储器子系统。例如,多个处理器核心中的每一个可以使用关联的一级(L1)高速缓存和二级(L2)高速缓存并且另外还与其它处理器核心共享三级(L3)高速缓存。如图所示,处理器核心112可以从高速缓存存储器子系统116加载软件应用指令并且处理这些指令。总的来说,当软件程序员编写根据一个算法或方法执行工作的应用时,程序员使用变量来引用临时数据和结果数据。这种数据利用计算机存储器中分配的空间。操作系统为软件应用分配存储器区域。
处理器核心112可以包括物理寄存器文件中的多个物理寄存器114。物理寄存器114可以包括软件程序员和/或编译器可以在软件应用中识别的、在体系结构上可见的寄存器。此外,物理寄存器114可以包括由重命名寄存器标识符识别的非体系结构(推测性)寄存器。在体系结构上可见的寄存器与给定的指令集体系结构(ISA)关联。在应用的处理过程中,数据可以从所分配的存储器区域加载到高速缓存存储器子系统116中。物理寄存器114中的一个或多个可以用于加载并存储临时数据与结果数据。处理器核心112中的硬件包括根据给定ISA处理指令的电路。该硬件电路包括至少相关的一组体系结构寄存器、功能性单元、管线分阶段元件与控制逻辑。可以为给定的ISA选择ARM指令集体系结构。备选地,可以选择Alpha、PowerPC、SPARC、MIPS、x86或者任何其它ISA。
给定的ISA可以用于选择声明并分配存储器区域的方式。给定的ISA可以进一步确定用于在包括物理寄存器114的微处理器110和盘存储器130、DRAM140和外围设备150a-150b中的一个或多个中的存储器位置之间传输数据的被选寻址模式。加载和存储指令一般都用于在存储器和微处理器110之间及在高速缓存存储器子系统116和物理寄存器114之间传输数据。计算机系统100中示出的虚线指示由加载和存储操作执行的数据传输的例子。可以感觉到的等待时间可以与这些数据传输中的每一个关联。
除了指令对超标量微体系结构中执行单元的无序发布,处理器核心112还可以执行寄存器重命名来增加吞吐量。利用硬件,处理器核心112动态地重命名用于目的地操作数的体系结构寄存器标识符。与该目的地操作数具有相同的体系结构寄存器标识符的源操作数可以利用用于该目的地操作数的相同重命名寄存器标识符来重命名。
在一种实施例中,处理器核心112包括检测早期管线阶段中的存储指令并且缓冲至少所关联的地址操作数标识符的控制逻辑。该早期管线阶段可以按序处理指令,而在随后的管线阶段中,指令可以无序地发布和执行。给定存储指令的地址操作数在随后的执行管线阶段中用于生成存储地址。地址操作数可以包括用作基址寄存器ID的体系结构寄存器标识符(ID)和用作偏移量的立即值。
在早期管线阶段中,处理器核心112中的控制逻辑可以监视后续指令,以便确定这些指令中的一个或多个是否修改用于给定存储指令的一个或多个地址操作数。例如,可以发现地址操作数ID匹配一个或多个后续指令中的目的地操作数ID。这种监视可以发生在无序发布与执行管线阶段之前的管线阶段中。
控制逻辑可以继续监视给定存储指令的后续指令,直到物理寄存器文件中对应的条目被解除分配。这个条目可以响应于所关联的重命名寄存器标识符从映射表除去并返回空闲列表(free list)而解除分配。例如,(按照程序顺序)存储指令后面的指令可以具有等于给定存储指令的源操作数标识符(源体系结构寄存器标识符)的目的地操作数标识符(目的地体系结构寄存器标识符)。当后续指令提交时,先前指定给该后续指令的目的地操作数的重命名寄存器标识符被放到空闲列表中以便让另一个指令重用。这个被释放的重命名寄存器标识符是用于给定存储指令的源操作数的同一标识符。响应于检测到以上条件,对给定存储指令的监视可以终止。简短地提供进一步的细节和例子。
在一种实施例中,在监视过程中,控制逻辑可以确定后续的加载操作与给定存储指令具有匹配的地址操作数,而且这些地址操作数已经被居间指令修改过了。此外,控制逻辑可以确定没有其它具有相同地址操作数的存储指令位于给定的存储指令与所述加载指令之间。换句话说,给定的存储指令是具有地址操作数的最年轻的存储指令。响应于这种确定,可以设定或断言这个加载指令与给定存储指令之间的RAW依赖的指示。在另一种实施例中,附加信息,诸如至少指令标签和程序计数器值,可以被比较或者用于索引预测表。控制逻辑可以在这个早期管线阶段中预测这个加载指令与给定存储指令之间存在RAW依赖。这种RAW依赖的确定或预测可以发生在与寄存器重命名相同的管线阶段中。备选地,所述确定或预测可以发生在比用于寄存器重命名的阶段更早的管线阶段中。在这里提供这种RAW依赖的例子:
ADD r7,r3,r5
STORE [r10+4],r7 //地址操作数是r10和4
MOV r12,r16
LOAD r14,[r10+4] //地址操作数是r10和4
SUB r2,r6,r14 //对于r14,使用从存储操作的源操
//作数r7转发的数据
ADD r11,r14,r13 //对于r14,使用从存储操作的源操
//作数r7转发的数据
在这个例子中,目的地操作数在指令助记符之后首先列出,随后是一个或多个源操作数。寄存器使用后面跟着寄存器标识符的通用命名“r”。例如,寄存器7就表示为“r7”。以上例子中的指令意味着伪代码例子而且与语言无关。如可以从以上看到的,加载指令具有与存储指令相同的地址操作数。没有居间指令修改地址操作数(r10)。因而,控制逻辑可以确定加载指令对存储指令具有RAW依赖。在其它实施例中,可以使用预测资格,诸如比较指令标签,为了方便说明,这没有示出。
响应于确定或预测RAW依赖,加载指令的目的地操作数标识符(ID)(r14)可以重命名成用于存储指令的源操作数ID(r7)的同一重命名寄存器标识符。例如,如果存储指令的源操作数ID(r7)被重命名成重命名寄存器标识符(P44),则加载指令的目的地操作数ID(r14)可以重命名成相同的标识符P44。类似地,用于减法指令和最后的加法指令中每一个的源操作数ID r14可以重命名成相同的重命名寄存器标识符(P44)。
处理器核心112中的控制逻辑可以无序地发布加载指令与后续指令。在这种情况下,尽管加载指令还没有完成,但减法指令和最后的加法指令中的每一个可以在加载指令之前、期间或稍后发布。如果用于寄存器标识符r6和r13的源操作数可用,那么减法指令和最后的加法指令可以在加载指令发布之前发布,更不用说完成。这些指令可以与从体系结构源寄存器ID r7转发的数据一起发布,其中r7是用于存储指令的源操作数ID。通过使用寄存器重命名,要转发的数据可以存储在由重命名寄存器标识符P44识别的物理寄存器中,其中P44与源体系结构寄存器ID r7关联。因此,加载指令变成零周期操作。加载指令无需访问存储器,诸如片上多级高速缓存层次结构和片外存储器,就可以完成。
如果采取以上步骤并且加载指令被转换成零周期操作,那么对于管线来说就可以增加指令吞吐量。由于(按照程序顺序)更年轻的且依赖该加载指令的指令不用等待该加载指令从数据高速缓存、存储缓冲区或片外存储器检索数据,因此指令吞吐量可以增加。更确切地说,这些更年轻的依赖指令可以从物理寄存器文件接收数据。在继续讨论关于加载指令到零周期加载操作的转换的进一步细节之前,提供计算机系统100中部件的进一步描述。
除了包括连接到对应高速缓存存储器子系统的一个或多个处理器核心,微处理器110还可以包括接口逻辑118和存储器控制器120。为方便说明,没有示出其它的逻辑及块间和块内通信。所说明的微处理器110的功能可以结合到单个集成电路上。在另一种实施例中,所说明的功能结合到计算机母板上的芯片集中。在有些实施例中,微处理器110可以包括在台式计算机或服务器中。在还有另一种实施例中,所说明的功能结合到在片上系统(SOC)上具有其它处理器管芯(processor die)的半导体管芯中。
处理器核心112可以包括如上所述的根据给定ISA执行指令的电路。在一种实施例中,处理器核心112可以包括用于处理给定ISA的指令的超标量、多线程微体系结构。在有些实施例中,处理器核心是通用的处理器核心。在各种其它实施例中,微处理器110可以包括一个或多个其它特定核心,诸如数字信号处理器(DSP)、图形处理单元(GPU)、专用集成电路(ASIC)等等。
高速缓存存储器子系统116可以为处理器核心112减少存储器等待时间。由高速缓存存储器子系统116提供的附加存储器所实现的降低的缺失率(miss rate)有助于隐藏处理器核心112与片外存储器之间的等待时间间隙。尽管处理器核心112与高速缓存存储器子系统116之间的等待时间小于到片外存储器的等待时间,但是,如果如上所述将加载指令转换成零周期加载操作,这种等待时间会进一步减小。
如果发生高速缓存缺失(miss),诸如在高速缓存存储器子系统116中没有找到所请求的块,就可以生成读请求并将其发送到存储器控制器120。存储器控制器120可以翻译对应于所请求的块的地址并且通过存储器总线122把该读请求发送到易失性片外DRAM140。存储器控制器120可以包括用于与存储器通道接口并且遵循对应协议的控制电路。此外,存储器控制器120可以包括用于对存储器请求进行排队的请求队列。片外DRAM140可以用来自片外盘存储器130的数据填充。片外盘存储器130可以提供数据的非易失性、随机存取辅助储存器。在一种实施例中,片外盘存储器130可以包括一个或多个硬盘驱动器(HDD)。在另一种实施例中,片外盘存储器130利用固态盘(SSD)。
尽管为了说明在计算机系统100中只示出了两个外围设备,但是其它数量的外围设备可以连接到微处理器110。外围设备150a-150b中的一个或多个可以是显示器,包括现代TV、计算机监视器、膝上型或移动设备监视器等等。视频图形子系统可以在显示器与微处理器110之间使用。外围设备150a-150b中的一个或多个可以是通常使用的输入/输出设备中的一种,诸如键盘、鼠标、打印机、调制解调器等等。
现在参考图2,示出了说明处理器核心200的一种实施例的通用框图,其中处理器核心200利用零周期加载操作执行超标量的无序执行。处理器核心200可以使用多阶段管线来处理指令。尽管以特定次序并且在特定的管线阶段中示出了功能和控制块,但是其它组合也是可能和能够预期的。此外,功能和控制块可以占用多于一个管线阶段。在大部分情况下,为了方便说明,为每个功能块示出单个管线阶段。
指令-高速缓存(i-高速缓存)204可以存储用于软件应用的指令。由通过地址选择逻辑202传送的地址所指示的一条或多条指令可以从i-高速缓存204提取。如果没有i-高速缓存缺失的话,每个时钟周期可以从i-高速缓存204提取多条指令。地址可以被下一提取预测器206递增。在随后的管线阶段中,分支方向预测器208可以耦合到下一提取预测器206和控制流评估逻辑212中的每一个。预测器208可以预测将指令流的流动从执行下一条后续指令改变的指令信息。
解码单元210解码多条提取出的指令的操作码。备选地,指令可以被分成微操作(micro-op)。如在此所使用的,术语“指令”、“微操作”和“操作”是可以互换的,因为本发明可以供利用任一种实现的体系结构使用。在一种实施例中,控制流评估块212可以更改地址选择器202中指令的提取。例如,与无条件分支操作码关联的绝对地址可以发送到地址选择器202。
重命名组内依赖检测逻辑214可以找出由解码单元210解码的指令之间的依赖。组内指令可以包括来自一个或多个时钟周期或管线阶段的解码指令。可以检测诸如读后写(WAR)、写后写(WAW)和写后读(RAW)的依赖。可以生成指示指令之间的依赖的依赖向量(dependency vector)。
依赖检测逻辑可以包括存储器依赖(MD)检测器216。在有些实施例中,MD检测器216可以确定存储-对-加载(STL)的存储器依赖。在这些实施例中,可以用一个表来存储用作给定存储指令的地址操作数的基址寄存器ID和立即值(偏移值)。此外,还可以存储用于存储指令的源操作数寄存器ID。对于(按照程序顺序)更年轻的指令,目的地操作数寄存器ID、地址操作数寄存器ID和立即值可以与存储在所述表中的值进行比较。响应于确定满足某些条件,MD检测器216可以指示在更年轻的加载指令与给定存储指令之间存在STL存储器依赖。一个条件可以是更年轻的加载指令具有地址操作数寄存器ID和与用于存储指令的地址操作数值匹配的地址操作数立即值。第二个条件可以是确定没有居间指令修改表中所存储的、用于给定存储指令的值。第三个条件可以是确定存储指令是比具有匹配的地址操作数的加载指令更旧的最年轻的存储指令。MD检测器216可以存储对于RAW依赖存在于加载指令与给定存储指令之间的指示。
此外,MD检测器216可以向寄存器重命名单元220发送重命名加载指令的目的地操作数寄存器ID的指令,其中该目的地操作数寄存器ID具有用于给定存储指令的源操作数寄存器ID的同一重命名寄存器标识符。在其它实施例中,编译器可以分析代码并且执行上述步骤。如果编译器确定在更年轻的加载指令与给定存储指令之间存在RAW依赖,该编译器就可以在程序代码中插入要由至少MD检测器216检测的指示。该信息可以包括断言位和给定存储指令的源操作数寄存器ID。备选地,所述信息可以包括断言位和用于识别给定存储指令的程序计数器(PC)偏移量。其它信息也可以使用。
在还有其它实施例中,MD检测器216可以包括STL存储器依赖预测器。在这种实施例中,MD检测器216可以利用至少与加载和存储指令关联的程序计数器(PC)值来来索引一个或多个表。部分地址标签和其它指令识别信息也可以用于索引表。哈希函数的输出可以用于索引预测表,其中预测表存储饱和计数器或者其它预测信息。在有些实施例中,MD检测器216可以确定这些地址操作数没有被居间指令修改。在其它实施例中,MD检测器216可以允许校正逻辑,诸如饱和计数器,来说明误预测。从表中读出的信息可以用于识别推测的依赖。响应于确定推测性RAW存储器依赖,MD检测器216可以存储在给定存储指令与给定后续加载指令之间存在RAW依赖的指示。此外,MD检测器216可以向寄存器重命名单元220发送重命名加载指令的目的地操作数寄存器ID的指示,其中该目的地操作数寄存器ID具有与用于给定存储指令的源操作数寄存器ID相同的重命名寄存器标识符。在进一步的实施例中,可以使用以上方法与机制的组合来找出STL存储器依赖。
映射器218可以利用诸如可用的并行性、依赖链的临界性(criticality)及通信处罚的因素,在分布的硬件资源之间划分指令。当硬件利用物理寄存器标识符重命名体系结构寄存器标识符时,硬件在映射器218中存储映射,其中映射器218可以是数据结构,诸如映射表。如在此所使用的,用于体系结构寄存器或者物理寄存器的标识符还可以被称为编号。因此,体系结构寄存器标识符也可以称为体系结构寄存器号。类似地,物理寄存器标识符也可以称为物理寄存器号。用于重命名体系结构寄存器号的物理寄存器号也可以称为重命名寄存器号。
寄存器重命名单元220可以包括重命名控制逻辑与阵列222和寄存器副本阵列(RDA)224。寄存器重命名单元220可以确定哪些物理寄存器标识符要用于重命名在指令中的目的地和源操作数中都使用的体系结构寄存器标识符。寄存器重命名单元可以从空闲列表分配器230或重命名控制逻辑222中的重命名映射表中选择候选物理寄存器标识符。在各种实施例中,RDA224配置成存储副本映射的指示。副本映射可以在加载操作到零周期加载操作的转换过程中使用。
寄存器重命名单元220可以从MD检测器216接收加载指令有资格被转换成零周期加载操作的指示。寄存器重命名单元220可以把该加载指令的目的地操作数寄存器ID指定成与该加载操作所依赖的存储指令的源操作数寄存器ID所使用的相同的重命名寄存器标识符。映射器218可以存储用于该重命名寄存器标识符的多个映射。此外,RDA224可以存储用于该重命名寄存器标识符的副本计数。例如,在前面的代码例子中,重命名寄存器标识符P44可以既用作存储指令的源操作数寄存器ID(r7),又用作加载指令的目的地操作数寄存器ID(r14)。这个副本计数可以包括任何给定体系结构寄存器标识符已经被映射到同一重命名寄存器标识符的次数。
在各种实施例中,当特定的体系结构寄存器已经映射到在映射时的重命名寄存器号时,对于这个映射,副本计数可以不递增。RDA224可以存储重命名寄存器号和关联的副本计数。在一种实施例中,RDA可以实现为相对小的、加标签的、完全关联的结构。RDA224可以具有用于存储重命名寄存器号和关联的副本计数的任意数量的条目。在一个例子中,ISA的实现可以包括144个物理寄存器号,因此,8位的物理寄存器索引可以既存储在RDA的条目中又用于访问该RDA。在一种实施例中,每个副本计数的大小是5位。因此,用于给定物理寄存器号的副本的最大个数为31。但是,其他副本计数大小也是可能的而且可以被选择。
RDA224可以在指令在处理器管线中分派之前或者当时被更新。当MD检测器216确定解码后的加载指令是零周期加载操作时,可以访问RDA224,以确定对于该物理寄存器号来说是否已经存在要用于重命名关联的存储指令的源操作数寄存器ID和加载指令的目的地操作数寄存器ID中每一个的条目。如果存在条目,那么,每次当目前没有映射到给定重命名寄存器号的任何给定体系结构寄存器ID被映射到给定的重命名寄存器号时,关联的副本计数可以递增。如果在RDA中还不存在条目,就可以分配一个条目并且关联的副本计数可以以2开始。
RDA224还可以在处理器管线中的提交管线阶段中更新。对于指令提交期间的任何给定的体系结构寄存器,每次当物理寄存器标识符准备要返回到空闲列表时,副本计数可以递减。物理寄存器标识符还可以被称为重命名寄存器标识符。物理寄存器标识符可以是响应于映射表中与该物理寄存器标识符关联的条目由于指令提交要被除去或者失效而返回到空闲列表的候选。在一种实施例中,响应于副本计数递减到一,副本计数和副本映射可以不再被存储。
在一种实施例中,响应于给定的重命名寄存器标识符是在关联的指令提交期间要返回空闲列表的候选,并且没有关联的副本信息存储在RDA224中,该重命名寄存器标识符返回到空闲列表。在另一种实施例中,响应于给定的重命名寄存器标识符是要返回空闲列表的候选并且RDA224中所存储的副本计数从一递减至零,该重命名寄存器标识符返回到空闲列表。
在一种实施例中,响应于给定的重命名寄存器标识符是要返回空闲列表的候选并且所存储的副本计数在递减之后仍然大于一,该重命名寄存器标识符不返回到空闲列表。在这后一种情况下,该重命名寄存器标识符仍然具有到多个体系结构寄存器的副本映射。在一种实施例中,检查RDA224以获得每个可能的零周期加载候选,以确定存在空闲的、用于跟踪副本的条目。如果RDA224中没有空闲的条目可供分配,则对应的加载指令不转换成零周期加载操作。类似地,如果存在为零周期加载候选分配的条目,但是副本计数已经饱和,该加载指令也不转换成零周期加载操作。
对于零周期加载操作,数据内容可以从存储用于存储指令源操作数的数据的物理寄存器文件中的物理寄存器转发到后续的加载指令并转发到其它更年轻的依赖指令。数据可以不从数据高速缓存、存储缓冲区或者片外存储器读取。更年轻的依赖指令可以不用等待从数据高速缓存、存储缓冲区或者片外存储器读取数据就发布。
在指令被解码和重命名之后,可以在分派队列240中分配关联的条目。指令和关联的重命名标识符、程序计数器(PC)值、依赖向量、完成标记等可以发送到分配队列240并随后发送到调度器250。可以由诸如执行核心260检测各种例外。例子包括用于存储器访问的保护例外、无地址翻译,等等。例外会造成对应的例外处理例程由诸如微代码242执行。
调度器250可以调度指令在执行核心260中的执行。当操作数可用而且硬件资源也可用时,指令可以从调度器250无序地发布到执行核心260中的功能单元之一。在利用映射表或者从操作数旁路逻辑翻译重命名标识符之后,调度器250可以从物理寄存器文件(未示出)读取其源操作数。源操作数可以提供给执行核心260。执行核心260可以求解用于加载和存储指令的地址。此外,执行核心260还可以执行多个整数、浮点数和布尔操作中的一个或多个。
执行核心260可以包括加载/存储单元。该加载/存储单元可以直接地或者通过重新排序缓冲区(rob)270连接到数据高速缓存(未示出)和存储缓冲区272。处理器200可以包括用于i-高速缓存204和数据高速缓存中每一个的翻译后援缓冲区(Translation Look-aside Buffer,TLB),以避免当执行高速缓存访问时执行完全存储器翻译的成本。存储缓冲区272可以存储对应于存储指令的地址。rob270可以从执行核心260接收结果。此外,对于转发到已经在管线中的依赖指令的数据,结果可以被旁路到前面的管线阶段。rob270可以确保指令的有序提交和退出。
现在参考图3,示出了用于检测零周期加载操作的方法300的一种实施例的通用流程图。在方框302,处理程序指令。所述指令可以被编译、从存储器提取、解码并执行。在解码之后,如果检测到给定指令是存储指令(条件方框304),就在方框306中缓冲至少该存储指令的地址操作数基址寄存器ID、地址操作数立即值和源操作数寄存器ID。这些值可以存储在给定的表中。还可以缓冲关联的程序计数器(PC)和其它信息。在一种实施例中,这个信息被缓冲在存储器依赖(MD)检测器中的表中。
在方框308,监视(按照程序顺序)后续指令的信息以获得与为(按照程序顺序)前面的存储指令所缓冲的信息的可能匹配。用于比较的信息可以包括至少后续指令的目的地操作数寄存器ID及后续加载指令的地址操作数基址寄存器ID和立即值。控制逻辑可以检测与给定存储指令关联的寄存器ID和与后续指令关联的寄存器ID之间的匹配。寄存器ID可以是用于识别操作数的体系结构寄存器ID。
存储指令的地址操作数基址寄存器的修改可以是基于立即值的更新。利用前面的代码例子,加法指令可以跟在存储指令后面(按照程序顺序),诸如ADD r10,r10,#4。符号“#”可以用于指示立即值数据操作数。修改存储指令的地址操作数基址寄存器r10。但是,这是基于立即值的修改。如果,除基于立即值的修改之外,加载指令与存储指令之间的居间指令没有对地址操作数基址寄存器r10进行其它类型的修改,那么可以在表中执行说明该基于立即值的修改的调整。如果检测到给定存储指令的地址操作数基址寄存器要被修改(条件方框310)并且修改是基于立即值更新(条件方框311),就在方框313中更新表中用于给定存储指令的特定的存储值。例如,所存储的地址操作数立即值可以被更新。利用以上的例子,表中用于给定存储指令的所存储立即值4可以在表中递减4,这是ADD指令所使用的立即值。在其它例子中,地址操作数基址寄存器可以递减,而不是递增,而且表中所存储的立即值可以相应地递增。如果修改不是基于立即值更新(条件方框311),就可以在方框312中令存储对应于给定存储指令的值的表条目失效。其后,方法300的控制流可以通过方框A返回方框302。
如果检测到给定存储指令的源操作数要被修改(条件方框314)而且存储指令已经退出(条件方框316),方法300的控制流就移到方框312。为了说明这种情况,在这里提供存储器依赖的另一个代码例子,其中修改了存储指令的源操作数和争用状态(racecondition):
ADD r7,r3,r5
STORE [r10+4],r7 //地址操作数是r10和4
ADD r19,r24,r18
ADD r7,r20,r21 //存储操作的源操作数被修改了
LOAD r14,[r10+4] //地址操作数是r10和4
SUB r2,r6,r14 //对于r14,使用从存储操作的源操作
//数r7转发的数据
ADD r7,r14,r13 //对于r14,使用从存储操作的源操作
//数r7转发的数据
ADD r14,r22,r25 //加载操作的目的地操作数被重写。在
//提交阶段,把由r7和r14共享的物
//理寄存器号返回到空闲列表
类似于前面的代码例子,在以上的例子中,加载指令对存储指令具有存储器依赖。在这种情况下,第三个加法指令修改存储指令的源操作数(r7)。管线中在把与源操作数(r7)关联的重命名寄存器标识符标记为副本的加载指令和提交并使得同一重命名寄存器标识符返回到空闲列表的第三个加法指令之间存在争用状态。当加载指令把这个重命名寄存器标识符标记为副本时,该重命名寄存器标识符可能已经在朝空闲列表传播的历史文件中了。
用于处理以上情况的一种选项是检测居间指令,诸如第三个加法指令,修改存储指令的源操作数,并且作为响应,使加载指令失去被转换成零周期加载操作的资格。用于处理以上情况的另一种选项是检测居间指令修改存储指令的源操作数,并且作为响应,确定存储指令是否已经退出。如果存储指令还没有退出,那么该居间指令也没有退出。因此,居间指令还没有使与存储指令的源操作数关联的重命名寄存器标识符返回到空闲列表。现在,可以维持这个重命名寄存器标识符的副本计数。类似地,由于以上代码例子中的最后一个加法指令而使得用于加载指令的目的地操作数(r14)的副本计数递增。
返回方法300,如果检测到给定存储指令的源操作数要被修改(条件方框314)并且存储指令还没有退出(条件方框316),就确定是否有加载指令可以具有对给定存储指令的存储器依赖。类似地,如果没有检测到给定存储指令的源操作数要被修改(条件方框314),就确定是否有加载指令具有对给定存储指令的存储器依赖。应当指出,在有些实施例中,条件方框310、314和318中的每一个都可以同时进行评估。例如,控制逻辑和表可以同时接收与后续指令关联的输入。
在一种实施例中,利用与加载指令关联的信息访问存储器依赖(MD)检测器。如前所述,MD检测器可以包括保留用于要与后续指令比较的特定存储指令的信息的表。备选地,MD检测器可以包括用于检测来自编译器的提示信息的控制逻辑。MD检测器还可以包括STL预测器。另外,MD检测器可以包括这些备选设计选项的组合。响应于访问MD检测器,控制逻辑和存储用于给定存储指令和其它存储指令的值的表都可以生成指示在加载指令与给定存储指令之间存在存储器依赖的结果。例如,在一种实施例中,用于加载指令和给定存储指令中每一个的地址操作数基址寄存器ID和立即值可以匹配。此外,可以确定该存储指令是比具有匹配地址操作数的加载指令更旧的最年轻的存储指令。如果确定加载指令依赖于给定的存储指令(条件方框318),在方框320中加载指令就可以作为零周期加载指令来处理。接下来,提供处理零周期加载指令的进一步细节。
现在参考图4,示出了用于处理零周期加载操作的方法400的一种实施例的通用流程图。在方框402中,可以确定给定加载指令依赖于(按照程序顺序)较旧的存储指令。给定加载指令可以有资格转换成零周期加载指令。如前所述,一个条件可以是更年轻的加载指令具有地址操作数寄存器ID和与用于存储指令的地址操作数值匹配的地址操作数立即值。第二个条件可以是确定没有居间指令修改存储在所访问的表中的、用于给定存储指令的值,诸如地址操作数和源操作数。第三个条件可以是确定存储指令是比具有匹配地址操作数的加载指令更旧的最年轻的存储指令。第四个条件可以是可用副本资源的指示。例如,用于存储指令的源操作数寄存器ID的重命名寄存器号可以用于索引到诸如RDA224的数据结构中。在其它实施例中,STL存储器依赖预测器和/或来自编译器的提示信息可以用于指示加载指令与给定存储指令之间的RAW依赖。
RDA224中的命中可以指示源重命名寄存器标识符已经被复制。缺失可以指示该源重命名寄存器标识符还没有被复制。如果源重命名寄存器标识符还没有被复制而且RDA224还没有满,就可以为该源重命名寄存器标识符在RDA224中分配一个条目。如果源重命名寄存器标识符已经被复制,那么用于该源重命名寄存器标识符的副本计数可以与给定的阈值进行比较。在一种实施例中,该阈值可以对应于特定的计数。如果关联的副本计数还没有达到所述阈值,副本资源就是可用的。如果关联的副本计数已经达到所述阈值,则副本资源就是不可用的。
如果副本资源不可用(条件方框404),就在方框406中利用来自空闲列表的重命名寄存器标识符,重命名用于加载指令的目的地体系结构寄存器。重命名的标识符、关联的程序计数器(PC)值、依赖向量等可以发送到分派队列并且随后发送到调度器。在方框408中,可以处理下一个可以获得的指令。该下一个可以获得的指令可以与以上步骤并行地或者在后续的时钟周期中被处理。
如果副本资源不可用(条件方框404),就在方框410中利用用于最年轻的较旧依赖存储指令的源操作数的重命名寄存器ID来重命名加载指令的目的地操作数标识符(ID)。在方框412中,更新用于物理寄存器的副本计数。每次当目前还没有映射到所选重命名寄存器标识符的给定体系结构寄存器标识符被映射到这个重命名寄存器标识符时,副本计数就递增。在一个实施例中,副本计数可以初始化为值2。
用于加载指令和一个或多个其它指令的重命名标识符可以发送到分派队列并随后发送到调度器。关联的程序计数器(PC)值、依赖向量等也可以发送。在一种实施例中,RAW依赖被认为是确信无疑的而且加载指令可以标记为完成。例如,如方法300中所描述的MD检测器中表的访问可以被认为没有不确定性,因此加载指令不再被随后的管线阶段进一步处理。在其它实施例中,加载指令与存储指令之间的RAW依赖不被认为没有不确定性。因此,加载指令没有标记为完成而且它被随后的管线阶段进一步处理。在方框414中,在管线中发布包括没有标记为完成的加载指令的一个或多个指令。在方框416中,可以验证存储指令与加载指令之间的存储器依赖。例如,可以利用求解的地址与其它指令识别信息对存储缓冲区进行访问。
如果发现存储器依赖不正确(条件方框418),在方框420中加载指令和(按照程序顺序)比该加载指令更年轻的指令就可以从管线中被冲刷掉。然后,可以重放该加载指令。如果发现预测的存储器依赖是正确的(条件方框418),在方框422中该加载指令就在管线中前进到提交管线阶段,而不从片上高速缓存层次结构、存储缓冲区或者片外存储器读取与源操作数关联的数据。依赖于加载指令的更年轻的指令可以利用从与对应存储指令的源操作数关联的物理寄存器文件接收到的转发数据继续进行。
现在参考图5,示出了用于提交包括零周期加载操作在内的指令的方法500的一种实施例的通用流程图。为了讨论,这种实施例及前面所述的方法300和400的后续实施例中的步骤是以顺序次序示出的。但是,在其它实施例中,有些步骤可以按与所示次序不同的次序发生,有些步骤可以并发执行,有些步骤可以与其它步骤组合,而且可以缺少有些步骤。
在方框502,提交程序指令。数据结构中指令的有序窗口可以用于确定何时提交和退出指令。例如,rob270可以用作这种数据结构。当检测到存储器指令要提交时,可以执行检查,以确定所关联的重命名寄存器标识符是否被复制。在一个例子中,用于目的地物理寄存器和源物理寄存器中每一个的关联副本标签或指示副本状态的字段可以与用于该指令的其它关联信息一起存储。在另一个例子中,目的地重命名寄存器标识符与源重命名寄存器标识符中的每一个都可以用于索引到诸如RDA224的数据结构中。命中可以指示对应的重命名寄存器标识符已经被复制。缺失可以指示对应的重命名寄存器标识符还没有被复制。
如果给定的重命名寄存器标识符没有被复制(条件方框504),在方框506中该重命名寄存器标识符就返回到空闲列表。否则,在方框508中,用于对应重命名寄存器标识符的副本计数可以递减。通常,对于任何给定的体系结构寄存器,每次当关联的重命名寄存器标识符准备要返回到空闲列表时,副本计数就递减。响应于从映射表除去映射,可以确定重命名寄存器标识符准备要返回到空闲列表。一般来说,响应于从映射表除去映射,重命名寄存器标识符返回到空闲列表。但是,对于映射表中由于零周期加载操作造成的副本映射,在任何返回到空闲列表之前,可以检查诸如RDA224的数据结构。
在递减副本计数之后,如果该重命名寄存器标识符仍然被复制(条件方框510),在方框512中就可以把该重命名寄存器标识符标记为仍然被复制而且它不返回到空闲列表。例如,在诸如RDA224的数据结构中可以仍然存在其副本计数大于1的有效条目。
在递减副本计数之后,如果重命名寄存器标识符不是仍然被复制(条件方框510),就在方框514中把该重命名寄存器标识符标记为映射但不复制。例如,可以使诸如RDA224的数据结构中的关联条目失效。备选地,可以仍然存在其副本计数为1的有效条目。该重命名寄存器标识符不返回到空闲列表。
尽管以上已经相当详细地描述了实施例,但是,一旦完全理解了以上公开内容,许多变化与修改将对本领域技术人员变得显而易见。以下权利要求应当解释为涵盖所有此类变化与修改。

Claims (19)

1.一种处理器,包括:
存储器依赖检测器,配置成:
检测给定存储指令;
将所述给定存储指令的对应于地址操作数基址寄存器的地址操作数基址寄存器ID和地址操作数立即值存储在表的第一条目中;
响应于检测到配置成执行对地址操作数基址寄存器的修改的指令:
响应于确定所述修改是基于立即值的修改,调整在所述表的第一条目中的所述给定存储指令的地址操作数立即值的值;和
响应于确定所述修改是除基于立即值的修改之外的修改,使所述表中的第一条目失效;和
响应于如下操作,确定给定加载指令对给定存储指令的存储器依赖:
检测到所述表中的有效条目指示所述给定存储指令和所述给定加载指令对于地址操作数基址寄存器ID和地址操作数立即值具有匹配的值;和
确定按照程序顺序在所述给定存储指令与所述给定加载指令之间的居间指令具有等于所述给定存储指令的源操作数寄存器ID的目的地操作数寄存器ID以及所述给定存储指令尚未退出;
寄存器重命名单元,配置成将重命名寄存器ID映射到所述存储指令的目的地寄存器ID;
其中,响应于接收到存储器依赖的指示,所述寄存器重命名单元配置成:
将与所述给定存储指令的源操作数寄存器ID关联的重命名寄存器标识符(ID)映射到所述给定加载指令的目的地操作数寄存器ID;
存储与所述重命名寄存器ID关联的副本计数,其中所述副本计数指示当前被映射到给定重命名寄存器ID的体系结构寄存器ID的数量;和
防止所述给定加载指令从存储器读取与源操作数关联的数据。
2.如权利要求1所述的处理器,其中,为了防止所述给定加载指令从存储器读取与所述源操作数关联的数据,所述寄存器重命名单元配置成指示所述给定加载指令在以下项中的至少一个之后完成:
确定了所述存储器依赖,和
验证了所述存储器依赖是正确的。
3.如权利要求2所述的处理器,其中,所述寄存器重命名单元还配置成每次在使用当前映射到重命名寄存器ID的体系结构寄存器ID的指令提交时递减所述副本计数。
4.如权利要求3所述的处理器,其中所述寄存器重命名单元进一步配置成检测具有映射到所述寄存器重命名ID的目的地寄存器ID的指令准备要提交,及响应于确定所述重命名寄存器ID被映射到多于一个寄存器,防止所述重命名寄存器ID返回到空闲列表。
5.如权利要求3所述的处理器,其中为了确定所述存储器依赖,所述存储器依赖检测器还配置成确定按照程序顺序在所述给定存储指令与所述给定加载指令之间没有找到具有等于所述给定存储指令的源操作数寄存器ID的目的地操作数寄存器ID的居间指令。
6.如权利要求4所述的处理器,其中所述寄存器重命名单元进一步配置成每次在将当前没有映射到所述重命名寄存器ID的体系结构寄存器ID映射到所述重命名寄存器ID时,递增所述副本计数。
7.如权利要求4所述的处理器,其中所述处理器还包括加载/存储单元,其配置成响应于确定所述存储器依赖不正确,重放所述给定加载指令和按照程序顺序比所述给定加载指令年轻的程序指令。
8.如权利要求4所述的处理器,其中所述处理器还包括物理寄存器文件,其配置成把与所述给定存储指令的源操作数关联的数据转发到依赖于所述加载指令的且比所述加载指令年轻的指令。
9.一种用于处理零周期加载操作的方法,包括:
检测给定存储指令;
将所述给定存储指令的对应于地址操作数基址寄存器的地址操作数基址寄存器ID和地址操作数立即值存储在表的第一条目中;
响应于检测到配置成执行对地址操作数基址寄存器的修改的指令:
响应于确定所述修改是基于立即值的修改,调整在所述表的第一条目中的所述给定存储指令的地址操作数立即值的值;和
响应于确定所述修改是除基于立即值的修改之外的修改,使所述表中的第一条目失效;和
响应于如下操作,确定给定加载指令对给定存储指令的存储器依赖:
检测到所述表中的有效条目指示所述给定存储指令和所述给定加载指令对于地址操作数基址寄存器ID和地址操作数立即值具有匹配的值,确定给定加载指令对给定存储指令的存储器依赖;和
确定按照程序顺序在所述给定存储指令与所述给定加载指令之间的居间指令具有等于所述给定存储指令的源操作数寄存器ID的目的地操作数寄存器ID以及所述给定存储指令尚未退出;
响应于接收到存储器依赖的指示,所述方法还包括:
将与所述给定存储指令的源操作数寄存器ID关联的重命名寄存器标识符(ID)指定给所述给定加载指令的目的地操作数寄存器ID;
存储与重命名寄存器ID关联的副本计数,其中所述副本计数指示当前被映射到给定重命名寄存器ID的体系结构寄存器ID的数量;和
防止所述给定加载指令从存储器读取与源操作数关联的数据。
10.如权利要求9所述的方法,其中,为了防止所述给定加载指令从存储器读取与所述源操作数关联的数据,所述方法还包括:指示所述给定加载指令在以下项中的至少一个之后完成:
确定了所述存储器依赖,和
验证了所述存储器依赖是正确的。
11.如权利要求10所述的方法,还包括:
每次在使用当前映射到重命名寄存器ID的体系结构寄存器ID的指令提交时递减所述副本计数。
12.如权利要求11所述的方法,其中为了确定所述存储器依赖,所述方法还包括确定:
在所述给定存储指令与所述给定加载指令之间找到具有等于所述给定存储指令的源操作数寄存器ID的目的地操作数寄存器ID的居间指令;以及
所述给定存储指令尚未退出。
13.如权利要求12所述的方法,还包括:
发布按照程序顺序更年轻的且依赖于所述给定加载指令的指令。
14.如权利要求9所述的方法,还包括:
响应于确定要通过按照程序顺序在所述给定存储指令和给定加载指令之间的居间指令对所述给定存储指令的基址寄存器标识符做另一类型的修改,而不是基于立即值的修改,使所述给定存储指令的所存储的地址操作数基址寄存器ID和所述地址操作数立即值失效。
15.如权利要求11所述的方法,其中,为了确定所述存储器依赖,所述方法还包括:确定按照程序顺序在所述给定存储指令与所述给定加载指令之间没有找到具有等于所述给定存储指令的源操作数寄存器ID的目的地操作数寄存器ID的居间指令。
16.如权利要求12所述的方法,还包括:
检测指令准备要提交,其中所述指令具有映射到所述寄存器重命名ID的目的地寄存器ID;及
响应于确定所述重命名寄存器ID被映射到多于一个寄存器,防止所述重命名寄存器ID返回到空闲列表。
17.如权利要求16所述的方法,还包括:
每次在将当前没有映射到所述重命名寄存器ID的任何给定体系结构寄存器ID映射到所述重命名寄存器ID时,递增所述副本计数。
18.一种寄存器重命名单元,包括:
第一接口,配置成接收解码后的指令;
到分派单元的第二接口,配置成向调度器分派指令;
零周期加载逻辑,其中响应于接收到给定加载指令对给定存储指令的存储器依赖的指示,所述零周期加载逻辑配置成:
将与所述给定存储指令的源操作数寄存器ID关联的重命名寄存器标识符(ID)指定给所述给定加载指令的目的地操作数寄存器ID;
存储与重命名寄存器ID关联的副本计数,其中所述副本计数指示当前被映射到给定重命名寄存器ID的体系结构寄存器ID的数量;和
防止所述给定加载指令从存储器读取与源操作数关联的数据,
其中所述存储器依赖基于:
检测到表中的有效条目指示所述给定存储指令和所述给定加载指令对于对应于地址操作数基址寄存器的地址操作数基址寄存器ID和地址操作数立即值具有匹配的值;和
确定按照程序顺序在所述给定存储指令与所述给定加载指令之间的居间指令具有等于所述给定存储指令的源操作数寄存器ID的目的地操作数寄存器ID以及所述给定存储指令尚未退出。
19.如权利要求18所述的寄存器重命名单元,其中为了防止所述给定加载指令从存储器读取与所述源操作数关联的数据,所述零周期加载逻辑配置成指示所述给定加载指令在以下项中的至少一个之后完成:
确定了所述存储器依赖,和
验证了所述存储器依赖是正确的。
CN201310236291.XA 2012-06-14 2013-06-14 零周期加载 Active CN103514009B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/517,865 2012-06-14
US13/517,865 US9996348B2 (en) 2012-06-14 2012-06-14 Zero cycle load

Publications (2)

Publication Number Publication Date
CN103514009A CN103514009A (zh) 2014-01-15
CN103514009B true CN103514009B (zh) 2019-10-08

Family

ID=48607065

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310236291.XA Active CN103514009B (zh) 2012-06-14 2013-06-14 零周期加载

Country Status (8)

Country Link
US (1) US9996348B2 (zh)
EP (1) EP2674856B1 (zh)
JP (1) JP5894120B2 (zh)
KR (1) KR101497807B1 (zh)
CN (1) CN103514009B (zh)
BR (1) BR102013014996B1 (zh)
TW (1) TWI537824B (zh)
WO (1) WO2013188120A2 (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US9047092B2 (en) * 2012-12-21 2015-06-02 Arm Limited Resource management within a load store unit
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9311084B2 (en) * 2013-07-31 2016-04-12 Apple Inc. RDA checkpoint optimization
US9940229B2 (en) * 2013-12-17 2018-04-10 Intel Corporation Technologies for persistent memory programming
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
CN106648546A (zh) * 2016-09-07 2017-05-10 北京大学 用于gpu寄存器分配和并行度管理的协同优化编译方法
US11175923B2 (en) * 2017-02-13 2021-11-16 International Business Machines Corporation Comparing load instruction address fields to store instruction address fields in a table to delay issuing dependent load instructions
US10261791B2 (en) * 2017-02-24 2019-04-16 International Business Machines Corporation Bypassing memory access for a load instruction using instruction address mapping
US10838729B1 (en) 2018-03-21 2020-11-17 Apple Inc. System and method for predicting memory dependence when a source register of a push instruction matches the destination register of a pop instruction
CN108614736B (zh) 2018-04-13 2021-03-02 杭州中天微系统有限公司 实现资源索引替换的装置及处理器
US11593117B2 (en) * 2018-06-29 2023-02-28 Qualcomm Incorporated Combining load or store instructions
GB2577502B (en) * 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11294683B2 (en) 2020-03-30 2022-04-05 SiFive, Inc. Duplicate detection for register renaming
US11966328B2 (en) * 2020-12-18 2024-04-23 Advanced Micro Devices, Inc. Near-memory determination of registers
US11900118B1 (en) * 2022-08-05 2024-02-13 Apple Inc. Stack pointer instruction buffer for zero-cycle loads

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1136182A (zh) * 1995-01-24 1996-11-20 国际商业机器公司 对推测性指令中例外情况的处理
US5751983A (en) * 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US6662280B1 (en) * 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3852432T2 (de) 1987-07-01 1995-07-13 Ibm Befehlssteuerungsvorrichtung für ein Computersystem.
DE69311330T2 (de) 1992-03-31 1997-09-25 Seiko Epson Corp Befehlsablauffolgeplanung von einem risc-superskalarprozessor
US5926646A (en) 1997-09-11 1999-07-20 Advanced Micro Devices, Inc. Context-dependent memory-mapped registers for transparent expansion of a register file
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6122656A (en) * 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
JP3497087B2 (ja) 1998-12-17 2004-02-16 富士通株式会社 命令制御装置及びその方法
EP1050806A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA Memory access address comparison
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
US7028166B2 (en) 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7165167B2 (en) 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism
US7111126B2 (en) 2003-09-24 2006-09-19 Arm Limited Apparatus and method for loading data values
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
KR20070019750A (ko) * 2004-05-05 2007-02-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법
FR2873466A1 (fr) 2004-07-21 2006-01-27 St Microelectronics Sa Procede de programmation d'un controleur de dma dans un systeme sur puce et systeme sur puce associe
US8612944B2 (en) 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US8533438B2 (en) 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8631225B2 (en) 2010-06-25 2014-01-14 International Business Machines Corporation Dynamically rewriting branch instructions to directly target an instruction cache location

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1136182A (zh) * 1995-01-24 1996-11-20 国际商业机器公司 对推测性指令中例外情况的处理
US5751983A (en) * 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US6662280B1 (en) * 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match

Also Published As

Publication number Publication date
EP2674856B1 (en) 2019-08-21
EP2674856A3 (en) 2014-07-23
US20130339671A1 (en) 2013-12-19
WO2013188120A3 (en) 2014-03-06
BR102013014996A2 (pt) 2015-08-11
CN103514009A (zh) 2014-01-15
KR101497807B1 (ko) 2015-03-02
TW201411485A (zh) 2014-03-16
US9996348B2 (en) 2018-06-12
EP2674856A2 (en) 2013-12-18
WO2013188120A2 (en) 2013-12-19
KR20130140582A (ko) 2013-12-24
JP5894120B2 (ja) 2016-03-23
JP2014002735A (ja) 2014-01-09
TWI537824B (zh) 2016-06-11
BR102013014996B1 (pt) 2020-12-08

Similar Documents

Publication Publication Date Title
CN103514009B (zh) 零周期加载
US8301865B2 (en) System and method to manage address translation requests
US9690625B2 (en) System and method for out-of-order resource allocation and deallocation in a threaded machine
US9213551B2 (en) Return address prediction in multithreaded processors
US9058180B2 (en) Unified high-frequency out-of-order pick queue with support for triggering early issue of speculative instructions
US8230177B2 (en) Store prefetching via store queue lookahead
US9286075B2 (en) Optimal deallocation of instructions from a unified pick queue
US9262171B2 (en) Dependency matrix for the determination of load dependencies
US8429386B2 (en) Dynamic tag allocation in a multithreaded out-of-order processor
US8429636B2 (en) Handling dependency conditions between machine instructions
US8412911B2 (en) System and method to invalidate obsolete address translations
US9122487B2 (en) System and method for balancing instruction loads between multiple execution units using assignment history
US9009445B2 (en) Memory management unit speculative hardware table walk scheme
US8006075B2 (en) Dynamically allocated store queue for a multithreaded processor
US8335912B2 (en) Logical map table for detecting dependency conditions between instructions having varying width operand values
EP2707792B1 (en) Branch target storage and retrieval in an out-of-order processor
US20100274961A1 (en) Physically-indexed logical map table
US20110078425A1 (en) Branch prediction mechanism for predicting indirect branch targets
US20110276760A1 (en) Non-committing store instructions
US20130024647A1 (en) Cache backed vector registers
US7937556B2 (en) Minimizing TLB comparison size
US8046538B1 (en) Method and mechanism for cache compaction and bandwidth reduction
US20150046651A1 (en) Method for storing modified instruction data in a shared cache

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant