CN1095117C - 存数指令结果的前送的方法和处理器 - Google Patents

存数指令结果的前送的方法和处理器 Download PDF

Info

Publication number
CN1095117C
CN1095117C CN98105772A CN98105772A CN1095117C CN 1095117 C CN1095117 C CN 1095117C CN 98105772 A CN98105772 A CN 98105772A CN 98105772 A CN98105772 A CN 98105772A CN 1095117 C CN1095117 C CN 1095117C
Authority
CN
China
Prior art keywords
instruction
store
load
address
load instruction
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
CN98105772A
Other languages
English (en)
Other versions
CN1195809A (zh
Inventor
K·A·费斯提
J·S·穆希彻
L·E·特彻
S·W·怀特
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 CN1195809A publication Critical patent/CN1195809A/zh
Application granted granted Critical
Publication of CN1095117C publication Critical patent/CN1095117C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • 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
    • 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
    • G06F9/384Register renaming
    • 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/3842Speculative instruction execution
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

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)
  • Memory System (AREA)
  • Electrical Discharge Machining, Electrochemical Machining, And Combined Machining (AREA)
  • Sink And Installation For Waste Water (AREA)
  • Medicines Containing Material From Animals Or Micro-Organisms (AREA)
  • Coloring Foods And Improving Nutritive Qualities (AREA)
  • Peptides Or Proteins (AREA)
  • Communication Control (AREA)

Abstract

在一种实现Load和Store指令乱序调度和执行的超标量处理器中,若Store指令已经翻译,Load指令的Load地址范围包含在该Store指令的地址范围内,而且与该Store指令相关的数据可用,则把与该Store指令相关的数据前送给该Load指令,使得该Load指令可以在不被迫暂停或不被冲掉的情况下继续执行。

Description

存数指令结果的前送的方法和处理器
发明领域
本发明一般地涉及数据处理系统,具体地说,涉及处理器中Load(取数)和Store(存数)指令的乱序执行。
发明背景
本申请与下面的各项申请有关:
题目为:“支持全乱序执行的快速统一中断和转移恢复的方法”、系列号为081829662的美国专利申请,本文中通过参考将其包含在其中;
题目为“推理性执行单元中用于选择性指令冲洗的检查点表”、系列号为08/934960的美国专利申请,本文中通过参考将其包含在其中;
题目为“处理器中Load(取数)和Slore(存数)的乱序执行的支持”、系列号为08/829669的美国专利申请,本文中通过参考将其包含在其中。
为了达到更高的性能水平,处理器和系统的设计者试图提高处理器和系统的时钟速率和提高每个时钟周期完成的工作量。除其他影响外,力求达到较高的时钟速率推动了向去耦设计和半自治单元的方向发展,而同时使单元之间的同步达到最小。增加每一个时钟周期的工作量往往是利用外加的功能单元和试图充分利用可用的指令级的并行性来达到的。
编译器能够试图暴露出程序中存在的指令级的并行性,而同时试图把路径长度减到最小和有限的结构寄存器数目相结合,往往会人为地妨碍编译器完全暴露程序内在的并行性。有许多情况(诸如,下面的指令序列),寄存器资源妨碍更优的指令顺序安排。
FM    FPR5<-FPR4,FPR4
FMA   FPR2<-FPR3,FPR4,FPR5
FMA   FPR4<-FPR6,FPR7,FPR8
这里,假定大部分处理器都具有多周期浮点流水线,第二条指令在第一条指令开始执行后再过几个周期才能执行。在这种情况下,尽管第三条指令的源寄存器或许预期已经可用,而且预期第三条指令在第二条指令之前已经准备好可以执行,但是编译器不选择不同的寄存器分配(因为第三条指令立即要覆盖第二条指令用的FPR4值),就不能将这两条指令对调。程序中选择一种本来对一对指令来说是较优的寄存器分配往往会与另一对指令的最优寄存器分配冲突。
高速缓存不命中的动态行为,为乱序执行比顺序执行计算机可以利用更多的指令级的并行性提供了一个实例。
Loop:
Load    GPR4,8(GPR5)
Add     GPR6,GPR6,GPR4
Load    GPR7,8(GPR3)
Add     GPR8,GPR8,GPR7
Load    GPR9,0(GPR6)
Load    GPR2,0(GPR8)
branch  conditional Loop
在这个实例中,在某些迭代上对于第一条Load(取数指令)会出现高速缓存不命中;在其他迭代上对第二条Load指令会有高速缓存不命中的情况。尽管在逻辑上存在两个独立的计算流,但在顺序执行的处理器中,处理将在高速缓存不命中之后会短时间暂停,直至高速缓存不命中的问题解决之后才会继续下去。
这个例子还表明,乱序执行的串级作用;通过允许在被阻塞的指令(在本实例中是取决于高速缓存不命中的Load指令的一条指令)之外取得进展,随后的高速缓存不命中可以检测出来,与此相关的不命中代价可以(至少部分地)用原来的不命中来复盖。对于多个不命中的复盖高速缓存不命中代价的几率,随着对Load/Store(存数指令)执行支持能力的增大而增大。
随着时钟速率变得越来越高,能够用有用的计算和其他高速缓存不命中来复盖高速缓存不命中的代价变得越来越重要了。
许多当前的处理器都通过允许Load/Store单元以外的所有单元进行乱序执行来提取许多可用的指令级并行性。对非Load/非Store单元乱序执行支持的机制大家都很清楚;两条指令之间所有的潜在冲突都可以通过简单地比较指令中静态指定的寄存器字段来检测。
存储器引用指令的乱序执行是一个相当困难的问题,因为冲突可能通过存储器地址而发生,而且在不知道被引用的地址的情况下该冲突是无法检测的。有效/虚拟地址的产生和到实地址的翻译一般是作为存储器引用指令执行的一部分来完成的。因此,当一个存储器引用指令在另一个逻辑上较早的指令之前执行时,对逻辑上较早的指令来说,在执行当前指令的过程中该地址尚不可得,不能用于比较。
当在乱序和重叠执行的机器上完成Load和Store指令时,若已确定,正在执行的Load指令具有与以前的尚未完成的Store指令重叠的地址,则通常不是需要使Load指令在Store指令完成之前暂停,就是取消该Load指令及任何一个随后的指令。
因此,在先有技术中需要一种在不需要或者让Load指令在Store指令完成之前暂停、或者取消该Load指令及任何一个随后的指令的情况下、把Store指令的数据前送给需要该数据的Load指令的系统和方法。
发明综述
本发明就是针对上述需要的,若Store指令已经翻译,而且Load的地址范围包含在Store的地址范围之内,并且Store的数据已经可用时,就把Store数据向前送给Load指令。
在一个实施例中,本发明在12位的规模上完成Store和Load指令的有效地址位匹配。若匹配,则在16位的规模上完成有效地址位匹配,若与此过程匹配,则就Store和Load指令的实地址进行比较。若实地址匹配,则将Store数据前送给Load指令。
在一个替代的实施例中,若实地址匹配,则判断Store前送过程是被允许还是被禁止。
若完成Store数据前送,则Load指令从Store数据队列而不是从存储器子系统接收它的数据。
为了更好地理解本发明以下的详细描述,上面粗略地描述了本发明的特征和技术上的优点。本发明的其他特征和优点将在以后以本发明的权利要求书要点的形式加以描述。
附图简介
为了比较完全地理解本发明及其优点,现结合附图参阅以下的描述。附图中:
图1举例说明按照本发明配置的一种数据处理系统;
图2举例说明按照本发明配置的处理器;
图3举例说明按照本发明配置的Load/Store单元的进一步细节;
图4举例说明在不实现Store前送的情况下Load-命中-Store的流程图;
图5举例说明在不实现Store前送的情况下Load-命中-Store脚本的逐周期定时图;
图6举例说明Load-命中-Store脚本的检测和Store前送的实现的流程图;
图7举例说明Load-命中-Store脚本中Store前送的逐周期定时图;
图8举例说明按照本发明检测Load-命中-Store脚本和实现Store前送的流程图;以及
图9举例说明按照本发明检测Load-命中-Store的脚本和实现Store前送的逐周期定时图。
具体实施方式详述
在下面的描述中,为了彻底理解本发明,将提出若干特定的细节,诸如特定的字或字节长度等。但是,对于本专业的技术人员来说,显然没有这样一些特定的细节,本发明也可以实现。在其他情况下,为了不使本发明受到不必要的细节的累赘,广为人知的电路用框图的形式表示。就大部分而言,只要定时的细节不是对完全理解本发明所必要的,而且是在本专业的普通技术人员理解范围内的,有关定时等考虑的细节一概从略。
现参照附图,其中所描绘的元件不一定充分表示,而且其中相同或类似的元件在所有的视图中都标以相同的标号。
首先参照图1,其中示出按照本发明配置的数据处理系统。该系统具有中央处理单元(CPU)210,诸如按照“Power PC结构:RISC(简指令系统计算机)处理器新家族的规格”,第二版,1994,Cathy May及其他版(本文通过参考而将其引入)的PowerPC微处理器(Power PC是IBM公司的商标)。Power PC微处理器具体的实现在”Power PC 604 RISC微处理器用户手册”,1994,IBM公司(本文通过参考而将其引入)中描述。这里描述的许多缩写(例如,用来描述特定的指令)是PowerPC的指令,在这些参考书中有进一步的描述。
CPU 210通过系统总线211耦合到各种其他部件。只读存储器(ROM)116耦合到系统总线211,并包括基本输入/输出系统(BIOS),它控制数据处理系统的某些基本功能。随机存储器(RAM)250、I/O(输入/输出)适配器118和通信适配器134也耦合到系统总线211。I/O适配器118可以是小型计算机系统接口(SCSI),它与磁盘存储装置120或磁带存储装置140通信。I/O适配器118、磁盘存储装置120和磁带存储装置140在这里亦称海量存储器252。通信适配器134把总线211连接到外部网络,使该数据处理系统可以与其他这样的系统通信。输入/输出装置也通过用户接口适配器122和显示器适配器136连接到系统总线211。键盘124、轨迹球132、鼠标器126和扩音器128全都通过用户接口适配器122连接到总线211。显示监视器138用显示适配器136连接到系统总线211。这样,用户可以通过键盘124、轨迹球132或鼠标器126向系统输入,或通过扩音器128和显示监视器138接收系统的输出。另外,操作系统,诸如AIX(AIX是IBM公司的商标)用来协调图1所示各组成部分的功能。
现参照图2,这里绘出按照后附权利要求书所列举的本发明处理信息用的数据处理系统的示范性实施例的方框图。在所描绘的示范性实施例中,CPU 210包括单一的集成电路超标量微处理器。因此,正如后面将进一步描述的,CPU 210包括各种执行单元、寄存器、存储器和其他功能单元,它们全都由集成电路构成。正如图2举例说明的,CPU 210通过总线接口单元(BIU)212和处理器总线213耦合到系统总线211,处理器总线象系统总线211一样具有地址。数据和控制总线。BIU 212通过参与总线仲裁控制处理器210与连接到系统总线211上的其他装置之间的信息传递,系统总线211对于理解下面的描述是不必要的,故此为简单起见而从略。
BIU 212连接到指令高速缓存和MMU(Memory Management Unit(存储器管理单元))214和数据高速缓存和MMU 216,使CPU 210能够达到相当快的访问时间来访问以前从主存储器250传送到高速缓存的数据或指令的子集,以此改善数据处理系统的操作速度。分别储存在数据和指令高速缓存中的数据和指令是通过地址标记来识别和访问的,每一个地址标记都包括数据或指令在主存储器250中的物理地址的选定个数的高位。指令高速缓存和MMU 214还耦合到顺序取指器217,后者每个周期都从指令高速缓存取出指令来执行。取指器217把从指令高速缓存和MMU 214取出的转移指令送到转移处理单元(BPU)218来执行,但是,临时把顺序指令存储在指令队列219内,以便由CPU 210内的其他执行电路执行。
在所描绘的示范性实施例中,除了BPU 218以外,CPU 210的执行电路包括多个用来执行顺序指令的执行单元,包括定点单元(FXU)222、Load/Store单元(LSU)228和浮点单元(FPU)230,每一个执行单元222,228和230一般都在一个处理器周期中执行一个或多个特定类型的顺序指令。例如,FXU 222利用从指定的通用存储器(GPR)232接收的源操作数,完成定点算术指令和逻辑指令,诸如,加、减、“与”、“或”、“异”。随着定点指令的执行,FXU 222把指令的数据结果输出到GPR缓冲区232,后者为在结果总线262接收的结果提供存储器。反之,FPU 230一般都对从浮点寄存器(FPR)236接收的源操作数完成单和双精度浮点算术和逻辑操作,诸如,浮点乘和除。FPU 230把从浮点指令执行结果数据输出到选定的储存结果数据的FPR缓冲区236。正如它的名字所暗含的,LSU 228一般执行浮点和定点指令,后者不是从存储器取数(Load)(亦即,数据高速缓存和MMU 216或主存储器250中的数据)放入选定的GPR 232或FPR 236中,就是从选定的GPR 232或FPR 236中的数据存入(Store)存储器250。
CPU 210既使用流水线又使用指令的乱序执行,以便进一步改进超标量结构的性能。因此,指令可以由FXU 222、LSU 228和FPU 230以任何顺序执行,只要数据的依赖性得到遵守。另外,指令以流水线级的顺序由FXU 222、LSU 228和FPU 230中每一个处理。作为高性能处理器的典型,每一条顺序指令都在流水线的5个不同的阶段进行处理,亦即,取指、译码/调度、执行、结束和完成。
在取指阶段,顺序取指器217从指令高速缓存和MMU 214中取出与一个或多个存储器地址相关的一条或多条指令。从指令高速缓存和MMU214取出的顺序指令由顺序取指器217储存在指令队列219内。相反,顺序取指器217从指令流中把转移指令取出(挑出),并把它们送到BPU 218去执行。BPU 218包括转移预测机制,后者在一个实施例中包括动态预测机制,诸如转移历史表等。这使BPU 218能够通过预测是否要转移来预想执行尚未解决的条件转移指令。
在译码/调度阶段,调度单元220进行译码并一般按程序的顺序把一条或多条指令从指令队列219调度给执行单元222,228和230。在比较传统的处理器中,调度单元220为每一条调度的指令的结果数据在GPR重命名缓冲区233或FPR重命名缓冲区内分配重命名缓冲区,在调度阶段,指令还储存在完成单元240的多槽完成缓冲区内,等待完成。但是,本发明可以配置成这样的实施例,即它不要求重命名寄存器,又不需要完成单元。按照所描绘的示范性实施例,在乱序执行中CPU 210利用唯一的指令识别符来跟踪所调度的指令的程序顺序。
在执行阶段,执行单元222,228和230根据时机在操作数和指定操作所需的执行资源变得可用时,执行从调度单元220接收的指令。在一个实施例中,每一个执行单元222,228和230都配备有保留站,用来在操作数或执行资源变得可用之前储存调度给该执行单元的指令。该指令执行结束之后,若有任何结果数据,则执行单元222,228和230根据指令类型将数据结果储存在GPR或FPR内。在比较传统的处理器中,执行单元222,228和230通知完成单元240哪一条指令已经执行结束了。最后,指令以程序的顺序完成,从完成单元240的完成缓冲区出来,指令由FXU 222或FPU230通过把指令的数据结果分别从GPR重命名缓冲区233和FPR重命名缓冲区237传送到GPR 232和FPR 236。由LSU 228执行的Load和Store指令通过把已结束的指令传送到完成Store队列或完成Load队列,由此将完成该指令指出的Load和Store操作。
本发明利用处理器的调度逻辑将经典的冯诺曼指令流“语言符号化”(“tokenize”)为数据流风格的格式。这样,数据依赖关系就不是通过跟踪每一条指令正如在寄存器重命名中所要求的源数据储存地址来处理,而是通过将指令与某些通过引用另一条提供源数据的指令使跟踪源数据成为可能的信息相联系来处理。因此,处理器设置目的识别符(TID)发生器,它产生语言符号或标记,后者的每一个都唯一地与正在调度的指令相联系。TID用来保存程序次序信息和跟踪数据的依赖关系。
在本发明中,调度单元220不只是分配TID和调度指令,而且更新各种用来跟踪被调度指令的状态的表格。
CPU 210支持乱序推测指令执行。指令可以根据预测的转移方向进行推测或在可能引起中断状态的指令以外推测。万一转移预测失准或出现中断的情况,硬件自动从流水线冲掉不需要的指令,并放弃不需要的结果,呈现准确例外的效果并沿着适当的转移路径往下顺序地执行指令。在一个时钟周期内将不正确的推测结果选择性地从所有单元冲掉,并可以在下一个时钟周期继续指令调度。每一组由未解决的转移或可中断的指令所包围的指令赋予一组识别符标记(GID)。
现就一种实现描述本发明,该实现包括多个Load单元和一个Store单元。但是,对于本专业的技术人员来说,显然,可以对本发明进行修改来处理其他配置,诸如,单独一个Load/Store单元等。所提出的本发明允许Load指令就其他Load和Store指令而言乱序执行,而且它允许Store对所有Load指令而言乱序执行。
如上所述,所有指令都以这样的方式加标记,使得任何两条指令之间的相对年龄可以容易地确定。关于这种描述,假定一种(TID)值单调增长的机制。每一条指令的TID值都与它在队列项目或流水线的阶段相联系。
在与冲掉命令相联系的TID和与特定的队列项目或功能单元级相联系的TID之间进行数量级的比较,若一个项目是一条与被冲掉的指令一样或更年轻的指令用的,则将该项目判为无效,用这样的方法,这一基于TID的方法就允许硬件实现一条指令的冲掉机制(响应处理器产生的冲掉命令)。其余所有被冲掉的指令(及所有后续指令)都被从计算机冲掉,而取指单元改变方向在被冲掉的指令的地址开始取指。
接着参照图3,这里举例说明与指令队列219及指令高速缓存214耦合的Load/Store单元228的进一步的细节。还举例说明浮点单元230。图3举例说明基本功能单元和指令队列。功能单元是群集器A 307和群集器B308和Store单元302。本发明集中在三个队列和这些队列之间和Load与Store单元之间的互锁周围。这三个队列是:
。Store地址队列303,
。”预取数”队列309和
。Load-命中-Load队列315。
这些队列中每一个的项目都包括与该项目相联系的指令TID(或年龄指示器)、操作数地址和操作数字节计数。这些信息允许在一个项目与其他任何一个存储器引用之间的相对年龄判定,并允许重叠检测,若要求则可一直下到字节级。
在一个实施例中,在调度”以下”以及Load和Store单元”以上”有两个指令队列:所有被调度的Load指令在等待在Load单元中执行时都排入”PEQ“306队列中,而所有Store指令在等待在Store单元302执行时都排入”SPQ”301队列中。在每一个周期开始时,硬件确定哪一个Store是已调度但尚未翻译的最老的Store,若有这样一个Store存在的话。对于上述指令队列结构,这包括检验Store单元(或几个单元)寻找任何未翻译的Store。若有任何一个存在,则将最老的一个定为”最老的未翻译Store”。若不存在,则检验SPQ 301以寻找最老的未翻译Store。若找到一个这样的Store,则将其定为”最老的未翻译Store”。若找不到,则”最老的未翻译Store”指针内定指向下一条准备调度的指令。
Store地址队列303是所有已经翻译,但相关数据尚未写入L1高速缓存301,311的Store指令的先进先出(FIFO)清单。正在执行Store指令的翻译结果是建立项目。把相关数据写入L1高速缓存310,311的结果是把项目移走。与Store地址队列303相关的是Store数据队列304。当Store指令被调度时,在Store数据队列304中分配项目。若Store数据在项目分配时可用,则该数据放入Store数据队列304。否则,当该数据由功能单元产生时,Store数据队列304将窥探结果总线,并在Store数据队列304获取该数据。象Store地址队列303一样,随着字节写入L1高速缓存310,311,项目被清除。
Store数据队列304和Store地址队列303都耦合到Store数据队列处理单元305,后者耦合到Load不命中队列312,而该队列又耦合到L2高速缓存仲裁逻辑313。因为对这些单元的描述对描述本发明而言是不必要的,所以对它们不再作进一步的描述。请注意,在Load/Store单元228内还可以实现其他功能块,但为简单清晰起见没有示出。
若执行单元302和SPQ 301都并行地以同样的权重进行检验,则本发明可以扩展成Store指令对其他Store指令而言是乱序执行的情况。在本说明书中,假定Store是顺序执行的;因此,以较高的优先级首先检验执行单元302,以便把该Store指令建立为”最老的未翻译Store”。Store的顺序执行还意味着,可以把Store地址队列303作为先入先出(FIFO)队列管理,而不必担心由于Store地址队列空间而死锁。
预取数队列309是本发明特有的,并保存所有在逻辑上跟在”最老的未翻译Store”之后的已翻译的Load地址。在每个周期的开始,判定是否有任何正在Load单元执行的Load指令在逻辑上是跟在”最老的未翻译Store”之后的指令。若有,则认为它们是”预取数”(preload),并在预取数队列309中要求一个项目来执行。若在预取数队列309没有地方,但又需要一个项目,结果将产生以下两个动作之一:
<1>若正在执行的Load指令比预取数队列309中所有的Load年轻(在逻辑上在它们之后),则这个load指令(及所有随后的指令)从机器210冲掉,而取指单元217改变方向,以便在冲掉的Load指令的地址上开始取指。
<2>若在预取数队列309中有一个项目比正在执行的要求预取数队列项目的Load指令年轻,则冲掉预取数队列309中最年轻的load指令(及所有随后的指令),并且重新取指,并把预取数队列309中被冲掉的Load的项目给予正在执行的Load指令。
为了允许多于一个正在执行的Load在同一个周期中要求预取数队列项目的实现,可直接地对上述进行修改,亦即结果就象是该Load指令按上述规则处理,一次处理一个Load指令,从最老的Load开始。例如,若正在执行的两个Load指令每一个都要求预取数队列项目,但只有一个项目存在,则正在执行的最老的Load指令取得该可用的项目,而正在执行的最年轻的Load遵循上述对已满队列309的规则。
每个周期结束时,预取数队列309中的有效项目与”最老的未翻译Store”进行年龄比较;任何比”最老的未翻译Store”老的(在逻辑上在其之前的)项目都判为无效(放弃)。若预取数队列项目是一个冲掉命令的对象指令(或更年轻的指令)用的,则预取数队列项目也可以作为冲掉命令的结果而被判为无效。
Store地址队列303含有已经翻译但是尚未把它们的数据写入L1高速缓存310,311的Store的地址。另外,为了本发明使用的目的,这个队列303允许Store去翻译和在不等待Store数据的情况下检测例外。使Store指令的这两部分去耦,是处理器210(对存储器引用它通常进行地址产生/翻译)的定点部分与浮点部分230(它产生/归一化浮点数据)去耦的关键。几个当前的设计包括这样的Store地址队列303。正如在大多数实现中一样,Store地址队列303按照先进先出(FIFO)方式管理,而Store地址队列303中最老的项目是下一个要写入L1高速缓存310,311的项目。对于本专业的技术人员来说,显然,最老的项目以外的其他项目可以写入L1高速缓存310,311,允许较年轻但已有数据的Store指令在等待数据的较老的Store指令之前写入。还应该清楚,本发明正如所描述的无需修改即可处理这一改进。
Store地址队列项目在以下两种情况下被判为无效:
。相关的Store操作对L1高速缓存310,311已经完成,或者
。冲掉命令用信号表明Store地址队列的项目应当放弃,因为它比指令冲掉命令的对象年轻。
Load-命中-Load队列315是本发明特有的,并保存所有已翻译的在逻辑上跟在最老未翻译Load或Store之后的Load指令地址。在每个周期开始时,判定是否有任何在Load单元中执行的Load指令是在逻辑上跟在最老未翻译Load或Store之后的指令。若有,则它们在Load-命中-Load队列315中要求一个项目来执行。若在Load-命中-Load队列315中已经没有地方但又需要项目,则结果会执行以下两个动作之一:
<1>若执行中的Load比Load-命中-Load队列315中所有的Load指令都年轻(在逻辑上在它们之后),则这个Load(及其后的所有指令)从机器210冲掉,而取指单元217改变方向,在被冲掉的Load指令地址开始取指。
<2>若Load-命中-Load队列315中的一个项目比执行中的要求预取数队列项目的Load指令年轻,则Load-命中-Load队列315中最年轻的Load指令(及其随后的指令)都冲掉,并重新取指,并将Load-命中-Load队列315中被冲掉的Load的项目给予执行中的Load指令。
为了允许多于一个正在执行的Load在同一个周期中要求Load-命中-Load队列项目的实现,可直接地对上述进行修改。亦即结果就象是该Load指令按上述规则处理,一次处理一个Load指令,从最老的Load开始。例如,若正在执行的两个Load指令每一个都要求Load-命中-Load队列项目,但又只有一个项目存在,则正在执行的最老的Load指令取得该可用的项目,而正在执行的最年轻的Load遵循对已满的队列315的上述规则。
每个周期结束时,将Load-命中-Load队列315中的有效项目与最老未翻译Load指令和最老未翻译Store指令进行年龄比较;比最老未翻译Load指令和最老未翻译Store指令还老的任何项目都被判为无效(放弃)。若该Load-命中-Load队列项目是冲掉命令对象指令(或更年轻的指令)的Load指令用的项目,则Load-命中-Load队列项目也可以作为冲掉命令的结果被判为无效。
注意,预取数队列309和Load-命中-Load队列315含有类似信息,而在某些实现中,可以合并成单一结构。
上面的描述给出了在本发明以下三个一次队列中项目建立和放弃的条件的细节:预取数队列309、Store地址队列303和Load-命中-Load队列315。下一节给出在队列项目之间进行的以提供以前描述的结构存储器一致性要求的地址检查的细节。
考虑一个例子,其中
Load要求来自Store的数据,
load在Store执行之后执行,以及
Load操作从L1高速缓存310,311取得了数据,而同时Store操作仍旧排在Store地址队列303中(亦即,在Store操作更新L1高速缓存310,311之前;亦称完成)。
若Store已经翻译,Load地址范围包含在Store的地址范围内,而且Store数据可用,则可以把Store的数据向前送给Load指令,并允许机器210向前执行。本发明的Store前送/Load-命中-Load检测逻辑取得了优化的优点,该优化由于处理器210分别打破Load和Store跨越32位和16位边界而成为可能。另外,对数据能够前送的限制允许格式化和前送硬件的优化。由于在Load/Store执行周期过程中翻译地址的潜在因素,从性能考虑最好或许是把前送测试分成Load和Store地址已翻译位测试之后的多项基于页偏移量位的测试。涉及指令提交的重叠测试由于有混淆的可能要以实地址为依据;但是,为了推测执行,Load-命中-Store的预测和可能的前送可以在有效地址的基础上完成。
Store前送是Load-命中-Load脚本的特殊情况,并因此还与Load-命中-Store检测逻辑共享某些硬件。Load-命中-Store和Store-命中-Load机制在交叉引用美国专利申请序列号No.08/829,669中描述了。当出现Load-命中-Store脚本时,若Load地址范围包含在Store地址范围内,而且下述条件得到满足,则Load指令从Store数据队列304接收它的数据,而不是从L1高速缓存310,311或从其他存储器子系统组件接收数据。
下面是前送操作的概述。若Load指令(包括所有定点和浮点Load,LWARX,ECIWX,但不包括取多个数/取串:LMX,LSWX和LSWI)在周期1执行,而它碰到(低位16位有效地址op尺寸比较)一个(逻辑上早于)Store操作(在此上下文下,Store包括Store地址队列303中所有要求Store地址队列项目的指令:定点和浮点Store,STWCX,SYNC,ICBI,DCBx,EIEIO,TLBSYNC,TLBIE和ECOWX),Load将保存在群集器执行单元307,308中,而且再执行一个周期。在判定Store地址队列项目是否在逻辑上早于对象Load的过程中,比较相关的TID。所有标有”已提交”(Store已经翻译,而且从IIT(未示出)移出)的Store地址队列项目都保证比这个Load老,而不管TID比较结果为何。若一个Load指令碰到一个以上Store地址队列项目,则只有最年轻出问题的Store被认为是命中。
在周期2中,对Load和Store指令的32实地址(RA)位进行比较,以确定它是否真正的Load-命中-Store状态。地址/TID比较在周期2中完成,而Store地址队列303会包括任何在周期1翻译的Store指令,但不会包括在回写比较周期(周期2)中翻译的Store指令。
若32位实地址比较表明它不是Load-命中-Store(亦即无字节重叠),则IDU 220用信号在周期3表示冲掉。若32位实地址比较表明它是Load-命中-Store(亦即,一个或多个字节重叠),则:
a)若Store前送被禁止,则IDU 220将用信号在周期3表示一个对冲掉所述Load。
b)若Store前送被允许,则若数据可用,则在重执行的第一周期完成该Load指令(无冲掉)。若满足下列条件,则数据可用:
a)Load数据包含在单独一个SDQ项目中;
b)SDQ项目中的数据有效;
c)不论Load还是Store都是在I=1空间(两个都是可高速缓存地址);
d)Load不跨越16字节边界;而且
e)下列各对Store/Load、尺寸/对齐中的一对为真:
1.STB                前送到LB
2.STH                前送到LH
3.STW/STFS           前送到LW或LFS
4.STWBRX             前送到LWBRX
5.STHWBRX            前送到LHBRX
6.字对齐STW          前送到LB或LH
7.字对齐STFS         前送到LB,LH,LW或LFS
8.字对齐STFD         前送到LB,LH,LW或LFS
9.字对齐STMW 前送到 LB,LH,LW或LFS
10.字对齐STSWX/I 前送到 LB,LH,LW或LFS
应用情况9和10就象是SDQ项目是由各个字对齐字访问(情况6)的集合建立的。若该字含有少于4字节,则情况10不允许前送。
若数据不可用,则IDU 220将在周期3用信号表示Flush(冲掉)Load指令。若数据可用,则与L1高速缓存命中情况相比数据前送延迟一个周期。
Store地址队列303和Store数据队列304含有与检测潜在Store前送脚本相关的外加逻辑,为Store前送提供数据,冲掉不成功的Store前送机会。下面一节将描述Load-命中-Store逻辑和Store前送如何利用有效地址和实地址比较。本节描述Store/Load尺寸和对齐(上述规则e)如何确定,Store前送是否能发生,及如何完成必要的格式化。这假定Load-命中-Store重叠已得到核实。然后,最年轻的有问题的Store指令的数据可用性和Load/Store尺寸/对齐(上述规则a至e)确定前送是否会发生。
上述规则e的前5项相当于Load和Store之间的精确尺寸和对齐匹配。检测这一状态就要求Load和Store之间准确的实地址比较(因此,同样对齐),以及Load和Store同样尺寸。只要不横跨16字节边界,Load和Store可以不对齐。
规则e的第6项至第10项允许不同尺寸的Load和Stored有限的前送。若Store字或Store双字是字对齐的,则除了Load字(这也包括在前5项中)之外,Store数据还可以前送到Load字节和Load半字节。检测第6项至第10项的可用性要求Load和Store之间的准确比较,但最后两位除外。若Load指令是字节Load,则Store字可以前送到Load。若Load是半字,则Store字可以前送到Load,只要Load地址的最后两位不是二进制的”11”。
为完成Store前送,规则e的前5项并不要求任何格式化。每一个执行群集器307,308用的12端口多路开关(未示出)选择要前送的Store数据队列项目。将信号送到群集器,以便把该项目直接传送到结果总线262,因为无需格式化。第6至10项要求Store数据在返回到结果总线262之前移位0至3字节。因为在这些规则中,Store是字对齐的,执行群集器可以使用从L1高速缓存的输出要求的同样的格式化器以及已经由Load地址为正确移位量正确配置的控制。Store前送逻辑只需要根据Load地址指出是否应该取前送数据,或者Load格式化器是否必须对数据进行移位。
当已经检测到Load-命中-Store,并确定了最年轻的有问题的Store时,用12端口多路开关(未示出)选择对应的Store数据队列项目。一旦执行群集器307,308由于Load-命中-Store状态而停住,群集器307,308假定它会从Store数据队列304接收有效数据。若上述Store前送规则得不到满足,则Store前送逻辑将对Load指令发出Flush命令。
图4表示Load-命中-Store检测流程,假定不实现Store前送。图5举例说明Load的可能的定时,假定L1高速缓存命中而且TSA(TranslationShadow Array(翻译阴影阵列))命中。在Load的执行周期中,在该Load指令与Store地址队列303每一个有效项之间进行12位有效地址重叠比较。在执行周期中12位有效地址重叠比较把已翻译地址可用时在下一个周期中要求的比较逻辑减到最小。若Load翻译成功,则在下一周期中完成实地址比较。因为12位有效地址重叠比较已在前一周期中完成,而且当Load和Store跨越32位和16位边界时,Load和Store分解成多个Load和Store这一事实,故只需要完成12位页地址相等比较。能够在完全翻译地址之前完成12位重叠比较,就减少了关键的路径定时,因为12位重叠测试包括一组数量级比较,后者比24位相等性比较慢。为了避免乱序执行机器出现死锁,当不支持Store前送时,若在Store地址队列303中Load与Store重叠,则Load和所有指令以及Load之后的结果都从处理器210冲掉。
图6举例说明一个实施例中检测Load-命中-Store脚本和实现Store前送的流程图。图7举例说明这样一种Load-命中-Store脚本下Store前送的逐周期定时。在Load的执行周期中,在该Load和Store地址队列303的每一个有效项之间进行12位有效地址重叠比较。若12位有效地址与一个Store地址队列项匹配,则执行群集器307,308暂停。下一个周期,若Load翻译成功,则完成实地址比较。若实地址不匹配,则上一个周期从L1高速缓存310,311取出的数据返回到结果总线262送往GPR 232。若实地址匹配,并满足Store前送规则,则Store的数据前送到该Load。若实地址匹配,但不满足Store前送要求,则Load被冲掉。
遗憾的是,正如图7所示的情况B要求执行群集器307,308能够在执行周期中保存从L1高速缓存310,311取出的数据,而若Load-命中-Store条件为假,则下一个周期把该数据前送到它的结果总线262。其结果是,在定时已经很关键的路径上要求增加周期时间。已发现的另一个选择涉及利用12位有效地址重叠比较来确定群集器307,308是否应该暂停,而且然后在下一个周期中,若Store数据不能满足Load的要求,则应将Load冲掉。这一选择的结果是额外的Load冲掉,使总体性能降低。
本发明实现替代的Store前送机制,它是以已经设计的Load-命中-Store硬件为基础的。为了让Store前送的结果是使净性能提高,不能象图6和7实施例那样要延长处理器的周期时间。那个实施例要求数据流路径在确定Load-命中-Store的周期中保存Load的结果。这一数据流路径可以决定整个芯片的周期时间,所以,延长路径来完成Store前送不能提高整体性能。研制了另一个方案,使得即使在执行之后的周期之前还不会发生实地址比较,也不需要保存Load的结果。执行群集器是否要暂停的判决在执行周期中完成,但是一旦执行群集器暂停,不是需要从Store队列将数据前送,就是必须冲掉Load。
这另一方案的实施例示于图8和9。下面将进一步描述情况A,B,C,D。在执行周期中,12位和16位有效地址比较都已完成。若12位有效地址重叠比较对Store地址队列所有的有效项都失败,则没有Load-命中-Store,而Load可以把它的数据返回到结果总线262送往GPR 232。若12位有效地址与Store地址队列项匹配,但是16位有效地址不匹配,则本发明推想没有Load-命中-Store,而执行群集器307,308不暂停。在很少出现的虚拟-到-实地址混淆的事件中,若有效地址不重叠,但是实地址重叠,则冲掉Load。(因为执行群集器307,308不暂停,处理器210不能把Store数据前送到Load)若Load的16位有效地址与Store地址队列项匹配,则执行群集器307,308预想到Load-命中-Store冲掉,或者Store数据前送而暂停。若下一个周期实地址匹配,则本发明确定前送是否符合上述规则。否则冲掉Load。
注意,若16位有效地址匹配,但是实地址不匹配,则尽管不出现Load-命中-Store状态也发生冲掉。其结果是,Load-命中-Store检测为假,并引起不必要地取消指令的执行。本发明比较4个额外的地址位来减少它的出现次数。这一Load-命中-Store为假的代价必须小于出现Store前送而得到的性能增益。所得的Store前送实现提高了Load在不引起周期时间延长的情况下执行的百分比。因此,处理器210的整体性能由于Store前送的这一实现而得到改善。
就图8注解1而言,Load数据可能已在前一个周期正确地取出。但是由于16位有效地址比较,该过程确定,发生潜在的Load-命中-Store状态,并选择使执行群集器307,308暂停,强迫Store单元不是前送来自Store数据队列的数据,就是冲掉Load指令。
就图8注解2而言,在16位有效地址不重叠,但是实地址重叠时出现地址空间混淆。处理器210检测到这一情况以便正确执行。因为执行群集器307,308不暂停,本发明取消了把Store数据前送到Load的选择。但是这种情况是极其罕见的。
在12位比较中用的地址低位不受翻译影响,而且缺少没有Load-命中-Store冲突或Store前送机会的匹配保证。但是,完成16位比较用的剩余位是翻译的。所以,从16位比较结果来的初始步骤基本上是以外加的有效地址位之间的匹配(或不匹配)准确地反映两个地址的整组翻译位之间的匹配(和不匹配)这一预测为基础的。注意,在所有这一预测不正确的情况下,Load操作(及随后的指令)都冲掉并重新取指,从预测不准中恢复过来。
图8和9所示的各种情况是:
情况A-无Load Store重叠。
      有效地址的任何低12位都不与任何Store项匹配,或
      若低12为匹配,而有效地址低16位不匹配,而且下一
      周期页地址对该Store项比较失败。
情况B-实行群集器暂停,而不能前送数据。
      16位有效地址比较,而且不能前送数据->冲掉
      不是Load_命中-Store,而且不能前送数据,就是页地址
      不匹配,因此不能前送数据。
情况C-Load_命中-Store,同时Store数据前送至Load。
情况D-Load_命中-Store,其中低16位有效地址不匹配,但因
      虚拟到实地址混淆,Load的实地址与Store实地址重
      叠。若实地址相等,但有效地址不匹配,则处理器210
      在这种稀少的情况下不前送数据,以减轻周期时间的问
      题。
尽管已经详细地描述了本发明及其优点,但应明白,这里在不离开本发明在后附权利要求书所定义的精神和范围的情况下可以作出各种改变、替代和更换。

Claims (30)

1.一种把Store指令的结果数据前送给Load指令的方法,其中当所述Load指令正在执行时,该Store指令尚未更新所述数据,其特征在于所述方法包括以下步骤:
确定在所述Load指令的数据地址和所述Store指令的数据地址之间是否有任何共同的字节;
确定Load指令是否在逻辑上跟在所述Store指令之后;以及
若在所述Load指令的所述数据地址和所述Store指令的所述数据地址之间有任何共同的字节,而且若所述Load指令在逻辑上跟在所述Store指令后面,则把所述数据前送给所述Load指令;
其中,所述在所述Load指令的所述地址和所述Store指令的所述地址之间确定是否有任何共同字节的步骤还包括:
比较所述Load指令和所述Store指令的有效地址;以及
比较所述Load指令和所述Store指令的实地址。
2.权利要求1所叙述的方法,其特征在于:所述Store指令位于与Store执行单元耦合的Store地址队列中,而其中所述数据位于Store数据队列中。
3.权利要求1所叙述的方法,其特征在于:它还包括确定所述数据是否可用的步骤。
4.权利要求1所叙述的方法,其特征在于:所述Store指令在所述确定步骤之前已经翻译。
5.权利要求2所叙述的方法,其特征在于:所述前送步骤还包括把所述数据从所述Store数据队列送到执行所述Load指令的Load执行单元的步骤。
6.权利要求2所叙述的方法,其特征在于:所述确定步骤还包括把所述Load指令与所述Store地址队列中的Store指令加以比较的步骤。
7.权利要求1所叙述的方法,其特征在于:所述比较有效地址的步骤还包括以下步骤:
比较所述Load指令和所述Store指令的所述有效地址的低N位;以及
若所述低N位匹配,则比较所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
8.权利要求3所叙述的方法,其特征在于:它还包括若所述数据不可用则冲掉所述Load指令的步骤。
9.在包括通过系统总线耦合到存储器系统的处理器的数据处理系统中,一种方法包括以下步骤:
把Store指令调度给Store执行单元;
在所述Store执行单元中执行所述Store指令;
在所述Store指令所述执行之后把所述Store指令传送到Store地址队列,其中与所述Store指令相联系的数据是在Store数据队列中;
把Load指令调度给Load执行单元,其中所述Load指令在逻辑上跟在所述Store指令之后;
在所述Load执行单元中执行所述Load指令;
把所述Load指令的有效地址与所述Store指令的有效地址加以比较;
若所述Load指令的所述有效地址与所述Store指令的所述有效地址匹配,则把所述Load指令的实地址与所述Store指令的实地址加以比较;以及
若所述Load指令的所述实地址与所述Store指令的所述实地址匹配,则把来自所述Store数据队列的所述数据前送给所述Load指令。
10.权利要求9所叙述的方法,其特征在于:若所述数据可用,则执行所述前送步骤。
11.权利要求9所叙述的方法,其特征在于:在所述Store地址队列中的所述Store指令已经翻译。
12.权利要求9所叙述的方法,其特征在于:所述比较有效地址的步骤还包括下列步骤:
比较所述Load指令和所述Store指令的所述有效地址的低N位;以及
若所述低N位匹配,则比较所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
13.一种处理器,其特征在于包括:
指令调度单元;
Load执行单元,可操作来从所述指令调度单元接收Load指令;
Store执行单元,可操作来从所述指令调度单元接收Store指令,其中所述Load指令在逻辑上跟在所述Store指令之后;
与所述Store执行单元耦合的Store数据队列;
与所述Store执行单元耦合的Store地址队列;
在所述Store执行单元中执行所述Store指令用的电路;
在所述Store指令的所述执行之后,把所述Store指令传送到所述Store地址队列用的电路,其中与所述Store指令相关联的数据是在所述Store数据队列中;
在所述Load执行单元中执行所述Load指令用的电路;
比较所述Load指令的数据地址和所述Store指令的数据地址用的电路;
若所述Load指令的所述数据地址和所述Store指令的所述数据地址匹配,则把所述数据从所述Store数据队列前送到所述Load指令用的电路;
其中,所述比较电路还包括:
比较所述Load指令的有效地址和所述Store指令的有效地址用的电路;以及
若所述Load指令的所述有效地址和所述Store指令的所述有效地址匹配,则比较所述Load指令的实地址和所述Store指令的实地址用的电路,其中若所述实地址匹配,则完成所述数据的所述前送。
14.权利要求13所叙述的处理器,其特征在于:所述比较所述有效地址用的电路还包括:
比较所述Load指令和所述Store指令的所述有效地址低12位用的电路;
比较所述Load指令和所述Store指令的所述有效地址低16位用的电路
15.在一种处理器中,一种把来自Store数据队列的Store指令得出的数据前送给Load指令的方法,其中所述Load指令是在Load执行单元中执行的,其特征在于所述方法包括以下步骤:
确定在所述Load指令的有效地址和所述Store指令的有效地址之间是否有任何共同的字节;
若在所述Load指令的所述有效地址和所述Store指令的所述有效地址之间有任何共同的字节,则使所述Load执行单元中的所述Load指令暂停;
确定所述Load指令的实地址与所述Store指令的实地址是否匹配;
若所述Load指令的所述实地址和所述Store指令的所述实地址匹配,则把所述数据前送到所述Load执行单元。
16.权利要求15所叙述的方法,其特征在于:所述方法还包括判定所述Load指令是否在逻辑上跟在所述Store指令后面的步骤。
17.权利要求15所叙述的方法,其特征在于:若所述Load指令的所述有效地址与所述Store指令的所述有效地址之间有任何共同的字节,则完成所述判定所述Load指令的所述实地址是否与所述Store指令的所述实地址匹配的步骤。
18.权利要求15所叙述的方法,其特征在于:所述判定所述Load指令的所述有效地址与所述Store指令的所述有效地址之间是否有任何共同字节的步骤还包括以下步骤:
比较所述Load指令和所述Store指令的所述有效地址的低N位;以及
若所述低N位匹配,则比较所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
19.权利要求18所叙述的方法,其特征在于:它还包括若所述低N位不匹配,则所述Load指令向前正常执行的步骤。
20.权利要求18所叙述的方法,其特征在于:它还包括若所述低M位不匹配,则所述Load指令向前正常执行的步骤。
21.权利要求18所叙述的方法,其特征在于:它还包括若所述实地址不匹配,则冲掉所述Load指令的步骤。
22.在处理器中的一种方法,其特征在于包括以下步骤:
比较Load指令的有效地址和Store指令的有效地址;以及
根据所述Load指令的所述有效地址是否与所述Store指令的所述有效地址匹配,来预测所述Load指令的实地址是否会与所述Store指令的实地址匹配。
23.权利要求22所叙述的方法,其特征在于:所述预测步骤还包括若所述Load指令的所述有效地址与所述Store指令的所述有效地址匹配,则预测所述Load指令的实地址会与所述Store指令的实地址匹配的步骤。
24.权利要求23所叙述的方法,其特征在于:所述Load指令在Load执行单元中执行,而且所述方法还包括若所述Load指令的所述有效地址与所述Store指令的所述有效地址匹配,则使所述Load指令的执行暂停的步骤。
25.权利要求24所叙述的方法,其特征在于:它还包括若所述Load指令的所述有效地址与所述Store指令的所述有效地址不匹配,则使所述Load指令向前正常执行的步骤。
26.权利要求25所叙述的方法,其特征在于:它还包括若所述Load指令的所述实地址与所述Store指令的所述实地址不匹配,则冲掉所述Load指令的步骤。
27.权利要求18所叙述的方法,其特征在于:它还包括当所述Load指令的所述实地址与所述Store指令的所述实地址匹配时,把与所述Store指令相关的数据前送给所述Load执行单元的步骤。
28.权利要求23所叙述的方法,其特征在于:所述比较所述Load指令的所述有效地址是否与所述Store指令的所述有效地址匹配的步骤还包括以下步骤:
比较所述Load指令和所述Store指令的所述有效地址的低N位;以及
若所述低N位匹配,则比较所述Load指令和所述Store指令的所述有效地址的低M位,其中N小于M。
29.权利要求22所叙述的方法,其特征在于:所述预测步骤还包括若所述Load指令的所述有效地址与所述Store指令的所述有效地址不匹配,则预测所述Load指令的所述实地址不会与所述Store指令的所述实地址匹配的步骤。
30.权利要求29所叙述的方法,其特征在于:它还包括若所述Load指令的所述实地址与所述Store指令的所述实地址匹配,则冲掉所述Load指令的步骤。
CN98105772A 1997-04-10 1998-03-19 存数指令结果的前送的方法和处理器 Expired - Fee Related CN1095117C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US826854 1997-04-10
US08/826,854 US6021485A (en) 1997-04-10 1997-04-10 Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US826,854 1997-04-10

Publications (2)

Publication Number Publication Date
CN1195809A CN1195809A (zh) 1998-10-14
CN1095117C true CN1095117C (zh) 2002-11-27

Family

ID=25247703

Family Applications (1)

Application Number Title Priority Date Filing Date
CN98105772A Expired - Fee Related CN1095117C (zh) 1997-04-10 1998-03-19 存数指令结果的前送的方法和处理器

Country Status (11)

Country Link
US (1) US6021485A (zh)
EP (1) EP0871109B1 (zh)
JP (1) JP3096451B2 (zh)
KR (1) KR100303673B1 (zh)
CN (1) CN1095117C (zh)
AT (1) ATE242509T1 (zh)
BR (1) BR9801230A (zh)
DE (1) DE69815201D1 (zh)
IL (1) IL123426A (zh)
MY (1) MY121300A (zh)
TW (1) TW360848B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104823168A (zh) * 2012-06-15 2015-08-05 索夫特机械公司 用于实现从由加载存储重新排序和优化所引发的推测性转发缺失预测/错误中恢复的方法和系统
US9904552B2 (en) 2012-06-15 2018-02-27 Intel Corporation Virtual load store queue having a dynamic dispatch window with a distributed structure
US9965277B2 (en) 2012-06-15 2018-05-08 Intel Corporation Virtual load store queue having a dynamic dispatch window with a unified structure
US9990198B2 (en) 2012-06-15 2018-06-05 Intel Corporation Instruction definition to implement load store reordering and optimization
US10019263B2 (en) 2012-06-15 2018-07-10 Intel Corporation Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US10048964B2 (en) 2012-06-15 2018-08-14 Intel Corporation Disambiguation-free out of order load store queue

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990003937A (ko) * 1997-06-26 1999-01-15 김영환 프리페치 장치
US6308260B1 (en) * 1998-09-17 2001-10-23 International Business Machines Corporation Mechanism for self-initiated instruction issuing and method therefor
US6141747A (en) * 1998-09-22 2000-10-31 Advanced Micro Devices, Inc. System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US7779236B1 (en) * 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6349382B1 (en) * 1999-03-05 2002-02-19 International Business Machines Corporation System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order
EP1050807A1 (en) * 1999-05-03 2000-11-08 Sgs Thomson Microelectronics Sa Memory access in a computer memory
US6523109B1 (en) 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6481251B1 (en) 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6717577B1 (en) * 1999-10-28 2004-04-06 Nintendo Co., Ltd. Vertex cache for 3D computer graphics
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6970996B1 (en) * 2000-01-04 2005-11-29 National Semiconductor Corporation Operand queue for use in a floating point unit to reduce read-after-write latency and method of operation
US6640293B1 (en) * 2000-07-24 2003-10-28 International Business Machines Corporation Apparatus and method of utilizing Alias Hit signals to detect errors within the real address tag arrays
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
US6941449B2 (en) * 2002-03-04 2005-09-06 Hewlett-Packard Development Company, L.P. Method and apparatus for performing critical tasks using speculative operations
US20030177312A1 (en) * 2002-03-15 2003-09-18 Aravindh Baktha Controlling a store data forwarding mechanism during execution of a load operation
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
US7222226B1 (en) 2002-04-30 2007-05-22 Advanced Micro Devices, Inc. System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7434031B1 (en) * 2004-04-12 2008-10-07 Sun Microsystems, Inc. Execution displacement read-write alias prediction
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
US7376816B2 (en) * 2004-11-12 2008-05-20 International Business Machines Corporation Method and systems for executing load instructions that achieve sequential load consistency
US7363468B2 (en) 2004-11-18 2008-04-22 International Business Machines Corporation Load address dependency mechanism system and method in a high frequency, low power processor system
US7900023B2 (en) * 2004-12-16 2011-03-01 Intel Corporation Technique to enable store forwarding during long latency instruction execution
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US20070288725A1 (en) * 2006-06-07 2007-12-13 Luick David A A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US7461238B2 (en) * 2006-06-07 2008-12-02 International Business Machines Corporation Simple load and store disambiguation and scheduling at predecode
US7600097B1 (en) * 2006-09-05 2009-10-06 Sun Microsystems, Inc. Detecting raw hazards in an object-addressed memory hierarchy by comparing an object identifier and offset for a load instruction to object identifiers and offsets in a store queue
US7594100B2 (en) * 2006-09-29 2009-09-22 Sun Microsystems, Inc. Efficient store queue architecture
US8627047B2 (en) * 2008-02-15 2014-01-07 International Business Machines Corporation Store data forwarding with no memory model restrictions
EP2202637B1 (en) * 2008-12-25 2018-02-07 STMicroelectronics (Beijing) R&D Co. Ltd. Reduced power load/store queue searching mechanism
US8086826B2 (en) * 2009-03-24 2011-12-27 International Business Machines Corporation Dependency tracking for enabling successive processor instructions to issue
WO2012107800A1 (en) * 2011-02-11 2012-08-16 Freescale Semiconductor, Inc. Integrated circuit devices and methods for scheduling and executing a restricted load operation
US9069563B2 (en) 2011-09-16 2015-06-30 International Business Machines Corporation Reducing store-hit-loads in an out-of-order processor
CN102364431B (zh) * 2011-10-20 2014-09-10 北京北大众志微系统科技有限责任公司 一种实现读指令执行的方法及装置
US9128725B2 (en) 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US9003225B2 (en) * 2012-10-17 2015-04-07 Advanced Micro Devices, Inc. Confirming store-to-load forwards
US8977821B2 (en) * 2012-10-25 2015-03-10 Texas Instruments Incorporated Parallel processing of multiple block coherence operations
US9535695B2 (en) * 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
US9361113B2 (en) 2013-04-24 2016-06-07 Globalfoundries Inc. Simultaneous finish of stores and dependent loads
US9665468B2 (en) 2013-08-19 2017-05-30 Intel Corporation Systems and methods for invasive debug of a processor without processor execution of instructions
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
US9619382B2 (en) 2013-08-19 2017-04-11 Intel Corporation Systems and methods for read request bypassing a last level cache that interfaces with an external fabric
US9361227B2 (en) 2013-08-30 2016-06-07 Soft Machines, Inc. Systems and methods for faster read after write forwarding using a virtual address
US10303480B2 (en) * 2013-10-30 2019-05-28 Advanced Micro Devices Unified store queue for reducing linear aliasing effects
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US9940264B2 (en) * 2014-10-10 2018-04-10 International Business Machines Corporation Load and store ordering for a strongly ordered simultaneous multithreading core
US9996356B2 (en) * 2015-12-26 2018-06-12 Intel Corporation Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US9983875B2 (en) 2016-03-04 2018-05-29 International Business Machines Corporation Operation of a multi-slice processor preventing early dependent instruction wakeup
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US10037211B2 (en) 2016-03-22 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor with an expanded merge fetching queue
US10346174B2 (en) 2016-03-24 2019-07-09 International Business Machines Corporation Operation of a multi-slice processor with dynamic canceling of partial loads
US10761854B2 (en) * 2016-04-19 2020-09-01 International Business Machines Corporation Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor
US10037229B2 (en) 2016-05-11 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
US9934033B2 (en) 2016-06-13 2018-04-03 International Business Machines Corporation Operation of a multi-slice processor implementing simultaneous two-target loads and stores
US10042647B2 (en) 2016-06-27 2018-08-07 International Business Machines Corporation Managing a divided load reorder queue
US10318419B2 (en) 2016-08-08 2019-06-11 International Business Machines Corporation Flush avoidance in a load store unit
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10579387B2 (en) * 2017-10-06 2020-03-03 International Business Machines Corporation Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
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
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
US10534616B2 (en) * 2017-10-06 2020-01-14 International Business Machines Corporation Load-hit-load detection in an out-of-order processor
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
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
US11113065B2 (en) * 2019-04-03 2021-09-07 Advanced Micro Devices, Inc. Speculative instruction wakeup to tolerate draining delay of memory ordering violation check buffers
CN112445587A (zh) * 2019-08-30 2021-03-05 上海华为技术有限公司 一种任务处理的方法以及任务处理装置
US11113056B2 (en) * 2019-11-27 2021-09-07 Advanced Micro Devices, Inc. Techniques for performing store-to-load forwarding
US11687337B2 (en) * 2021-08-20 2023-06-27 International Business Machines Corporation Processor overriding of a false load-hit-store detection
CN113961247B (zh) * 2021-09-24 2022-10-11 北京睿芯众核科技有限公司 一种基于risc-v处理器的向量存/取指令执行方法、系统及装置
CN117478089B (zh) * 2023-12-28 2024-03-29 北京微核芯科技有限公司 存数指令执行方法、装置及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5467473A (en) * 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
US5606670A (en) * 1993-12-30 1997-02-25 Intel Corporation Method and apparatus for signalling a store buffer to output buffered store data for a load operation on an out-of-order execution computer system
US5615350A (en) * 1994-10-24 1997-03-25 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load-store instructions in a processor capable of dispatching, issuing and executing multiple instructions in a single processor cycle
US5659782A (en) * 1992-09-29 1997-08-19 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
CN1224199A (zh) * 1998-01-20 1999-07-28 国际商业机器公司 具有改善的乱序支持的微处理器

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784586A (en) * 1995-02-14 1998-07-21 Fujitsu Limited Addressing method for executing load instructions out of order with respect to store instructions
US5754812A (en) * 1995-10-06 1998-05-19 Advanced Micro Devices, Inc. Out-of-order load/store execution control
US5751946A (en) * 1996-01-18 1998-05-12 International Business Machines Corporation Method and system for detecting bypass error conditions in a load/store unit of a superscalar processor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5659782A (en) * 1992-09-29 1997-08-19 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
US5467473A (en) * 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
US5606670A (en) * 1993-12-30 1997-02-25 Intel Corporation Method and apparatus for signalling a store buffer to output buffered store data for a load operation on an out-of-order execution computer system
US5615350A (en) * 1994-10-24 1997-03-25 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load-store instructions in a processor capable of dispatching, issuing and executing multiple instructions in a single processor cycle
CN1224199A (zh) * 1998-01-20 1999-07-28 国际商业机器公司 具有改善的乱序支持的微处理器

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104823168A (zh) * 2012-06-15 2015-08-05 索夫特机械公司 用于实现从由加载存储重新排序和优化所引发的推测性转发缺失预测/错误中恢复的方法和系统
US9904552B2 (en) 2012-06-15 2018-02-27 Intel Corporation Virtual load store queue having a dynamic dispatch window with a distributed structure
US9928121B2 (en) 2012-06-15 2018-03-27 Intel Corporation Method and system for implementing recovery from speculative forwarding miss-predictions/errors resulting from load store reordering and optimization
US9965277B2 (en) 2012-06-15 2018-05-08 Intel Corporation Virtual load store queue having a dynamic dispatch window with a unified structure
US9990198B2 (en) 2012-06-15 2018-06-05 Intel Corporation Instruction definition to implement load store reordering and optimization
US10019263B2 (en) 2012-06-15 2018-07-10 Intel Corporation Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US10048964B2 (en) 2012-06-15 2018-08-14 Intel Corporation Disambiguation-free out of order load store queue
CN104823168B (zh) * 2012-06-15 2018-11-09 英特尔公司 用于实现从由加载存储重新排序和优化导致的推测性转发遗漏预测/错误中恢复的方法和系统
US10592300B2 (en) 2012-06-15 2020-03-17 Intel Corporation Method and system for implementing recovery from speculative forwarding miss-predictions/errors resulting from load store reordering and optimization

Also Published As

Publication number Publication date
BR9801230A (pt) 1999-04-27
KR19980079702A (ko) 1998-11-25
US6021485A (en) 2000-02-01
EP0871109B1 (en) 2003-06-04
EP0871109A3 (en) 2000-12-06
TW360848B (en) 1999-06-11
EP0871109A2 (en) 1998-10-14
ATE242509T1 (de) 2003-06-15
MY121300A (en) 2006-01-28
IL123426A0 (en) 1998-09-24
IL123426A (en) 2001-04-30
DE69815201D1 (de) 2003-07-10
JP3096451B2 (ja) 2000-10-10
JPH10320198A (ja) 1998-12-04
KR100303673B1 (ko) 2001-09-24
CN1195809A (zh) 1998-10-14

Similar Documents

Publication Publication Date Title
CN1095117C (zh) 存数指令结果的前送的方法和处理器
CN107851020B (zh) 用于指令存储器效率的设备和处理架构
US9201801B2 (en) Computing device with asynchronous auxiliary execution unit
JP3927546B2 (ja) 同時マルチスレッド化プロセッサ
US6728866B1 (en) Partitioned issue queue and allocation strategy
US5961636A (en) Checkpoint table for selective instruction flushing in a speculative execution unit
US5721855A (en) Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer
EP0751458B1 (en) Method and system for tracking resource allocation within a processor
US8099582B2 (en) Tracking deallocated load instructions using a dependence matrix
US5931957A (en) Support for out-of-order execution of loads and stores in a processor
US8074060B2 (en) Out-of-order execution microprocessor that selectively initiates instruction retirement early
US6279105B1 (en) Pipelined two-cycle branch target address cache
US8145887B2 (en) Enhanced load lookahead prefetch in single threaded mode for a simultaneous multithreaded microprocessor
US20130086367A1 (en) Tracking operand liveliness information in a computer system and performance function based on the liveliness information
US6697939B1 (en) Basic block cache microprocessor with instruction history information
JP2001175473A (ja) コンピュータ処理システムにおいて実行述語を実現する方法及び装置
JP3689369B2 (ja) 2次リオーダ・バッファ・マイクロプロセッサ
US7254700B2 (en) Fencing off instruction buffer until re-circulation of rejected preceding and branch instructions to avoid mispredict flush
US20080229065A1 (en) Configurable Microprocessor
JPH096611A (ja) データ処理システムにおけるデータをバッファリングする方法およびシステム
JP3207124B2 (ja) カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置
US20080229058A1 (en) Configurable Microprocessor
KR20010070434A (ko) 기본 블럭 캐쉬를 이용하는 마이크로프로세서
CN102163139A (zh) 微处理器融合载入算术/逻辑运算及跳跃宏指令
JP2000020307A (ja) 分散命令完了論理

Legal Events

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

Granted publication date: 20021127