CN102652304B - 预测并避免乱序微处理器中的操作数-存储-比较冒险 - Google Patents

预测并避免乱序微处理器中的操作数-存储-比较冒险 Download PDF

Info

Publication number
CN102652304B
CN102652304B CN201080056309.2A CN201080056309A CN102652304B CN 102652304 B CN102652304 B CN 102652304B CN 201080056309 A CN201080056309 A CN 201080056309A CN 102652304 B CN102652304 B CN 102652304B
Authority
CN
China
Prior art keywords
instruction
storage
risk
load instructions
entry
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
CN201080056309.2A
Other languages
English (en)
Other versions
CN102652304A (zh
Inventor
C.雅各比
B.W.汤姆托
G.W.亚历山大
K.J.亚历山大
B.W.柯伦
J.R.米切尔
J.T.塞
B.R.普拉斯基
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
Priority claimed from US12/644,923 external-priority patent/US8468325B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN102652304A publication Critical patent/CN102652304A/zh
Application granted granted Critical
Publication of CN102652304B publication Critical patent/CN102652304B/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
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Abstract

提供了用于管理乱序执行的加载和存储操作的方法和信息处理系统。执行加载指令和存储指令中的至少一个指令。确定已经遇到操作数存储比较冒险。基于所述确定,在操作数存储比较冒险预测表中创建条目。所述条目至少包括已执行的指令的指令地址、以及与所述已执行的指令相关联的冒险指示标志。所述冒险指示标志指示所述指令已经遇到操作数存储比较冒险。当加载指令与所述冒险指示标志相关联时,所述加载指令变为依赖于与基本上类似的标志相关联的所有存储指令。

Description

预测并避免乱序微处理器中的操作数-存储-比较冒险
技术领域
本发明一般涉及微处理器,并且,更具体地,涉及管理乱序执行的加载和存储操作。
背景技术
能够乱序地发出并执行机器指令的微处理器通常将允许在存储之前执行加载。倘若加载地址和存储地址两者并非具有相同的物理地址,则这个特征允许较大的性能优势。在典型的程序中,加载在存储之前进行、且它们的物理地址匹配的频率很低。然而,由于在指令执行流水线(pipeline)中此存储违反(violation)条件的发现通常较晚,所以,恢复惩罚(penalty)可能相当严重。例如,恢复过程通常涉及:使引起违反的加载指令以及程序次序在该加载指令之外的所有更新的指令无效,以及,第二,重新发出加载指令。用于管理存储-比较冒险(hazard)的传统机制通常不是很有效地管理这些冒险。
发明内容
在一个实施例中,公开了用于管理乱序执行的加载和存储操作的方法。该方法包括执行加载指令和存储指令中的至少一个。基于所述执行,确定已经遇到操作数存储比较冒险。基于所述确定,在操作数存储比较冒险预测表中创建条目。所述条目至少包括已执行的指令的指令地址以及与所述指令相关联的冒险指示标志(例如,位(bit))。所述冒险指示标志指示所述指令已经遇到操作数存储比较冒险。
在另一个实施例中,公开了用于管理乱序执行的加载和存储操作的方法,该方法包括取出指令。所述指令是加载指令和存储指令中的一个。解码所述指令。
响应于所述解码,利用所述指令的指令地址来查询操作数存储比较冒险预测表。所述操作数存储比较冒险预测表包括用于加载指令的第一条目、以及用于存储指令的第二条目。第一和第二条目彼此独立。第一和第二条目分 别指示加载指令和存储指令先前已遇到操作数存储比较冒险。第一和第二条目分别至少包括加载指令和存储指令中的一个的指令地址、以及与操作数存储比较冒险相关联的冒险指示标志。响应于查询所述预测表,确定指令与操作数存储比较冒险预测表中的第一和第二条目中的一个相关联。基于所述确定,识别在与所述指令相关联的第一和第二条目中的一个内包括的冒险指示标志。当所述指令与第一条目相关联时,所述指令是加载指令。基于已被识别的冒险指示标志来标记指令。所述标记使所述指令的执行依赖于与所述预测表的条目相关联的至少一个存储指令,所述条目包括基本上类似于与已到达给定的执行阶段的所述指令相关联的冒险指示标志的冒险指示标志。当所述指令与第二条目相关联时,所述指令是存储指令。
在另一个实施例中,公开了用于管理乱序执行的加载和存储操作的信息处理系统。该信息处理系统包括存储器和以通信方式耦接到存储器的处理器。该处理器被配置为执行方法,该方法包括执行加载指令和存储指令中的至少一个。基于所述执行,确定已经遇到操作数存储比较冒险。基于所述确定,在操作数存储比较冒险预测表中创建条目。所述条目至少包括已执行的指令的指令地址、以及与所述指令相关联的冒险指示标志(例如,位)。所述冒险指示标志指示所述指令已经遇到操作数存储比较冒险。
附图说明
附图用来进一步图示各个实施例、并说明与本发明相关的各个原理和优点,所有附图中,相同的附图标记表示相同或功能上类似的元素,并且,其下面的详细描述被并入,并形成说明书的一部分,附图中:
图1图示了根据本发明的一个实施例的操作环境的一个示例;
图2图示了根据本发明的一个实施例的加载队列条目的一个示例;
图3图示了根据本发明的一个实施例的存储队列条目的一个示例;
图4图示了根据本发明的一个实施例的操作数存储比较冒险预测表条目的一个示例;
图5-7是图示根据本发明的各个实施例的在操作数存储比较冒险预测表中创建条目的各个示例的操作流程图;
图8是图示根据本发明的各个实施例的预测和防止操作数存储比较冒险的一个示例的操作流程图;以及
图9是图示根据本发明的一个实施例的信息处理系统的一个示例的框图。
具体实施方式
根据需要,这里公开了本发明的详细实施例;然而,应理解,所公开的实施例仅为本发明的示例,其可以各种形式实施。因此,这里公开的特定结构和功能细节不被解释为限制,而仅为权利要求的基础、以及用于教导本领域的技术人员在实际上任意适当详细的结构和功能中多样化地利用本发明的代表性基础。此外,这里使用的术语和词组不意欲限制而是提供本发明的可理解的描述。
如在这里所使用的,术语“一”、“一个”被定义为一个或多于一个。如在这里所使用的,术语“多个”被定义为两个或多于两个。如在这里所使用的,术语“另一个”至少被定义为第二个或更多。如在这里所使用的,术语“包括”和/或“具有”被定义为开放式的“包括”。如在这里所使用的,术语“耦接”被定义为连接,然而不一定是直接连接,且不一定是机械方式。单数和复数形式的术语是等同的,除非相反地表示。
总览
在乱序执行加载和存储指令的微处理器中,由于在有依赖性的加载和存储之间的重新排序,可能发生三个操作数-存储-比较冒险(存储-命中-加载、不可转发的加载-命中存储、以及持久(persistent)不可转发的加载-命中存储)。例如,假定对地址A的存储之后跟随着对地址A的加载。在一种情形中,加载可在存储之前执行,即,存储队列(STQ)不包括存储地址信息。因此,存储队列在加载执行时不指示冲突。一旦加载完成执行,则存储执行,并检测针对在加载队列中已经完成的加载的冲突,并清空流水线,以停止加载和任何后续指令。这是代价非常高的操作,这是由于,需要重新进行大量工作(之前推测已经执行的加载和所有将来的指令)。上述情形被称为存储-命中-加载(SHL)。
在另一情形中,存储执行其地址计算,但是,用于存储的数据被延迟,例如,由于数据-产生指令具有长等待时间(例如,除法)。随后,加载在存储数据被写入STQ之前执行。加载检测到其依赖于存储,但是,加载不能执行存储-数据-转发,这是由于该数据不可用。因此,加载需要拒绝,并在存储 数据以变为可用之后重试。这个情形被称为不可转发的加载-命中-存储(nf-LHS)。
在另一情形中,类似于上述nf-LHS情形,特定存储指令(例如,如果它们是线交叉的,或者,如果长度大于8字节)通常(根据特定STQ设计)不可被转发。在此情形中,即使存储数据已经被写入STQ,加载也需要不断地再循环(recycle),直到存储被写回L1缓存(cache)中为止。这个情形被称为“持久nf-LHS”。
用于管理乱序处理的传统机制通常不能有效地处理上述这三种冒险。例如,某些传统机制通过使加载依赖于所有先前的存储指令来约束指令-级-并行性(ILP)。其它传统的机制通常不能处理如下的共同情况:加载指令依赖于多个存储指令,所述多个存储指令可能位于导向加载指令的不同分支路径上。
然而,本发明的各个实施例的一个优点在于,有效地避免上述三个冒险。在至少一个实施例中,创建预测表,其预测哪些加载和存储具有依赖性、以及这些依赖性的类型(如e-bit(e-位)或w-bit(w-位)依赖性)。之后,在指令解码之后,使e-位加载依赖于所有先前的e-位存储,并由指令发出逻辑处理,如同存在常规的寄存器依赖性那样。这有效地将e-位加载指令的执行推迟到所有e-位存储已执行了它们的地址计算、并将它们的数据写入了STQ之后。这在效果上消除了SHL和nf-LHS冒险。对于w-位依赖性,使加载依赖于被预测为w-位存储的最后存储的L1缓存写回。这有效地防止了持久nf-LHS冒险。
操作环境
图1为图示根据本发明的一个或多个实施例的可应用于一个或多个处理指令和数据的操作环境100的一个示例的框图。处理器101包括单集成电路处理器,如超标量处理器,其包括全部由集成电路形成的各种执行单元、寄存器、缓冲器、存储器、以及其它功能单元。在一个实施例中,处理器101能够乱序发出并执行指令。
在一个实施例中,处理器101包括指令取出单元(IFU)102、指令解码单元(IDU)104、指令发出单元(ISU)106、加载/存储单元(LSU)108、操作数地址生成单元110、固定点单元112(或任意其它执行单元)、以及其它组件114,诸如各种其它执行单元、寄存器、缓冲器、存储器、以及其它功能单元。在一个实施例中,IFU 102包括操作数-存储-比较(OSC)预测表 116,下面更详细地讨论OSC预测表116。
在此实施例中,发出单元106包括发出队列118。在此实施例中,LSU 108包括加载队列(LDQ)120、存储队列(STQ)122、以及L1缓存124。LDQ120以及STQ 122各自分别包括条目126、128,其跟踪与未解决(outstanding)的加载和存储指令相关联的附加信息。应注意,本发明的各个实施例不限于图1中示出的处理器101的配置。本发明的实施例可被应用于可与图1中示出的示例不同的各种架构。
通常,IFU 102取出在可为L1缓存124的一部分的I-缓存中存储的指令码。IDU 104将这些被取出的指令码解码为指令处理数据。一旦被解码,便分派(dispatch)指令,并将指令暂时置于适当的发出队列118中。在发出队列118中保持指令,直到所有它们所需的操作数都可用为止。可伺机(opportunistically)将指令从发出队列118发出到处理器101的执行单元,如LSU 108、FXU 112等,用于执行。换句话说,可乱序地发出指令。然而,将指令维持在发出队列118中,直到完成了指令的执行为止,并且,在需要重新发出任何指令的情况下,将结果数据(如果有)写回。
在执行单元108、112中的一个之内执行的期间,指令从与执行单元耦接的寄存器文件内的一个或多个构造的(architected)和/或重命名寄存器接收操作数(如果有)。在执行单元完成了指令的执行之后,执行单元将结果写入指令指定的指定目的地,并从发出队列移除指令,并且,随后可在程序次序中调度指令的完成。操作数地址生成单元110生成操作数地址信息,用于加载和存储指令,并将这些地址写入相应的LDQ 120和STQ 122。FXU 112将数据值写入STQ 122。
如上所述,LSU 108从ISU 106接收加载和存储指令,并执行加载和存储指令。通常,每个加载指令包括指定所需数据的地址的地址信息。在一个实施例中,LSU 108支持加载和存储指令的乱序执行,由此,实现高级性能。在一个实施例中,LSU 108被流水线化。也就是说,LSU 108经由依序执行的一组排序的流水线级来执行加载和存储指令。
OSC冒险管理
如上所述,在乱序执行加载和存储指令的处理器中,可能发生三种冒险(存储-命中-加载、不可转发的加载-命中存储、以及持久不可转发的加载-命中存储)。因此,除了上述参照图1的通常的处理机制之外,还可在处理器 101内实施以下实施例中的一个或多个来预测和避免这些OSC冒险。
通常,每个加载在LDQ 120中被分配条目,其在执行之后直到完成为止保存每个加载的地址。每个存储在STQ 122中被分配条目,其类似地从存储地址计算的执行直到存储完成并已将其数据写入L1缓存124为止,保存该存储地址。然而,基于检测到的冒险的类型,LDQ条目和STQ条目也可包括附加的信息来预测和避免OSC冒险。
例如,在一个实施例中,LSU 108执行加载指令,并将此加载与STQ 122中对应的条目相比较。加载指令确定不能执行存储-数据-转发。例如,在存储数据被写入到STQ之前加载正在执行(nf-LHS),或者,即使该数据可用,也不允许存储-数据-转发(持久nf-LHS)。随后,如果加载指令检测到nf-LHS冒险,则加载指令在其比较的STQ条目中设置OSC冒险位,如“e-标志”(例如,执行标志)。可替换地,如果加载指令检测到持久nf-LHS冒险,则加载指令在其比较的STQ条目中设置OSC冒险位,如“w-标志”(例如,写入标志)。加载指令还在LDQ 120中的其自身的条目中设置相同的OSC冒险位,如e-标志或w-标志。
当执行的存储指令检测到SHL冒险、并针对LDQ条目执行SHL清空(flush)时,存储指令在其自身的STQ条目中设置OSC冒险位,如e-标志,并还在指令所比较的(最旧的)LDQ条目中设置OSC冒险位,如e-标志。应注意,此LDQ条目由于作为结果的清空而被无效,但是,在LDQ 120中保持“e-标志”。当处理器流水线开始重新取出并重新执行清空的指令时,相同的加载被分配相同的LDQ条目,其现在具有来自清空之前的“e-标志”设置。
图2-3分别示出了根据本发明的一个实施例的LDQ 226和STQ 328条目的一个示例。如在图2中可见,除了诸如操作数地址信息204、有效位信息206、以及其它通常信息210的通常信息之外,LDQ队列120中的条目226还包括一个或多个OSC冒险位208。如上所述,取决于加载指令遇到nf-LHS冒险还是持久nf-LHS冒险,此OSC冒险指示位208可为e-标志或w-标志。如上所述,还可通过存储指令来设置OSC冒险位208。应注意,还可使用其它类型的标志等来指定加载指令遇到nf-LHS冒险还是持久nf-LHS冒险。
如在图3中可见,除了诸如操作数地址信息304、有效位信息306、数据值信息308、以及其它通常信息312的通常信息之外,STQ队列122中的条目328还包括一个或多个OSC冒险位310。如上所述,取决于加载指令遇到nf-LHS冒险还是持久nf-LHS冒险,OSC冒险位310可为e-标志或w-标志。并且,如上所述,如果存储指令遇到SHL冒险,则此OSC冒险位310可为e-标志。
应注意,还可使用其它类型的标志等来指定加载指令遇到nf-LHS冒险还是持久nf-LHS冒险、以及/或者存储指令遇到SHL冒险。并且,队列120、122之一中的OSC冒险指示位208、310将匹配其它队列120、122中的至少一个OSC冒险指示位208、310,这是由于,加载或存储指令在其它队列的条目中设置与其在自身的队列的条目中设置相同的位。此外,下面给出针对如何使用OSC冒险位信息208、310预测并避免OSC冒险的讨论。
一旦加载指令完成,加载指令确定其是否在LDQ120中具有OSC冒险位信息,如e-标志或w-标志。如果是这样,则加载指令将其指示给IFU102。在一个实施例中,IFU102随后在OSC预测表116中生成用于这个特定的加载指令的条目。OSC预测表将基于加载的指令地址来创建条目,并记忆用于此加载的一个或多个标志。例如,OSC预测表中的条目指示加载是否与e-标志和/或w-标志相关联,如果加载针对多个存储队列来比较,则加载可具有所述两个标志。
当存储指令已完成且被写回L1缓存124时,存储指令确定其是否在STQ122中具有OSC冒险位信息,如e-标志或w-标志。如果是这样,则存储指令将其指示给IFU102。IFU102随后在OSC预测表116中生成用于这个特定的存储指令的条目,包括存储指令的指令地址、以及存储的指令地址下的一个或多个标志。并且,当将存储指令被写回L1缓存124时,STQ122向ISU106通知STQ122内的该给定存储指令的STQ-条目-编号(stag)。
图4示出了OSC预测表116内的加载指令条目和存储指令条目的一个示例。具体地,图4示出了:加载指令条目402包括指令的指令地址404、条目有效位406、以及一个或多个冒险指示位,如加载“e”位408和加载“w”位410。存储指令条目403包括指令的指令地址412、条目有效位414、以及一个或多个冒险指示位,如存储“e”位416和存储“w”位418。如上所述,基于从加载指令和STQ122得到的信息来设置OSC冒险指示位408、410、416、418。彼此独立地创建OSC预测表116内的每个加载和存储条目。换句话说,OSC预测表116中的加载条目不引用、且不被OSC预测表116或者用 于该事物的其它任何表中的存储条目引用,反之亦然。
例如,在其LDQ条目中已设置了“e”依赖位、以及在对应的存储指令的STQ条目中设置了“e”位的加载指令向IFU102通知此,其随后在预测表116中为加载和存储指令中的每个创建条目402、403,如图4所示。在此示例中,在加载指令条目402中设置加载“e”位408,并在存储指令条目403中设置存储“e”位416。还应注意,可使用各种技术来基于指令地址生成预测表。例如,可使用针对溢出的技术(最近最少使用的技术)、读/写冲突(排队)、以及类似的技术用于预测表。
一旦预测表116已被填充,每次IFU102取出指令并将其发送到流水线用于由IDU104解码时,IFU102并行地查询OSC预测表116,并将此信息发送到IDU104。IDU104使用此查询来确定给定的取出的指令是否被识别为包括“e”或“w”位的加载和/或存储。例如,IFU102使用指令的指令地址来查询预测表116,以识别具有对应的指令地址的条目。从IDU104将从OSC预测表116得到的信息传递到ISU106。
ISU106使用此依赖性信息来执行以下操作。如果该指令包括存储-e-位(store-e-bit),则ISU106将该指令记忆为存储-e-位指令。如果该指令具有存储-w-位(store-w-bit),则ISU106记忆为该指令分配的STQ条目编号(“stag”)。在一个实施例中,ISU106记忆最新的这种stag,其被称为w-stag。如果指令具有加载-e-位(load-e-bit),则ISU106标记此指令依赖于被标记了存储-e-位的任何先前的指令。此依赖性非常类似于在给定的通用寄存器的写入方和读取方之间创建的依赖性。ISU106确保加载指令不在存储指令已成功执行、且已将存储地址和数据写入其STQ条目之前执行。通过将加载延迟到该点,ISU106保证加载可得到来自STQ条目的存储转发的数据,由此,防止了SHL冒险或nf-SHL冒险。
如果该指令具有加载-w-位,则将加载标记为使得ISU106不允许执行加载,直到加载之前的最后的存储-w-位存储的stag(即,w-stag)已写回到L1缓存124为止(如上所述,STQ122向ISU106通知何时发生写回)。通过将加载延迟到存储已被写回L1缓存124之后,防止了持久nf-SHL冒险。ISU106执行的上述过程有效地使所有e-位-加载(e-bit-Load)依赖于所有在先e-位-存储(e-bit-Store)的执行,并且,所有w-位-加载(w-bit-Load)依赖于所有先前的w-位-存储(w-bit-Store)的写回。
应注意,有时,例如,由于分支错误,最后在ISU 106中设置w-stag的存储指令被清空。然而,w-stag仍可被跟踪。例如,在一个实施例中,最新的未被清空的w-位存储被指定为保存的最新的w-位存储。这个选项可能需要显著的跟踪成本。在另一个实施例中,最新的未被清空的stag变为保存的最新的w-位存储。这个存储可能实际上未被标记为w-位存储。这个选项不需要很多跟踪成本,但将存储视为w-存储,尽管该存储可能尚未具有w-位预测。这导致略微的性能下降。在另一个实施例中,使保存的最新的w-位存储无效。在保存的最新w-位存储仍处于无效状态的同时分派的w-位加载将不会标记stag依赖性。
关于既是加载也是存储的指令,采取步骤来确保这些指令不对它们自身标记w-位依赖性。这在指令是由多个部分构成的情况下尤其是个问题。在一个实施例中,可通过确保标记了w-位的存储-部分总是跟随在标记了w-位的加载-部分之后,或通过确保保存的最新w位存储直到指令的所有部分都已分派之前都不被更新,来实现防止这样的依赖性。通常,标记由多个部分构成的指令内的e-位依赖性是安全的,这是由于,所述部分将简单地相对彼此被依次发出。然而,如果期望,则可以使用类似方法来防止此依赖性。
在一个实施例中,维持标记了e-位的存储的向量(其它寄存器依赖性类似的跟踪机制是可能的),每个发出队列条目1个比特位,且使标记了e-位的加载依赖于被设置了向量中的对应位的所有较旧的有效发出队列条目。在将指令分派给向量中的位时写入向量中的位,并且,如果指令是e-比特存储,则将向量中的位置于设置的状态种,否则置于未被设置的状态。
可替换地,可在e和w位的群组中跟踪加载和存储(例如,可存在5个e-位,e1…e5,并且,仅e1-存储和e1-加载是成对的,e2-存储和e2-加载是成对的,等等)。在冒险时,可选择随机的e-位(例如,e2)来设置在LDQ和STQ中。通过分别处理两个方面、但将依赖性强制为存储和加载两者,这种设计可被扩展到上述方法,其中,特定的指令既是加载又是存储(例如,系统z中的CS指令)。
如可看到的,本发明的以上实施例的优点在于,创建了预测表,其预测哪些加载和存储具有依赖性、以及这些依赖性的类型(如e-位或w-位依赖性)。随后,在指令解码之后,使e-位加载依赖于所有先前的e-位存储,并由指令发出逻辑来处理,如同存在常规的寄存器依赖性那样。这有效地将e-位加载 指令的执行延迟到所有e-位存储已执行了它们的地址计算、并将它们的数据写入STQ之后。这在效果上消除了SHL和nf-LHS冒险。对于w-位依赖性,使加载依赖于被预测为w-位存储的最后的存储的L1缓存写回。这有效地防止了持久nf-LHS冒险。每个加载条目和每个存储条目在OSC预测表中彼此独立。换句话说,加载指令条目不引用存储指令条目,反之亦然。这允许在多个存储指令和多个加载之间创建依赖性。
此外,根据一个实施例,如果加载设置了e-位和w-位两者,则将加载延迟到在OSC预测表中指示的所有e-位存储之后、以及所有w-位存储之后。也就是说,将加载延迟到所有e-位存储已执行了其地址计算、并将它们的数据写入STQ之后,并且,也使加载依赖于最后的w-位存储的L1缓存写回。
并且,根据一个示例,如果加载在OSC表中设置了e-位、且存储在OSC表中设置了e-位和w-位,则将加载延迟到设置了e-位的存储已执行了其地址计算、并将它们的数据写入STQ(例如,转发了数据)之后。如果加载在OSC表中设置了w-位、且存储在OSC表中设置了e-为和w-位两者,则将加载延迟到设置了w-位的存储已执行了L1缓存写回之后。最后,如果加载设置了e-位和w-位两者、且存储设置了e-位和w-位两者,则w-位优先。将设置了w-位的加载延迟到设置了w-位的存储的执行之后,其对应于设置了w-位的存储的最长延迟(依赖于L1缓存写回)。
根据一个实施例,一个或多个加载以及一个或多个存储可被包括在一个复杂的指令中。此类复杂指令的各个示例可在下面的出版物中找到:“z/Architecture Principles of Operation”,SA22-7832-07,第八版,国际商业机器公司2009年2月出版。也就是说,可将一个指令视为加载和存储。同一指令可在OSC表中创建一个或多个加载条目、以及一个或多个存储条目。可根据OSC表中的它们各自的e-位和w-位来跟踪这些加载和存储。
操作流程图
图5是图示在用于预测并防止OSC冒险的OSC预测表116中生成条目的一个示例的操作流程图。图5的操作流程图在步骤502开始,并直接转到步骤504。在步骤504,加载指令在关联的存储指令之前开始执行。在步骤506,加载指令从存储指令在将来要写入的存储位置得到数据。在步骤508,加载指令完成执行。在步骤510,存储指令开始执行。在步骤512,存储指令确定加载指令先前已从存储指令当前正在写入的存储位置获得了数据。
在步骤514,存储指令确定已遇到SHL冒险。在步骤516,存储指令随后设置标志位,如e-标志位,以指示此指令是OSC冒险情形的候选者。在存储指令所比较的最旧LDQ条目中设置这个e-标志位。在步骤518,存储指令在STQ 122中的与存储指令相关联的STQ条目中设置e-标志位。在步骤520,存储指令随后从流水线清空该加载指令、以及所有更新的加载指令。
在步骤522,存储指令写回到L1缓存124。在步骤524,存储指令向IFU102通知:存储指令具有未决的(pending)e-标志(或由加载指令设置的w-标志)位。在步骤526,IFU 102在OSC预测表116中生成用于存储指令的条目。该条目包括存储指令的指令地址、有效位、以及存储指令与e-标志相关联的指示。例如,可在条目中设置指示指令与存储-e-位相关联的位或标志。在步骤527,IFU 102还在OSC预测表116中生成用于加载指令的条目。例如,在步骤520从SHL清空加载之后,流水线重新执行加载,其使用与之前相同的LDQ条目。在加载完成之后,加载将其标志(例如,e-位)写入IFU预测表116。该条目包括加载指令的指令地址、有效位、以及加载指令与e-标志相关联的指示。存储和加载条目彼此独立,且绝不彼此引用。在步骤528,STQ 122向ISU 106通知已写回到L1缓存124的存储指令的STQ条目编号(stag)。控制流随后在步骤530退出。
图6是图示在用于预测和防止OSC冒险的OSC预测表116中生成条目的另一个示例的操作流程图。图6的操作流程图在步骤602开始,并直接转到步骤604。在步骤604,存储指令执行其地址计算。在步骤606,延迟用于存储指令的数据。在步骤608,加载指令在存储数据被写入STQ 122之前执行。在步骤610,加载指令确定其依赖于存储指令,且不能执行存储-数据-转发。在步骤612,加载指令确定已遇到nf-LHS情形。在步骤614,加载指令在存储指令的STQ条目中设置e-标志位。在步骤616,加载指令在对应的LDQ条目中设置e-标志位。在步骤618,加载指令完成执行。在步骤620,加载指令将其已经在LDQ 120中设置了e-标志位的信息发送到IFU 102。在步骤622,IFU在OSC预测表116中生成用于加载指令的条目。该条目包括加载指令的指令地址、有效位、以及加载指令与e-标志位相关联的指示。例如,可在条目中设置指示指令与加载-e-位相关联的位或标志。在步骤623,IFU102还在OSC预测表116中生成用于存储指令的条目。例如,当存储指令写回到L1缓存124(其可在步骤620之前或之后发生)时,STQ中的标志(e- 位)被传递到IFU 102,并且,在表116中创建用于存储的条目。该条目包括存储指令的指令地址、有效位、以及存储指令与e-标志位相关联的指示。加载和存储条目彼此独立,且绝不彼此引用。控制流随后在步骤624退出。
图7是图示在用于预测和防止OSC冒险的OSC预测表116中生成条目的另一个示例的操作流程图。图7的操作流程图在步骤702开始,并直接转到步骤704。在步骤704,存储指令执行其地址计算。在步骤706,加载指令开始其执行。在步骤708,加载指令确定其依赖于存储指令,且不能执行存储-数据-转发。
在步骤710,加载指令确定已遇到持久nf-LHS情形。在步骤712,加载指令在存储指令的STQ条目中设置w-标志位。在步骤714,加载指令在对应的LDQ条目中设置w-标志位。在步骤716,加载指令完成执行。在步骤718,加载指令向IFU 102通知其已经在LDQ 120中设置了w-标志位。在步骤720,IFU在OSC预测表116中生成用于加载指令的条目。该条目包括加载指令的指令地址、有效位、以及加载指令与w-标志位相关联的指示。例如,可在条目中设置指示指令与加载-w-位相关联的位或标志。在步骤721,IFU在OSC预测表116中生成用于存储指令的条目。例如,当存储指令写回到L1缓存124(其可在步骤718之前或之后发生)时,STQ中的标志(e-位)被传递到IFU 102,并且,在表116中创建用于存储的条目。该条目包括存储指令的指令地址、有效位、以及存储指令与w-标志相关联的指示。加载和存储条目彼此独立,且绝不彼此引用。控制流随后在步骤722退出。
图8是图示预测和防止OSC冒险的一个示例的操作流程图。图8的操作流程图在步骤802开始,并直接转到步骤804。在步骤804,IFU 102取出指令。在步骤806,IFU 102并行地利用指令的指令地址查询OSC预测表116。在步骤808,IFU 102确定指令是否在OSC预测表116中包括条目。如果该确定的结果是否定的,则在步骤810执行传统处理。该控制流随后在步骤812退出。如果该确定的结果是肯定的,则在步骤813,IFU 102将指令、以及从OSC预测表116得到的与该指令相关联的OSC冒险信息发送到IDU 104。在步骤814,IDU 104解码该指令。
如果在步骤808该确定的结果是肯定的,则在步骤816,IDU 104确定指令是否包括存储-e-位(例如,该指令是否是具有e-标志位的存储)。如果该确定的结果是肯定的,则在步骤818,ISU 106将存储指令记忆为存储-e-位。如 果该指令仅包括单个位,则控制流随后返回到步骤804。然而,如果该指令由于其执行一个或多个加载以及一个或多个存储而包括多个位,则如果其它位是加载“e”位,则IDU执行步骤826和828,或者,如果其它位是加载“w”位,则执行步骤832。
如果步骤816的确定的结果是否定的,则在步骤820,IDU 104确定指令是否包括存储-w-位(例如,该指令是否是具有w-标志位的存储)。如果该确定的结果是肯定的,则在步骤822,ISU 106记忆分配给存储指令的STQ条目编号(stag)。控制流随后返回到步骤804。如果步骤820的确定的结果是否定的,则在步骤824,IDU 104确定指令是否包括加载-e-位(例如,该指令是否是具有e-标志位的加载)。如果该确定的结果是肯定的,则在步骤826,ISU 106将加载指令标记为依赖于标记有存储-e-位的任何先前指令。作为被标记的结果,在步骤828,防止加载指令在存储已成功执行且将存储地址和数据写入STQ条目之前执行。控制流随后返回到步骤804。
如果步骤824的确定的结果是否定的,则在步骤830,该指令被确定为具有w-标志位的加载。在步骤832,ISU 106标记此指令,使得在该加载之前的最后存储-w-位存储的stag(即,w-stag)已写回L1缓存之前不执行。控制流随后返回到步骤804。
信息处理系统
图9是图示根据本发明的一个实施例的信息处理系统900的详细视图的框图。信息处理系统900基于适当配置的处理系统,其适于实施本发明的一个或多个实施例。通过本发明的实施例,任何适当配置的处理系统类似地能够被用作信息处理系统900。
信息处理系统900包括计算机902。计算机902具有处理器101,如图1的处理器。处理器101包括:IFU 102,其包括OSC预测表116;IDU 104;ISU 106,其包括发出队列118;LSU 108,其包括LDQ 120、STQ 122、以及L1缓存124;操作数地址生成单元110;FXU 112;以及各种其它组件114,如图1所示。
处理器101连接到主存储器906、大容量存储接口908、以及网络适配器硬件910。系统总线912互连这些系统组件。大容量存储接口908被用来将诸如数据存储装置914的大容量存储装置连接到信息处理系统900。数据存储装置的一个具体类型为光学驱动器,如CD/DVD驱动器,其可被用来向/ 从诸如(但不限于)CD/DVD 916的计算机可读介质或存储产品存储和读取数据。另一类数据存储装置为被配置来支持例如文件系统操作的数据存储装置。
在一个实施例中,信息处理系统600利用传统的虚拟寻址机制,来允许程序如同它们访问大的单个存储实体(这里称为计算机系统存储器)那样工作,而不是访问多个较小的存储实体,如主存储器906和数据存储装置916。注意,术语“计算机系统存储器”在这里被用来一般指代信息处理系统900的整个虚拟存储器。
尽管仅示出一个处理器101用于计算机902,但可同样有效地使用具有多个处理器的计算机系统。本发明的各个实施例还并入接口,其各自包括分立的完全编程的微处理器,微处理器被用来从处理器101卸下处理。主存储器中包括的操作系统(未示出)是适当的多任务操作系统,例如但不限于GNU/Linux、AIX、Solaris、以及HP-UX。本发明的各个实施例能够使用任何其它适用的操作系统。本发明的一些实施例利用诸如面向对象的框架机制的架构,其允许操作系统(未示出)的组件的指令在位于信息处理系统900内的任意处理器上执行。网络适配器硬件910被用来向一个或多个网络918提供接口。本发明的各个实施例能够适于与包括当前的模拟和/或数字技术的任何数据通信连接一起工作,或经由将来的网络机制工作。
尽管在完全功能的计算机系统的上下文中描述了本发明的示例性实施例,但本领域的技术人员将理解,经由CD或DVD(例如,CD 916、CD ROM)、或其他形式的可记录介质、或经由任意类型的电子传输机制,实施例能够被发布为程序产品。
非限制性示例
尽管已公开了本发明的特定实施例,但本领域的技术人员将理解,可对特定实施例作出改变,而不会背离本发明的精神和范围。因此,本发明的范围不限于特定实施例,且意欲使所附权利要求覆盖本发明的范围内的所有这样的应用、改变和实施例。
尽管在完全功能的计算机系统的上下文描述了本发明的示例性实施例,但本领域的技术人员将理解,经由CD或DVD(例如,CD 916、CD ROM)、或其他形式的可记录介质、或经由任意类型的电子传输机制,实施例能够被发布为程序产品。

Claims (40)

1.一种用于管理乱序执行的加载和存储操作的方法,该方法包括:
执行加载指令和存储指令中的一个指令;
基于所述执行,确定已经遇到操作数存储比较冒险;
基于所述确定,在操作数存储比较冒险预测表中创建条目,所述条目至少包括已执行的一个指令的指令地址以及与所述已执行的一个指令相关联的冒险指示标志,其中,所述冒险指示标志指示所述已执行的一个指令已经遇到所述操作数存储比较冒险以及所述操作数存储比较冒险的类型,并且,其中,所述条目不引用所述操作数存储比较冒险预测表中的另一条目,其中,所述另一条目与加载指令和存储指令中不同于所述已执行的一个指令的另一个指令相关联。
2.如权利要求1所述的方法,其中,所述执行包括:执行从所述加载指令和所述存储指令中选择的一个指令,并且,该方法还包括:
基于所述确定,在所述操作数存储比较冒险预测表中创建条目,所述条目包括所述加载指令和所述存储指令中未被选择的另一个指令的指令地址、以及与所述另一个指令相关联的冒险指示标志,其中,所述与所述另一个指令相关联的冒险指示标志类似于与所述已执行的一个指令相关联的冒险指示标志,其中,所述与所述另一个指令相关联的冒险指示标志指示所述另一个指令已经遇到所述操作数存储比较冒险。
3.如权利要求1所述的方法,其中,所述执行包括:
在所述存储指令之前执行所述加载指令;以及
在所述加载指令完成执行之后,执行所述存储指令,
其中,所述加载指令从所述存储指令执行后续写入操作的存储位置获得数据集。
4.如权利要求3所述的方法,还包括:
所述存储指令确定所述加载指令已从所述存储位置获得所述数据集;
响应于所述确定,所述存储指令确定已遇到存储-命中-加载冒险;以及
当确定所述加载指令已从所述存储位置获得所述数据集时,响应于确定已遇到所述存储-命中-加载冒险,所述存储指令在所述存储指令所比较的最旧的加载队列条目中设置冒险指示标志,其中,所述冒险指示标志指示所述加载指令与存储-命中-加载冒险相关联。
5.如权利要求4所述的方法,还包括:当确定所述加载指令已从所述存储位置获得所述数据集时,响应于确定已遇到所述存储-命中-加载冒险,所述存储指令在与所述存储指令相关联的存储队列内的存储队列条目中设置冒险指示标志,其中,所述存储队列条目中的冒险指示标志指示所述存储指令与存储-命中-加载冒险相关联。
6.如权利要求5所述的方法,还包括以下步骤中的至少一个:
所述存储指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述存储指令已在存储队列条目中设置了所述冒险指示标志,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目;
响应于所述存储指令在所述存储队列条目设置了所述冒险指示标志,存储队列向指令发出单元通知所述存储指令的存储队列内的存储队列条目编号;
所述加载指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述存储指令已在加载队列条目中设置了所述冒险指示标志,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目。
7.如权利要求1所述的方法,其中,所述执行还包括:
在所述加载指令之前执行所述存储指令,其中,延迟与所述存储指令相关联的数据集;以及
在所述存储指令将所述数据集写入存储队列之前,执行所述加载指令。
8.如权利要求7所述的方法,还包括:
所述加载指令基于在所述存储指令将所述数据集写入存储队列之前被执行,确定所述加载指令依赖于所述存储指令;
所述加载指令基于确定所述加载指令依赖于所述存储指令,确定不能执行存储-数据-转发;以及
所述加载指令基于确定不能执行存储-数据-转发,确定所述加载指令已遇到不可转发的加载-命中-存储冒险。
9.如权利要求8所述的方法,还包括:
所述加载指令基于确定所述加载指令已遇到不可转发的加载-命中-存储冒险,在与所述存储指令相关联的存储队列内的存储队列条目中设置冒险指示标志,其中,所述存储队列条目中的冒险指示标志指示所述存储指令与所述不可转发的加载-命中-存储冒险相关联;以及
所述加载指令基于确定所述加载指令已遇到所述不可转发的加载-命中-存储冒险,在与所述加载指令相关联的加载队列内的加载队列条目中设置冒险指示标志,其中,所述加载队列条目内的冒险指示标志指示所述加载指令已遇到所述不可转发的加载-命中-存储冒险。
10.如权利要求9所述的方法,还包括以下步骤中的至少一个:
所述加载指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述加载队列条目内设置了冒险指示标志,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目;以及
所述存储指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述存储队列条目内设置了所述冒险指示标志,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目。
11.如权利要求1所述的方法,其中,所述执行还包括:
在所述加载指令之前执行所述存储指令,其中,与所述存储指令相关联的数据集持久不可用;以及
在所述存储指令之后执行所述加载指令。
12.如权利要求11所述的方法,还包括:
基于所述数据集持久不可用,所述加载指令确定所述加载指令依赖于所述存储指令;
所述加载指令基于确定所述加载指令依赖于所述存储指令,确定不能执行存储-数据-转发;以及
所述加载指令基于确定不能执行存储-数据-转发、且所述数据集持久不可用,确定所述加载指令已遇到持久不可转发的加载-命中-存储冒险。
13.如权利要求12所述的方法,还包括:
所述加载指令基于确定所述加载指令已遇到所述持久不可转发的加载-命中-存储冒险,在与所述存储指令相关联的存储队列内的存储队列条目中设置冒险指示标志,其中,所述存储队列条目中的冒险指示标志指示所述存储指令与所述持久不可转发的加载-命中-存储冒险相关联;以及
所述加载指令基于确定所述加载指令已遇到所述持久不可转发的加载-命中-存储冒险,在与所述加载指令相关联的加载队列内的加载队列条目中设置冒险指示标志,其中,所述加载队列条目内的冒险指示标志指示所述加载指令已遇到所述持久不可转发的加载-命中-存储冒险。
14.如权利要求13所述的方法,还包括以下步骤中的至少一个:
所述加载指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述加载队列条目内设置了冒险指示标志,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目;以及
所述存储指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述存储队列条目内设置了冒险指示标志,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目。
15.如权利要求1所述的方法,还包括:
在所述在操作数存储比较冒险预测表中创建条目之后,解码所述指令;
利用所述指令的指令地址来查询所述操作数存储比较冒险预测表,其中,所述操作数存储比较冒险预测表包括用于加载指令的第一条目、以及用于存储指令的第二条目,其中,所述第一和第二条目彼此独立,并且,其中,所述第一和第二条目分别指示所述加载指令和所述存储指令先前已遇到操作数存储比较冒险,并且,其中,所述第一和第二条目分别至少包括所述加载指令和存储指令中的一个的指令地址、以及与操作数存储比较冒险相关联的冒险指示标志;
响应于查询所述预测表,确定所述指令与所述操作数存储比较冒险预测表中的第一和第二条目中的一个相关联;
基于所述确定,识别在与所述指令相关联的第一和第二条目中的一个内包括的冒险指示标志;
其中,当所述指令与所述第一条目相关联时,所述指令是加载指令,并且
基于已被识别的冒险指示标志来标记所述指令,其中,所述标记使所述指令的执行依赖于与所述预测表的第二条目相关联的至少一个存储指令,所述第二条目包括类似于与已到达给定的执行阶段的所述指令相关联的冒险指示标志的冒险指示标志;以及
其中,当所述指令与所述第二条目相关联时,所述指令是存储指令。
16.如权利要求15所述的方法,其中,与所述加载指令相关联的所述冒险指示标志指示所述加载指令先前已遇到不可转发的加载-命中-存储冒险,以及
其中,所述标记使所述加载指令的执行依赖于与所述预测表的第二条目相关联的所有存储指令,所述第二条目包括类似于与已到达可转发存储的阶段的所述加载指令相关联的冒险指示标志的冒险指示标志。
17.如权利要求15所述的方法,其中,与所述至少一个存储指令相关联的所述冒险指示标志指示所述至少一个存储指令先前已遇到持久不可转发的加载-命中-存储冒险。
18.如权利要求15所述的方法,其中,与至少一个存储指令相关联的所述冒险指示标志指示所述至少一个存储指令先前已遇到存储-命中-加载冒险。
19.如权利要求15所述的方法,还包括:
基于所述标记,将所述加载指令的执行延迟到与所述预测表的第二条目相关联的所有存储指令已执行了它们的地址计算、且已将它们的数据写入存储队列中的对应存储队列条目中之后,所述第二条目包括类似于与所述加载指令相关联的冒险指示标志的冒险指示标志。
20.如权利要求15所述的方法,其中,所述至少一个存储指令是最新的存储指令,其包括类似于与所述加载指令相关联的冒险指示标志的冒险指示标志,并且,该方法还包括:
基于所述标记,将所述加载指令的执行延迟到所述至少一个存储指令已执行了L1缓存写回之后。
21.一种用于管理乱序执行的加载和存储操作的系统,该系统包括:
用于执行加载指令和存储指令中的一个指令的模块;
用于基于所述执行,确定已经遇到操作数存储比较冒险的模块;
用于基于所述确定,在操作数存储比较冒险预测表中创建条目的模块,所述条目至少包括已执行的一个指令的指令地址以及与所述已执行的一个指令相关联的冒险指示标志,其中,所述冒险指示标志指示所述已执行的至少一个指令已经遇到所述操作数存储比较冒险以及所述操作数存储比较冒险的类型,并且,其中,所述条目不引用所述操作数存储比较冒险预测表中的另一条目,其中,所述另一条目与加载指令和存储指令中不同于所述已执行的一个指令的另一个指令相关联。
22.如权利要求21所述的系统,其中,所述用于执行加载指令和存储指令中的一个指令的模块执行从所述加载指令和所述存储指令中选择的一个指令,并且,在所述用于基于所述确定,在所述操作数存储比较冒险预测表中创建条目的模块中,所述条目包括所述加载指令和所述存储指令中未被选择的另一个指令的指令地址、以及与所述另一个指令相关联的冒险指示标志,其中,所述与所述另一个指令相关联的冒险指示标志类似于与所述已执行的一个指令相关联的冒险指示标志,其中,所述与所述另一个指令相关联的冒险指示标志指示所述另一个指令已经遇到所述操作数存储比较冒险。
23.如权利要求21所述的系统,其中,所述用于执行加载指令和存储指令中的一个指令的模块用于:
在所述存储指令之前执行所述加载指令;以及
在所述加载指令完成执行之后,执行所述存储指令,
其中,所述加载指令从所述存储指令执行后续写入操作的存储位置获得数据集。
24.如权利要求23所述的系统,还包括:
用于使所述存储指令确定所述加载指令已从所述存储位置获得所述数据集的模块;
用于响应于所述确定,使所述存储指令确定已遇到存储-命中-加载冒险的模块;以及
用于当确定所述加载指令已从所述存储位置获得所述数据集时,响应于确定已遇到所述存储-命中-加载冒险,使所述存储指令在所述存储指令所比较的最旧的加载队列条目中设置冒险指示标志的模块,其中,所述冒险指示标志指示所述加载指令与存储-命中-加载冒险相关联。
25.如权利要求24所述的系统,还包括,用于当确定所述加载指令已从所述存储位置获得所述数据集时,响应于确定已遇到所述存储-命中-加载冒险,使所述存储指令在与所述存储指令相关联的存储队列内的存储队列条目中设置冒险指示标志的模块,其中,所述存储队列条目中的冒险指示标志指示所述存储指令与存储-命中-加载冒险相关联。
26.如权利要求25所述的系统,还包括以下模块中的至少一个:
用于使所述存储指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述存储指令已在存储队列条目中设置了所述冒险指示标志的模块,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目;
用于响应于所述存储指令在所述存储队列条目设置了所述冒险指示标志,使存储队列向指令发出单元通知所述存储指令的存储队列内的存储队列条目编号的模块;
用于使所述加载指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述存储指令已在加载队列条目中设置了所述冒险指示标志的模块,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目。
27.如权利要求21所述的系统,其中,所述用于执行加载指令和存储指令中的一个指令的模块还用于:
在所述加载指令之前执行所述存储指令,其中,延迟与所述存储指令相关联的数据集;以及
在所述存储指令将所述数据集写入存储队列之前,执行所述加载指令。
28.如权利要求27所述的系统,还包括:
用于使所述加载指令基于在所述存储指令将所述数据集写入存储队列之前被执行,确定所述加载指令依赖于所述存储指令的模块;
用于使所述加载指令基于确定所述加载指令依赖于所述存储指令,确定不能执行存储-数据-转发的模块;以及
用于使所述加载指令基于确定不能执行存储-数据-转发,确定所述加载指令已遇到不可转发的加载-命中-存储冒险的模块。
29.如权利要求28所述的系统,还包括:
用于使所述加载指令基于确定所述加载指令已遇到不可转发的加载-命中-存储冒险,在与所述存储指令相关联的存储队列内的存储队列条目中设置冒险指示标志的模块,其中,所述存储队列条目中的冒险指示标志指示所述存储指令与所述不可转发的加载-命中-存储冒险相关联;以及
用于使所述加载指令基于确定所述加载指令已遇到所述不可转发的加载-命中-存储冒险,在与所述加载指令相关联的加载队列内的加载队列条目中设置冒险指示标志的模块,其中,所述加载队列条目内的冒险指示标志指示所述加载指令已遇到所述不可转发的加载-命中-存储冒险。
30.如权利要求29所述的系统,还包括以下模块中的至少一个:
用于使所述加载指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述加载队列条目内设置了冒险指示标志的模块,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目;以及
用于使所述存储指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述存储队列条目内设置了所述冒险指示标志的模块,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目。
31.如权利要求21所述的系统,其中,所述用于执行加载指令和存储指令中的一个指令的模块还用于:
在所述加载指令之前执行所述存储指令,其中,与所述存储指令相关联的数据集持久不可用;以及
在所述存储指令之后执行所述加载指令。
32.如权利要求31所述的系统,还包括:
用于基于所述数据集持久不可用,使所述加载指令确定所述加载指令依赖于所述存储指令的模块;
用于使所述加载指令基于确定所述加载指令依赖于所述存储指令,确定不能执行存储-数据-转发的模块;以及
用于使所述加载指令基于确定不能执行存储-数据-转发、且所述数据集持久不可用,确定所述加载指令已遇到持久不可转发的加载-命中-存储冒险的模块。
33.如权利要求32所述的系统,还包括:
用于使所述加载指令基于确定所述加载指令已遇到所述持久不可转发的加载-命中-存储冒险,在与所述存储指令相关联的存储队列内的存储队列条目中设置冒险指示标志的模块,其中,所述存储队列条目中的冒险指示标志指示所述存储指令与所述持久不可转发的加载-命中-存储冒险相关联;以及
用于使所述加载指令基于确定所述加载指令已遇到所述持久不可转发的加载-命中-存储冒险,在与所述加载指令相关联的加载队列内的加载队列条目中设置冒险指示标志的模块,其中,所述加载队列条目内的冒险指示标志指示所述加载指令已遇到所述持久不可转发的加载-命中-存储冒险。
34.如权利要求33所述的系统,还包括以下模块中的至少一个:
用于使所述加载指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述加载队列条目内设置了冒险指示标志的模块,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目;以及
用于使所述存储指令向包括所述操作数存储比较冒险预测表的指令取出单元通知所述加载指令已在所述存储队列条目内设置了冒险指示标志的模块,其中,所述指令取出单元响应于所述通知生成所述操作数存储比较冒险预测表中的所述条目。
35.如权利要求21所述的系统,还包括:
用于在所述在操作数存储比较冒险预测表中创建条目之后,解码所述指令的模块;
用于利用所述指令的指令地址来查询所述操作数存储比较冒险预测表的模块,其中,所述操作数存储比较冒险预测表包括用于加载指令的第一条目、以及用于存储指令的第二条目,其中,所述第一和第二条目彼此独立,并且,其中,所述第一和第二条目分别指示所述加载指令和所述存储指令先前已遇到操作数存储比较冒险,并且,其中,所述第一和第二条目分别至少包括所述加载指令和存储指令中的一个的指令地址、以及与操作数存储比较冒险相关联的冒险指示标志;
用于响应于查询所述预测表,确定所述指令与所述操作数存储比较冒险预测表中的第一和第二条目中的一个相关联的模块;
用于基于所述确定,识别在与所述指令相关联的第一和第二条目中的一个内包括的冒险指示标志的模块;
其中,当所述指令与所述第一条目相关联时,所述指令是加载指令,并且
基于已被识别的冒险指示标志来标记所述指令,其中,所述标记使所述指令的执行依赖于与所述预测表的第二条目相关联的至少一个存储指令,所述第二条目包括类似于与已到达给定的执行阶段的所述指令相关联的冒险指示标志的冒险指示标志;以及
其中,当所述指令与所述第二条目相关联时,所述指令是存储指令。
36.如权利要求35所述的系统,其中,与所述加载指令相关联的所述冒险指示标志指示所述加载指令先前已遇到不可转发的加载-命中-存储冒险,以及
其中,所述标记使所述加载指令的执行依赖于与所述预测表的第二条目相关联的所有存储指令,所述第二条目包括类似于与已到达可转发存储的阶段的所述加载指令相关联的冒险指示标志的冒险指示标志。
37.如权利要求35所述的系统,其中,与所述至少一个存储指令相关联的所述冒险指示标志指示所述至少一个存储指令先前已遇到持久不可转发的加载-命中-存储冒险。
38.如权利要求35所述的系统,其中,与至少一个存储指令相关联的所述冒险指示标志指示所述至少一个存储指令先前已遇到存储-命中-加载冒险。
39.如权利要求35所述的系统,还包括:
用于基于所述标记,将所述加载指令的执行延迟到与所述预测表的第二条目相关联的所有存储指令已执行了它们的地址计算、且已将它们的数据写入存储队列中的对应存储队列条目中之后的模块,所述第二条目包括类似于与所述加载指令相关联的冒险指示标志的冒险指示标志。
40.如权利要求35所述的系统,其中,所述至少一个存储指令是最新的存储指令,其包括类似于与所述加载指令相关联的冒险指示标志的冒险指示标志,并且,该系统还包括:
用于基于所述标记,将所述加载指令的执行延迟到所述至少一个存储指令已执行了L1缓存写回之后的模块。
CN201080056309.2A 2009-12-22 2010-12-13 预测并避免乱序微处理器中的操作数-存储-比较冒险 Active CN102652304B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US12/644,923 2009-12-22
US12/644,923 US8468325B2 (en) 2009-12-22 2009-12-22 Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US12/822,960 2010-06-24
US12/822,960 US8521992B2 (en) 2009-12-22 2010-06-24 Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
PCT/EP2010/069496 WO2011076602A1 (en) 2009-12-22 2010-12-13 Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors

Publications (2)

Publication Number Publication Date
CN102652304A CN102652304A (zh) 2012-08-29
CN102652304B true CN102652304B (zh) 2015-04-15

Family

ID=43416544

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080056309.2A Active CN102652304B (zh) 2009-12-22 2010-12-13 预测并避免乱序微处理器中的操作数-存储-比较冒险

Country Status (6)

Country Link
US (2) US8521992B2 (zh)
JP (2) JP5850532B2 (zh)
CN (1) CN102652304B (zh)
DE (1) DE112010004322T5 (zh)
GB (1) GB2486155B (zh)
WO (1) WO2011076602A1 (zh)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9069563B2 (en) * 2011-09-16 2015-06-30 International Business Machines Corporation Reducing store-hit-loads in an out-of-order processor
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
US9158691B2 (en) 2012-12-14 2015-10-13 Apple Inc. Cross dependency checking logic
US9880849B2 (en) * 2013-12-09 2018-01-30 Macom Connectivity Solutions, Llc Allocation of load instruction(s) to a queue buffer in a processor system based on prediction of an instruction pipeline hazard
US9274970B2 (en) 2013-12-31 2016-03-01 Samsung Electronics Co., Ltd. Method and apparatus for handling processor read-after-write hazards with cache misses
US11093401B2 (en) 2014-03-11 2021-08-17 Ampere Computing Llc Hazard prediction for a group of memory access instructions using a buffer associated with branch prediction
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
CN104063329B (zh) * 2014-06-30 2017-04-12 龙芯中科技术有限公司 64位立即数处理方法及装置
US10209995B2 (en) 2014-10-24 2019-02-19 International Business Machines Corporation Processor core including pre-issue load-hit-store (LHS) hazard prediction to reduce rejection of load instructions
US9483409B2 (en) 2015-02-05 2016-11-01 International Business Machines Corporation Store forwarding cache
US9928075B2 (en) 2015-02-13 2018-03-27 International Business Machines Corporation Load queue entry reuse for operand store compare history table update
WO2017019008A1 (en) * 2015-07-27 2017-02-02 Applied Micro Circuits Corporation Hazard prediction for a group of memory access instructions using a buffer associated with branch prediction
US9710281B2 (en) * 2015-07-30 2017-07-18 International Business Machines Corporation Register comparison for operand store compare (OSC) prediction
US20170046167A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Predicting memory instruction punts in a computer processor using a punt avoidance table (pat)
US9606805B1 (en) 2015-10-19 2017-03-28 International Business Machines Corporation Accuracy of operand store compare prediction using confidence counter
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
US10740107B2 (en) * 2016-06-01 2020-08-11 International Business Machines Corporation Operation of a multi-slice processor implementing load-hit-store handling
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
US10684859B2 (en) * 2016-09-19 2020-06-16 Qualcomm Incorporated Providing memory dependence prediction in block-atomic dataflow architectures
GB2563582B (en) * 2017-06-16 2020-01-01 Imagination Tech Ltd Methods and systems for inter-pipeline data hazard avoidance
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
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
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
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
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
US10564976B2 (en) 2017-11-30 2020-02-18 International Business Machines Corporation Scalable dependency matrix with multiple summary bits in an out-of-order processor
US10929140B2 (en) 2017-11-30 2021-02-23 International Business Machines Corporation Scalable dependency matrix with a single summary bit in an out-of-order processor
US10572264B2 (en) 2017-11-30 2020-02-25 International Business Machines Corporation Completing coalesced global completion table entries in an out-of-order processor
US10901744B2 (en) 2017-11-30 2021-01-26 International Business Machines Corporation Buffered instruction dispatching to an issue queue
US10802829B2 (en) 2017-11-30 2020-10-13 International Business Machines Corporation Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor
US10564979B2 (en) * 2017-11-30 2020-02-18 International Business Machines Corporation Coalescing global completion table entries in an out-of-order processor
US10884753B2 (en) 2017-11-30 2021-01-05 International Business Machines Corporation Issue queue with dynamic shifting between ports
US10922087B2 (en) 2017-11-30 2021-02-16 International Business Machines Corporation Block based allocation and deallocation of issue queue entries
US10942747B2 (en) 2017-11-30 2021-03-09 International Business Machines Corporation Head and tail pointer manipulation in a first-in-first-out issue queue
CN108519906B (zh) * 2018-03-20 2022-03-22 东南大学 超标量乱序处理器稳定状态指令吞吐率建模方法
US10725783B2 (en) * 2018-11-02 2020-07-28 International Business Machines Corporation Splitting load hit store table for out-of-order processor
CN111221579B (zh) * 2018-11-27 2022-04-26 展讯通信(上海)有限公司 预测Load指令执行延迟的方法及系统
JP7151439B2 (ja) * 2018-12-06 2022-10-12 富士通株式会社 演算処理装置および演算処理装置の制御方法
US10977040B2 (en) 2019-02-19 2021-04-13 International Business Machines Corporation Heuristic invalidation of non-useful entries in an array
US10802830B2 (en) * 2019-03-05 2020-10-13 International Business Machines Corporation Imprecise register dependency tracking
US11099989B2 (en) 2019-03-12 2021-08-24 International Business Machines Corporation Coherency maintenance via physical cache coordinate comparison
US11243774B2 (en) 2019-03-20 2022-02-08 International Business Machines Corporation Dynamic selection of OSC hazard avoidance mechanism
US10929142B2 (en) 2019-03-20 2021-02-23 International Business Machines Corporation Making precise operand-store-compare predictions to avoid false dependencies
US10831661B2 (en) 2019-04-10 2020-11-10 International Business Machines Corporation Coherent cache with simultaneous data requests in same addressable index
US10824430B1 (en) * 2019-04-25 2020-11-03 International Business Machines Corporation Resolving operand store compare conflicts
EP3812891A1 (en) * 2019-10-21 2021-04-28 ARM Limited Decoupled access-execute processing
US11803637B2 (en) 2020-07-23 2023-10-31 Ventana Micro Systems Inc. Microprocessor that prevents store-to-load forwarding between different translation contexts
US11755732B2 (en) * 2020-07-23 2023-09-12 Ventana Micro Systems Inc. Microprocessor that conditions store-to-load forwarding on circumstances associated with a translation context update
US11803638B2 (en) 2020-07-23 2023-10-31 Ventana Micro Systems Inc. Microprocessor core with a store dependence predictor accessed using a translation context
US11755731B2 (en) 2020-07-23 2023-09-12 Ventana Micro Systems Inc. Processor that prevents speculative execution across translation context change boundaries to mitigate side channel attacks
CN115576610B (zh) * 2022-11-18 2023-03-10 北京数渡信息科技有限公司 一种适用于通用顺序发射处理器的指令分发处理方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5619662A (en) * 1992-11-12 1997-04-08 Digital Equipment Corporation Memory reference tagging
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5488729A (en) * 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
US5666506A (en) * 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5781752A (en) * 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
US5913048A (en) * 1997-03-31 1999-06-15 International Business Machines Corporation Dispatching instructions in a processor supporting out-of-order execution
US5999727A (en) * 1997-06-25 1999-12-07 Sun Microsystems, Inc. Method for restraining over-eager load boosting using a dependency color indicator stored in cache with both the load and store instructions
US6219742B1 (en) * 1998-04-29 2001-04-17 Compaq Computer Corporation Method and apparatus for artificially generating general purpose events in an ACPI environment
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6999952B1 (en) * 2001-04-18 2006-02-14 Cisco Technology, Inc. Linear associative memory-based hardware architecture for fault tolerant ASIC/FPGA work-around
US20030126409A1 (en) * 2001-12-28 2003-07-03 Toni Juan Store sets poison propagation
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
US20050223292A1 (en) * 2004-02-17 2005-10-06 Lee Chee S Single instruction type based hardware patch controller
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
US7716528B2 (en) * 2004-09-07 2010-05-11 Broadcom Corporation Method and system for configurable trigger logic for hardware bug workaround in integrated circuits
US8443227B2 (en) * 2008-02-15 2013-05-14 International Business Machines Corporation Processor and method for workaround trigger activated exceptions
US8627047B2 (en) * 2008-02-15 2014-01-07 International Business Machines Corporation Store data forwarding with no memory model restrictions

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5619662A (en) * 1992-11-12 1997-04-08 Digital Equipment Corporation Memory reference tagging
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Streamlining inter-operation memory communication via data dependence prediction;Andreas Moshovos et al;《PROCEEDING OF THE 30TH ANNUAL IEEE/ACM INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE》;19971203;第4,4.1,4.2,7.1部分 *

Also Published As

Publication number Publication date
US20110153986A1 (en) 2011-06-23
JP2015228237A (ja) 2015-12-17
JP2013515306A (ja) 2013-05-02
US8521992B2 (en) 2013-08-27
DE112010004322T5 (de) 2012-08-23
GB2486155A (en) 2012-06-06
CN102652304A (zh) 2012-08-29
US9430235B2 (en) 2016-08-30
GB201206367D0 (en) 2012-05-23
WO2011076602A1 (en) 2011-06-30
US20130318330A1 (en) 2013-11-28
JP5850532B2 (ja) 2016-02-03
GB2486155B (en) 2017-04-19
JP6143306B2 (ja) 2017-06-07

Similar Documents

Publication Publication Date Title
CN102652304B (zh) 预测并避免乱序微处理器中的操作数-存储-比较冒险
JP3788472B2 (ja) スーパースケーラマイクロプロセサに於て命令をリタイアさせるシステム及び方法
US10528355B2 (en) Handling move instructions via register renaming or writing to a different physical register using control flags
JP2013515306A5 (zh)
JP2005500616A (ja) 2レベルの分岐予測キャッシュによる分岐予測
JP2012212433A (ja) 条件付き命令が無条件で出力を提供するシステム及び方法
JP3678443B2 (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ
US8468325B2 (en) Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
KR20210058812A (ko) 소스 오퍼랜드 값들의 예측, 및 명령들의 최적화 처리의 장치 및 방법
WO1999045463A1 (fr) Processeur de donnees
US7275146B2 (en) Instruction control device and method therefor
WO1998002806A1 (en) A data address prediction structure utilizing a stride prediction method
JP2001505327A (ja) 1クロックサイクル内でデータをストアするよう構成されたデータメモリユニット、およびその動作方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant