CN114008587A - 在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放 - Google Patents

在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放 Download PDF

Info

Publication number
CN114008587A
CN114008587A CN202080043032.3A CN202080043032A CN114008587A CN 114008587 A CN114008587 A CN 114008587A CN 202080043032 A CN202080043032 A CN 202080043032A CN 114008587 A CN114008587 A CN 114008587A
Authority
CN
China
Prior art keywords
instruction
load
store
instructions
sfl
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.)
Withdrawn
Application number
CN202080043032.3A
Other languages
English (en)
Inventor
V·R·克廷蒂·纳雷什
S·普立亚达尔西
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN114008587A publication Critical patent/CN114008587A/zh
Withdrawn 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/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/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 or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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/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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

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

在处理器中的推测性错误预测恢复中限制基于负载的控制无关(CI)指令的重放。在错误预测恢复中,如果基于负载的CI指令消耗了基于存储的指令的被转发存储的数据,则基于负载的CI指令被指定为基于负载的CI数据依赖(CIDD)指令。在错误预测恢复期间,被重放的基于负载的CIDD指令将重新评估正确数据存储器负载的准确源,而不是消耗可能已经由可能仅存在于错误预测的指令控制流路径中的基于存储的指令转发的潜在错误数据。将基于负载的CI指令的重放仅限于所确定的基于CIDD负载的指令可以减少指令流水线中的执行延迟和功耗。

Description

在处理器中的推测性错误预测恢复中限制基于负载的控制无 关(CI)指令的重放
技术领域
本公开的技术一般涉及处理器的指令流水线中的控制流计算机指令(“指令”)的推测性预测,更具体地涉及控制流指令的推测性预测在执行时被解析为错误预测之后的错误预测恢复。
背景技术
指令流水线化是一种处理技术,由此可以通过将每个指令的处置拆分成一系列步骤来增加由处理器执行的计算机指令的吞吐量。这些步骤在由多个阶段组成的执行流水线中被执行。如果执行流水线中的所有阶段都能够同时且顺序地处理指令—因为指令在(多个)指令流水线中被排序,则可以实现最优处理器性能。然而,在指令流水线中可能会发生结构性风险,其中无法执行下一条指令,否则会导致错误的计算结果。例如,控制风险可能是作为执行控制流指令引起处理器中的精确中断的结果而发生的。可以引起控制风险的控制流指令的一个示例是条件分支指令。条件控制指令,诸如条件分支指令,可以基于在执行控制分支指令的条件时所评估的条件来重定向指令执行的流路径。结果,处理器可能不得不暂停对附加指令的取指(fetch),直到已经执行了条件控制指令为止,从而导致处理器性能降低和功耗增加。
一种用于将处理器性能最大化的方法涉及利用预测电路来推测性地预测将控制指令执行流路径的条件的结果。例如,对是否将采取(take)条件分支指令的预测可以基于先前条件分支指令的分支预测历史。当控制流指令最终到达指令流水线的执行阶段并且被执行时,控制流指令的因而产生的目标地址通过将该目标地址与之前在控制流指令被取指时所预测的目标地址相比较而被验证。如果所预测的目标地址和实际的目标地址匹配,意味着做出了正确的预测,则指令执行中不会引发延迟,因为目标地址处的后续指令将已经被正确取指并且在条件分支指令到达指令流水线的执行阶段时已经存在于指令流水线中。但是,如果所预测的目标地址和实际的目标地址不匹配,则指令流水线中发生导致精确中断的被错误预测的分支风险。结果,指令流水线被冲刷并且指令流水线取指单元被重定向以取指从目标地址开始的新指令,从而导致延迟和性能降低。这也被称为“错误预测惩罚”。此外,执行流水线中的阶段可能保持休眠,直到新取指的指令通过指令流水线到达执行阶段为止,因此降低了性能。处理器中的指令处理中的错误预测会导致延迟和性能降低。
一种方法是通过利用控制无关性(CI)来降低错误预测惩罚。CI指的是不管指令控制流路径方向如何都执行的指令区域。换句话说,CI指令与分支的控制决策无关。这在以流程图102的形式图示出的图1中的指令流100中以示例方式示出。指令流100包括条件分支指令104。依赖于条件分支指令104中的条件(即谓词)的解析,指令执行流路径将采取流路径106(1)或流路径106(2)。处理器可以在条件分支指令104到达指令流水线中的执行阶段并继续之前推测性地预测谓词的结果,并且继续并将所预测的流路径中的指令插入到要被执行的指令流水线中以避免处理延迟。在指令流100的相应控制依赖(CD)区域110(1)、110(2)中的两个相应指令控制流路径106(1)、106(2)中的一个指令控制流路径中的指令108(1)、108(2)是“控制依赖”(CD)指令108(1)、108(2)。CD指令是仅依赖于基于对条件分支指令104中的谓词的解析所采取的流路径106(1)、106(2)而被执行的指令。在指令流100中的控制无关(CI)区域114中还有其他指令112,其他指令112被插入到指令流水线中以得到执行,而不管作为来自条件分支指令104的结果采取了哪条指令控制流路径106(1)、106(2)。这些指令112也称为CI指令112。CI指令112可以基于它们对在相应CD区域110(1)或110(2)中采取的流路径106(1)、160(2)中的指令108(1)或108(2)的数据依赖性而进一步被分类。如果CI指令(例如,负载指令)依赖于由指令流100的CD区域110(1)或110(2)中的指令108(1)或108(2)(例如,存储指令)产生的数据,则CI指令是CI数据依赖(CIDD)指令112D;否则,它是CI数据无关(CIDI)指令112I。
当执行图1中的指令流100中的指令时所执行的CI技术要求对指令流100的CI区域114中的CI指令112之中的CIDD指令的标识。这使得CIDD指令112D可以作为错误预测恢复的一部分而被重新执行,以保障功能正确性。这是因为:虽然CI指令112中的CIDD指令112D被插入到由处理器执行的指令流水线中,而不管所采取的流路径106(1)、106(2),但是基于条件分支指令104的推测性预测(speculative prediction)所执行的CD指令108(1)或108(2)将不会在错误预测恢复中被执行。相反,未基于条件分支指令104的推测性预测而被执行的CD指令108(1)或108(2)将在错误预测恢复中被执行。这意味着由基于推测性错误预测而被执行的CD指令108(1)、108(2)产生、并且由CIDD指令112D消耗的的数据可能不准确。错误预测恢复有效地添加从在错误预测恢复中被执行的CD指令108(1)或108(2)的CD产生的数据。因此,错误预测恢复有效地“移除”了基于推测性错误预测而被执行的CD指令108(1)或108(2),从而有效地移除了它们的CD产生的数据。因此,基于推测性错误预测而被执行的任何基于负载的CIDD指令112D可能已经基于被移除的已存储CD数据和/或被添加的其他存储CD数据。基于负载的指令是执行负载操作以将数据从存储器取回到寄存器中的任何指令。为了解决已经基于稍后在错误预测恢复中被移除的CD数据所执行的CIDD指令112D的问题,处理器可以将所有基于负载的CI指令112标记为在错误预测恢复中被重新执行。以这种方式,影响基于负载的CIDD指令112D的任何被添加的已存储CD数据将在错误预测恢复中重新执行基于负载的CIDD指令112D时被使用。
发明内容
本文公开的示例性方面包括在处理器中的推测性错误预测恢复中限制基于负载的控制无关(CI)指令的重放,以及相关的方法。处理器被配置为推测性地预测条件控制指令(例如,条件分支、条件调用、条件返回、分支表指令)的条件(即,谓词)的结果,以将所预测的指令控制流路径中的指令预取指到要被处理的指令流水线中以减少指令取指延迟。在示例性方面中,在错误预测恢复中,处理器被配置为将指令流水线中在基于存储的控制依赖(CD)指令与基于负载的CI指令之间具有存储转发数据依赖性的基于负载的CI指令标识为CI数据依赖(CIDD)指令。CIDD指令在错误预测恢复中被重放,因为这些指令是基于消耗来自不正确指令控制流路径中的基于存储的CD指令的被存储数据而执行的,并且因此所消耗的被存储数据可能已经是不准确的。CD指令是依赖于基于条件控制指令中的谓词的解析所采取的指令控制流路径来得到执行的指令。CI指令是不管作为条件控制指令的结果所采取的指令控制流路径而被执行的指令。不基于从CD指令产生的数据来消耗数据的CI指令是CI数据无关(CIDI)指令。基于来自CD指令的数据依赖性来消耗数据的CI指令是CIDD指令。CIDD指令可以具有寄存器依赖性,其中指令之间的依赖性经由寄存器的生产方和消耗方而被知晓。基于负载的CIDD指令可以具有存储器依赖性,其中指令之间的依赖性基于生产方向消耗方所消耗的存储器位置产生结果。虽然在指令处理期间可以更容易地检查CIDD指令的寄存器依赖性,但是基于负载的CIDD指令的存储器依赖性可能更难以检查。因此,为了避免需要确定基于负载的CI指令是否具有要被重放的存储器依赖性,所有基于负载的CI指令,无论它们是CIDD还是CIDI指令,都可以在错误预测恢复中被分类为CIDD指令以使这样的指令被重放。然而,这也会重放在被错误预测的指令控制流路径上不是存储器依赖的基于负载的CIDI指令。因此,在本文公开的示例性方面中,仅在错误预测恢复中选择性地重放被标识为基于负载的CIDD指令的基于负载的CI指令,这可以减少指令流水线中的执行延迟和功耗。
在这方面,在本文公开的示例性方面中,基于负载的CI指令在错误预测恢复中被标识为具有存储转发数据依赖性。存储转发数据依赖性是当从基于存储的指令所产生的存储在指令流水线中作为基于负载的指令中的被消耗负载而被转发时存在的依赖性。如果基于负载的CI指令在错误预测恢复中被标识为具有存储转发依赖性,这意味着当采取被错误预测的、不正确的指令控制流路径时,在错误预测恢复之前,产生要被基于负载的CI指令消耗的存储数据的该基于存储的指令在处理器中的指令流水线中的指令流中被执行。因此,在错误预测恢复中,具有与基于负载的CI指令的存储转发依赖性的基于存储的指令可能会产生不同的存储结果和/或可能从指令控制流路径中“移除”—因为它是在不正确地被采取的指令控制流路径中的基于存储的CD指令。被标识为在错误预测恢复中具有存储转发依赖性的基于负载的CI指令可以选择性地被指定为基于负载的CIDD指令。基于负载的CIDD指令在错误预测恢复期间被重放(即,被处理以重新执行),以避免基于负载的CIDD指令消耗潜在的不正确负载,这是由于在错误预测恢复之前将来自基于存储的指令的存储结果转发到基于负载的CI指令而导致的。基于负载的CI指令的重放被限制重放被标识为基于负载的CIDD指令的基于负载的CI指令。例如,这与不区分基于负载的CIDI指令和基于负载的CIDD指令而将在错误预测恢复中的所有基于负载的CI指令都标识为基于负载的CIDD指令以进行重放相对。与在错误预测恢复中不加选择地重放所有基于负载的CI指令相对,在错误预测恢复中仅重放被标识为具有存储转发依赖性的基于负载的CI指令可以减少指令流水线中的执行延迟和处理器中的功耗。
在本文公开的示例中,在错误预测恢复中,响应于标识基于负载的CI指令和基于存储的指令之间的存储器依赖性,基于存储的CD指令和基于负载的CI指令之间的存储转发数据依赖性被标识。存储转发存储器依赖性可以基于标识消耗方基于负载的CI指令而被确定,该消耗方基于负载的CI指令消耗在如下存储器地址处的数据:该存储器地址与生产方基于存储的指令存储其产生的数据的存储器地址重叠。
在一个示例中,基于负载的CI指令和基于存储的指令之间的存储转发存储器依赖性基于确定由基于负载的CI指令所消耗的负载数据是否是“活跃”存储。活跃存储是来自处理基于存储的指令的存储操作,该存储在指令流水线中已经被转发到消耗的基于负载的指令,但是尚未被提交到存储器。非活跃存储是不再是推测性的并且可能已经被提交(即写回)到存储器的存储操作。将基于活跃存储的基于负载的CI指令标识为基于负载的CIDD指令以供重放是基于以下认识:即“被移除的”CD存储是用不正确的被存储数据执行CIDD指令的原因。“被移除的”CD存储是在后来发现已经被错误预测的预测指令控制流路径(predicted instruction control flow path)中的基于存储的CD指令所产生的存储操作。对照而言,“被添加的”CD存储是由在作为错误预测恢复的结果而被执行的正确指令数据路径中“被添加的”的CD存储指令所产生的存储。在错误预测恢复中,作为加载和执行正确指令控制流路径的结果,被错误预测的指令控制流路径中的基于存储的CD指令有效地“被移除”。如果这样的基于负载的CI指令不被重放,则由基于负载的CI指令消耗的被移除的CD存储导致功能故障,因为不然,这样的基于负载的CI指令的、基于来自被错误预测的指令控制流路径的被移除的CD存储的先前执行否则将成立。如果基于活跃存储的数据来执行基于负载的CI指令,这意味着由基于负载的CI指令消耗的存储数据可能会在错误预测恢复中改变为尚未提交。因此,被标识为具有对活跃存储的存储器依赖性的基于负载的CI指令被标识为基于负载的CIDD指令以供重放。如果基于负载的CI指令基于非活跃存储的数据被执行,这意味着所存储的数据被提交到存储器,则处理器不需要将这样的基于负载的CI指令标识为基于负载的CIDD指令以供重放。这是因为只有在所预测的条件的谓词已经被解析为真时才提交被存储数据。如果由基于负载的CI指令消耗的已存储数据已经被提交,这意味着正确指令控制流路径中的基于存储的CD指令已经替换了由不正确的指令控制流路径中的基于存储的CD指令先前所存储的数据。因此,未基于活跃存储被执行的基于负载的CI指令被标识为基于负载的CIDI指令并且不被重放。
重放被标识为基于负载的CIDD指令的基于负载的CI指令也可以解析“被重放的”CIDD存储。被重放的CIDD存储是基于存储的CIDD指令,其产生要被CI指令消耗的数据,并且因此在基于存储的CIDD指令和消耗的CI指令之间存在存储转发数据依赖性。如果这样的基于负载的CI指令不被重放,则由基于负载的CI指令所消耗的重放的CIDD存储引起功能故障,因为否则,这样的基于负载的CI指令的先前执行是基于来自被错误预测的指令控制流路径的CIDD存储。因此,被标识为具有对活跃存储的存储器依赖性的基于负载的CI指令被标识为基于负载的CIDD指令以供重放还解决了由于被重放的CIDD存储而导致的数据不准确性。
通过确定较新的负载是否可能具有重叠的存储器地址,被添加的CD存储可以在错误预测恢复中在它们的执行中被处置。如果是,则认为这样的加载指令有故障,并且可以通过将指令流水线冲刷回到故障加载指令并且从故障加载指令重新开始程序执行来恢复(多个)指令流水线。然而,在本文公开的某些示例性方面,为了减少由于被添加的CD存储而导致的冲刷实例,错误预测恢复中基于负载的CIDI指令的确定的活跃存储存储器依赖性可以被标记为要被重放的基于负载的CIDD指令。基于负载的CIDI指令的活跃存储存储器依赖性通常会通知基于负载的CIDI指令被尚未执行的基于存储的指令转发的易感性的历史性质。
在这方面,在一个示例性方面,提供了一种处理器。该处理器包括指令处理电路,该指令处理电路包括一个或多个指令流水线。该指令处理电路被配置为:将多个指令从存储器取指到一个或多个指令流水线之中的指令流水线中,一个或多个指令流水线中的被取指的多个指令包括指令流,该指令流包括至少一个控制无关(CI)指令区域和多个控制依赖(CD)指令区域。该指令处理电路还被配置为推测性地预测指令流中的条件控制指令中的谓词。该指令处理电路还被配置为:处理指令流中的被取指的指令,该被取指的指令包括多个CD指令区域之中的第一CD指令区域中的被取指的指令和CI指令区域中的基于负载的CI指令,该第一CD区域是基于推测性预测而被采取的。该指令处理电路还被配置为:基于确定指令流中的基于存储的指令是否指定由基于负载的CI指令消耗的转发存储,确定基于负载的CI指令是否是转发存储依赖(SFD)基于负载的CI指令。该指令处理电路还被配置为执行条件控制指令以解析条件控制指令的谓词。该指令处理电路还被配置为确定推测性预测是否与从条件控制指令的执行所解析的谓词匹配。响应于推测性预测与条件控制指令的执行所解析的谓词不匹配,指令处理电路还被配置为:处理指令流中的多个CD指令区域之中的第二CD指令区域中的被取指的指令和基于负载的CI指令,该第二CD指令区域是基于从条件控制指令的执行所解析的谓词而被采取的。响应于确定基于负载的CI指令是SFD基于负载的CI指令,指令处理电路被配置为重放已处理的基于负载的CI指令。
在另一个示例性方面,提供了一种将处理器中的指令流中的基于负载的控制无关(CI)指令指定为基于负载的CI数据依赖(DD)(CIDD)指令以用于错误预测恢复中的重放的方法。该方法包括:将多个指令从存储器取指到一个或多个指令流水线之中的指令流水线中,一个或多个指令流水线中的被取指的多个指令包括指令流,该指令流包括至少一个控制无关(CI)指令区域和多个控制依赖(CD)指令区域。该方法还包括:推测性地预测指令流中的条件控制指令中的谓词。该方法还包括:处理指令流中的被取指的指令,该被取指的指令包括指令流中的多个CD指令区域之中的第一CD指令区域中的被取指的指令和CI指令区域中的基于负载的CI指令,该第一CD指令区域是基于推测性预测而被采取的。该方法还包括:基于确定指令流中的基于存储的指令是否指定由基于负载的CI指令消耗的转发存储,确定基于负载的CI指令是否是SFD基于负载的CI指令。该方法还包括执行条件控制指令以解析条件控制指令的谓词。该方法还包括确定推测性预测是否与从条件控制指令的执行所解析的谓词匹配。响应于推测性预测与条件控制指令的执行所解析的谓词不匹配,该方法还包括:处理指令流中的多个CD指令区域之中的第二CD指令区域中的被取指的指令和基于负载的CI指令,该第二CD指令区域是基于从条件控制指令的执行被解析的谓词而被采取的,并且响应于确定基于负载的CI指令是SFD基于负载的CI指令,重放已处理的基于负载的CI指令。
该处理器包括指令处理电路,该指令处理电路包括一个或多个指令流水线。该指令处理电路被配置为:将多个指令从存储器取指到一个或多个指令流水线之中的指令流水线中,一个或多个指令流水线中的被取指的多个指令包括指令流,该指令流包括至少一个控制无关(CI)指令区域和多个控制依赖(CD)指令区域。该指令处理电路还被配置为推测性地预测指令流中的条件控制指令中的谓词。该指令处理电路还被配置为:处理指令流中的被取指的指令,该被取指的指令包括多个CD指令区域之中的第一CD指令区域中的被取指的指令和CI指令区域中的基于负载的CI指令,该第一CD区域是基于推测性预测而被采取的。指令处理电路还被配置为确定基于负载的CI指令是否被预测为具有对指令流中的基于存储的指令的存储器依赖性。该指令处理电路还被配置为执行条件控制指令以解析条件控制指令的谓词。该指令处理电路还被配置为确定推测性预测是否与从条件控制指令的执行所解析的谓词匹配。响应于推测性预测与条件控制指令的执行所解析的谓词不匹配,指令处理电路还被配置为:处理指令流中的多个CD指令区域之中的第二CD指令区域中的被取指的指令和基于负载的CI指令,该第二CD指令区域是基于从条件控制指令的执行所解析的谓词而被采取的,确定基于负载的CI指令是否具有作为存储转发依赖的(SFD)基于负载的CI指令的被预测的存储器依赖性,并且响应于确定基于负载的CI指令具有作为SFD基于负载的CI指令的被预测的存储器依赖性,将已执行的基于负载的CI指令作为基于负载的CI数据依赖(DD)(CIDD)指令而重放。
本领域技术人员在结合附图阅读以下优选实施例的具体实施方式后将了解本公开的范围并且意识到其附加方面。
附图说明
并入在本说明书中并构成本说明书一部分的附图图示了本公开的若干方面,并且与说明书一起用于解释本公开的原理。
图1是流程图形式的指令流,图示了条件分支指令和依赖于从对条件分支指令的谓词的预测或解析所采取的指令控制流路径来执行的控制依赖(CD)指令,以及与从条件分支指令所采取的指令控制流路径无关地被执行的控制无关(CI)指令;
图2A是流程图形式的指令流,图示了来自基于存储的CD指令的CD存储,该基于存储的CD指令从所采取的不正确的预测指令控制流路径产生的,该CD存储被转发到基于负载的CI指令中的存储器依赖的CI负载;
图2B是在错误预测恢复中被处理的流程图形式的指令流,图示了来自图2A中的被错误地预测的指令控制流路径的CD存储的移除,这导致基于所采取的不正确的预测的指令控制流路径的、图2A中的基于负载的CI指令中的非法CI负载;
图3A是流程图形式的指令流,图示了来自基于存储的CI指令的CI数据依赖(CIDD)存储,该基于存储的CI指令具有对来自如下基于存储的CI指令的CD存储的存储器依赖性:该基于存储的CI指令来自所采取的不正确的预测指令控制流路径,其中CIDD存储被转发到基于负载的CI指令中的CI负载;
图3B是在错误预测恢复中被处理的流程图形式的指令流,图示了来自图3A中的不正确地预测指令控制流路径中的CD存储的移除,这导致基于所采取的不正确地预测指令控制流路径的在图3A中基于存储的CI指令中的非法CIDD存储,从而导致图3A中的基于负载的CI指令中的非法CI负载;
图4A是流程图形式的指令流,图示了所采取的不正确的预测指令控制流路径和基于负载的CI指令中的CI数据无关(CIDI)存储;
图4B是在错误预测恢复中处理的流程图形式的指令流,图示了在正确指令控制流路径中的基于存储的CD指令中被添加的CD存储,该CD存储具有与图4A中作为基于负载的CIDD指令的基于负载的CI指令的存储器依赖性,如果基于负载的CIDD指令已经被执行,则导致非法CI负载;
图5A是流程图形式的指令流,图示了所采取的不正确地被预测的指令控制流路径、基于存储的CI指令和基于负载的CI指令,该负载的CI指令对基于所采取的不正确的预测指令控制流路径的基于存储的CI指令不是存储器依赖的;
图5B是在错误预测恢复中被处理的流程图形式的指令流,图示了来自所采取的正确指令控制流路径中的基于存储的CD指令的被添加的CD存储,该CD存储与图5B中的基于存储的CI指令具有存储器依赖性,其中作为来自基于存储的CD指令的CD存储的结果,图5B中的基于负载的CI指令与基于存储的CI指令具有存储器依赖性;
图6A是流程图形式的指令流,其图示了在CI指令流中的存储和基于负载的CI指令中的CI负载之间的存储转发存储器依赖性的跟踪,其遵循根据条件控制指令所采取的被预测的不正确的CD指令控制流路径,其中CI负载是从基于存储的CD指令中的CD存储和基于存储的CI指令中的CI存储被转发的;
图6B是流程图形式的指令流,其图示了基于基于负载的CI指令的CI负载被指定为CIDD负载来在错误预测恢复中指定图6A中的CI指令流中的基于负载的CI指令以供重放;
图7是示例性基于处理器的系统的示意图,该系统包括处理器,该处理器具有用于处理计算机指令以供执行的一个或多个指令流水线,其中该处理器包括控制无关确定电路,该电路通信地耦合到指令流水线并且被配置为跟踪针对基于负载的CI指令中的CI负载的存储转发依赖性、以及在错误预测恢复中选择性地指定图6A中的CI指令流中的存储转发依赖的基于负载的CI指令以供重放;
图8是图示了处理器(诸如图7中的处理器)的示例性过程的流程图,该处理器跟踪针对基于负载的CI指令中的CI负载的存储转发依赖性、并且在错误预测恢复中选择性地指定CI指令流中的确定的存储转发依赖的基于负载的CI指令作为基于负载的CIDD指令以供重放;
图9是图示了控制无关确定电路的示例性细节的示意图,该电路可以在图7的处理器中被提供,以跟踪针对基于负载的CI指令中的CI负载的存储转发依赖性、并且在错误预测恢复中选择性地指定图6A中的CI指令流中的存储转发依赖的基于负载的CI指令作为基于负载的CIDD指令以供重放;
图10是由图9中的控制无关确定电路中的示例性存储转发跟踪电路控制的示例性存储转发跟踪存储器,其中该存储转发跟踪存储器被配置为按负载标识(ID)来存储负载指令条目,并且针对每个负载ID,存储负载指令所消耗的负载是否由存储指令所产生的存储转发的标识、以及任何这样的存储指令的ID;
图11A是流程图形式的指令流,其图示了图9中的控制无关确定电路基于从基于存储的指令到CI指令流中的基于负载的CI指令的被转发的CD存储是在错误预测恢复中要被重放的活跃存储来跟踪存储转发依赖性;
图11B是流程图形式的指令流,用于图示了图9中的控制无关确定电路将图11A中具有对活跃存储的SFD的基于负载的CI指令指定为基于负载的CIDD指令以供重放;
图12A是流程图形式的指令流,该基于存储的指令产生存储,该存储被转发用于遵循根据条件控制指令而采取的预测的不正确的CD指令控制流路径的CI指令流中的基于负载的CI指令的CI负载;
图12B是流程图形式的指令流,用于图示如果其转发存储指令ID指示对应的基于存储的指令不比条件控制指令旧,则图9中的控制无关确定电路将图12A中的基于负载的CI指令指定为基于负载的CIDD指令以供重放;
图13A是流程图形式的指令流,其图示了图9中的控制无关确定电路跟踪基于存储的指令的存储指令ID,该基于存储的指令产生存储,该存储被转发用于遵循根据条件控制指令而被采取的被预测的不正确的CD指令控制流路径的CI指令流中的基于负载的CI指令的CI负载;
图13B是流程图形式的指令流,用于图示如果其转发存储指令ID不比最新近的非推测性基于存储的指令旧,则图9中的控制无关确定电路将图13A中的基于负载的CI指令指定为基于负载的CIDD指令以供重放;
图14是图示了备选的控制无关确定电路的示例性细节的示意图,该电路可以在图7中的处理器中被提供,以跟踪针对基于负载的CI指令中的CI负载的存储转发依赖性,并且在错误预测恢复中将CI指令流中的存储转发依赖的基于负载的CI指令选择性地指定为基于负载的CIDD指令以供重放;
图15是由图14中的控制无关确定电路中的示例性存储转发跟踪电路控制的示例性存储转发跟踪存储器,其中该存储转发跟踪存储器被配置为按负载ID来存储负载指令条目,并且针对每个加载ID,存储关于负载指令所消耗的负载是否由从存储指令所产生的存储转发的标识以及任何这样的存储指令的ID;
图16是图示了备选的控制无关确定电路的示例性细节的示意图,该电路可以在图7中的处理器被提供,以跟踪具有被预测的存储转发依赖性的基于负载的CI指令中的CI负载,并且在错误预测恢复中将CI指令流中的被预测存储转发依赖的基于负载的CI指令选择性地指定为基于负载的CIDD指令以供重放;
图17A是流程图形式的指令流,其图示了图16中的控制无关确定电路捕获遵循根据条件控制指令而被采取的被预测的不正确的CD指令控制流路径的CI指令流中的基于负载的CI指令的存储器依赖性预测,并且响应于指示依赖性预测的存储器依赖性预测将基于负载的CI指令标记为存储转发依赖的;
图17B是流程图形式的指令流,用于图示图16中的控制无关确定电路被配置为:确定图17A中的基于负载的CI指令是否被标记为具有存储转发依赖性,并且响应于基于负载的CI指令被标记为具有存储转发依赖性而将基于负载的CI指令标记为基于负载的CIDD指令以供重放;和
图18是示例性基于处理器的系统的框图,该系统包括具有用于处理计算机指令以供执行的一个或多个指令流水线的处理器和控制无关确定电路,其中该处理器包括控制无关确定电路,该控制无关确定电路通信地耦合到指令流水线并且被配置为跟踪基于负载的CI指令中的CI负载的存储转发依赖性并且在错误预测恢复中将CI指令流中的存储转发依赖的基于负载的CI指令选择性地指定为基于负载的CIDD指令以供重放,其中该处理器可以包括但不限于图7中的处理器,并且控制无关确定电路可以包括但不限于图9、图14和图16中的控制无关确定电路。
具体实施方式
本文公开的示例性方面包括在处理器中的推测性错误预测恢复中限制基于负载的控制无关(CI)指令的重放,以及相关的方法。处理器被配置为推测性地预测条件控制指令(例如,条件分支、条件调用、条件返回、分支表指令)的条件(即,谓词)的结果,以将所预测的指令控制流路径中的指令预取指到要被处理的指令流水线中以减少指令取指延迟。在示例性方面中,在错误预测恢复中,处理器被配置为将指令流水线中在基于存储的控制依赖(CD)指令与基于负载的CI指令之间具有存储转发数据依赖性的基于负载的CI指令标识为CI数据依赖(CIDD)指令。CIDD指令在错误预测恢复中被重放,因为这些指令是基于消耗来自不正确指令控制流路径中的基于存储的CD指令的已存储数据而执行的,并且因此所消耗的已存储数据可能已经是不准确的。CD指令是依赖于基于条件控制指令中的谓词的解析所采取的指令控制流路径来得到执行的指令。CI指令是不管作为条件控制指令的结果所采取的指令控制流路径而被执行的指令。不基于从CD指令产生的数据来消耗数据的CI指令是CI数据无关(CIDI)指令。基于来自CD指令的数据依赖性来消耗数据的CI指令是CIDD指令。CIDD指令可以具有寄存器依赖性,其中指令之间的依赖性经由寄存器的生产方和消耗方而被知晓。基于负载的CIDD指令可以具有存储器依赖性,其中指令之间的依赖性基于生产方向消耗方所消耗的存储器位置产生结果。虽然在指令处理期间可以更容易地检查CIDD指令的寄存器依赖性,但是基于负载的CIDD指令的存储器依赖性可能更难以检查。因此,为了避免需要确定基于负载的CI指令是否具有要被重放的存储器依赖性,所有基于负载的CI指令,无论它们是CIDD还是CIDI指令,都可以在错误预测恢复中被分类为CIDD指令以使这样的指令被重放。然而,这也会重放在被错误预测的指令控制流路径上不是存储器依赖的基于负载的CIDI指令。因此,在本文公开的示例性方面中,仅在错误预测恢复中选择性地重放被标识为基于负载的CIDD指令的基于负载的CI指令,这可以减少指令流水线中的执行延迟和功耗。
在这方面,在本文公开的示例性方面中,基于负载的CI指令在错误预测恢复中被标识为具有存储转发数据依赖性。存储转发数据依赖性是当从基于存储的指令所产生的存储在指令流水线中作为基于负载的指令中的被消耗负载而被转发时存在的依赖性。如果基于负载的CI指令在错误预测恢复中被标识为具有存储转发依赖性,这意味着当采取被错误预测的、不正确的指令控制流路径时,在错误预测恢复之前,产生要被基于负载的CI指令消耗的存储数据的该基于存储的指令在处理器中的指令流水线中的指令流中被执行。因此,在错误预测恢复中,具有与基于负载的CI指令的存储转发依赖性的基于存储的指令可能会产生不同的存储结果和/或可能从指令控制流路径中“移除”—因为它是在不正确地被采取的指令控制流路径中的基于存储的CD指令。被标识为在错误预测恢复中具有存储转发依赖性的基于负载的CI指令可以选择性地被指定为基于负载的CIDD指令。基于负载的CIDD指令在错误预测恢复期间被重放(即,被处理以重新执行),以避免基于负载的CIDD指令消耗潜在的不正确负载,在错误预测恢复之前由于基于存储的指令的存储结果转发到基于负载的CI指令而导致的。基于负载的CI指令的重放被限制重放被标识为基于负载的CIDD指令的基于负载的CI指令。例如,这与不区分基于负载的CIDI指令和基于负载的CIDD指令而将在错误预测恢复中的所有基于负载的CI指令都标识为基于负载的CIDD指令以供重放相对。与在错误预测恢复中不加选择地重放所有基于负载的CI指令相对,在错误预测恢复中仅重放被标识为具有存储转发依赖性的基于负载的CI指令可以减少指令流水线中的执行延迟和处理器中的功耗。
在本文公开的示例中,在错误预测恢复中,响应于标识基于负载的CI指令和基于存储的指令之间的存储器依赖性,基于存储的CD指令和基于负载的CI指令之间的存储转发数据依赖性被标识。存储转发存储器依赖性可以基于标识消耗方基于负载的CI指令来确定,该消耗方基于负载的CI指令消耗如下存储器地址处的数据:该存储器地址在与生产方基于存储的指令存储其产生的数据的存储器地址重叠。
为了图示基于存储的CD指令和作为CIDD指令的基于负载的CI指令之间的存储转发数据依赖性,提供了图2A和图2B。图2A是流程图形式的指令流200,图示了来自基于存储的CD指令202的CD存储,该基于存储的CD指令202从所采取的不正确的预测指令控制流路径(“CD预测路径204”)产生。指令流200是基于加载到处理器中的计算机指令的指令集或列表在处理器中被处理的指令的集合。当采取预测的指令控制流路径时,来自基于存储的CD指令202的CD存储被转发到基于负载的CI指令206中的存储器依赖的CI负载。因此,当采取预测指令控制流路径时,基于负载的CI指令206具有对基于存储的CD指令202的存储转发依赖性。存储转发数据依赖性或“存储转发依赖性”(SFD)是当基于存储的指令产生的存储在指令流水线中作为基于负载的指令中的被消耗负载而被转发时存在的依赖性。图2A中的指令流200包括由执行指令流200中的指令的处理器评估的条件分支指令208。处理器可以被配置为在条件分支指令208的条件或谓词在条件分支指令208的执行中完全被评估之前预测条件分支指令208的结果以避免指令流水线中的延迟。图2A图示了对导致所采取的分支的条件分支指令208的评估的预测。指令流200中作为所采取分支的结果而在指令控制流路径中被处理的指令是CD指令,这意味着这些指令的处理的控制依赖于条件分支指令208的评估结果的预测。不论采取何种分支而在指令控制流路径中被处理的指令流200是CI指令,这意味着它们的处理中的控制不依赖于条件分支指令208的评估结果的预测。
在图2A的示例中,指令流200的分支采取路径是CD预测路径204,该路径包括CD指令区域211中的CD指令210,CD指令区域211包括基于存储的CD指令202。基于存储的CD指令202是CD指令,因为它在要被处理器执行的指令流200中的插入依赖于条件分支指令208的评估结果。在该示例中,基于存储的CD指令202将‘X’存储在存储器位置[A]。指令流200中存在跟随CD预测路径204中的CD指令210之后的指令,该指令是CI指令流路径214(“CI路径214”)中的CI指令区域213中的CI指令212。CI指令212包括基于负载的CI指令206,基于负载的CI指令206将存储器位置[A]处的数据为加载到‘Y’。例如,处理器可以能够识别基于负载的CI指令206和基于存储的CD指令202之间的存储器依赖性,并且在基于存储的CD指令202的存储结果被提交(即,写入)到存储器位置[A]之前,将来自处理基于存储的CD指令202的‘X’的存储结果转发到‘X’作为基于负载的CI指令206的目标。由于CD预测路径204中的基于存储的CD指令202要求将‘X’存储到存储器位置[A]中,并且基于负载的CI指令206的负载源也是存储器位置[A],因此当基于存储的CD指令202和基于负载的CI指令206被执行时,‘Y’最终将是‘X’。因此,基于负载的CI指令206被认为是CIDD指令,其对由基于存储的CD指令202(其是CD指令210)产生的存储是数据依赖的。
然而,如图2B中的指令流216中所示,如果在条件分支指令208的执行期间,确定条件分支指令208的条件实际上被评估为未采取的指令控制流路径218是实际路径(“实际路径218”),这意味着更早在预测要采取条件分支指令208的条件时发生了错误预测。然后将由处理器在错误预测恢复中执行指令流216,其中未采取的实际路径218被执行。因此,未采取的实际路径218中的指令也是CD指令,因为它们对条件分支指令208的结果是控制依赖的。如图2B中所示,相同的基于负载的CI指令206存在于CI路径214中,因为CI路径214包括无论结果条件分支指令208评估结果如何都被执行的CI指令212。然而,在该示例中,图2A中的CD预测路径204中的CD指令210中存在的基于存储的指令202在图2B中的实际路径218中的CD指令中不存在。因此,基于存储的指令202在错误预测恢复中被有效地“移除”,使得先前被存储的‘X’数据仍然被存储在存储器位置[A],但是如果没有从指令流200中先前所采取和处理的不正确的CD预测路径204中的CD指令210,该‘X’数据不会已经被存储。这导致将存储器位置[A]向基于负载的CI指令206的非法转发。虽然在指令处理期间可以更容易地确定CIDD指令的寄存器依赖,以确定是否应在错误预测恢复中重放CIDD指令,但是更难的是确定基于负载的CIDD指令是否具有对CD指令的存储器依赖性。因此,为了避免需要确定基于负载的CI指令是否具有要被重放的存储器依赖性,处理器可以被配置为将所有CI指令212指定为在图2B中的指令流216中所图示的错误预测恢复中要被重放的CIDD指令,以避免这种潜在的非法负载条件。
基于存储的CD指令还可以具有与中间基于存储的CI指令的数据依赖性,该中间基于存储的CI指令也具有与基于负载的CI指令的存储器依赖性,这也导致向基于负载的CI指令的数据非法转发。在这方面,图3A是流程图形式的指令流300,图示了来自基于存储的CD指令302的CD存储,该基于存储的CD指令由所采取的不正确的预测指令控制流路径(“CD预测路径304”)产生,该CD存储被转发到基于存储的CI指令306中的存储器依赖的CI存储。图3A中的指令流300包括条件分支指令308。指令流300的分支采取路径是CD预测路径304,其包括CD指令区域311中的CD指令310,CD指令区域311包括基于存储的CD指令302。在该示例中,基于存储的CD指令302将‘A+1’的结果存储在存储器位置[A]中。CI指令区域313中的CI指令控制流路径314(“CI路径314”)中的CI指令312包括基于存储的CI指令306,其依赖于基于存储的CD指令302中的存储操作‘A=A+1’来将‘X’存储到存储器位置[A]。基于负载的CI指令316将存储器位置[B]中的数据加载为‘Y’。因此,如果A=B,这会导致‘X’到‘Y’的存储到负载转发,这使基于存储的CD指令302和基于负载的CI指令316之间存在存储器依赖性。因此,CI路径314中的基于负载的CI指令316是受条件分支指令308的评估结果影响的基于CIDD负载的指令。
然而,如图3B中的指令流318中所示,如果在条件分支指令308的执行期间,确定条件分支指令208的条件实际上被评估为将未采取的CD指令控制流路径320作为CD实际路径(“CD实际路径320”),这意味着稍早在预测要采取条件分支指令308的条件时发生了错误预测。然后将由处理器在错误预测恢复中执行指令流318,其中未采取的CD实际路径320被执行。如图3B中所示,相同的基于存储的CI指令306和基于负载的CI指令316存在于CI路径314中,因为CI路径314包括无论结果条件分支指令308评估结果如何都被执行的CI指令312。然而,在该示例中,在图3A中的CD预测路径304中的CD指令310中存在的基于存储的CD指令302不存在于图3B中的CD实际路径320中的CD指令区域323中的CD指令322中。因此,基于存储的CD指令302在错误预测恢复中有效地“被移除”,使得产生的已存储数据‘A+1’仍然被存储在‘A’中,但是如果没有从指令流300中先前所采取和处理的不正确的CD预测路径304中的CD指令310,该数据不会已经被存储。这导致错误预测恢复中基于负载的CI指令316中的‘X’被存储在存储器位置‘A’中,当‘B’不应等于‘A’时导致B=A,从而作为基于负载的CI指令316的执行结果,导致‘X’被非法加载为‘Y’。因此,处理器可以被配置为将CI指令区域313中的所有CI指令312指定为将在图图3B中的指令流318中所图示的错误预测恢复中要被重放的CIDD指令,以避免这种潜在的非法负载条件。
基于由错误预测恢复中的条件控制指令的执行导致的正确指令控制流路径中的“被添加的”CD存储,基于存储的CD指令还可以具有与基于负载的CI指令的数据依赖性。在这方面,图4A是流程图形式的指令流400,其图示了CI指令控制流路径406(“CI路径406”)中的CI指令区域405中的CI指令404中的基于负载的CI指令402,基于负载的CI指令402将在存储器位置[A]处的数据加载为‘Y’。然而,当从条件分支指令410中采取CD预测指令控制流路径408(“CD预测路径408”)时,基于负载的CI指令402是基于负载的CI数据无关(CIDI)指令。这是因为在CD预测路径408中的CD指令区域413中没有CD指令412具有与基于负载的CI指令402的数据依赖性,如图4A中所示。然而,如图4B中的指令流414中所示,如果在条件分支指令410的执行期间,确定条件分支指令410的条件实际上被评估为未采取的CD实际指令控制流路径416(“CD实际路径416”),这意味着更早在预测要采取条件分支指令410的条件时发生了错误预测。指令流414的CD实际路径416中的CD指令区域419中的CD指令418然后将由处理器在错误预测恢复中执行。
如图4B中所示,基于负载的CI指令402存在于CI路径406中。然而,在存储器位置[A]处存储‘X’的基于存储的CD指令420是在CD实际路径416中的CD指令418中。基于负载的CI指令402将存储器位置[A]处的数据加载为‘Y’,并且因此当采取CD实际路径416时是CIDD指令。因此,如果当作为图4A中的条件控制指令410的错误预测的结果而被采取CD预测路径408时作为被处理的结果而已经执行了基于负载的CI指令402,则处理器可以被配置为:检测被添加的基于存储的CD指令420具有与基于负载的CI指令402的存储转发存储器依赖性,并且使指令流水线被冲刷和被重新执行以正确地将‘X’加载为‘Y’。
在错误预测恢复中被添加的基于存储的CD指令也可以具有与中间基于存储的CI指令的数据依赖性,该中间基于存储的CI指令具有与基于负载的CI指令的存储器依赖性,这也导致向基于负载的CI指令的数据非法转发。在这方面,图5A是流程图形式的指令流500,其图示了CI指令控制流路径506(“CI路径506”)中的CI指令区域505中的CI指令504中的基于负载的CI指令502,基于负载的CI指令502将在存储器位置[B]处的数据加载为‘Y’。CI指令504还包括基于存储的CI指令508,基于存储的CI指令508将‘X’存储到存储器位置[A]中。CD指令区域513中的CD指令512中不存在与基于存储的CI指令508和基于负载的CI指令502是存储器依赖的指令(两者因此都是CIDI指令)。因此,如果‘B’不等于‘A’,则‘Y’将不会在基于负载的CI指令502中被加载有‘X’。
然而,如图5B中的指令流516中所示,如果在条件控制指令510的执行过程中,确定条件控制指令510的条件实际上被评估为未采取的CD实际指令控制流路径518(“CD实际路径518”),这意味着更早当预测要采取条件控制指令510的条件时发生了错误预测。指令流516的CD实际路径518中的CD指令区域521中的CD指令520然后将由处理器在错误预测恢复中执行。图5B中的CD指令520包括将‘A+1’存储为‘A’的基于存储的CD指令522。因此,基于存储的CI指令508具有与基于存储的CD指令522的存储器依赖性,使得如果采取CD实际路径518,则基于存储的CI指令508是CIDI指令,与图5A中的CD预测路径514相对。因此,如果基于存储的CD指令522的操作使‘A’=‘B’,则基于存储的CI指令508对基于存储的CD指令522的存储转发依赖性将使‘X’被转发到‘Y’,从而‘Y’=‘X’。因此,如果当作为图5A中的条件控制指令510的错误预测的结果而被采取CD预测路径514时作为被处理的结果而已经执行了基于负载的CI指令502,则处理器可以被配置为:检测被添加的基于存储的CD指令522具有与基于负载的CI指令502的存储转发存储器依赖性,并且使指令流水线被冲刷和被重新执行。
在以上图2A-图5B中的示例中的每个示例中,指令流水线被冲刷并且所有CI指令在错误预测恢复中被重新执行以避免各种非法负载场景。这些非法负载场景可能是基于存储的CD指令的被移除和/或被添加的CD存储造成的,该基于存储的CD指令在作为条件控制指令错误预测的结果而被采取的CD预测路径和/或条件控制指令错误预测之后采取的CD实际路径中。这会导致指令流水线中的执行延迟和功耗增加,因为在错误预测恢复中所采取的CD实际路径中的CI指令并非全部都是CIDD指令。例如,在被移除的CD存储的情况下,这些CI指令中的一些CI指令可能不具有对CD预测路径中的CD指令的存储转发数据依赖性,并且因此是CIDI指令。CIDI指令不必在错误预测恢复中被重新执行,因为CIDI指令与根据条件控制指令所采取的的控制指令控制流路径是控制无关并且数据无关的。
在这方面,在本文公开的示例中,在错误预测恢复中标识基于负载的CI指令以确定基于负载的CI指令是否具有存储转发数据依赖性,也被称为存储转发依赖性(SFD)。如果基于负载的CI指令在错误预测恢复中被标识为具有存储转发依赖性,则这意味着产生要被基于负载的CI指令消耗的转发存储数据的基于存储的指令在作为采取被错误预测的不正确的指令控制流路径的结果的指令流中被执行。因此,在错误预测恢复中,具有与基于负载的CI指令的存储转发依赖性的基于存储的指令可能会产生不同的存储结果和/或从指令控制流路径中“被移除”,因为它在不正确的被采取的指令控制流路径中是基于存储的CD指令。被标识为具有存储转发依赖性的基于负载的CI指令可以被选择性地指定为基于负载的CIDD指令。然后基于负载的CIDD指令可以被指定为在错误预测恢复期间由处理器重放(即重新执行),以避免基于负载的CIDD指令消耗潜在的不正确负载—这是由于在错误预测恢复之前转发来自基于存储的指令的存储结果而导致的。基于负载的CI指令的重放可以被限制为重放被标识为基于负载的CIDD指令的基于负载的CI指令。例如,这与不区分基于负载的CIDI指令和基于负载的CIDD指令而在错误预测恢复中的将所有基于负载的CI指令都标识为基于负载的CIDD指令以供重放相对。与在错误预测恢复中不加选择地重放所有基于负载的CI指令相对,在错误预测恢复中仅重放被标识为具有存储转发依赖性的基于负载的CI指令可以减少指令流水线中的执行延迟和处理器中的功耗。
在这方面,图6A和图6B分别是流程图形式的指令流600、602,其图示了在CI指令流中的存储和基于负载的CI指令中的CI负载之间的存储转发存储器依赖性的跟踪。存储转发存储器依赖性的跟踪遵循根据条件控制指令606(诸如条件分支指令)所采取的预测的不正确的CD指令控制流路径(“CD预测路径604”)以及在错误预测恢复期间所采取的实际的正确的CD指令控制流路径608(“CD实际路径608”)。图6A中的指令流600包括在指令流600中到达条件控制指令606之前的预分支指令控制流路径612(“预分支路径612”)中的CI指令区域611中的预分支指令610。因此,预分支指令610是CI指令。预分支指令610包括基于存储的CI指令614,基于存储的CI指令614将‘W’存储到存储器位置[B]中。然后,如图6A中所示,作为将条件控制指令606中的条件预测为导致采取分支的结果,指令流600包括在CD预测路径604中的CD指令区域617中的CD指令616。CD预测路径604包括基于存储的CD指令618,基于存储的CD指令618将‘X’存储到存储器位置[A]中。如图6A中还所示的,指令流600包括CI指令控制流路径622(“CI路径622”)中的CI指令区域621中的CI指令620,CI指令620不管条件控制指令606中的条件的预测或评估结果如何都被执行。CI指令620包括基于负载的CI指令624,基于负载的CI指令624将存储器位置[B]中的数据加载为‘Z’。CI指令620还包括基于负载的CI指令626,基于负载的CI指令626将存储器位置[A]中的数据加载为‘Y’。因此,基于负载的CI指令624、626分别对由预分支路径612中的基于存储的CI指令614产生的CI存储和CD预测路径604中的基于存储的CD指令618产生的CI存储是存储转发依赖的,因为基于存储的CI指令614和基于存储的CD指令618的执行分别影响被加载到存储器地址[A]和[B]中的数据,存储器地址[A]和[B]然后被用作基于负载的CI指令624、626的源存储器地址位置。
在这方面,在图6A中所图示的示例中,处理器可以被配置为跟踪CI路径622中的基于负载的CI指令(诸如基于负载的CI指令624、626)是否具有对基于存储的指令的存储转发依赖性(SFD)。在该示例中,当采取CD预测路径604时,基于负载的CI指令624、626对基于存储的CI指令614和基于存储的CD指令618具有SFD。处理器可以被配置为跟踪存储何时作为存储转发负载(SFL)而被转发到基于负载的CI指令624、626,使得基于负载的CI指令624、626是CIDD指令。因此,如果当条件控制指令606的条件在执行中被解析时CD预测路径604被确定已经被错误预测,并且图6B中的CD实际路径608被采取为错误预测恢复,则处理器可以确定指令流602中是否有任何基于负载的CI指令(包括基于负载的CI指令624、626)被指定为CIDD指令。例如,作为默认指定,所有基于负载的CI指令可以被指定为CIDI指令,除非基于负载的CI指令被确定为具有SFD,在这种情况下基于负载的CI指令被指定为CIDD指令。对于被指定为CIDD指令的任何基于负载的CI指令,处理器可以被配置为当如图6B中所示采取CD实际路径608时在错误预测恢复中重放(即,重新执行)以使得基于负载的CI指令被重新执行。在该示例中,基于负载的CI指令624、626会通过在采取图6A中的CD预测路径604时所确定的它们的SFD而被指定为CIDD指令,并且然后在采取图6B中的CD实际路径608时作为CIDD指令被重放。
图7是包括处理器702的示例性基于处理器的系统700的示意图。如下文更详细讨论的,处理器702被配置为跟踪基于负载的CI指令中的CI负载的存储转发数据依赖性,以将存储转发数据依赖的基于负载的指令指定为基于负载的CIDD指令。处理器702还被配置为在错误预测恢复中将重放基于负载的CI指令限制为CI指令流中被指定为基于负载的CIDD指令的那些指令。
作为示例,处理器702可以是有序或乱序处理器(OoP)。处理器702包括指令处理电路704。指令处理电路704包括指令取指电路708,指令取指电路708被配置为从指令存储器710取指指令706。作为示例,指令存储器710可以在基于处理器的系统700中的系统存储器中被提供或者作为系统存储器的一部分被提供。还可以在处理器702中提供指令高速缓存712来对从指令存储器710取指的指令706进行高速缓存,以减少指令取指电路708中的时延。该示例中的指令取指电路708被配置为:将指令706作为被取指的指令706F提供给一个或多个指令流水线I0-IN中作为指令处理电路704中的指令流714,以在被取指的指令706F到达执行电路734被执行之前被预处理。指令流714中的被取指的指令706F包括生产方指令和消耗方指令,消耗方指令消耗作为指令处理电路704执行生产方指令的结果所产生的值。指令流水线I0-IN跨指令处理电路704的不同处理电路或阶段而被提供以在一系列步骤中对被取指的指令706F进行预处理和处理,这些步骤可以同时被执行以在被取指的指令706F在执行电路734中的执行之前增加吞吐量。例如,在指令流714中被标识为具有存储转发负载的基于存储的被取指的指令706F可以在被执行之前由指令处理电路704标识,以被转发来由基于消耗的基于负载的被取指的指令706F消耗。
图7中的处理器702中的指令处理电路704中还提供了控制流预测电路716(例如,分支预测电路),以推测或预测被取指条件控制指令706F(诸如条件分支指令)的谓词的结果,该结果影响在指令流水线I0-IN中被处理的取指指令706F的指令流714的指令控制流路径。控制流预测电路716的预测可以由指令取指电路708用来基于被预测的目标地址确定要取指的下一个被取指的指令706F。指令处理电路704还包括指令译码电路718,指令译码电路718被配置为将指令取指电路708所取指的被取指的指令706F译码成经译码指令706D,以确定指令类型和所需动作,其也可以被用来确定经译码指令706D应被放置在哪个流水线I0-IN中。例如,指令取指电路708被配置为取指在条件控制指令706之后的CD指令区域中的CD指令706和在CD指令区域之前或之后的CI指令区域中的CI指令706。经译码指令706D被放置在指令流水线I0-IN中的一个或多个指令流水线中、并且接下来被提供给指令处理电路704中的重命名电路720。重命名电路720被配置为确定在经译码指令706D中是否有任何寄存器名称需要被重命名以打破会阻止并行或乱序处理的任何寄存器依赖性。重命名电路720被配置为调用寄存器映射表(RMT)722来重命名逻辑源寄存器操作数(operand)和/或将经译码指令706D的目的地寄存器操作数写入到物理寄存器文件(PRF)726中的可用物理寄存器724(1)-724(X)(P0、P1、…、PX)。寄存器映射表(RMT)722包含多个映射条目,每个映射条目被映射到(即,关联到)相应的逻辑寄存器R0-RP。映射条目被配置为以地址指针的形式存储信息,以指向物理寄存器文件(PRF)726中的物理寄存器724(1)-724(X)。物理寄存器文件(PRF)724中的每个物理寄存器724(1)-724(X)X))包含数据条目,该数据条目被配置为存储针对经译码指令706D的源和/或目的地寄存器操作数的数据。
图7中的处理器702中的指令处理电路704在分派电路730之前还包括寄存器访问电路728。寄存器访问电路728被配置为:基于被映射到经译码指令706D的源寄存器操作数的寄存器映射表(RMT)722中的逻辑寄存器R0-RP的映射条目,访问物理寄存器文件(PRF)726中的物理寄存器724(1)-724(X),以取回从执行电路734中被执行的指令706E产生的值。寄存器访问电路728还被配置为提供所取回的从被执行的经译码指令706E产生的值,作为要被执行的经译码指令706D的源寄存器操作数。另外,在指令处理电路704中,分派电路730在指令流水线I0-IN中被提供,并且被配置为将经译码指令706D分派给执行电路734以在经译码指令706D的所有源寄存器操作数可用时被执行。例如,分派电路730负责确保在将经译码的消耗方指令706D分派给执行电路734以供执行之前经译码的消耗方指令706D的操作数的必要值是可用的。经译码指令706D的操作数可以包括立即值、被存储在存储器中的值、以及从其他经译码指令706D产生的值,这些其他经译码指令706D将被视为对消耗方指令的生产方指令。执行电路734被配置为执行从分派电路730接收的经译码指令706D。在指令处理电路704中还提供写电路732以将来自已执行指令706E的产生值写回或提交到存储器,诸如物理寄存器文件(PRF)726、高速缓存存储器或系统存储器。
如上面所讨论的,指令流714可以具有条件控制指令,该条件控制指令的谓词由控制流预测电路716推测性地预测。这样的预测被用来确定采取哪个分支来处理特定的CD指令区域以在条件控制指令之后的指令流水线I0-IN中的指令流714中处理。如上面所讨论的,基于条件控制指令706的谓词评估的预测来处理预测指令控制流路径中的CD指令706。不管作为预测条件分支指令706的谓词结果的结果而采取哪条指令控制流路径,在指令流714中的(多个)CI指令区域中还存在其他CI指令706,这些其他CI指令706被插入在指令流水线I0-IN中以得到执行。这些指令706也被称为CI指令706。这些CI指令可以基于它们对指令流714中的CD区域中的CD的数据依赖性而被进一步分类。例如,如果负载CI指令706依赖于由基于存储的CD指令706存储的数据,则CI指令是对基于存储的CD指令706的CIDD;否则,它是对基于存储的CD指令706的CIDI。
指令处理电路704被配置为执行由控制流预测电路716推测性地预测的执行电路734中的指令流714中的条件控制指令706D,以解析条件控制指令706D的谓词并且确定推测性预测与从条件控制指令706D的执行所解析的谓词是否匹配。如果当条件控制指令706的谓词在由执行电路734进行的执行中被解析时,指令处理电路704确定条件控制指令706被错误预测,则指令处理电路704被配置为执行错误预测恢复。在错误预测恢复中,指令处理电路704可以被配置为将指令流714中的指令706重放回到条件控制指令706,同时将CD指令包括在来自条件控制指令706的解析的实际正确的指令控制流路径中。因此,基于推测性错误预测而被处理或被执行的基于负载的CIDD指令706可能已经基于已移除的被存储CD数据和/或被添加的其他存储CD数据。
为了解决基于稍后在错误预测恢复中被移除的CD数据而已经被执行的CIDD指令706的问题,该示例中的指令处理电路704包括控制无关确定电路736。控制无关确定电路736被配置为:基于从指令处理电路704中的电路(诸如分派电路730)接收的信息,确定被处理的基于负载的CI指令706D对指令流水线I0-IN中的指令流714中的基于存储的指令706D是否是存储转发依赖的。控制无关确定电路736被配置为:基于确定指令流714中的基于存储的指令706所产生的存储是否被转发到基于负载的CI指令706以供消耗,确定基于负载的CI指令706对基于存储的指令是否是SFD的。控制无关确定电路736被配置为将基于负载的CI指令706D对基于存储指令是否是SFD的传达给执行电路734。如果执行电路734在条件控制指令706D的执行期间确定由控制流预测电路716进行的推测性预测与在条件控制指令706D的执行中所解析的谓词不匹配,则指令处理电路704被配置为:在错误预测恢复中处理指令流714中的第二CD指令区域中的被取指的指令706F,第二CD指令区域是基于从条件控制指令706D的执行中所解析的谓词而被采取的。在指令处理电路704中与条件控制指令706D的解析的控制流无关地执行基于负载的CI指令706D。如果,执行电路734基于从控制无关确定电路736接收到的关于基于负载的指令的信息而确定基于负载的CI指令706D对执行电路734的基于存储的指令是SFD的,则执行电路734将在错误预测恢复中重放(即,重新执行)已处理的基于负载的CI指令706D。重放经译码指令706D意味着执行先前在指令处理电路704中被处理和/或执行的经译码指令706D。
然而,如果基于负载的CI指令706D对基于存储的指令不是SFD的,则执行电路734将不重新执行已处理的基于负载的CI指令706D。例如,控制无关确定电路736可以被配置为将未被确定为对基于存储的指令是SFD的基于负载的CI指令706D指定为CIDD指令。执行电路734可以被配置为在错误预测恢复中不重放(即,重新执行)被指定为CIDI指令的已处理的基于负载的CI指令706D。以这种方式,处理器702被配置为:选择性地将被确定为对基于存储的指令具有SFD的基于负载的CI指令706D指定为要被重放的CIDD指令,而不是在错误预测恢复中不加选择地重放所有基于负载的CI指令,从而减少由指令流714中的CIDI指令产生的延迟,这些CIDI指令的负载数据将不基于错误预测恢复而改变,并且因此作为结果降低功耗。
如先前关于图6A和图6B中的示例指令流600、602所讨论的,向基于负载的CI指令提供SFL的基于存储的指令可以是基于存储的CI指令或基于存储的CD指令,并且因此基于负载的CI指令被视为对基于存储的指令是SFD的。控制无关确定电路736可以被配置为:确定基于负载的CI指令是对基于存储的CI指令或基于存储的CD指令是SFD的,还是仅对基于存储的CD指令。在后一种情况下,执行电路734将仅重放对基于存储的CD指令是SFD的基于负载的CI指令。
为了进一步说明图7中的处理器702中的指令处理电路704的示例性操作,该示例性操作选择性地将被确定为对基于存储的指令具有SFD的基于负载的CI指令706D指定为将在错误预测恢复中被重放的CIDD指令,提供了图8。图8是图示了处理器(诸如图7中的处理器702)的示例性过程800的流程图,该过程跟踪指令流中的基于负载的CI指令中的CI负载的SFD、并且选择性地在错误预测恢复中将指令流中确定的SFD基于负载的CI指令指定为基于负载的CIDD指令以供重放。以图7中的处理器702为例讨论图8中的过程800。
在这方面,如图8中所图示,过程800包括:指令处理电路704的指令取指电路708从存储器710、712将多个指令706取指到一个或多个指令流水线I0-IN之中的指令流水线I0-IN,一个或多个指令流水线I0-IN中的被取指的多个指令706包括指令流714,该指令流714包括至少一个CI指令区域和多个CD指令区域(框802)。过程800还包括:指令处理电路704推测性地预测指令流714中的条件控制指令706D中的谓词(框804)。过程800还包括:指令处理电路704处理指令流714中的被取指的指令706F,该被取指的指令706F包括基于指令流714中的多个CD指令区域之中的第一CD指令区域中的被取指的指令706F和CI指令区域中的基于负载的CI指令,该第一CD指令区域是基于推测性预测而被采取的(框806)。过程800还包括:控制无关确定电路736基于确定由指令流中的基于存储的指令706D产生的存储是否被转发给基于负载的CI指令706D以供消耗来确定基于负载的CI指令706D是否是SFD基于负载的CI指令706D(框808)。过程800还包括:指令处理电路704中的执行电路734执行条件控制指令706D以解析条件控制指令706D的谓词(框810)。过程800还包括:指令处理电路704中的执行电路734确定推测性预测是否与从条件控制指令706D的执行所解析的谓词匹配(框812)。响应于推测性预测与条件控制指令706D的执行所解析的谓词不匹配(框814),指令处理电路704处理指令流714中的多个CD指令区域之中的第二CD指令区域中的被取指的指令706F和基于负载的CI指令706D,该第二CD指令区域是基于从条件控制指令706D的执行所解析的谓词而被采取的(框816)。过程800还涉及:响应于确定基于负载的CI指令706D是SFD基于负载的CI指令706D,重新执行已处理的基于负载的CI指令706D(框818)。
图9是图示了图7中的处理器702中的控制无关确定电路736的示例性细节的示意图。如上面所讨论的,控制无关确定电路736被配置为跟踪基于负载的CI指令中的CI负载的存储转发依赖性。控制无关确定电路736耦合到指令处理电路704中的指令流水线I0-IN。控制无关确定电路736还被配置为在错误预测恢复中将CI指令流中的SFD基于负载的CI指令选择性地指定为基于负载的CIDD的指令以供处理器702中的指令处理电路704重放。
在这方面,控制无关确定电路736包括负载存储器依赖性确定电路900和存储转发负载(SFL)跟踪电路902。SFL跟踪电路902被配置为存储一个或多个SFL条目,该一个或多个SFL条目中的每个SFL条目包括针对被跟踪的基于负载的指令的SFL信息。SFL跟踪电路902由负载存储器依赖性确定电路900基于图7中的处理器702中的指令流714中被处理的基于负载的CI指令来更新和咨询,以确定基于负载的CI指令对基于存储指令是否是SFD的,以确定基于负载的CI指令是否应被指定为基于负载的CIDD指令以供重放。负载存储器依赖性确定电路900被配置为接收标识指令流714中的基于负载的指令的负载ID 904。负载存储器依赖性确定电路900还可以被配置为接收指令ID 906,指令ID 906标识由执行电路734确定为指令处理电路704中的已经被错误预测的条件控制指令706,并且因此指令流714中的指令706已经基于不正确的预测指令控制流路径而在CD指令区域中被处理。负载存储器依赖性确定电路900还可以被配置为接收关于由指令ID 906标识的被错误预测的条件控制指令706的被错误预测的指令信息908。负载存储器依赖性确定电路900还被配置为输出CIDD信息910,CIDD信息910向执行电路734指示基于负载的CI指令是否被确定为具有CIDD负载的基于负载的CIDD指令,使得执行电路734将重放这样的基于负载的CI指令。例如,负载存储器依赖性确定电路900可以被配置为:根据其负载ID来生成被确定为是基于负载的CIDD指令的基于负载的CI指令的列表912。同样在该示例中,负载存储器依赖性确定电路900可以被配置为接收比由指令信息908标识的被错误预测的条件控制指令706新的任何指令918的指示,该信息可以被用来确定基于负载的CI指令706是否应被指定为基于负载的CIDD指令。
继续参考图9,负载存储器依赖性确定电路900被配置为咨询SFL跟踪电路902以建立用于跟踪对应的基于负载的CI指令的针对接收到的负载ID的SFL条目,以确定基于负载的CI指令对基于存储的指令是否是SFD的。SFL跟踪电路902被配置为从作为指令处理电路704一部分的存储到负载(STL)转发电路916接收SFL信息914,以提供关于基于负载的CI指令的存储转发信息来更新SFL跟踪电路902中的跟踪信息,如将在下面描述的那样。图10图示了包含在图9中的SFL跟踪电路902中或作为其一部分的存储转发跟踪存储器1000的示例,存储转发跟踪存储器1000用于跟踪对应的基于负载的CI指令以确定基于负载的CI指令对基于存储的指令是否是SFD的。在该示例中,存储转发跟踪存储器1000被配置为存储多个SFL条目1002(1)-1002(N),每个SFL条目被配置为存储负载ID指示符1004、存储转发负载(SFL)指示符1006以及转发存储指示符(FSID)1008,负载ID指示符1004用于存储负载ID指令,存储转发负载(SFL)指示符1006用于存储状态,该状态指示基于负载的CI指令是否消耗由基于存储的指令产生的SFL,转发存储指示符(FSID)1008用于存储基于存储的指令的存储ID,由负载ID指示符1004中的负载ID指示的基于负载的CI指令对该基于存储的指令是存储转发依赖的。例如,如存储转发跟踪存储器1000中的SFL条目1002(0)中所示,负载ID‘15’被存储在负载ID指示符1004中以标识基于负载的CI指令。SFL条目1002(0)中的SFL指示符1006为‘1’指示SFL真状态,这意味着负载ID为‘15’的基于负载的CI指令具有对基于存储的指令的SFD。标识SFL条目1002(0)中的基于负载的CI指令为SFD的基于存储的指令的存储ID在SFL条目1002(2)中的FSID指示符1008中,其是存储ID‘1’。在此示例中,SFL指示符1006中的‘0’条目指示SFL假状态,这意味着由SFL条目1002(0)-1002(N)的负载ID指示符1004中的负载ID标识的基于负载的CI指令尚未被确定为对基于存储的指令是SFD的。
在图9中的SFL跟踪电路902的示例中,SFL跟踪电路902被配置为以乱序的方式将基于负载的CI指令706的负载ID 904存储在SFL条目1002(0)-1002(N)中。在该示例中,CI指令区域中的所有基于负载的CI指令将作为SFL信息914从STL转发电路916被传送到SFL跟踪电路902。响应于产生要被基于负载的CI指令706消耗的CI负载的任何指令的执行,SFL跟踪电路902将在存储转发跟踪存储器1000中建立新的SFL条目1002(0)-1002(N)。针对基于负载的CI指令706的SFL状态和FSID在基于负载的CI指令706的执行时间由STL转发电路916提供给SFL跟踪电路902。当由基于存储的指令706所生成的CI负载变为非推测性时,在存储转发跟踪存储器1000中具有以下负载ID的SFL条目1002(0)-1002(N)可以被解除分配,并且这样的SFL条目1002(0)-1002(N)可以被释放用于另一个条目:该负载ID标识对CI负载是SFD的基于负载的指令。
参考图9,控制无关确定电路736被配置为:基于确定由指令流714中的基于存储的指令706产生的存储是否被转发给基于负载的CI指令706以供消耗,来确定基于负载的CI指令706是否是SFD基于负载的CI指令。响应于负载存储器依赖性确定电路900确定基于负载的CI指令是SFD基于负载的CI指令,控制无关确定电路736被配置为:将SLF信息914存储在SFL条目1002(0)-1002(N)中,该SLF信息914将基于负载的CI指令指定为基于负载的CIDD指令。控制无关确定电路736被配置为通过CIDD信息910或CIDD指令的列表912向执行电路734指示基于负载的CI指令是否是基于负载的CIDD指令。如果执行电路734确定对所执行的条件控制指令706的推测性预测与所解析的谓词不匹配,则执行电路734被配置为:基于SFL跟踪电路902中的针对基于负载的CI指令的SFL条目1002(0)-1002(N)中的SFL信息914,确定所执行的基于负载的CI指令706是否是SFD基于负载的CI指令。负载存储器依赖性确定电路900被配置为:通过从STL转发电路916接收更新的SLF信息914而将基于负载的CI指令706指定为基于负载的CIDD指令,该更新的SLF信息914将具有对基于存储的指令的SFD的基于负载的CI指定为基于负载的CIDD指令。执行电路734然后可以标记基于负载的CIDD指令以供在错误预测恢复期间重放。负载存储器依赖性确定电路900还被配置为:通过从STL转发电路916接收更新的SLF信息914而将基于负载的CI指令指定为基于负载的CIDI指令,该更新的SLF信息914将对基于存储的指令不具有SFD的基于负载的CI指令706指定为基于负载的CIDD指令。
在一个示例中,基于负载的CI指令706和基于存储的指令之间的SFD基于确定到基于负载的CI指令的转发CI负载数据是否是“活跃(active)”存储。活跃存储是来自处理基于存储的指令的存储操作,该存储在指令流水线中已经被转发到消耗的基于负载的指令,但是尚未被提交到存储器。非活跃存储是不再是推测性的并且可能已经被提交(即写回)到存储器的存储操作。将基于活跃存储的基于负载的CI指令标识为基于负载的CIDD指令以供重放是基于这样一种认识:即“被移除的”CD存储是用不正确的被存储数据执行CIDD指令的原因。“被移除的”CD存储是在稍后发现已经被错误预测的预测指令控制流路径中的基于存储的CD指令所产生的存储操作。对照而言,“被添加的”CD存储是由在作为错误预测恢复的结果而被执行的正确指令数据路径中“被添加”的CD存储指令所产生的存储。在错误预测恢复中,作为加载和执行正确指令控制流程的结果,被错误预测的指令控制流程中基于存储的CD指令有效地“被移除”。如果这样的基于负载的CI指令不被重放,则由基于负载的CI指令所消耗的被移除CD存储导致功能故障,因为不然,基于来自被错误预测的指令控制流路径的被移除CD存储的这样基于负载的CI指令的先前执行否则将成立。如果基于负载的CI指令基于活跃存储的数据被执行,这意味着由基于负载的CI指令所消耗的存储数据可能会在错误预测恢复中改变为尚未被提交。因此,仅被标识为具有对活跃存储的SFD的基于负载的CI指令可以选择性地被标识为基于负载的CIDD指令以供重放。如果基于负载的CI指令基于非活跃存储的数据被执行,这意味着所存储的数据已经被提交到存储器,则处理器不需要将这样的基于负载的CI指令标识为基于负载的CIDD指令以供重放。这是因为只有在被预测条件的谓词已经被解析为真时才提交被存储数据。如果由基于负载的CI指令所消耗的被存储数据已经被提交,这意味着正确指令控制流路径中的基于存储的CD指令已经替换了由不正确的指令控制流路径中的基于存储的CD指令先前所存储的数据。因此,未基于活跃存储来执行的基于负载的CI指令被标识为基于负载的CIDI指令并且不被重放。
在这方面,图11A是流程图形式的指令流1100,其图示了图9中的控制无关确定电路736基于从基于存储的指令706被转发到CI指令流中的基于负载的CI指令706的CD存储是在错误预测恢复中要被重放的活跃存储来跟踪SFD。图11B是流程图形式的指令流1102,用于图示图9中的控制无关确定电路736将图11A中具有对活跃存储的SFD的基于负载的CI指令指定为基于负载的CIDD指令以供重放。
在这方面,如图11A、图11B中所示,存储转发依赖性的跟踪遵循根据条件控制指令1106(诸如条件分支指令)而被采取的BEI预测的不正确的CD指令控制流路径1104(“CD预测路径1104”)以及在错误预测恢复期间SUO采取的实际的正确的CD指令控制流路径1108(“CD实际路径1108”)。图11A中的指令流1100包括在指令流1100中到达条件控制指令1106之前的预分支指令控制流路径1112(“预分支路径1112”)中的CI指令区域1111中的预分支指令1110。因此,预分支指令1110是CI指令。预分支指令1110包括基于存储的CI指令1114,基于存储的CI指令1114将‘W’存储到存储器位置[B]中。然后,如图11A中所示,作为将条件控制指令1106中的条件预测为导致采取分支的结果,指令流1100包括CD预测路径1104中的CD指令区域1117中的CD指令1116。CD预测路径1104包括基于存储的CD指令1118,基于存储的CD指令1118将‘X’存储到存储器位置[A]中。如图11A中还所示的,指令流1100包括CI指令控制流路径1122(“CI路径1122”)中的CI指令区域1121中的CI指令1120,CI指令1120不管条件控制指令1106中的条件的预测或评估结果如何都被执行。CI指令1120包括基于负载的CI指令1124,基于负载的CI指令1124将存储器位置[B]中的数据加载为‘Z’。CI指令1120还包括基于负载的CI指令1126,基于负载的CI指令1126将存储器位置[A]中的数据加载为‘Y’。因此,基于负载的CI指令1124、1126分别对由预分支路径1112中的基于存储的CI指令1114产生的CI存储和由CD预测路径1104中的基于存储的CD指令1118产生的CI存储是SFD的,因为基于存储的CI指令1114和基于存储的CD指令1118的执行分别影响被加载到存储器地址[A]和[B]中的数据,存储器地址[A]和[B]然后被用作基于负载的CI指令1124、1126的源存储器地址位置。
在这方面,在图11A中所图示的示例中,图9中的控制无关确定电路736可以被配置为跟踪CI路径1122中的基于负载的CI指令(诸如基于负载的CI指令1124、1126)是否具有对基于存储的指令的存储转发依赖性(SFD)。在该示例中,当采取CD预测路径1104时,基于负载的CI指令1124、1126对基于存储的CI指令1114和基于存储的CD指令1118具有SFD。控制无关确定电路736可以被配置为跟踪活跃存储何时被转发到作为CIDD指令的基于负载的CI指令。在该示例中,基于负载的CI指令1126被转发来自基于存储的CD指令1118的活跃存储,因为基于存储的CD指令1118是作为推测性CD存储而被产生的,在推测性错误预测的情况下,在基于负载的CI指令1126执行之前,该推测性CD存储将不会被解析。然而,基于负载的CI指令1124被转发来自基于存储的CI指令1114的非活跃存储作为非推测性CI存储,在推测性错误预测的情况下,在基于负载的CI指令1126执行之前,该非推测性CI存储可以不改变地被解析。因此,基于负载的CI指令1126被指定为基于负载的CIDD指令,而基于负载的CI指令1124被指定为基于负载的CIDI指令。因此,如果当条件控制指令1106的条件在执行时被解析时,确定CD预测路径1104已经被错误预测,并且图11B中的CD实际路径1108被采取为错误预测恢复,则控制无关确定电路736可以确定指令流1102中是否有任何基于负载的CI指令(包括基于负载的CI指令1124、1126)被指定为CIDD指令。在此示例中,基于负载的CI指令1126将被标记为基于负载的CIDD指令以供在错误预测恢复中重放,因为其对活跃存储是SFD的,而基于负载的CI指令1124将不被标记为基于负载的CIDD以供在错误预测恢复中重放的,因为其对活跃存储不是SFD的。
存在其他方法来确定基于CI加载的指令是否对基于存储的CD指令是SFD的。例如,图12A是流程图形式的指令流1200,其图示了图9中的控制无关确定电路736跟踪基于存储的指令的存储指令ID,该基于存储的指令产生存储,该存储被转发为遵循根据条件控制指令而采取的预测的不正确的CD指令控制流路径的CI指令流中的基于负载的CI指令的CI负载。图12B是流程图形式的指令流1202,其用于图示:如果图12A中的基于负载的CI指令的转发存储指令ID指示对应的基于存储的指令不比条件控制指令旧,则图9中的控制无关确定电路736将图12A中的基于负载的CI指令指定为基于负载的CIDD指令以供重放。
在这方面,如图12A中所示,存储转发依赖性的跟踪遵循根据条件控制指令1206(诸如条件分支指令)所采取的被预测的不正确的CD指令控制流路径(“CD预测路径1204”)以及在错误预测恢复期间采取的实际的正确的CD指令控制流路径1208(“CD实际路径1208”)。图12A中的指令流1200包括在指令流1200中到达条件控制指令1206之前的预分支指令控制流路径1212(“预分支路径1212”)中的CI指令区域1211中的预分支指令1210。因此,预分支指令1210是CI指令。预分支指令1210包括基于存储的CI指令1214,基于存储的CI指令1214将‘W’存储到存储器位置[B]中。然后,如图12A中所示,作为将条件控制指令1206中的条件预测为导致采取分支的结果,指令流1200包括在CD预测路径1204中的CD指令区域1217中的CD指令1216。CD预测路径1204包括基于存储的CD指令1218,基于存储的CD指令1218将‘X’存储到存储器位置[A]中。如图12A中还所示的,指令流1200包括CI指令控制流路径1222(“CI路径1222”)中的CI指令区域1221中的CI指令1220,CI指令1220不管条件控制指令1206中的条件的预测或评估结果如何都被执行。CI指令1220包括基于负载的CI指令1224,负载的CI指令1224将存储器位置[B]中的数据加载为‘Z’。CI指令1220还包括基于负载的CI指令1226,括基于负载的CI指令1226将存储位置[A]中的数据加载为‘Y’。因此,基于负载的CI指令1224、1226分别对由预分支路径1212中的基于存储的CI指令1214产生的CI存储和CD预测路径1204中的基于存储的CD指令1218产生的CI存储是SFD的,因为基于存储的CI指令1214和基于存储的CD指令1218的执行分别影响被加载到存储器地址[A]和[B]中的数据,存储器地址[A]和[B]然后被用作基于负载的CI指令1224、1226的源存储器地址位置。
在这方面,在图12A中所图示的示例中,图9中的控制无关确定电路736可以被配置为跟踪CI路径1222中的基于负载的CI指令(诸如基于负载的CI指令1224、1226)是否具有对基于存储的指令的存储转发依赖性(SFD)。在该示例中,当采取CD预测路径1204时,基于负载的CI指令1224、1226对基于存储的CI指令1214和基于存储的CD指令1218具有SFD。控制无关确定电路736可以被配置为跟踪存储何时被转发到作为CIDD指令的基于负载的CI指令。在该示例中,由于基于存储的CD指令1218将‘X’存储到存储器位置[A]中,因此基于负载的CI指令1226被转发来自基于存储的CD指令1218的存储。基于负载的CI指令1224被转发来自基于存储的CI指令1214的存储。因此,基于负载的CI指令1224、1226被指定为基于负载的CIDD指令。基于负载的CI指令1224、1226和相应的基于存储的指令1214、1218之间的这种SFD被图9中的控制无关确定电路736跟踪为基于负载的CIDD指令。因此,如果当条件控制指令1206的条件在执行时被解析时,确定CD预测路径1204已经被错误预测,并且图12B中的CD实际路径1208被采取为错误预测恢复,则控制无关确定电路736可以确定指令流1202中是否有任何基于负载的CI指令(包括基于负载的CI指令1224、1226)被指定为CIDD指令。
在该示例中,控制无关确定电路736被配置为基于其相应的来自如图9中所示的SFL跟踪电路902的负载ID和指令ID 906来确定基于负载的CI指令1224、1226是比条件控制指令1206旧或还是新。如果在此示例中,基于负载的CI指令1224的SFL由于其FSID为‘1’而比具有指令ID 906为“3”的条件控制指令1206新,这意味着基于负载的CI指令1224对根据条件控制指令1206所采取的图12A中的CD预测路径1204中的CD指令1216不是SFD的。因此,在该示例中,控制无关确定电路736可以将基于负载的CI指令1224的CIDD指定覆写为不是基于负载的CIDD指令或者是基于负载的CIDI指令。同样在该示例中,具有FSID为“7”的基于负载的CI指令1224的SFL比具有指令ID 906为“3”的条件控制指令1206旧,这意味着基于负载的CI指令1224对根据条件控制指令1206所采取的图12A中CD预测路径1204中的CD指令1216是SFD的。因此,如图12B中所示,基于负载的CI指令1226将被标记为基于负载的CIDD指令以供在错误预测恢复中重放,因为其对CD预测路径1204中的CD指令1216是SFD的,而基于负载的CI指令1224将不被标记为由于其对CI指令1216是SFD的而在错误预测恢复中是用于重放的基于负载的CIDD。
图13A图示了指令流1300,用于图示跟踪遵循根据条件控制指令1306(诸如条件分支指令)所采取的被预测的不正确的CD指令控制流路径1304(“CD预测路径1304”)以及在错误预测恢复期间所采取的实际的正确的CD指令控制流路径1308(“CD实际路径1308”)的存储转发依赖性。图13A中的指令流1300包括在指令流1300中到达条件控制指令1306之前的预分支指令控制流路径1312(“预分支路径1312”)中的CI指令区域1311中的预分支指令1310。因此,预分支指令1310是CI指令。预分支指令1310包括基于存储的CI指令1314,基于存储的CI指令1314将‘W’存储到存储器位置[B]中。然后,如图13A中所示,作为将条件控制指令1306中的条件预测为导致采取分支的结果,指令流1300包括在CD预测路径1304中的CD指令区域1317中的CD指令1316。CD预测路径1304包括基于存储的CD指令1318,基于存储的CD指令1318将‘X’存储到存储器位置[A]中。如图13A中还所示的,指令流1300包括CI指令控制流路径1322(“CI路径1322”)中的CI指令区域1321中的CI指令1320,CI指令1320不管条件控制指令1306中的条件的预测或评估结果如何都被执行。CI指令1320包括基于负载的CI指令1324,基于负载的CI指令1324将存储器位置[B]中的数据加载为‘Z’。CI指令1320还包括基于负载的CI指令1326,基于负载的CI指令1326将存储器位置[A]中的数据加载为‘Y’。因此,基于负载的CI指令1324、1326分别对由预分支路径1312中的基于存储的CI指令1314产生的CI存储和由CD预测路径1304中的基于存储的CD指令1318产生的CI存储是存储转发依赖的,因为基于存储的CI指令1314和基于存储的CD指令1318的执行分别影响被加载到存储器地址[A]和[B]中的数据,存储器地址[A]和[B]然后被用作基于负载的CI指令1324、1326的源存储器地址位置。
在图13A的示例中,图9中的控制无关确定电路736可以被配置为跟踪CI路径1322中的基于负载的CI指令(诸如基于负载的CI指令1324、1326)是否具有对基于存储的指令的存储转发依赖性(SFD)。在该示例中,当采取CD预测路径1304时,基于负载的CI指令1324、1326对基于存储的CI指令1314和基于存储的CD指令1318具有SFD。控制无关确定电路736可以被配置为跟踪存储何时被转发到作为CIDD指令的基于负载的CI指令。在该示例中,由于基于存储的CD指令1318将‘X’存储到存储器位置[A]中,因此基于负载的CI指令1326被转发来自基于存储的CD指令1318的存储。基于负载的CI指令1324被转发来自基于存储的CI指令1314的存储。因此,基于负载的CI指令1324、1326被指定为基于负载的CIDD指令。基于负载的CI指令1324、1326和相应的基于存储的指令1314、1318之间的这种SFD被图9中的控制无关确定电路736跟踪为基于负载的CIDD指令。因此,如果当条件控制指令1306的条件在执行时被解析时,确定CD预测路径1304已经被错误预测,并且图13B中的CD实际路径1308被采取为错误预测恢复,则控制无关确定电路736可以确定指令流1302中是否有任何基于负载的CI指令(包括基于负载的CI指令1324、1326)被指定为CIDD指令。
在该示例中,控制无关确定电路736被配置为根据在SFL跟踪电路902中针对基于负载的CI指令1324、1326的FSID(基于它们的负载ID)确定基于存储的指令1314、1318比在错误预测恢复中的图13B中的指令流1302中最新近被提交的存储ID旧还是新。如果针对基于负载的CI指令1324、1326的FSID由于其FSID比最新近被提交的存储ID新,则基于其FSID对基于存储的指令具有SFD的基于负载的CI指令1324、1326将被指定为基于负载的CIDD指令,否则其将不被指定为基于负载的CIDD指令。在该示例中,基于负载的CI指令1324基于FSID为‘1’的基于存储的指令具有SFD,而基于负载的CI指令1326基于FSID为“7”的基于存储的指令具有SFD。这意味着基于负载的CI指令1324对根据条件控制指令1306所采取的图13A中的CD预测路径1304中的CD指令1316不是SFD的,而基于负载的CI指令1326对根据条件控制指令1306所采取的图13A中的CD预测路径1304中的CD指令1316是SFD的。因此,在该示例中,控制无关确定电路736可以将基于负载的CI指令1324的CIDD指定覆写为不是基于负载的CIDD指令或是基于负载的CIDI指令,并且基于负载的CI指令1326被指定或保留指定为基于负载的CIDD指令以供在错误恢复中重放,因为其对CD预测路径1304中的CD指令1316是SFD的。
图7中的处理器702也可以通过从基于存储的指令的角度跟踪由指令流714中的基于存储的指令706转发的存储负载来跟踪基于负载的CI指令的存储转发负载。在上面讨论的图9中,图7中的处理器702从基于负载的指令706的角度跟踪指令流714中的基于存储的指令706所转发的存储负载。在这方面,图14是图示了备选的控制无关确定电路1436的示例性细节的示意图,该电路1436可以是图7中的处理器702的控制无关确定电路736。控制无关确定电路1436被配置为:基于跟踪基于处理指令流714中的基于存储的指令706而被转发的存储转发负载,来跟踪针对基于负载的CI指令中的CI负载的存储转发依赖性。控制无关确定电路1436可以耦合到指令处理电路704中的指令流水线I0-IN。控制无关确定电路1436还被配置为在错误预测恢复中将CI指令流中的SFD基于负载的CI指令选择性地指定为基于负载的CIDD指令以供处理器702中的指令处理电路704重放。
在这方面,控制无关确定电路1436包括负载存储器依赖性确定电路1400和存储转发负载(SFL)跟踪电路1402。SFL跟踪电路1402被配置为存储一个或多个SFL条目,每个SFL条目包括从基于存储的指令706的角度来看的针对被跟踪的基于负载的指令的SFL信息7。SFL跟踪电路1402由负载存储器依赖性确定电路1400基于图7中的处理器702中的指令流714中被处理的基于存储的指令更新和咨询,以确定基于存储的CI指令对基于负载的CI指令是否具有SFD,以确定基于负载的CI指令是否应被指定为基于负载的CIDD指令以供重放。负载存储器依赖性确定电路1400被配置为接收标识指令流714中的基于存储的指令706的存储ID 1404。负载存储器依赖性确定电路1400还被配置为接收负载ID 1405,负载ID 1405标识从指令流714的基于存储的指令706接收被转发存储的基于负载的CI的指令706。负载存储器依赖性确定电路1400还可以被配置为接收指令ID 1406,指令ID 1406标识由执行电路734确定为在指令处理电路704中已经被错误预测的条件控制指令706,并且因此指令流714中的指令706已经基于不正确的被预测的指令控制流路径而在CD指令区域中被处理。负载存储器依赖性确定电路1400还可以被配置为接收关于由指令ID 1406标识的被错误预测的条件控制指令706的被错误预测的指令信息1408。负载存储器依赖性确定电路1400还被配置为输出CIDD信息1410,CIDD信息1410向执行电路734指示基于负载的CI指令是否被确定为被指定为具有CIDD负载的基于负载的CIDD指令,使得执行电路734将重放这样的基于负载的CI指令。例如,负载存储器依赖性确定电路1400可以被配置为生成根据其负载ID而被确定为基于负载的CIDD指令的基于负载的CI指令的列表
1412。同样在该示例中,负载存储器依赖性确定电路1400可以被配
置为接收比由指令ID 1406标识的被错误预测的条件控制指令706新
的任何指令1418的指示,该信息可以被用来确定基于负载的CI指令
706是否应被指定为基于负载的CIDD指令。
继续参考图14,负载存储器依赖性确定电路1400被配置为咨询SFL跟踪电路1402以建立针对接收到的存储ID 1404的SFL条目用于跟踪对应的基于存储的CI指令,以确定基于存储的CI指令是否具有与基于负载的CI指令的SFD。SFL跟踪电路1402被配置为从作为指令处理电路704一部分的STL转发电路1416接收SFL信息1414,以提供关于指令的存储转发信息来更新SFL跟踪电路1402中的跟踪信息,如将在下面描述的那样。图15图示了被包含在图14中的SFL跟踪电路1402中或作为其一部分的存储转发跟踪存储器1500的示例,存储转发跟踪存储器1500用于跟踪对应的基于存储的指令706以确定基于存储的指令706是否具有对基于负载的CI指令706的SFD。在该示例中,存储转发跟踪存储器1500被配置为存储多个SFL条目1502(1)-1502(N),每个SFL条目被配置为存储用于存储存储ID指令706的存储ID指示符1504、有效指示符1506、负载列表指示符1508、以及溢出指示符1510,负载列表指示符1508指示对由存储ID指示符1504中的存储ID标识的存储ID指令706是SFD的基于负载的CI指令706的负载ID。例如,如存储转发跟踪存储器1500中的SFL条目1502(0)中所示,存储ID‘1’被存储在存储ID指示符1504中以标识在指令流714中遇到的基于存储的指令706。SFL条目1502(0)的有效指示符1506中的‘1’指示该条目有效。负载ID‘15’在SFL条目1502(0)的负载列表指示符1508中指示具有负载ID‘15’的基于负载的CI指令706对由存储ID‘1’标识的基于存储的指令706是SFD的。SFL条目1502(0)的溢出指示符1510为‘0’,这指示没有基于负载的指令706的溢出,该基于负载的指令706被标识为与由存储在SFL条目1502(0)中的存储ID‘1’标识的基于存储的指令706是SFD的。溢出指示符1510‘1’指示存在比可以被存储在SFL条目1502(0)-1502(N)中多的被标识为与针对存储ID的基于存储的指令706是SFD的基于负载的指令706。
在图14中的SFL跟踪电路1402的示例中,SFL跟踪电路1402被配置为以乱序的形式将基于存储的指令706的存储ID 1404存储在SFL条目1502(0)-1502(N)中。在该示例中,所有基于存储的CI指令706将作为SFL信息1414从STL转发电路1416被传送到SFL跟踪电路1402。作为图7中的指令处理电路704中的示例,响应于处理来自重命名电路720的基于存储的指令706,SFL跟踪电路1402将在SFL跟踪存储器1500中建立新的SFL条目1502(0)-1502(N)。当基于存储的指令706被执行并且确定基于负载的指令706以消耗转发存储时,针对存储ID 1404的SFL条目1502(0)-1502(N)被更新。在这方面,SFL条目1502(0)-1502(N)的有效指示符1506被设置为‘1’以指示有效,并且被标识为消耗被转发存储的基于负载的指令706的负载ID 1405被存储在与存储ID 1404对应的SFL条目1502(0)-1502(N)中。当基于负载的CI指令706从基于存储的指令706接收到存储转发的数据时,包含针对基于存储的指令706的存储ID 1404的SFL条目1502(0)-1502(N)被更新,以更新对基于存储的指令706是SFD的负载ID 1405。如果在基于存储的指令的706执行时被转发的负载大于包含基于存储的指令706的存储ID1404的SFL条目1502(0)-1502(N)中的负载列表指示符1508的大小,则溢出指示符1510在SFL条目1502(0)-1502(N)中被设置为‘1’。
根据条件控制指令706的执行所采取的被错误预测的CD指令路径中的基于存储的CD指令706使控制无关确定电路1436在SFL跟踪存储器1500中搜索SFL条目1502(0)-1502(N)。可以像内容可寻址存储器(CAM)一样搜索SFL跟踪存储器1500中的所有SFL条目1502(0)-1502(N),或者可以在SFL跟踪存储器1500的SFL条目1502(0)-1502(N)中关联地搜索基于存储的指令706的存储ID 1404。如果包含被错误预测的CD指令路径中的基于存储的CD指令706的存储ID 1404的SFL条目1502(0)-1502(N)是有效的,在该示例中由有效指示符1506中的‘1’来指示,则SFL条目1502(0)-1502(N)可以进一步被咨询以确定负载列表指示符1508中存在的负载ID 1405。基于负载的指令706使它们的负载ID 1405被存储在SFL条目1502(0)-1502(N)的负载列表指示符1508中意味着该基于负载的指令706对由对应的SFL条目1502(0)-1502(N)中的存储ID 1404标识的基于存储的指令706是SFD的。因此,由这样的负载ID 1405标识的基于负载的CI指令706可以被提供作为基于负载的CI指令706是基于负载的CIDD指令的CIDD信息1410,或者在基于负载的CIDD指令1412的列表中被提供给执行电路734,以供在错误预测恢复中重放被指定为基于负载的CIDD指令的这样的基于负载的CI指令706。当由SFL跟踪存储器1500中的SFL条目1502(0)-1502(N)中的存储ID 1404标识的基于存储的指令706在其执行之后变为非推测性的时,针对这样的基于存储的指令706所建立的SLF条目1502(0)-1502(N)可以被解除分配并且这样的SFL条目1502(0)-1502(N)被释放以用于另一个条目。
图7中的处理器702中的控制无关确定电路1436还可以被配置为:当被错误预测的CD指令路径中的基于存储的CD指令706是根据预测条件控制指令706所采取的并且基于存储的负载指令706的存储转发是活跃存储时,搜索SFL跟踪存储器1500中的SFL条目1502(0)-1502(N)。以这种方式,只有对活跃存储是SFD的基于负载的指令706将被指定为基于负载的CIDD指令以供重放。
此外,在该示例中,并且如先前所讨论的,图7中的处理器702中的控制无关确定电路1436还可以被配置为:确定在指令流714中遇到的并且被包含在SFL跟踪存储器1500中的SFL条目1502(0)-1502(0)中的基于存储的指令706是否比条件控制指令旧或新,该确定基于图14中该基于存储的指令706的来自SFL跟踪电路1402的相应存储ID 1404和指令ID1406。如果基于存储的CD指令706由于其存储ID 1404比条件控制指令新,这意味着SFL条目1502(0)-1502(0)中的负载列表指示符1508中的基于负载的CI指令706对根据条件控制指令所采取的CD路径中的基于存储的CD指令706不是SFD的。因此,在该示例中,控制无关确定电路1436可以将针对该基于存储的指令706的负载列表指示符1508中的基于负载的CI指令的CIDD指定覆写为不是基于负载的CIDD指令或者是基于负载的CIDI指令。
同样在该示例中,并且如先前所讨论的,图7中的处理器702中的控制无关确定电路1436还可以被配置为:确定来自在指令流714中遇到的基于存储的指令706的更新近的存储是否比其负载列表指示符1508中的基于负载的CI指令旧或新。如果在SFL跟踪存储器1500中所搜索的有效SFL条目1502(0)-1502(N)中,负载列表指示符1508中的负载ID 1405比最新近被提交的存储ID新,则由负载ID1405标识的基于负载的指令将被指定为基于负载的CIDD指令,否则它将不被指定为基于负载的CIDD指令。
如先前在图9中的控制无关确定电路936中所讨论的,控制无关确定电路936可以跟踪并且被咨询,来确定基于负载的CI指令706对基于存储的指令706是否是SFD的,以然后被标识为基于负载的CIDD指令以供在错误预测恢复中重放。控制无关确定电路936还可以被配置为:代替或附加于如先前在图9中讨论的那样从STL转发电路916接收STL信息914,基于接收到基于负载的指令706被断言为具有对基于存储的指令的存储器依赖性的指示,建立图10中的存储转发跟踪存储器1000中的条目。被预测为具有存储器依赖性的基于负载的CI指令706的跟踪可以被跟踪为对基于存储的指令706是SFD的,以然后被指定为基于负载的CIDD指令。
在这方面,图16是图示了备选的控制无关确定电路1636的示例性细节的示意图,该电路1636可以在图7中的处理器702中被提供,以跟踪具有被预测的存储转发依赖性的基于负载的CI指令706中的CI负载。图16中的控制无关确定电路1636和图9中的控制无关确定电路936之间的共同组件用共同的元件编号来示出。如图16中所示,在该示例中,存储器依赖性预测器电路1600被包括在图7中的处理器702中,并且被配置为预测基于负载的CI指令706的存储转发依赖性。当基于负载的CI指令706在指令流714中被处理时,存储器依赖性预测器电路1600预测基于负载的CI指令706对基于存储的指令706是否具有SFD。如果是,则这将被传送到负载存储器依赖性确定电路900,负载存储器依赖性确定电路900然后建立图10中的存储转发跟踪存储器1000中的SFL条目1002(0)-1002(N)以跟踪基于负载的CI指令706并且将其指定为对基于存储的指令706是SFD的。在错误预测恢复中,负载存储器依赖性确定电路900可以被咨询以确定基于负载的CI指令706是否被指定为对基于存储的指令706是SFD的。负载存储器依赖性确定电路900咨询SFL跟踪电路902以确定存储转发跟踪存储器1000中的SFL条目1002(0)-1002(N)是否具有与基于负载的CI指令706对应的负载ID,以确定基于负载的CI指令706是否被指定为对基于存储的指令706具有SFD。控制无关确定电路1636被配置为:通过CIDD信息910或CIDD指令列表912向执行电路734指示被确定为已经被预测为对基于存储的指令706是SFD的基于负载的CI指令706是基于负载的CIDD指令。这在图17A和图17B中进一步被图示。
在图17A中,图示了包括CI路径1704中的基于负载的CI指令1702的指令流1700。在该示例中,基于负载的CI指令1702将数据从存储器位置[A]加载为‘Y’。基于负载的CI指令1702是在条件控制指令1710和CD预测路径1712之后的CI指令区域1708中的CI指令1706中。当图7中的指令处理电路704遇到当采取CD预测路径1712时的指令流714中的基于负载的CI指令1702时,指令处理电路704可以使图16中的存储器依赖性预测器电路1600预测基于负载的CI指令1702是否具有对基于存储的指令的SFD。例如,基于负载的CI指令1702对图17B中的指令流1718的CD实际路径1716中的基于存储的指令1714是存储器依赖的,该路径是在错误预测恢复中根据条件控制指令1710要被采取的正确的CD实际路径1716。但是,由于如图17A中所示的条件控制指令1710的错误预测,基于存储的指令1714不在指令流1700中。基于负载的CI指令1702的存储器依赖性预测由图16中的存储器依赖性预测器电路1600提供给控制无关确定电路1636。因此,如前面所讨论的,在错误预测恢复中,当采取包括CD实际路径1716的指令流1718时,负载存储器依赖性确定电路900可以被咨询以确定基于负载的CI指令1702是否被指定为基于存储器依赖性预测。控制无关确定电路1636被配置为通过CIDD信息910或CIDD指令列表912向执行电路734指示:基于负载的CI指令1702被确定为作为基于负载的CIDD指令已经被预测为对基于存储的指令706是SFD的。
图18是示例性基于处理器的系统1800的框图,该系统包括处理器1802,该处理器1802被配置为支持在错误预测恢复中将指令流水线中的CI指令流中的存储转发依赖的基于负载的CI指令选择性地指定为基于负载的CIDD指令以供重放-如果基于负载的CI指令被标识为具有存储转发依赖性的话。处理器1802可以包括但不限于图7中的处理器702。处理器1802可以包括控制无关确定电路1804,其被配置为跟踪指令流水线中的基于负载的CI指令中的存储转发依赖性、并且将错误预测恢复中的所确定的存储转发依赖的基于负载的CI指令选择性地指定为基于负载的CIDD指令以供重放。控制无关确定电路1804可以包括但不限于图7、图9、图14和图16中的控制无关确定电路736、936和1436。
基于处理器的系统1800可以是被包括在电子板卡中的一个或多个电路,诸如印刷电路板(PCB)、服务器、个人计算机、台式计算机、膝上型计算机、个人计算机数字助理(PDA)、计算平板、移动设备或任何其他设备,并且可以表示例如服务器或用户的计算机。在该示例中,基于处理器的系统1800包括处理器1802。处理器1802表示一个或多个通用处理电路,诸如微处理器、中央处理单元等。处理器1802被配置为执行计算机指令中的处理逻辑以用于执行本文所讨论的操作和步骤。在该示例中,处理器1802包括用于指令的临时快速访问存储器存储装置的指令高速缓存1806和指令处理电路1808。从存储器中,例如通过系统总线1812从系统存储器1810中取指或预取指的指令被存储在指令高速缓存1806中。指令处理电路1808被配置为处理被取指到指令高速缓存1806中的指令并处理指令以供执行。指令处理电路1808被配置为将被取指的指令插入到一个或多个指令流水线中,该一个或多个指令流水线然后被处理以执行。取决于设计,控制无关确定电路1804通信地耦合到控制无关确定电路1804以将基于负载的CI指令标识为具有存储转发依赖性,以然后能够将这样的基于负载的CI指令标记为基于负载的CIDD指令以供重放。
处理器1802和系统存储器1810耦合到系统总线1812并且可以互耦合包括在基于处理器的系统1800中的外围设备。众所周知,处理器1802通过在系统总线1812上交换地址、控制以及数据信息来与这些其他设备通信。例如,处理器1802可以将总线事务请求传送给作为从设备示例的系统存储器1810中的存储器控制器1814。尽管图18中未图示,但是可以提供多个系统总线1812,其中每个系统总线构成不同的结构。在该示例中,存储器控制器1814被配置为提供对系统存储器1810中的存储器阵列1816的存储器访问请求。存储器阵列1816由用于存储数据的存储位单元阵列组成。作为非限制性示例,系统存储器1810可以是只读存储器(ROM)、闪存、动态随机存取存储器(DRAM)(诸如同步DRAM(SDRAM)等)以及静态存储器(例如,闪存、静态随机存取存储器(SRAM)等)。
其他设备可以连接到系统总线1812。如图18中所图示,作为示例,这些设备可以包括系统存储器1810、一个或多个输入设备1818、一个或多个输出设备1820、调制解调器1822和一个或多个显示器控制器1824。(多个)输入设备1818可以包括任何类型的输入设备,包括但不限于输入键、开关、语音处理器等。(多个)输出设备1820可以包括任何类型的输出设备,包括但不限于音频、视频、其他视觉指示器等。调制解调器1822可以是被配置为允许与网络1826交换数据的任何设备。网络1826可以是任何类型的网络,包括但不限于有线或无线网络、专用或公共网络、局域网(LAN)、无线局域网(WLAN)、广域网(WAN)、BLUETOOTHTM网络和互联网。调制解调器1822可以被配置为支持所期望的任何类型的通信协议。处理器1802还可以被配置为通过系统总线1812访问(多个)显示器控制器1824以控制被发送给一个或多个显示器1828的信息。(多个)显示器1828可以包括任何类型的显示器,包括但不限于阴极射线管(CRT)、液晶显示器(LCD)、等离子显示器等。
图18中的基于处理器的系统1800可以包括一组指令1830,其可以包括条件控制指令,该条件控制指令使这样的指令成为CI指令或CD指令。作为非瞬态计算机可读介质1832的示例,指令1830可以被存储在系统存储器1810、处理器1802和/或指令高速缓存1806中。指令1830也可以完全或至少部分地驻留在系统存储器内1810和/或在它们的执行期间驻留在处理器1802内。指令1830还可以经由调制解调器1822在网络1826上被传输或被接收,使得网络1826包括非瞬态计算机可读介质1832。
虽然非瞬态计算机可读介质1832在示例性实施例中被示为单个介质,但是术语“计算机可读介质”应当被认为包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或关联的高速缓存和服务器)。术语“计算机可读介质”还应被认为包括能够存储、编码或携带由处理设备执行的一组指令并且使处理设备执行本文公开的实施例的方法中的任何一个或多个方法的任何介质。因此,术语“计算机可读介质”应被认为包括但不限于固态存储器、光学介质和磁介质。
本文公开的实施例包括各种步骤。本文公开的实施例的步骤可以由硬件组件形成,或者可以被体现在机器可执行指令中,机器可执行指令可以被用来使用指令编程的通用或专用处理器执行这些步骤。备选地,这些步骤可以通过硬件和软件的组合来执行。
本文公开的实施例可以作为计算机程序产品或软件而被提供,其可以包括其上存储有指令的机器可读介质(或计算机可读介质),其可以被用来对计算机系统(或其他电子设备)进行编程以执行根据本文公开的实施例的过程。机器可读介质包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制。例如,机器可读介质包括:机器可读存储介质(例如,ROM、随机存取存储器(“RAM”)、磁盘存储介质、光学存储介质、闪存设备等)等等。
除非另外特别说明并且从前面的讨论中明显,否则应该了解,在整个描述中,利用诸如“处理”、“计算”、“确定”、“显示”等术语的讨论是指计算机系统或类似电子计算设备的动作和过程,其将在计算机系统寄存器内被表示为物理(电子)量的数据和存储器操纵并转换为在计算机系统存储器或寄存器或其他这样的信息存储、传输或显示设备内被类似地表示为物理量的其他数据。
本文呈现的算法和显示部与任何特定计算机或其他装置固有地关联。各种系统可以根据本文的教导来与程序一起使用,或者构造更专门的装置来执行所需的方法步骤可以证明是方便的。各种这些系统所需的结构将从上面的描述中显现出来。此外,本文描述的实施例没有参照任何特定的编程语言来描述。应当了解,可以使用多种编程语言来实现本文描述的实施例的教导。
本领域技术人员将进一步了解,结合本文公开的实施例所描述的各种说明性逻辑块、模块、电路和算法可以被实现为电子硬件、被存储在存储器中或另一种计算机可读介质中并由处理器或其他处理设备或两者的组合来执行的指令。作为示例,本文描述的分布式天线系统的组件可以在任何电路、硬件组件、集成电路(IC)或IC芯片中被采用。本文公开的存储器可以是任何类型和大小的存储器并且可以被配置为存储任何类型的期望信息。为了清楚地说明这种可互换性,各种说明性组件、块、模块、电路和步骤已经在上面大体上根据它们的功能性进行了描述。如何实现这样的功能性取决于特定应用、设计选择和/或施加在整个系统上的设计约束。技术人员可以针对每个特定应用以不同方式实现所描述的功能性,但是这样的实现决定不应被解释为导致偏离本实施例的范围。
结合本文公开的实施例所描述的各种说明性逻辑块、模块和电路可以用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计来执行本文所述的功能的它们的任何组合来实现或执行。此外,控制器可以是处理器。处理器可以是微处理器,但在备选方案中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可以被实现为计算设备的组合(例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器与DSP核结合,或者任何其他这样的配置)。
本文公开的实施例可以被体现在硬件和存储在硬件中的指令中,并且可以驻留在例如RAM、闪存、ROM、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、寄存器、硬盘、可移除磁盘、CD-ROM或本领域已知的任何其他形式的计算机可读介质中。示例性存储介质耦合到处理器,使得处理器可以从存储介质读取信息以及向存储介质写入信息。在备选方案中,存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在ASIC中。ASIC可以驻留在远程站中。在备选方案中,处理器和存储介质可以作为分立组件驻留在远程站、基站或服务器中。
还应注意,在本文的任何示例性实施例中描述的操作步骤被描述以提供示例和讨论。所描述的操作可以以不同于所图示的顺序的许多不同的顺序来执行。此外,在单个操作步骤中描述的操作实际上可以在多个不同的步骤中执行。此外,可以组合示例性实施例中讨论的一个或多个操作步骤。本领域技术人员还将理解,可以使用多种科技和技术中的任何一种来表示信息和信号。例如,在整个以上描述中可以作为参考的数据、指令、命令、信息、信号、位、符号和芯片,可以由电压、电流、电磁波、磁场或粒子、光场或粒子、或其任何组合来表示。
除非另有明确说明,否则绝不旨在将本文中阐述的任何方法解释为要求以特定的顺序来执行其步骤。因此,如果方法权利要求实际上没有叙述其步骤所遵循的顺序,或者在权利要求或说明书中没有另外具体说明这些步骤局限于特定的顺序,则绝不旨在推断任何特定的顺序。
对本领域技术人员将明显的是,在不脱离本发明的精神或范围的情况下可以进行各种修改和变化。由于本领域技术人员可以想到合并了本发明的精神和实质的所公开实施例的修改、组合、子组合和变化,因此本发明应当被解释为包括所附权利要求及其等同物范围内的所有内容。

Claims (15)

1.一种处理器,包括:
指令处理电路,包括一个或多个指令流水线;
所述指令处理电路被配置为:
将多个指令从存储器取指到所述一个或多个指令流水线之中的指令流水线中,所述一个或多个指令流水线中的被取指的所述多个指令包括指令流,所述指令流包括至少一个控制无关(CI)指令区域和多个控制依赖(CD)指令区域;
推测性地预测所述指令中的条件控制指令中的谓词;
处理所述指令流中的被取指的指令,所述被取指的指令包括所述指令流中的所述多个CD指令区域之中的第一CD指令区域中的被取指的指令和CI指令区域中的基于负载的CI指令,所述第一CD指令区域是基于所述推测性预测而被采取的;
基于确定所述指令流中的基于存储的指令是否指定由所述基于负载的CI指令所消耗的转发存储,来确定所述基于负载的CI指令是否是存储转发依赖的(SFD)基于负载的CI指令;
执行所述条件控制指令以解析所述条件控制指令的所述谓词;
确定所述推测性预测与从所述条件控制指令的执行所解析的所述谓词是否匹配;以及
响应于所述推测性预测与在所述条件控制指令的执行中所解析的所述谓词不匹配:
处理所述指令流中的所述多个CD指令区域之中的第二CD指令区域中的所述被取指的指令和所述基于负载的CI指令,所述第二CD指令区域是基于从所述条件控制指令的执行所解析的所述谓词而被获得的;以及
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,重放已处理的所述基于负载的CI指令。
2.根据权利要求1所述的处理器,其中所述指令处理电路还被配置为:响应于确定已处理的所述基于负载的CI指令不是SFD基于负载的CI指令,不重放已处理的所述基于负载的CI指令。
3.根据权利要求1所述的处理器,其中所述指令处理电路被配置为:
通过被配置为确定由所述指令流中的所述基于存储的指令转发的存储是否在所述第一CD指令区域中,来确定已处理的所述基于负载的CI指令是否是所述SFD基于负载的CI指令;以及
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,重放已处理的所述基于负载的CI指令。
4.根据权利要求1所述的处理器,其中所述指令处理电路被配置为:
通过被配置为确定由所述指令流中的所述基于存储的指令转发的活跃存储是否在所述第一CD指令区域中,来确定已处理的所述基于负载的CI指令是否是所述SFD基于负载的CI指令;以及
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,重放已处理的所述基于负载的CI指令。
5.根据权利要求1所述的处理器,其中所述指令处理电路还被配置为:
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,确定已处理的所述基于负载的CI指令是否比所述指令流中的所述条件控制指令旧;以及
响应于确定已处理的所述基于负载的CI指令比所述指令流中的所述条件控制指令旧,重放已处理的所述基于负载的CI指令。
6.根据权利要求1所述的处理器,其中所述指令处理电路还被配置为:
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,由所述指令处理电路确定所述基于存储的指令是否比所述指令流中最新近被提交的基于存储的指令新;以及
响应于确定所述基于存储的指令比所述指令流中所述最新近被提交的基于存储的指令新,重放已处理的所述基于负载的CI指令。
7.根据权利要求1所述的处理器,其中所述指令处理电路还被配置为:
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,将已处理的所述基于负载的CI指令指定为基于负载的CIDD指令;以及
响应于所述推测性预测与所解析的所述谓词不匹配,响应于所述基于负载的CI指令被指定为基于负载的CIDD指令,重放已处理的所述基于负载的CI指令;
所述指令处理器电路还包括:
存储转发负载(SFL)跟踪电路,所述存储转发负载跟踪电路被配置为存储至少一个SFL条目,所述至少一个SFL条目中各自包括针对基于负载的指令的SFL信息;以及
控制无关确定电路,所述控制无关确定电路耦合到所述SFL跟踪电路并且耦合到所述一个或多个指令流水线;
所述控制无关确定电路被配置为:
基于确定由所述指令流中的基于存储的指令转发的存储是否被指定为由所述基于负载的CI指令消耗的转发存储,来确定所述基于负载的CI指令是否是SFD基于负载的CI指令;
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,将SLF信息存储在所述SFL跟踪电路中的所述至少一个SFL条目之中的SFL条目中,所述SLF信息将所述基于负载的CI指令指定为基于负载的CIDD指令;以及
响应于所述推测性预测与在所述条件控制指令的执行中所解析的所述谓词不匹配:
基于所述SFL跟踪电路中的针对所述基于负载的CI指令的所述SFL条目中的所述SFL信息,来确定所述基于负载的CI指令是否是SFD基于负载的CI指令;以及
响应于基于所述SFL跟踪电路中的所述SFL条目而确定所述基于负载的CI指令是SFD基于负载的CI指令,将所述基于负载的CI指令指定为基于负载的CIDD指令。
8.根据权利要求7所述的处理器,其中所述指令处理电路还包括:
其中所述SFL信息包括负载标识(ID)指示符、SFL指示符和转发存储指示符(FSID),所述负载标识指示符标识基于负载的指令,所述SFL指示符指示所述基于负载的指令是否消耗由所述基于存储的指令产生的存储转发负载,所述转发存储指示符标识产生到被执行的所述基于负载的CI指令的所述存储转发的所述基于存储的指令;以及
所述控制无关确定电路被配置为:
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,将SLF信息存储在所述SLF跟踪电路中的所述至少一个SFL条目之中的所述SFL条目中包括:将所述基于负载的CI指令的所述负载ID存储在所述SFL条目中的所述负载ID指示符中,将SFL真状态存储在所述SFL条目中的所述SLF指示符中,以及将所述基于存储的指令的所述存储ID存储在所述SFL条目中的所述FSID指示符中;以及
响应于所述推测性预测与在所述条件控制指令的执行中所解析的所述谓词不匹配:
基于所述SFL跟踪电路中的针对所述基于负载的CI指令的所述SFL条目,来确定所述基于负载的CI指令是否是SFD基于负载的CI指令;以及
响应于确定所述SFL跟踪电路中的针对所述基于负载的CI指令的所述负载ID的所述SFL条目中的所述SLF指示符是SFL真状态,将所述基于负载的CI指令指定为基于负载的CIDD指令。
9.根据权利要求1所述的处理器,其中所述指令处理电路还包括:
存储转发负载(SFL)跟踪电路,所述存储转发负载跟踪电路被配置为存储至少一个SFL条目,所述至少一个SFL条目各自包括针对基于存储的指令的SFL信息;以及
控制无关确定电路,所述控制无关确定电路耦合到所述SFL跟踪电路并且耦合到所述一个或多个指令流水线;
所述控制无关确定电路被配置为:
确定所述指令流中的被取指的基于存储的指令是否具有与基于负载的指令的SFL依赖性;
响应于确定所述被取指的基于存储的指令具有与所述基于负载的CI指令的SFL依赖性,将SFL信息存储在所述SFL跟踪电路中的所述至少一个SFL条目之中的SFL条目中,所述SFL信息包括将所述基于存储的CI指令指定为存储转发(SF)基于存储的指令、以及具有与所述基于存储的指令的所述SFL依赖性的所述基于负载的CI指令的负载ID;
响应于所述推测性预测与在所述条件控制指令的执行中所解析的所述谓词不匹配:
基于所述SFL跟踪电路中的所述基于负载的CI指令的所述负载ID,来确定所述基于负载的CI指令是否作为对所述基于存储的指令的SFD基于负载的CI指令而被包含在所述SFL跟踪电路中的SFL条目中;以及
响应于基于所述SFL跟踪电路中的所述SFL条目而确定所述基于负载的CI指令是SFD基于负载的CI指令,将所述基于负载的CI指令指定为基于负载的CIDD指令。
10.一种将处理器中的指令流中的基于负载的控制无关(CI)指令指定为基于负载的CI数据依赖(DD)(CIDD)指令以用于错误预测恢复中的重放的方法,包括:
将多个指令从存储器取指到所述一个或多个指令流水线(I0-IN)之中的指令流水线中,所述一个或多个指令流水线(I0-IN)中的被取指的所述多个指令包括指令流,所述指令流包括至少一个控制无关(CI)指令区域和多个控制依赖(CD)指令区域;
推测性地预测所述指令流中的条件控制指令中的谓词;
处理所述指令流中的被取指的指令,所述被取指的指令包括所述指令流中的所述多个CD指令区域之中的第一CD指令区域中的被取指的指令和CI指令区域中的基于负载的CI指令,所述第一CD指令区域是基于推测性预测而被采取的;
基于确定所述指令流中的基于存储的指令是否指定由所述基于负载的CI指令所消耗的转发存储,来确定所述基于负载的CI指令是否是存储转发依赖的(SFD)基于负载的CI指令;
执行所述条件控制指令以解析所述条件控制指令的所述谓词;
确定所述推测性预测与从所述条件控制指令的执行所解析的所述谓词是否匹配;以及
响应于所述推测性预测与在所述条件控制指令的执行中所解析的所述谓词不匹配:
处理所述指令流中的所述多个CD指令区域之中的第二CD指令区域中的所述被取指的指令和所述基于负载的CI指令,所述第二CD指令区域是基于从所述条件控制指令的执行所解析的所述谓词而被采取的;以及
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,重放已处理的所述基于负载的CI指令。
11.根据权利要求10所述的方法,包括:
通过确定由所述指令流中的所述基于存储的指令所转发的存储是否在所述第一CD指令区域中,来确定已处理的所述基于负载的CI指令是否是所述SFD基于负载的CI指令;以及
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,重放已处理的所述基于负载的CI指令。
12.根据权利要求10所述的方法,还包括:
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,确定已处理的所述基于负载的CI指令是否比所述指令流中的所述条件控制指令旧;以及
包括响应于确定已处理的所述基于负载的CI指令比所述指令流中的所述条件控制指令旧,重放已处理的所述基于负载的CI指令。
13.根据权利要求10所述的方法,还包括:
响应于确定所述基于负载的CI指令是SFD基于负载的CI指令,由所述指令处理电路确定所述基于存储的指令是否比所述指令流中最新近被提交的基于存储的指令新;以及
包括响应于确定所述基于存储的指令比所述指令流中所述最新近被提交的基于存储的指令新,重放已处理的所述基于负载的CI指令。
14.一种处理器,包括:
指令处理电路,包括一个或多个指令流水线;
所述指令处理电路被配置为:
将多个指令从存储器取指到所述一个或多个指令流水线(I0-IN)之中的指令流水线中,所述一个或多个指令流水线中的被取指的所述多个指令包括指令流,所述指令流包括至少一个控制无关(CI)指令区域和多个控制依赖(CD)指令区域;
推测性地预测所述指令流中的条件控制指令中的谓词;
处理所述指令流中的被取指的指令,所述被取指的指令包括所述指令流中的所述多个CD指令区域之中的第一CD指令区域中的被取指的指令和CI指令区域中的基于负载的CI指令,所述第一CD指令区域是基于推测性预测而被采取的;
确定所述基于负载的CI指令是否被预测为具有对所述指令流中的基于存储的指令的存储器依赖性;
执行所述条件控制指令以解析所述条件控制指令的所述谓词;
确定所述推测性预测与从所述条件控制指令的执行所解析的所述谓词是否匹配;以及
响应于所述推测性预测与在所述条件控制指令的执行中所解析的所述谓词不匹配:
处理所述指令流中的所述多个CD指令区域之中的第二CD指令区域中的所述被取指的指令和所述基于负载的CI指令,所述第二CD指令区域是基于从所述条件控制指令的执行所解析的所述谓词而被采取的;
确定所述基于负载的CI指令是否具有作为存储转发依赖的(SFD)基于负载的CI指令的被预测的所述存储器依赖性;以及
响应于确定所述基于负载的CI指令具有作为所述SFD基于负载的CI指令的被预测的所述存储器依赖性,将已执行的所述基于负载的CI指令作为基于负载的CI数据依赖(DD)(CIDD)指令而重放。
15.根据权利要求14所述的处理器,还包括:
控制无关确定电路,耦合到所述一个或多个指令流水线;以及
存储器依赖性预测器电路,被配置为指示基于负载的指令是否被预测为具有对所述指令流中的基于存储的指令的存储器依赖性;
控制无关确定电路,耦合到所述SFL跟踪电路并且耦合到所述一个或多个指令流水线;
所述指令处理电路被配置为:
基于所述存储器依赖性预测器电路来确定所述基于负载的CI指令是否被预测为具有对所述指令流中的基于存储的指令的所述存储器依赖性;以及
响应于确定所述基于负载的CI指令被预测为具有对所述指令流中的基于存储的指令的所述存储器依赖性,将所述基于负载的CI指令作为基于负载的CIDD指令而重放。
CN202080043032.3A 2019-06-13 2020-04-28 在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放 Withdrawn CN114008587A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/440,062 2019-06-13
US16/440,062 US11061683B2 (en) 2019-06-13 2019-06-13 Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor
PCT/US2020/030162 WO2020251677A1 (en) 2019-06-13 2020-04-28 Limiting replay of load-based control independent (ci) instructions in speculative misprediction recovery in a processor

Publications (1)

Publication Number Publication Date
CN114008587A true CN114008587A (zh) 2022-02-01

Family

ID=70775497

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080043032.3A Withdrawn CN114008587A (zh) 2019-06-13 2020-04-28 在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放

Country Status (5)

Country Link
US (1) US11061683B2 (zh)
EP (1) EP3970007A1 (zh)
KR (1) KR20220017403A (zh)
CN (1) CN114008587A (zh)
WO (1) WO2020251677A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11698789B2 (en) 2020-10-12 2023-07-11 Microsoft Technology Licensing, Llc Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques
US11392387B2 (en) * 2020-11-04 2022-07-19 Microsoft Technology Licensing, Llc Predicting load-based control independent (CI) register data independent (DI) (CIRDI) instructions as CI memory data dependent (DD) (CIMDD) instructions for replay in speculative misprediction recovery in a processor
US11494191B1 (en) 2021-05-18 2022-11-08 Microsoft Technology Licensing, Llc Tracking exact convergence to guide the recovery process in response to a mispredicted branch

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7363477B2 (en) * 2003-12-03 2008-04-22 Intel Corporation Method and apparatus to reduce misprediction penalty by exploiting exact convergence
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
US7747993B2 (en) * 2004-12-30 2010-06-29 Michigan Technological University Methods and systems for ordering instructions using future values
US8464029B2 (en) * 2009-05-29 2013-06-11 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
US8533438B2 (en) * 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US9244827B2 (en) * 2013-09-25 2016-01-26 Intel Corporation Store address prediction for memory disambiguation in a processing device

Also Published As

Publication number Publication date
KR20220017403A (ko) 2022-02-11
WO2020251677A1 (en) 2020-12-17
US11061683B2 (en) 2021-07-13
US20200394040A1 (en) 2020-12-17
EP3970007A1 (en) 2022-03-23

Similar Documents

Publication Publication Date Title
US10255074B2 (en) Selective flushing of instructions in an instruction pipeline in a processor back to an execution-resolved target address, in response to a precise interrupt
US7415597B2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
CN114008587A (zh) 在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放
US20220283811A1 (en) Loop buffering employing loop characteristic prediction in a processor for optimizing loop buffer performance
KR101056820B1 (ko) 연산들의 인-플라이트 인스턴스들이 데이터-추론마이크로프로세서 내에서 연산 재실행을 중단하는 것을방지하기 위한 시스템 및 방법
US9626185B2 (en) IT instruction pre-decode
EP4241162A1 (en) Predicting load-based control independent (ci) register data independent (di) (cirdi) instructions as ci memory data dependent (dd) (cimdd) instructions for replay in speculative misprediction recovery in a processor
US10977040B2 (en) Heuristic invalidation of non-useful entries in an array
US20160170770A1 (en) Providing early instruction execution in an out-of-order (ooo) processor, and related apparatuses, methods, and computer-readable media
US10877768B1 (en) Minimizing traversal of a processor reorder buffer (ROB) for register rename map table (RMT) state recovery for interrupted instruction recovery in a processor
CN115702415A (zh) 响应于处理器中的危险而在指令流水线冲刷后重用已取回的、经冲刷的指令以减少指令重取
US11698789B2 (en) Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques
WO2004099978A2 (en) Apparatus and method to identify data-speculative operations in microprocessor
US7900027B2 (en) Scalable link stack control method with full support for speculative operations
US11995443B2 (en) Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor
US20220398100A1 (en) Processors employing memory data bypassing in memory data dependent instructions as a store data forwarding mechanism, and related methods
US20230205535A1 (en) Optimization of captured loops in a processor for optimizing loop replay performance

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20220201