校正分支误预测的系统和方法

文档序号:6567030阅读:171来源:国知局
专利名称:校正分支误预测的系统和方法
技术领域
本发明大体上涉及处理器领域,且明确地说,涉及一种响应于分支误预测而从处理 器执行管线中冲洗未提交的指令的方法。
背景技术
微处理器在广泛的应用中执行计算任务。几乎始终需要改进的处理器性能,以允许 通过软件变化而实现较快的操作和/或增加的功能性。在许多嵌入式应用(例如,便携式 电子装置)中,节约功率在处理器的设计和实施中也是重要的考虑事项。大多数现代处理器使用管线结构,其中连续指令(每一者具有多个执行步骤)在执 行中重叠。为了实现最大性能,指令应不断地流动穿过管线。然而,指令常会因为各种 原因而在管线中变得停滞,所述原因例如为指令之间的数据依赖性、与存储器存取相关 联的延迟、不能将充分的管线资源分配给指令,等等。最小化管线停滞并有效地解决所 述停滞在实现改进的处理器性能方面是重要的因素。现实程序包含条件分支指令,其实际的分支行为通常直到所述指令在管线深处被评 估时才被了解。通常现代处理器采用各种形式的分支预测,借此,在管线中的早期预测 条件分支指令的分支行为,且处理器基于分支预测以推测方式分配管线资源,且/或取得 并以推测方式执行指令。当确定实际的分支行为时,如果分支被误预测,那么必须从管 线中冲洗以推测方式取得的指令,且从正确的分支目标地址取得新的指令。被误预测的 分支不利地影响处理器的性能和功率消耗。通常,在处置误预测的分支指令的过程中,允许使比分支指令早的所有指令(即, 在分支指令之前进入管线的指令)完成执行,随后才冲洗以推测方式取得的指令。在因 较长等待时间的操作而使得较早指令中的一者或一者以上在管线中停滞的情况下,等到 解决了依赖性之后才冲洗管线会加剧被误预测的分支性能的损失。 发明内容本发明涉及一种处置管线处理器中的分支误预测的方法。检测到分支误预测,且响 应于检测到所述误预测,从管线中冲洗比分支指令早的至少一个指令。本发明还涉及一种处理器。所述处理器包含指令执行管线,和预测条件分支指令在
管线中的评估的分支预测器。所述处理器还包含指令次序管理器,其跟踪管线中的指令 的次序以及所述指令之间的依赖性。所述处理器另外包含管线控制器,其响应于检测到 分支指令被误预测而从管线中冲洗比分支指令早的至少一个指令。另外,本发明涉及一种校正管线处理器中的分支误预测的方法。检测到分支指令误 预测。确定所述分支指令是否为管线中的最后未提交的指令。如果所述分支指令是管线 中最后未提交的指令,那么提交所述分支指令,且从管线中冲洗所有未提交的指令。如 果所述分支指令不是管线中最后未提交的指令,那么确定比所述分支指令早的指令是否 因较长等待时间的操作而在管线中停滞。如果比所述分支指令早的指令是因较长等待时 间的操作而在管线中停滞,那么从管线中冲洗所述分支指令和所有其它未提交的指令。


图1是处理器的功能方框图。图2是指令高速缓存和两个管线的多个部分的功能方框图。 图3是处置分支误预测的方法的流程图。
具体实施方式
图1描绘处理器10的功能方框图。处理器10根据控制逻辑14在指令执行管线12 中执行指令。管线12可为超标量设计,其具有例如12a和12b的多个并行管线。管线控 制逻辑14可包含分支预测器13和指令次序管理器15。管线12a、 12b包含组织成管级的 各种寄存器或锁存器,以及一个或一个以上算术逻辑单元(ALU) 18。通用寄存器(GPR) 文件20提供包括存储器层级的顶部的寄存器。管线12a、 12b从指令高速缓存22取得指 令,其中存储器寻址和许可由指令侧转换后备缓冲器(ITLB) 24来管理。从数据高速缓 存26存取数据,其中存储器寻址和许可由主转换后备缓冲器(TLB) 28来管理。在各种 实施例中,ITLB可包括TLB的部分的拷贝。或者,可集成ITLB和TLB。类似地,在处 理器10的各种实施例中,可集成I-cache 22和D-cache 26或使其合并。在I-cache 22和/ 或D-cache 26中未命中会导致在存储器接口 30的控制下对主(芯片外)存储器32进行 存取。处理器10可包含输入/输出(I/O)接口 34,其控制对各种外围装置36的存取。 所属领域的技术人员将认识到,对处理器10的许多更改都是可以的。举例来说,处理器 IO可包含二级(L2)高速缓存以用于I和D高速缓存中的一者或两者。此外,特定实施 例中可省略处理器10中所描绘的功能块中的一者或一者以上。管线法是众所周知的处理器实施技术,借此,多个指令在执行中同时重叠。在多个 执行步骤(例如,取得、解码、执行、存储器存取和写回)中执行典型结构中的每一指 令。处理器管线12由多个"管级"组成,每一管级包括逻辑和存储元件16,其完成指 令的执行步骤或执行步骤的一部分。管级被连接在一起以形成管线12。指令进入管线12, 且通过各级被连续处理。新的指令在先前的指令完成之前进入管线12,因此,可在任何 给定的时间在管线12中处理多个指令。在连续指令流中利用指令间的并行性的这种能力 很大程度上有助于改进的处理器性能。在理想条件下且在填充管线12的短暂初始过程之 后在一个循环中完成一个管级的处理器10中,可在每个循环中完成一个指令的执行。由于各种因素的缘故,此种理想条件在实践中从未实现过,所述因素包含指令间的 数据依赖性(数据竞争)、例如分支的控制依赖性(控制竞争)、处理器资源分配冲突(结 构性竞争)、中断、高速缓存未命中、页错误和类似物。当指令对两个操作数执行算术或 逻辑运算时,将遇到典型的数据竞争,其中所述操作数中的一者或一者以上是未完成执 行且因此未产生所需的操作数的前面指令的结果。较早的指令可以是另一算术或逻辑运 算,或其可为存储器存取(例如在高速缓存22、 26中未命中的存储器存取),从而迫使 存储器接口 30执行芯片外存储器存取操作。数据竞争迫使管线12停滞。管线处理器10中遇到的典型的控制竞争是经误预测的分支指令。可"采用"条件分 支指令,其中指令将控制流引导到不同的编程点,或"不采用"条件分支指令,其中指 令执行循序进行。在执行管级期间在管线12中的较深处发生对分支条件的评估。直到评 估了分支指令之后,处理器IO才知道接下来要取得和执行哪一指令(即,下一连续指令 或分支目标地址处的指令)。 一直等到评估分支条件期间的延迟导致管线12中出现停滞。 因此,许多处理器(例如)基于条件分支指令的先前执行而预测将如何评估分支条件。 处理器IO取得在预测地址处开始的进入管线12中的指令,从而以预测方式执行指令。 当预测正确时,会避免管线停滞。有些分支指令将评估出与曾预测的分支条件相反的分支条件。这在本文被称作"分 支误预测"或"经误预测的分支"。当检测到分支误预测时,必须从管线12中冲洗比所 述分支指令新的所有指令(即,基于分支预测而取得的所有指令)。在单个管线中,对哪 些指令比经误预测的分支新的确定是直接的一一所有位于所述分支"后方"的管级均必 须被冲洗。图2描绘超标量管线结构,其具有两个并行的执行管线12a和12b。在图2中描绘的 情形中,管线12a中的指令A由于对指令X的依赖性(例如,操作数产生、存储器存取, 或某一其它长等待时间的操作)而被停滞。指令A的数据竞争也使指令B被停滞。因此, 已从指令高速缓存22中取得指令C、 D和E,并将其加载到管线12b。在超标量处理器
10中,必须用某一机制来跟踪指令执行的次序,以及跟踪指令之间的依赖性。大多数超标量处理器10包含次序管理器15作为管线控制逻辑14的一部分。次序管 理器15跟踪通过管线执行指令的次序——即,哪些指令比给定指令早或新。次序管理器 15另外跟踪指令依赖性,且有助于异常处置。每当管级不能完成其对指令步骤的执行,即出现异常或中断。举例来说,如果TLB 28 查找表指示存储器页是只读的,那么将数据写入所述存储器的存储指令会导致异常。其 它类型的异常在所属领域中是众所周知的。 一旦遇到异常,处理器IO必须执行管线12 (或超标量结构中的管线12a和12b)中所有先前或较早的指令;从管线12a和12b中冲 洗导致异常的指令和所有较早的指令;并接着取得并执行中断处置代码。次序管理器15 通过跟踪哪些指令"被确认"和哪些指令"被提交"来辅助这个过程。当确定没有管线竞争将妨碍某一指令的执行时(即,指令将不会停滞),确认所述指 令。举例来说,当已知已由先前的指令产生所述两个操作数、从存储器中取得所述两个 操作数或所述两个操作数以其它方式可用时,可确认执行算术或逻辑运算的指令。当确认某一指令和所有较早的指令时,提交所述指令。已知所提交的指令能够完成 执行,因为没有管线竞争妨碍它(确认指令本身),或妨碍它之前的任何指令(确认所有 较早的指令)。参看图2,由于指令A对指令X的结果的依赖性的缘故,不确认指令A。 在管线12a中的此较早的级处不太可能确认指令B。可确认管线12b中的指令C,这意 味着没有竞争阻止指令C完成执行。然而,直到确认比指令C早的所有指令(即,指令 A和B)为止才能提交指令C。异常处置期间的常规规则是,当导致异常的指令是"最后未提交的指令"时,冲洗 管线12a和12b。举例来说,如果指令D产生异常,那么必须解决指令A对指令X的依 赖性,从而允许确认A。 一旦A确认,如果在A之前不存在未确认的指令(假设指令X 完成),那么其也将被提交。如果在指令B行进穿过管线12A时其也被确认并提交,那 么接着将提交指令C,因为指令A、 B和C都得到确认。于是,D便为最后未提交的指 令,且将连同所有较新的指令(例如,E)被从管线12a和12b中冲洗。接着,在被提交 的指令A、 B和C行进穿过管线并完成执行时,取得异常处置指令并将其馈送到管线12a 和12b中。通过迫使导致异常的指令成为管线12a和12b中最后未提交的指令,而确保 程序执行中的彻底断开。也就是说, 一旦中断处置指令解决了错误并恢复了处理器10的 状态,程序执行可从指令D开始重新开始,且将产生正确的结果。类似的程序可能也可适用于处置超标量处理器10中的被误预测的分支。举例来说,假设图2中的指令C是已对其分支条件进行评估并发现其曾被误预测的条件分支指令。 指令D和E是基于错误的分支预测取得的,且必须将其从管线12b中冲洗,并用从正确 的分支目标地址取得的指令将其取代。在异常处置规则下,被误预测的分支C将等待, 直到其为最后未提交的指令为止一一即,直到解决了 A对X的依赖性并确认和提交A和 B为止——才冲洗D和E。然而,需要一定时间来解决A对X的依赖性,从而延迟了时 间,直到取得并执行在被误预测的分支C之后的下一合适指令为止。另外,如果A和B 连同D和E—起被冲洗且被重新取得,那么到A再次行进穿过管线12a时,依赖性可能 己经得到解决,从而允许立即确认A。根据本发明的一个实施例,且参考图3进行描述,当检测到经误预测的分支时(方 框40),如果经误预测的分支不是最早的未提交的指令(方框42),那么检查较早的未提 交指令是否停滞(方框44)。如果检测到被停滞的指令(例如,由于管线竞争、存储器 存取或其它长等待时间的操作的缘故),那么管线控制器14立即从管线12a、 12b中冲洗 所有未提交的指令(方框46)。这包含经误预测的分支、比经误预测的分支早的所有未 提交的指令,和比所述分支新的所有指令(即,基于分支误预测以推测方式取得的指令)。 取消分支预测(方框48),且接着重新取得被冲洗的未提交指令并依次执行所述指令(方 框50)。可能到重新取得并重新执行先前被停滞的指令之时己经解决了导致停滞的长等 待时间操作。然而,即使不是这样,处理器仍从正确的分支目标取得指令,且无需等到 停滞被解决后才可进行所述操作,因此改进了处理器性能。如果经误预测的分支指令是最早未提交的指令(方框42),那么处理器提交经误预 测的分支指令(以便不将其冲洗),且从管线12a、 12b中冲洗所有未提交的指令(方框 52)。此冲洗比经误预测的分支指令新的所有指令一一即,经误预测的分支路径上的指令。 接着校正所述分支预测(方框48),使得分支预测机制准确地反映分支评估,且在合适 的分支目标地址处继续进行指令的取得和执行(方框50)。如图3所指示,如果经误预测的分支(方框40)不是最早未提交的指令(方框42), 且没有较早的未提交指令由于长等待时间操作被停滞,那么处理器可能仅等到提交了所 有较早的指令(方框42),然后便提交经误预测的分支并冲洗所有较新的指令(方框50)。 如上所述,此过程可利用已存在的用于处置异常的控制逻辑(区别在于,是提交分支而 不是冲洗分支)。或者,处理器可仅冲洗所有未提交的指令(方框46),其中包含经误预测的分支, 且如同未提交的指令被停滞的情况一样继续进行(方框48、 50)。后一种选项(图3中
未展示,但其中"是"路径将是退出方框44的唯一控制流)可优化性能,但以控制的复 杂性为代价。在指令被停滞的情况下(方框44),中止新指令的提交,且提交新指令的 任务与冲洗未提交指令的任务的同步被简化。所属领域的技术人员将容易认识到,任一 选项皆是可能的,且将产生正确的结果。常规的处理器设计实践是执行所有比导致异常的指令、经误预测的分支或促使管线 冲洗的其它指令早的所有指令。根据本发明的示范性实施例,从管线中冲洗比经误预测 的分支指令早的一个或一个以上指令并将其重新取得和执行。这可通过迅速地终止从不 正确的(经误预测的)地址取得指令且建设性地利用管线竞争的等待时间来校正误预测 而改进处理器性能和功率消耗。在解决管线竞争的时间等于或大于冲洗并重新取得被停 滞的指令所需的时间的情况下,从误预测中恢复将不会引起任何性能损失。尽管本文已关于本发明的特定特征、方面和实施例描述了本发明,但将容易了解, 在本发明的广泛范围内可能有许多变化、修改和其它实施例,且因此所有变化、修改和 实施例都被视为属于本发明的范围内。因此,当前实施例在所有方面都应理解为说明性 的而不是限制性的,且期望属于所附权利要求书的含义和等效物范围内的所有改变都包 含在其中。
权利要求
1.一种处置管线处理器中的分支误预测的方法,其包括检测到分支指令被误预测;以及响应于检测到所述误预测,从管线中冲洗早于所述分支指令的至少一个指令。
2. 根据权利要求1所述的方法,其中所述早于所述分支指令的至少一个指令未被提交。
3. 根据权利要求2所述的方法,其中所述至少一个未提交的指令停滞在管线中。
4. 根据权利要求l所述的方法,其进一步包括校正所述分支预测;以及 从所述管线中冲洗所述分支指令。
5. 根据权利要求4所述的方法,其进一步包括以编程次序取得所述分支指令和早于所 述分支指令的所有已被冲洗的指令。
6. 根据权利要求1所述的方法,其中从所述管线中冲洗早于所述分支指令的至少一个 指令包括从所述管线中冲洗所有未提交的指令。
7. —种处理器,其包括至少一个指令执行管线;分支预测器,其预测条件分支指令在所述管线中的评估; 指令次序管理器,其跟踪指令在所述管线中的次序;以及管线控制器,其响应于检测到所述分支指令被误预测,从所述管线中冲洗比早于 分支指令的至少一个指令。
8. 根据权利要求7所述的处理器,其中所述分支预测器响应于检测到所述分支指令被 误预测而取消分支预测。
9. 根据权利要求7所述的处理器,其中从所述管线中冲洗早于分支指令的至少一个指 令包括从所述管线中冲洗所有未提交的指令。
10. 根据权利要求7所述的处理器,其进一步包括响应于检测到所述分支指令被误预 领IJ,从所述管线中冲洗所述分支指令。
11. 根据权利要求7所述的处理器,其进一步包括以编程次序取得所述分支指令和早 于所述分支指令的所有被冲洗的指令。
12. —种校正管线处理器中的分支误预测的方法,其包括-.检测到分支指令被误预测; 检测早于所述分支指令的第一指令对长等待时间操作的依赖性;以及 从所述管线中冲洗所有未提交的指令。
13. 根据权利要求12所述的方法,其进一步包括校正所述分支误预测。
14. 根据权利要求13所述的方法,其进一步包括以编程次序取得所述分支指令和早 于所述分支指令的所有被冲洗的指令。
15. —种校正管线处理器中的分支误预测的方法,其包括检测到分支指令被误预测;确定所述分支指令是否为管线中最后的未提交的指令;如果所述分支指令是所述管线中最后的未提交的指令,那么提交所述分支指令,且从所述管线中冲洗所有未提交的指令;如果所述分支指令不是所述管线中最后的未提交的指令,那么确定早于所述分支指令的指令是否由于长等待时间操作而停滞在管线中;如果早于所述分支指令的指令由于长等待时间操作而停滞在管线中,那么从所述管线中冲洗所述分支指令和所有其它未提交的指令。
16. 根据权利要求15所述的方法,其进一步包括校正所述分支误预测。
17. 根据权利要求15所述的方法,其进一步包括以编程次序取得所述分支指令和早 于所述分支指令的所有已被冲洗的指令。
全文摘要
当发现管线处理器中的分支误预测时,如果误预测的分支指令不是管线中最后未提交的指令,那么将检查较早的未提交指令是否对长等待时间操作具有依赖性。如果发现有此类指令,那么将从所述管线中冲洗所有未提交的指令,而无需等待解决依赖性。校正分支预测,且重新取得并执行所述分支指令和比所述分支指令早的所有被冲洗的指令。
文档编号G06F9/38GK101156136SQ200680011578
公开日2008年4月2日 申请日期2006年2月17日 优先权日2005年2月18日
发明者托马斯·安德鲁·萨托里乌斯, 杰弗里·托德·布里奇斯, 詹姆斯·诺里斯·迪芬德尔费尔, 迈克尔·斯科特·麦基尔文 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1