CN113176895A - 预测冲刷之后指令的结果 - Google Patents
预测冲刷之后指令的结果 Download PDFInfo
- Publication number
- CN113176895A CN113176895A CN202110078453.6A CN202110078453A CN113176895A CN 113176895 A CN113176895 A CN 113176895A CN 202110078453 A CN202110078453 A CN 202110078453A CN 113176895 A CN113176895 A CN 113176895A
- Authority
- CN
- China
- Prior art keywords
- instruction
- prediction
- flow path
- control flow
- subsequent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000004044 response Effects 0.000 claims abstract description 22
- 238000000034 method Methods 0.000 claims description 27
- 238000011010 flushing procedure Methods 0.000 claims description 10
- 125000004122 cyclic group Chemical group 0.000 claims description 8
- 230000008859 change Effects 0.000 claims description 6
- 238000005516 engineering process Methods 0.000 description 10
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本公开涉及预测冲刷之后指令的结果。描述了一种装置,包括处理电路来通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行早前指令和后来指令,其中早前指令的结果的预测使得第一控制流路径被执行。该装置还包括存储电路,来响应于后来指令完成而存储后来指令的结果,以及冲刷电路,来响应于早前指令的结果的预测不正确而生成冲刷。当在冲刷之后在第二控制流路径中重执行后来指令时,处理电路被适配为将后来指令的结果的预测生成为在第一控制流路径的执行期间存储在存储电路中的结果。
Description
技术领域
本技术涉及数据处理的领域。更具体而言,本技术涉及指令的推测性执行。
背景技术
在数据处理系统中,指令可被推测性地执行。例如,控制流路径更改指令确定后来指令的哪个序列(控制流路径)随后将被执行。控制流路径更改指令的特定示例是分支指令。
在这种系统中,控制流路径更改指令的执行可涉及在指令被执行之前预测控制流路径更改指令的结果。这允许了数据处理系统推测性地执行在由控制流路径更改指令的预测结果所指示的控制流路径上的后来指令。
以这种方式对指令的推测性执行允许了与数据处理系统被强迫等待直到早前指令的结果已知为止的情况下可能的相比,后来指令被更快地执行,这可改善数据处理系统的性能。如果对控制流路径更改指令的结果的预测后来被确定为是不正确的,则从不正确控制流路径执行的后来指令被从数据处理系统的管线冲刷,并且数据处理系统随后执行正确控制流路径上的指令。
发明内容
从一个示例来看,本技术提供了一种装置,包括:处理电路,来通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行早前指令和后来指令,其中早前指令的结果的预测使得第一控制流路径被执行;存储电路,来响应于后来指令完成而存储后来指令的结果;以及冲刷电路,来响应于早前指令的结果的预测不正确而生成冲刷,其中当在冲刷之后在第二控制流路径中重执行后来指令时,处理电路被适配为将后来指令的结果的预测生成为在第一控制流路径的执行期间存储在存储电路中的结果。
从另一示例来看,本技术提供了一种方法,包括:通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行早前指令和后来指令,其中早前指令的结果的预测使得第一控制流路径被执行;响应于后来指令完成而存储后来指令的结果;响应于早前指令的结果的预测不正确而生成冲刷;并且当在冲刷之后在第二控制流路径中重执行后来指令时,将后来指令的结果的预测生成为在第一控制流路径的执行期间存储的结果。
从另一示例来看,本技术提供了一种装置,包括:用于通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行早前指令和后来指令的装置,其中早前指令的结果的预测使得第一控制流路径被执行;用于响应于后来指令完成而存储后来指令的结果的装置;用于响应于早前指令的结果的预测不正确而生成冲刷的装置;以及用于当在冲刷之后在第二控制流路径中重执行后来指令时将后来指令的结果的预测生成为在第一控制流路径的执行期间存储的结果的装置。
根据结合附图阅读的对示例的以下描述,将清楚本技术的更多方面、特征和优点。
附图说明
图1图示了根据本技术的数据处理装置;
图2图示了指令的流中的会聚控制流路径;
图3示意性图示了重放预测器;
图4图示了具有基础预测器的重放预测器的使用;
图5A、图5B和图5C图示了具有会聚控制流路径的指令流的示例;
图6图示了可如何使用重放预测器的示例;并且
图7是图示出使用重放预测器来预测后来指令的结果的方法的流程图。
具体实施方式
在数据处理系统中,可以预测早前指令的结果,从而允许依据该预测来取得和推测性地执行后来指令。例如,早前指令的结果可指示处理电路要遵循的控制流路径,并且处理电路可响应于该结果的预测来推测性地执行该控制流路径上的指令。以这种方式推测性执行指令允许了预测的控制流路径上的指令与不允许推测性执行相比被更早地执行,提供了显著的性能益处。
然而,在早前指令的结果的预测在随后被确定为不正确的情况下,任何后来指令(例如预测的控制流路径上的指令)的执行被取消或倒回,以避免可由执行和完成不正确的指令而引起的损害或安全性问题。这可涉及例如冲刷处理电路以防止在早前指令之后发生的任何指令的完成,并且转而执行正确的控制流路径上的指令。然而,有重大的性能成本与执行冲刷相关联,并且执行错误指令所花费的时间被浪费了。如果正确控制路径也包括一些同样的被倒回的指令,则尤其如此。从而,能够改善处理电路在重执行指令时的性能,将是有利的。
在本技术的一些示例中,提供了一种装置,其包括处理电路来通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行早前指令和后来指令,其中早前指令的结果的预测使得第一控制流路径被执行;存储电路,来响应于后来指令完成而存储后来指令的结果,以及冲刷电路来响应于早前指令的结果的预测不正确而生成冲刷,其中当在冲刷之后的第二控制流路径中重执行后来指令时,处理电路被适配为将后来指令的结果的预测生成为在第一控制流路径的执行期间存储在存储电路中的结果。
通过将后来指令的结果存储在存储电路中,并且在重执行后来指令时使用存储的结果作为预测,本技术允许了重执行后来指令所要求的时间和处理功率被降低。这带来了装置的效率的增大和性能的改善。具体地,后来指令的预测可被更迅速地确定,允许了后续的指令被取得并且推测性地执行。另外,使后来指令的预测结果基于指令的实际执行的结果允许了获得更准确的预测,降低了生成又一个冲刷的可能性,并且因此,改善了装置的性能。
存储电路可以是任何形式的存储电路,例如,其可以是专用存储电路,或者其可以是系统存储器内的区域。
在一些示例中,第一控制流路径和第二控制流路径各自包括后来指令。
本技术在这样的情况中尤其有益:即,后来指令不是直接依从于早前指令的结果,从而既依从于不正确的控制流路径(第一控制流路径)也依从于正确的控制流路径(第二控制流路径)。在这种情况下,相同的(后续)指令将在冲刷之后被重执行,即使其结果不太可能已变化。从而通过使用后来指令的先前执行的结果作为预测,采用本技术的存储电路,来在这种情形中降低功率消耗并且提高后来指令的重执行的速度,是尤其有利的。
在一些示例中,早前指令在预定的程序顺序中是比后来指令更早前的,并且处理电路在冲刷完成之前完成后来指令的执行。
以这种方式对早前指令和后来指令的无序执行允许了以由例如输入数据或执行单元的可用性所约束而不是由其在程序中的原始顺序(预定的程序顺序)所约束的顺序来执行指令。在冲刷之前完成后来指令意味着后来指令的结果是已知的并且可在冲刷完成之前被存储。
在一些示例中,后来指令和早前指令相对于程序顺序被无序发出。
在这种示例中,后来指令在早前指令之前被执行,使得后来指令的结果在冲刷(由早前指令的不正确预测触发)完成之前就已知了。在此情形中,本技术是尤其有利的,因为后来指令的结果是已知的——并且因此可被存储——在指令被从处理电路冲刷之前。
或者,可能早前指令和后来指令被按序执行,但后来指令被执行得比早前指令更快速,从而使得其结果可以在冲刷完成之前已知。本技术在此情形中也是有用的,因为同样的,后来指令的结果是已知的——并且因此可被存储——在指令被从处理电路冲刷之前。
在一些示例中,存储电路存储指示出后来指令是否在第一控制流路径中完成了的有效性指示符;并且当有效性指示符指示出后来指令先前已被完成时处理电路将后来指令的结果的预测生成为在第一控制流路径的执行期间存储在存储电路中的结果。
这样,处理电路可利用有效性指示符来确定是否在存储电路中存储了后来指令的结果的准确预测。这通过降低生成又一个冲刷的可能性来降低了作出不正确预测的可能性,并且因此改善了装置的性能。
在一些示例中,处理电路执行早前指令的多个迭代和后来指令的多个迭代;存储电路存储后来指令的多个结果,每一者对应于后来指令的多个迭代之一;并且对于后来指令的每个迭代,当在冲刷之后的第二控制流路径中重执行后来指令的该迭代时,处理电路被适配为将后来指令的结果的该迭代的预测生成为在第一控制流路径的执行期间对于该迭代在存储电路中存储的结果。
存储电路存储同一后来指令的多个迭代的每一者的结果,从而允许了后来指令的任何特定迭代的结果被准确地预测。这使得无论在生成冲刷之前执行了后来指令多少个迭代,都可以应用本技术。例如,这在早前指令和后来指令是每个被迭代多次的“for”、“while”或“do”循环内的指令的情形中可能是有用的。因此本技术的存储电路能够存储同一指令的多个迭代的结果,是有用的。
在一些示例中,该装置包括指针存储电路来存储指示出后来指令的多个结果中的哪个对应于后来指令的当前迭代的指针。
该指针允许了处理电路确定多个结果中的哪个对应于后来指令的当前迭代,以使得该迭代的结果能够被正确地预测和/或存储到存储电路内的正确位置。这改善了利用本技术作出的预测的准确性。
在一些示例中,指针在后来指令的每次预测之后被推进;并且在冲刷之后,指针被返回到当早前指令被预测时指针所占据的状态。
这允许了指针正确地识别与后来指令的当前迭代相对应的结果,使得相应的结果可被取回或者存储在正确的位置中。
在一些示例中,处理电路通过生成多个结果的预测,每一者对应于多个后来指令之一,来推测性地执行多个后来指令;并且存储电路存储多个结果,其中多个结果的每一者是响应于多个后来指令的相应一者完成而被存储的。
当多个后来指令在不正确的控制流路径(第一控制流路径)上被执行时,本技术仍可被应用来在这些指令在冲刷之后被重执行时为它们生成预测。
在一些示例中,存储电路将多个后来指令的结果存储为循环比特向量。
循环比特向量是将多个后来指令的结果存储在存储电路中的一种特定的紧凑且高效的方式,要求最低限度的电路面积。比特向量中的每个比特可对应于多个后来指令的结果之一。
在一些示例中,存储电路将多个有效性指示符存储为另一循环比特向量,其中多个有效性指示符的每一者指示出多个后来指令中的相应一者是否在先前控制流路径中完成了。
如上所述,有效性指示符的使用降低了作出不正确预测的可能性,并且因此改善了装置的性能。另外,如上所述,将诸如有效性指示符之类的数据元素存储为循环比特向量是尤其紧凑且高效的,其中比特向量的每个比特对应于有效性指示符之一。
在一些示例中,该装置包括另一预测电路来生成后来指令的结果的另一预测;以及预测选择电路来选择后来指令的结果的预测或者后来指令的结果的另一预测作为选定预测。
通过提供选择电路来在后来指令的结果的预测和由另一预测电路生成的另一预测之间进行选择,本技术可与诸如分支预测器和值预测器之类的现有预测电路一起使用。这允许了本技术更容易被集成到现有系统中,并且提供了如下额外优点:即使当存储在存储电路中的结果不可用(例如,如果后来指令先前尚未被执行,意味着没有结果存储在本技术的存储电路中)或者不准确时,预测(另一预测)也能够可用。
在一些示例中,存储电路存储指示出后来指令先前是否已完成的有效性指示符;当有效性指示符指示出后来指令先前已被完成时处理电路将后来指令的结果的预测生成为在第一控制流路径的执行期间存储在存储电路中的结果;并且除非有效性指示符指示出后来指令先前已完成,否则预测选择电路选择后来指令的结果的另一预测作为选定预测。
如上所述,有效性指示符的使用降低了作出不正确预测的可能性,并且因此改善了装置的性能。在此情况下,有效性指示符也用于确定两个预测中的哪个要用作后来指令的预测结果。具体地,存储在存储电路中的结果一般将是最准确的预测,因为其对应于后来指令的真实(最近)执行。因此,通过除非有效性指示符指示出后来指令先前尚未完成否则就选择此结果,可以改善生成的预测的准确性,降低生成另一个冲刷的可能性。
在一些示例中,早前指令是控制流路径更改指令;并且早前指令的结果使得执行沿着第一控制流路径或第二控制流路径进行。
在这些示例中,控制流路径更改指令指的是可更改要被处理电路执行的指令的流的指令。对于这种指令,(如上所述要被存储在存储电路中的)控制流路径更改指令的结果是对于后续指令要遵循的控制流路径的指示。处理电路通过预测性地取得和执行来自预测的控制流路径的指令来响应控制流路径更改指令的结果的预测。因此,在早前指令是控制流路径更改指令的情形中,本技术可被应用来在重执行这种指令时生成结果的预测。
在一些示例中,早前指令是分支指令;并且早前指令的结果确定分支是否被采取。
早前指令可以是这样的分支指令:该分支指令当被采取时识别要被处理电路遵循的特定控制流路径,并且在该分支不被采取时识别不同的控制流路径。分支指令的结果因此指示出分支是否被采取——例如,结果可以是“采取”或者“不采取”,并且后续指令(例如后来指令)可基于对分支是否被采取的预测而被推测性地取得和执行。
在一些示例中,后来指令是控制流路径更改指令;并且后来指令的结果使得执行沿着第三控制流路径或第四控制流路径进行。
在这些示例中,处理电路要预测的结果——以及要被存储在存储电路中的结果——是执行应当经由第三控制流路径还是第四控制流路径进行。本技术因此可用于在后来指令被重执行时预测后来指令的结果(哪个控制流路径)。
在一些示例中,后来指令确定数据值;并且后来指令的结果的预测将预测该数据值的值。
例如,后来指令可以是从存储器加载数据值的加载指令,或者通过算术指令来计算值的算术指令。本技术的存储电路因此可存储由该指令计算或读取的数据值,并且在指令被重执行的情况下使用这个存储的值作为预测。
在一些示例中,早前指令确定数据值;早前指令的结果的预测将预测该数据值的值;并且第一控制流路径和第二控制流路径是相同的。
如上所述,这种指令的示例可包括从存储器加载数据值的加载指令,或者通过算术指令来计算值的算术指令。在这种示例中,由于指令的结果不更改后续指令的控制流路径,所以第一和第二控制流路径可被认为是相同的。从而无论早前指令的结果如何后来指令都被执行,使得这是可应用本技术的一个尤其有利的情形。
现在将参考附图描述特定实施例。
图1图示了具有包括若干个管线阶段的处理管线的数据处理装置100的示例。数据处理装置100是处理电路的示例,该处理电路通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行早前指令和后来指令。管线包括用于预测由数据处理装置100处理的指令的结果的基础预测器102和重放预测器104。基础预测器102和重放预测器104各自是用于预测指令的结果的预测电路,允许了后续指令被基于该预测来执行。基础预测器102是标准预测器并且可例如基于记录的历史来预测指令的结果。将在下文更详细论述的重放预测器104基于存储的同一指令的早前执行的结果来作出预测。基础预测器102和重放预测器104的输出被馈送到选择电路106中,选择电路106在由这两个预测器生成的预测之间进行选择。基础预测器102是另一预测电路的示例并且选择电路106是预测选择电路的示例。注意基础预测器102和重放预测器104的每一者可以是用于预测分支指令的结果的分支预测器,或者可以是用于预测由指令确定的数据值的值预测器。
管线还包括取得单元108,其从指令缓存110或其他存储器结构112、114取得指令。取得阶段108取得由取得地址识别的指令,并且解码阶段116对取得的指令解码以生成用于控制管线的后续阶段的控制信号。由取得单元108取得的指令可依从于由选择电路106提供的预测。具体地,如果由选择电路106提供的预测预测出分支将会发生,则取得的指令将在由该分支指示的位置。
重命名阶段118执行寄存器重命名以将由指令所识别的体系结构寄存器指定符映射到识别在硬件中提供的寄存器的物理寄存器指定符。发出阶段120包括发出队列,该发出队列将等待执行的指令排队,直到处理这些指令所要求的操作对象在寄存器中可用为止,并且包括选择电路来选择指令供执行阶段122执行。执行阶段122执行指令以实现相应的处理操作,并且执行的指令的结果被写回到寄存器。
执行阶段122可包括若干个执行单元,例如用于评估分支指令是否已被正确预测的分支单元124,用于执行算术或逻辑操作的ALU(算术逻辑单元)126,用于利用浮点操作对象执行操作的FPU(浮点单元)128,以及用于执行加载操作来从存储器系统加载数据到寄存器或者执行存储操作来从寄存器存储数据到存储器系统的加载/存储单元130。在此示例中,存储器系统包括第一级指令缓存110,第一级数据缓存132,在数据和指令之间共享的第二级缓存112,以及主存储器114,但将会明白这只是可能的存储器层次体系的一个示例,而其他实现方式可具有另外级别的缓存或者不同的布置。可利用用于控制地址转化和/或存储器保护的存储器管理单元(Memory Management Unit,MMU)来控制对存储器的访问。将会明白,图1中所示的管线只是一个示例,并且其他示例可具有管线阶段或执行单元的不同集合。例如,有序处理器可不具有重命名阶段118。
也提供了冲刷电路134。冲刷电路134响应于某些触发——例如基础预测器102和重放预测器104之一作出的不正确预测——来生成冲刷。冲刷将所有未完成的指令从管线中清除。冲刷电路134是响应于早前指令的结果的预测不正确而生成冲刷的冲刷电路的示例。
如上所述,可提供重放预测器104来生成指令的结果的预测。具体地,重放预测器104存储在管线的冲刷之前进行的指令的先前执行的结果。存储的值随后可经由选择电路106被提供到取得电路108,在同一指令在冲刷之后被重执行时作为对其的结果的预测。
如上所述,预测电路102、104可在特定指令被执行单元122执行之前作出关于这些指令的预测。具体地,可以预测指令的结果以确定在该指令的执行之后要遵循多个控制流路径中的哪一个。这允许了取得电路108取得下一组指令。
图2示出了指令的流200的示例——例如,图2中描绘的指令的序列指示出预定的程序顺序,其例如可以是由编译器编译的指令的顺序,或者是由程序员提供的顺序。具体地,图2示出了早前指令(指令A)202,其基于其结果确定是遵循第一控制流路径(路径1)还是第二控制流路径(路径2)。如果遵循第一控制流路径,则第一组指令(路径1指令)204被执行,随后是后来指令(指令B)208。如果遵循第二控制流路径,则第二组指令(路径2指令)206被执行,随后是后来指令(指令B)208。在图2所示的示例中,第一控制流路径和第二控制流路径重会聚,其中后来指令(指令B)208被在两个控制流路径上执行——也就是说,第一控制流路径和第二控制流路径各自包括后来指令208。此示例中的早前指令202从而是控制流路径更改指令,用于使得特定的控制流路径被遵循。后来指令208也可以是控制流路径更改指令。或者,后来指令208可以是可为其生成预测的任何其他类型的指令——例如,其可以是用于预测数据值的指令。
在一些示例中,早前指令202是分支指令,其中两条路径之一是“采取”路径并且两条路径之一是“未采取”路径。
通过提前预测第一指令202的结果——例如,利用基础预测器102来预测——取得电路108能够基于该预测来取得后续指令(例如,早前指令的结果的预测使得第一控制流路径被遵循)。这允许了与不预测后来指令(202)的结果的情况相比可以更快地执行后续指令,带来了性能的提高。
在早前指令202的结果被不正确预测,导致不正确控制流路径上的指令的执行的情况下,冲刷电路134被布置为触发冲刷来将不正确执行的指令从处理管线2去除。基于第一指令202的正确结果的正确指令集合随后可被执行。在此情况下,如果既在第一控制流路径上也在第二控制流路径上的后来指令208在冲刷完成之前已被执行(例如完成),则这意味着相同的指令在冲刷发生之后将被重执行。此外,可以预期此指令的第二次执行将给出与该指令的第一次执行相同的结果。这是对处理资源的浪费,导致功率消耗的增大和性能的降低。本技术致力于通过使用重放预测器104来存储后来指令208的结果并且使用存储的结果来在指令的第二执行期间预测其结果,来克服性能和效率的这个降低。
图3更详细示出了重放预测器104的示例。重放预测器104包括多个预测单元301a,301b,...,301n,每个对应于多个后来指令之一。例如,第一预测单元301a可对应于上文参考图2描述的后来指令(指令B)。
第一预测单元301a包括预测存储电路302a,其被布置为存储在不正确控制路径上执行的后来指令的结果——预测存储电路302a是响应于后来指令完成而存储后来指令的结果的存储电路的示例。此结果随后可在冲刷之后重执行后来指令时被从预测存储302a读取,以便生成比利用基础预测电路生成的更准确的指令的结果的预测。
后来指令的多个迭代可在冲刷完成之前被执行,例如在循环中执行。因此,这些示例中的预测存储电路302a被适配为存储后来指令的多个结果,每个结果对应于迭代之一。在图3的示例中,预测存储电路302a将后来指令的多个结果存储为第一循环比特向量304a。图2的预测存储电路302a还存储第二循环比特向量306a来存储多个有效性值(有效性指示符/有效性比特),每一者对应于后来指令的迭代之一。在此示例中,每个结果被存储为单个比特,并且每个有效性值被存储为单个比特(例如存储为“1”或“0”)。这允许了后来指令的多个迭代的结果被以紧凑且高效的方式存储在预测存储电路302a中,减少了实现预测存储电路302a所要求的电路面积。例如,如果后来指令是分支指令并且结果因此是采取或不采取,则当结果是不采取时可存储值0并且当结果是采取时可存储值1。循环比特向量304a中的每个比特位置对应于指令的特定迭代。
有效性向量306a允许了为后来指令的每个迭代存储有效性比特,指示出后来指令的相应迭代是否已完成。例如,有效性向量的给定比特位置中存储的值1可指示出后来指令的相应迭代已完成并且相应的结果已被存储,而值0可指示出后来指令的相应迭代尚未完成。
为了识别出后来指令的哪个迭代是当前迭代,提供了指针存储电路308a来存储指针,该指针指示出预测向量和有效性向量的哪个比特位置对应于后来指令的当前迭代。
如上所述,在由冲刷电路134生成冲刷之后,后来指令可能需要被重执行(例如,如果它既在不正确的控制流路径上也在正确的控制流路径上)。当重执行后来指令时,生成后来指令的结果的预测,以使得后续指令能够被推测性地执行。为了生成后来指令的给定迭代的结果的预测,指针存储电路308a的输出和预测存储302a的输出随后可被馈送到复用器310a中以允许与当前迭代相对应的有效性值311a和预测309a被输出。
也提供了程序计数器存储312a来存储与后来指令相对应的程序计数器值。为了为特定指令从重放预测器104取得预测,与要执行的指令的程序计数器相对应的程序计数器值314被输入到重放预测器104中。在每个预测单元301中,利用比较电路315将其与存储的程序计数器值312相比较,并且这个比较的结果变成一对复用器316、318的选择信号,该对复用器316、318从每个预测单元301接收有效性值311和预测309作为输入。与当前指令——存储的程序计数器值312等于输入的程序计数器值314的指令——相对应的有效性值311和预测值309随后被复用器316、318选择。倘若所选择的有效性值320指示出预测有效,则所选择的预测322随后可用于预测另外指令的结果。
如图3中所示的重放预测电路104允许了迅速地生成后来指令的准确预测,并且使得能够基于来自不正确控制流路径的该指令的实际执行的结果来进行预测。
图4示出了重放预测器104可如何与基础预测器102被同时实现。基础预测器102是生成后来指令的结果的另一预测的另一预测电路的示例,并且可以是在数据处理装置100中提供的正常预测电路。例如,基础预测器102——与重放预测器104一样——可被配置用于预测分支指令的结果,或者值预测电路,用于预测要由指令计算的数据值。基础预测器102可基于存储的历史数据来生成预测,例如利用模式历史表格来生成。
在数据处理装置100对指令的执行期间,重放预测器104和基础预测器102的每一者可产生预测。重放预测器104如上所述输出预测322和有效性值320,并且基础预测器102输出另一预测406。来自重放预测器104的预测322和来自基础预测器102的另一预测406被馈送到复用器402中,复用器402从这两个输入预测中选择所选预测408。
也提供了选择电路106,来生成预测选择信号410。预测选择信号410和有效性值320被输入到与门404中,并且与门404的输出被提供作为复用器402的选择信号412。这样,如果对于当前指令没有在重放预测器中存储有效预测,则来自基础预测器的预测被选择,因为有效性值0被重放预测器输出。
选择电路106因此允许重放预测器104与基础预测器102被同时实现。在这种系统中,通常可依赖于基础预测器102来产生预测。然而,在某些情况中,重放预测器104能够通过基于指令的倒回执行产生预测来“推翻”基础预测器102。这允许了重放预测器104被实现在现有系统中,而不与现有预测电路冲突。
图5A、图5B和图5C示出了本技术可对其有益的指令流的示例。在图5A中,早前指令502(其是图2中的早前指令的示例)是具有难以预测的条件的“if”指令。这可意味着要解决(执行)早前指令502会花费较长时间(例如,许多个处理器周期)。结果,如果后来指令504(其是图2中的后来指令的示例)可比早前指令502更快被执行,则后来指令可在早前指令被解决之前被解决。
应当注意后来指令504在程序顺序上是在早前指令502之后的,但由于后来指令504不依从于早前指令502的结果,所以其可在不考虑早前指令502的结果的情况下被执行。也就是说,后来指令504应当被认为在早前指令502之后的任何控制路径上。例如,早前指令502可以是分支指令,其中两条控制流路径(采取路径和未采取路径)重会聚以允许后来指令504被执行。或者,早前指令502可以是用于生成数据值的数据值指令——例如算术指令——对于该指令,作出数据值的预测。在此情况下,早前指令不是控制流路径更改指令,因此在早前指令502之后只有一个控制路径可被遵循。
图5B图示了其中实现本技术的指令流的另一示例。在图5B的示例中,早前指令506(图2的早前指令202的示例)和后来指令508(图2的后来指令208的示例)是“for”循环510内的指令。在此示例中,如果后来指令508可被迅速执行,则其在早前指令506的结果已知之前可被执行多次。因此,在此情况中将后来指令508的多个迭代的结果存储在重放预测器104的预测存储电路302中是有用的。这可利用如参考图3所述的预测存储电路302来实现,该预测存储电路302能够将后来指令的多个结果紧凑地存储为第一循环比特向量304。
图5C图示了其中可实现本技术的指令流的另一示例。图3中所示的示例示出了与图5B的“for”循环510类似的“for”循环512,只不过其包括额外的指令514。从而,图5C中描绘的指令流包括早前指令506和两个后来指令508、514。在此示例中,后来指令508、514两者都在早前指令506的结果已知之前被解决,从而将两个后来指令508、514的结果存储在重放预测器104中将是有益的。这是利用重放预测器104的多个预测单元301来实现的——具体地,后来指令508之一的结果被存储在第一预测单元301a的预测存储电路302中,并且另一后来指令514的结果被存储在第二预测单元301b的预测存储电路中。这样,利用重放预测器104来预测多个后来指令508、514的结果。
图6根据本技术示意性图示了图2的早前指令202和后来指令208的执行。在这些示例中,指令被按顺序执行,意味着早前指令202在第一处理周期中被取得。在下一处理周期中,早前指令202被解码,同时后来指令208被取得。然而,在此示例中,早前指令202执行起来要花较长的时间,从而使得早前指令202的执行直到许多周期以后才完成。同时,后来指令208的执行在早前指令208的解码之后的处理周期中基于早前指令202的结果的预测被更迅速地进行。这意味着后来指令208的结果在早前指令202的结果已知之前就已知了。
考虑到后来指令208是基于对早前指令202的结果的预测被取得的,所以如果随后确定早前指令202被误预测了,则后来指令208被从处理电路中冲刷。然而,如参考图2所述,后来指令208将在冲刷之后被重执行。
因此,在后来指令208(或者不正确的控制流路径)的初始执行期间,后来指令的结果被存储在重放预测器104中。在图6的示例中,后来确定早前指令202被误预测了,导致冲刷。这意味着后来指令208需要被重执行,如图所示。然而,由于后来指令208的先前执行的结果被存储在重放预测器中,所以当在重执行期间预测后来指令208的结果时可重使用此结果。这允许了与基础预测电路可生成的相比生成后来指令208的更准确预测,因为其依赖于同一指令的实际执行的结果。这因此通过显著降低后来需要冲刷的可能性而带来了系统的性能和效率的改善。
虽然在图2和图6的示例中,早前指令202和后来指令208是被按顺序执行的,但本技术也适用于相对于预定的程序顺序无序执行指令的情况(例如,后来指令208在早前指令202之前被发出的情况)。
图7是根据本技术的示例的方法的流程图。根据图7的方法,在步骤702中取得早前指令(指令A)。处理电路100随后预测指令A的结果704并且使用该预测来推测性地取得指令B 706。如上所述,在此情形中,无论指令A的结果或者预测结果如何,都取得指令B,因为指令B既在正确的控制流路径上也在不正确的控制流路径上。一旦取得了指令B,就预测指令B的结果708。然后推测性地执行指令B 710。也推测性地执行指令A;可能处理电路被设置用于指令的无序执行,允许指令B在指令A被执行之前被推测性地执行。或者可能就只不过是指令B的执行比指令A的执行更迅速地完成。在任一情形中,指令B的结果在指令A的执行完成之前就已知了,因此指令B的结果在步骤712中被存储在重放预测器中。一旦指令A的执行已完成714,处理电路100就可确定指令A的预测结果是否正确716。如果指令A的预测结果是正确的,则处理可继续718。然而,如果指令A的预测结果最终是不正确的,则处理管线100被冲刷720。结果,指令B需要被重取得722和重预测724。然而,由于指令B的先前执行的结果被存储在了重放预测器中,所以可利用存储的第一执行的结果来生成重执行期间的指令B的预测。一旦预测了指令B,其就可被执行726并且处理可继续718。
如已示出的,重放预测器可用于在早前指令的误预测之后存储在不正确的控制流路径上执行的后来指令的结果。在冲刷之后,通过使预测基于存储的结果,可以在冲刷之后的后来指令的重执行期间更迅速且更准确地预测后来指令的结果。
在本申请中,词语“被配置为”被用于意指装置的元素具有能够执行定义的操作的配置。在此上下文中,“配置”指的是硬件或软件的布置或者互连方式。例如,装置可具有提供定义的操作的专用硬件,或者处理器或其他处理装置可被编程为执行该功能。“被配置为”并不意味着为了提供定义的操作,装置元素需要被以任何方式改变。
虽然本文已参考附图详细描述了本发明的说明性实施例,但要理解本发明不限于这些确切的实施例,并且在不脱离如所附权利要求限定的本发明的范围的情况下,本领域技术人员可在其中实现各种改变和修改。
Claims (20)
1.一种装置,包括:
处理电路,用于通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行所述早前指令和所述后来指令,其中所述早前指令的结果的预测使得第一控制流路径被执行;
存储电路,用于响应于所述后来指令完成而存储所述后来指令的结果;以及
冲刷电路,用于响应于所述早前指令的结果的预测不正确而生成冲刷,
其中当在所述冲刷之后在第二控制流路径中重执行所述后来指令时,所述处理电路被适配为将所述后来指令的结果的预测生成为在所述第一控制流路径的执行期间存储在所述存储电路中的结果。
2.如权利要求1所述的装置,其中:
所述第一控制流路径和所述第二控制流路径各自包括所述后来指令。
3.如权利要求1所述的装置,其中:
所述早前指令在预定的程序顺序中是比所述后来指令更早前的;并且
所述处理电路在所述冲刷完成之前完成所述后来指令的执行。
4.如权利要求3所述的装置,其中:
所述后来指令和所述早前指令相对于所述程序顺序被无序发出。
5.如权利要求1所述的装置,其中:
所述存储电路存储指示出所述后来指令是否在所述第一控制流路径中完成了的有效性指示符;并且
当所述有效性指示符指示出所述后来指令先前已被完成时所述处理电路将所述后来指令的结果的预测生成为在所述第一控制流路径的执行期间存储在所述存储电路中的结果。
6.如权利要求1所述的装置,其中:
所述处理电路执行所述早前指令的多个迭代和所述后来指令的多个迭代;
所述存储电路存储所述后来指令的多个结果,每个结果对应于所述后来指令的多个迭代之一;并且
对于所述后来指令的每个迭代,当在所述冲刷之后在所述第二控制流路径中重执行所述后来指令的该迭代时,所述处理电路被适配为将所述后来指令的结果的该迭代的预测生成为在所述第一控制流路径的执行期间对于该迭代在所述存储电路中存储的结果。
7.如权利要求6所述的装置,包括:
指针存储电路,用于存储指示出所述后来指令的多个结果中的哪个对应于所述后来指令的当前迭代的指针。
8.如权利要求7所述的装置,其中:
所述指针在所述后来指令的每次预测之后被推进;并且
在所述冲刷之后,所述指针被返回到当所述早前指令被预测时所述指针所占据的状态。
9.如权利要求1所述的装置,其中:
所述处理电路通过生成多个结果的预测来推测性地执行多个后来指令,每个预测对应于所述多个后来指令之一;并且
所述存储电路存储所述多个结果,其中所述多个结果的每一者是响应于所述多个后来指令中的相应一者完成而被存储的。
10.如权利要求9所述的装置,其中:
所述存储电路将所述多个后来指令的结果存储为循环比特向量。
11.如权利要求10所述的装置,其中:
所述存储电路将多个有效性指示符存储为另一循环比特向量,其中所述多个有效性指示符的每一者指示出所述多个后来指令中的相应一者是否在先前控制流路径中完成了。
12.如权利要求1所述的装置,包括:
另一预测电路,用于生成所述后来指令的结果的另一预测;以及
预测选择电路,用于选择所述后来指令的结果的预测或者所述后来指令的结果的另一预测作为选定预测。
13.如权利要求12所述的装置,其中:
所述存储电路存储指示出所述后来指令先前是否已完成的有效性指示符;
当所述有效性指示符指示出所述后来指令先前已被完成时所述处理电路将所述后来指令的结果的预测生成为在所述第一控制流路径的执行期间存储在所述存储电路中的结果;并且
除非所述有效性指示符指示出所述后来指令先前已完成,否则所述预测选择电路选择所述后来指令的结果的另一预测作为所述选定预测。
14.如权利要求1所述的装置,其中:
所述早前指令是控制流路径更改指令;并且
所述早前指令的结果使得执行沿着所述第一控制流路径或者所述第二控制流路径进行。
15.如权利要求14所述的装置,其中:
所述早前指令是分支指令;并且
所述早前指令的结果确定分支是否被采取。
16.如权利要求1所述的装置,其中:
所述后来指令是控制流路径更改指令;并且
所述后来指令的结果使得执行沿着第三控制流路径或者第四控制流路径进行。
17.如权利要求1所述的装置,其中:
所述后来指令确定数据值;并且
所述后来指令的结果的预测将预测所述数据值的值。
18.如权利要求1所述的装置,其中:
所述早前指令确定数据值;
所述早前指令的结果的预测将预测所述数据值的值;并且
所述第一控制流路径和所述第二控制流路径是相同的。
19.一种方法,包括:
通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行所述早前指令和所述后来指令,其中所述早前指令的结果的预测使得第一控制流路径被执行;
响应于所述后来指令完成而存储所述后来指令的结果;
响应于所述早前指令的结果的预测不正确而生成冲刷;并且
当在所述冲刷之后在第二控制流路径中重执行所述后来指令时,将所述后来指令的结果的预测生成为在所述第一控制流路径的执行期间存储的结果。
20.一种装置,包括:
用于通过生成早前指令的结果的预测和后来指令的结果的预测来推测性地执行所述早前指令和所述后来指令的装置,其中所述早前指令的结果的预测使得第一控制流路径被执行;
用于响应于所述后来指令完成而存储所述后来指令的结果的装置;
用于响应于所述早前指令的结果的预测不正确而生成冲刷的装置;以及
用于当在所述冲刷之后在第二控制流路径中重执行所述后来指令时将所述后来指令的结果的预测生成为在所述第一控制流路径的执行期间存储的结果的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/752,995 US10990403B1 (en) | 2020-01-27 | 2020-01-27 | Predicting an outcome of an instruction following a flush |
US16/752,995 | 2020-01-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113176895A true CN113176895A (zh) | 2021-07-27 |
Family
ID=75587583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110078453.6A Pending CN113176895A (zh) | 2020-01-27 | 2021-01-19 | 预测冲刷之后指令的结果 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10990403B1 (zh) |
CN (1) | CN113176895A (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5838943A (en) * | 1996-03-26 | 1998-11-17 | Advanced Micro Devices, Inc. | Apparatus for speculatively storing and restoring data to a cache memory |
US6694425B1 (en) * | 2000-05-04 | 2004-02-17 | International Business Machines Corporation | Selective flush of shared and other pipeline stages in a multithread processor |
US20040255104A1 (en) * | 2003-06-12 | 2004-12-16 | Intel Corporation | Method and apparatus for recycling candidate branch outcomes after a wrong-path execution in a superscalar processor |
US7363477B2 (en) * | 2003-12-03 | 2008-04-22 | Intel Corporation | Method and apparatus to reduce misprediction penalty by exploiting exact convergence |
US20160350116A1 (en) * | 2015-05-29 | 2016-12-01 | Qualcomm Incorporated | Mitigating wrong-path effects in branch prediction |
US10846097B2 (en) * | 2018-12-20 | 2020-11-24 | Samsung Electronics Co., Ltd. | Mispredict recovery apparatus and method for branch and fetch pipelines |
-
2020
- 2020-01-27 US US16/752,995 patent/US10990403B1/en active Active
-
2021
- 2021-01-19 CN CN202110078453.6A patent/CN113176895A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US10990403B1 (en) | 2021-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8037288B2 (en) | Hybrid branch predictor having negative ovedrride signals | |
US6353883B1 (en) | Method and apparatus for performing predicate prediction | |
US6189091B1 (en) | Apparatus and method for speculatively updating global history and restoring same on branch misprediction detection | |
JP3565504B2 (ja) | プロセッサにおける分岐予測方法及びプロセッサ | |
JP3093684B2 (ja) | 命令ループを投機的に実行するプロセッサ及び方法 | |
US7594096B2 (en) | Load lookahead prefetch for microprocessors | |
US6550004B1 (en) | Hybrid branch predictor with improved selector table update mechanism | |
US9201654B2 (en) | Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions | |
US20060092712A1 (en) | Branch target buffer and method of use | |
JPH10133873A (ja) | 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を投機的に実行するためのプロセッサおよび方法 | |
JP2012150824A (ja) | 電力的に効率的な命令プリフェッチ機構 | |
US20140052972A1 (en) | Meta predictor restoration upon detecting misprediction | |
EP2864868A1 (en) | Methods and apparatus to extend software branch target hints | |
US5898864A (en) | Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors | |
US11803388B2 (en) | Apparatus and method for predicting source operand values and optimized processing of instructions | |
CN107209662B (zh) | 指令的相依性预测 | |
US7010676B2 (en) | Last iteration loop branch prediction upon counter threshold and resolution upon counter one | |
KR20010077997A (ko) | 단일 사이클 파이프라인 기능 정지를 발생하기 위한파이프라인 프로세서 시스템 및 방법 | |
US6421774B1 (en) | Static branch predictor using opcode of instruction preceding conditional branch | |
KR100305487B1 (ko) | 특정유형의인스트럭션을동시에처리할수있는방법및데이터프로세싱시스템 | |
US10235173B2 (en) | Program code optimization for reducing branch mispredictions | |
US6871275B1 (en) | Microprocessor having a branch predictor using speculative branch registers | |
US10990403B1 (en) | Predicting an outcome of an instruction following a flush | |
US20050273579A1 (en) | Method and apparatus for maintaining status coherency between queue-separated functional units | |
EP1296228A2 (en) | Instruction Issue and retirement in processor having mismatched pipeline depths |
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 |