用于被错误预测分支的分段管线冲洗的制作方法

文档序号:6476315阅读:185来源:国知局
专利名称:用于被错误预测分支的分段管线冲洗的制作方法
技术领域
本发明大体上涉及管线式处理器中的分支预测,且特定来说,涉及在不同时间独立地 冲洗同一管线的两个区段以使性能最大化且有效校正被错误预测分支指令的系统和方法。
背景技术
大多数现代处理器采用管线式架构,其中各具有多个执行步骤的循序指令在执行中重 叠。为获得最大性能,指令应连续流动通过管线。然而,指令常出于多种原因而在管线中 中止,所述原因例如为指令之间的数据相依性、与存储器存取相关联的延迟、无法向指令 分配充分的管线资源等。使管线中止最小化并将其有效解决是实现改善的处理器性能中的 重要因素。大多数现实程序包含条件分支指令,其实际分支行为并非已知,直到在管线深处评估 所述指令为止。大多数现代处理器采用各种形式的分支预测,借此在管线中较早地预测条 件分支指令的分支行为,且处理器基于分支预测而获取且推测性地执行指令,推测性地向 所述指令分配管线资源。当确定实际分支行为时,如果分支被错误预测,那么必须从管线 冲洗推测性地获取的指令,且必须将推测性地分配的资源解除分配并返回到其在分支预测 之前的状态,且必须从正确的分支目标地址获取新的指令。一方面,理想上应在检测到错误预测之后立即冲洗管线,使得可获取正确的指令并发 出到管线中,从而使由分支错误预测引起的延迟最小化。另一方面,从错误的分支路径获 取的指令可能在推测性执行的各个阶段中,且可能己被推测性地分配有各种处理器资源。 立即"解开(unwinding)"这些分配以将资源恢复到其预分支预测状态是困难的,且可能 招致许多处理器循环和/或需要推测性地分配的资源的许多重复复制。由立即冲洗管线招 致的代价在支持无序指令执行的处理器(例如,超标量处理器)中由于跟踪相对指令年龄 的额外挑战而进一步加剧。此指令年龄跟踪是必要的,用以确保仅冲洗在被错误预测分支 指令之后(以编程次序)获取的那些指令,且执行在分支指令之前(以编程次序)的所有 指令,即使其在管线中可能在分支指令之后。发明内容5在确定分支错误预测之后,处理器可通过继续正常执行(理想上)仅若干循环且利用 在异常情况下处置管线冲洗的现存硬件,来减轻从其管线冲洗错误地获取且推测性地执行 的指令的任务。此过程可显著降低响应于分支错误预测而冲洗管线的成本和复杂性。然而, 所招致的额外延迟妨碍了立即冲洗管线以从正确的分支目标地址快速获取指令的目标。根据一个或一个以上实施例,在检测到分支指令经错误预测后立即冲洗管线的在脱离 编程次序的指令之前的上部部分,从而允许从正确的分支目标地址立即获取指令。管线的 每一下部部分可继续执行,直到所述被错误预测分支指令确认为止,此时从下部管线冲洗 所有未提交的指令。可通过添加被错误预测分支识别符来利用现存的异常管线冲洗机构, 从而降低冲洗下部管线的复杂性和硬件成本。一个实施例涉及一种在允许无序执行的管线式处理器中执行指令的方法。在检测到分 支指令错误预测之后,冲洗上部管线,即管线的在指令可脱离编程次序的点之前的部分。 在提交所述被错误预测分支指令以供执行之后,从下部管线,即超过其指令可脱离编程次 序的管线部分冲洗所有未提交的指令。另一实施例涉及一种处理器。所述处理器包含控制逻辑;以及分段指令执行管线, 其包括在指令可为无序的点之前的上部管线以及超过指令可为无序的所述点的一个或一 个以上下部管线。所述控制逻辑操作以在检测到被错误预测分支之后从所述上部管线冲洗 所有指令,且进一步操作以在提交所述被错误预测分支指令以供执行之后从所述下部管线 冲洗所有未提交的指令。


图1是具有用于分支错误预测的分段管线冲洗的超标量管线式处理器的一个实施例 的功能框图。图2是图1的处理器中的指令执行方法的流程图。
具体实施方式
图1描绘具有用于分支错误预测的分段管线冲洗的处理器10的功能框图。处理器10 根据控制逻辑11在指令执行管线12中执行指令,控制逻辑11包含指令排序机构(IOM) 13。如本文更详细解释,将管线12逻辑上划分为上部14部分和下部部分16。管线12可 为超标量设计,其具有多个平行下部管线16a、 16b。管线14、 16包含以管级组织的各种 寄存器或锁存器18,以及例如算术逻辑单元(ALU)(未图示)等逻辑和计算电路。通用 寄存器(GPR)堆20提供构成存储器层级顶部的寄存器。如本文论述,GPR20可包含推测性重命名表(SRT) 22和所提交重命名表(CTR) 24,用以向指令推测性地分配GPR 资源。上部管线14从指令高速缓冲存储器(1-高速缓冲存储器或1$) 26获取指令,其中由 指令侧翻译旁视缓冲器(ITLB) 28管理存储器寻址和许可。从数据高速缓冲存储器(D-高速缓冲存储器或DS) 30存取数据,其中由主翻译旁视缓冲器(TLB) 32管理存储器寻 址和许可。在各种实施例中,ITLB28可包括TLB 32的部分的副本。或者,可整合ITLB 28与TLB 32。类似地,在处理器10的各种实施例中,可统一 I-高速缓冲存储器26与D-高速缓冲存储器30。I-高速缓冲存储器28和/或D-高速缓冲存储器30中的未命中致使在存储器接口 36(未 图示的其它高速缓冲存储器可能介于处理器IO与主存储器34之间)的控制下对主(芯片 外)存储器34的存取。处理器10可包含输入/输出(I/O)接口38,其控制对各种外围装 置40、 42的存取。所属领域的技术人员将认识到,处理器10的许多变型是可能的。举例 来说,处理器10可包含二级(L2)高速缓冲存储器以用于I和D高速缓冲存储器26、 30 中的一者或两者。另外,可从特定实施例中省略处理器10中所描绘的功能块中的一者或 一者以上。将管线12逻辑划分为上部管线14以及一个或一个以上下部管线16是由可从上部管 线14立即冲洗哪些指令的确定性来确定的,而与指令次序无关。具体来说,将上部管线 14界定为管线12的在指令可能脱离编程次序的点之前的部分。类似地,将下部管线16 界定为管线12的超过上部管线14或在上部管线14之后的部分。在支持无序执行的处理 器中,可将下部管线16中的指令以其编程次序以外的次序分派给管级。在大多数实施例 中,上部管线14将包括所有获取和解码级,且下部管线16包含指令发布级(在超标量管 线的情况下)和一个或一个以上执行管线。管线12的此逻辑划分允许在检测到分支错误预测之后立即冲洗上部管线14,从而使 从正确的分支目标地址获取指令所需的时间最小化。其另外允许下部管线14继续执行, 因此利用现存的异常冲洗机构来从下部管线14有效地冲洗在被错误预测分支之后推测性 地获取的所有指令。上部管线14冲洗是直接的。因为上部管线14被界定为在指令可能脱离编程次序的点 之前,且被错误预测分支的确定在下部管线16中的执行级中发生,所以已知在错误预测 确定时在上部管线40中的所有指令比被错误预测分支指令新。也就是说,其全部是依赖 于分支预测而获取的,且可全部例如在被错误预测分支的检测之后的循环中被安全地冲 洗。这允许处理器10尽可能早的开始从正确的分支目标地址获取指令,从而使管线中止持续时间最小化。
冲洗下部管线16较成问题。因为指令可能不是以编程次序执行,所以无法假定管线 中在被错误预测分支之后的所有指令均比被错误预测分支指令新且冲洗是安全的。举例来 说,考虑以下指令LD、 ADD、 BR,其中LD提供用于ADD的操作数,但BR与任一者 无关。LD操作需要存储器存取,其尤其在D-高速缓冲存储器30未命中的情况下可使管 线16中止。当然,ADD必须等待LD完成。然而,可将独立的BR指令分派到下部管线 16中以用于在LD和ADD之前执行。如果BR条件评估检测到其被错误预测,那么处理 器无法简单地冲洗在BR指令之后的下部管线16。其将冲洗LD和ADD,此两者以编程 次序在BR之前,且必须被执行。
大多数超标量处理器10包含作为管线控制逻辑11的部分的指令次序管理器(IOM)。 IOM通过将以真实编程次序的指令的表示维持在例如环形缓冲器、FIFO等中,来跟踪通 过管线的指令执行的次序,即,哪些指令比给定指令旧或新。通过与指令表示相关联的属 性或旗标,IOM另外跟踪指令相依性,且有助于异常处置。根据一个或一个以上实施例, 处理器10中的IOM 13包含促进在发现被错误预测分支指令之后有效地冲洗下部管线的 额外电路和逻辑。对IOM 13在异常处置中的作用的简要回顾将阐明根据本文所揭示和主 张的实施例的下部管线16的被错误预测分支冲洗。
每当管级不能完成其指令步骤的执行时,便发生异常。举例来说,将数据写入存储器 的存储指令可能在TLB 32查找指示存储器页是只读的情况下引起异常。其它类型的异常 是此项技术中众所周知的。 一旦遇到异常,处理器IO必须执行管线12中的所有先前或较 旧的指令,从管线12冲洗引起异常的指令和所有较新的指令,且随后获取且执行中断处 置码。IOM 13通过跟踪哪些指令"被确认"且哪些指令"被提交"来辅助此过程。
当确定没有管线竞争将阻碍指令执行,即指令将不会中止时,指令被确认。举例来说, 在已知两个操作数已从先前指令产生、从存储器获取或以其它方式可用时可确认执行算术 或逻辑运算的指令。在所述指令和所有较旧指令被确认时提交指令。已知被提交的指令能 够完成执行,因为没有管线竞争阻碍其(指令本身被确认)或其之前的任何指令(所有较 旧指令被确认)。所有被提交的指令必须执行。
异常处置期间的常规规则是当引起异常的指令是"最后一个未提交的指令"时从管线 12冲洗所有未提交的指令。也就是说,己提交在引起异常的指令之前的所有指令以供执 行,但未提交所述引起异常的指令和比其新的所有指令。未提交的指令(包含所述引起异 常的指令)被冲洗,且被提交的指令继续执行。从中断处置程序地址获取新的指令。
不同于引起异常的指令,必须执行且不冲洗被错误预测分支指令。仅分支预测是错误的,分支指令本身必须执行且将程序流引导到适当的分支目标地址。因此,当被错误预测 分支指令是"最新提交的指令"时,从所有下部管线16a、 16b冲洗所有未提交的指令。 也就是说,已提交被错误预测分支指令和其之前的所有指令以供执行,但未提交在所述分 支之后的所有指令(从错误地预测的分支目标地址获取的指令)。冲洗未提交的指令被, 且被提交的指令(包含被错误预测分支指令)继续执行。
在一个或一个以上实施例中,IOM 13中的每一条目包含被错误预测分支(MPB)旗 标或位字段,其在所述IOM13条目被创建时经初始化为未断言状态。分支指令通常将在 其分支评估之后立即确认,因为其没有其它数据相依性。确认管级跟随其中执行分支指令 的每一管线16a、 16b中的分支条件评估级,且在IOM 13中设置确认旗标。确认管级另外 将分支评估与其预测值进行比较,且还在分支被错误预测的情况下在IOM 13中设置MPB 旗标。 一旦在提交指令以供执行时遇到MPB旗标,IOM 13和相关联的控制逻辑11便可 根据上述"最新提交的指令"规则实施下部管线16冲洗。
IOM 13中从被错误预测分支指令的错误预测检测到确认和提交的延迟通常应仅占用 数个循环。同时,上部管线14的立即冲洗意味着已经开始从正确的分支目标地址进行指 令获取。在某些情况下,例如上述LD、 ADD、 BR实例,在检测到分支错误预测与分支 指令的确认之间可能存在显著延迟,其使得能够进行下部管线16冲洗。作为对冲洗下部 管线16占用比(例如)上部管线14的深度多的循环的可能性的预防,可在上部管线14 与下部管线16之间的边界处或所述边界之前设置管线暂停(pipeline hold )。所述暂停(当 下部管线16的冲洗完成时将其移除)防止错误地冲洗从正确的分支目标地址获取的任何 指令。条件管线暂停是此项技术中众所周知的,且可由所属领域的技术人员容易地实施而 无需本文中的进一步阐明。
冲洗下部管线16过程中的另一复杂情况是在冲洗之后恢复推测性地分配的处理器资 源的正确状态。举例来说,寄存器重命名是已知的GPR20管理方法,其中经由重命名表 中的映射将逻辑GPR识别符(r0、 rl、 r2...)动态映射到大的物理寄存器组。寄存器重命 名系统避免了无序指令执行中固有的数据竞争中的许多数据竞争。在操作中,针对对GPR 20寄存器进行写入的每个指令,分配新的物理寄存器,且在重命名表中记录新的逻辑到 物理"重命名"。对GPR20进行读取的指令经由重命名表査找将其逻辑GPR识别符翻译 为物理寄存器编号。物理寄存器编号在寄存器读取指令通过管线16的整个占用期中保持 与所述寄存器读取指令相关联。
在寄存器重命名系统中,GPR20写入并不"破坏"写入到相同逻辑GPR识别符的先 前值,写入被引导到新的未使用的物理寄存器。以编程次序跟随写入指令的指令被引导到所述新的物理寄存器,且获得写入值。以编程次序在写入指令之前的指令被重命名表映射 到不同的物理寄存器(在重命名操作之前),且将继续存取所述物理寄存器。因此,可在 从所述GPR识别符读取先前值的指令之前执行写入给定GPR识别符的指令(读取后写入 竞争,或WaR)或向其写入先前结果的指令之前执行写入给定GPR识别符的指令(写入 后写入竞争,或WaW)。以此方式,避免了 WaR和WaW数据竞争。
逻辑GPR识别符到物理寄存器的重命名是处理器资源的推测性分配。因为指令可无 序执行,所以指令可在以编程次序在写入指令之前的另一指令的执行之前写入逻辑GPR 识别符(且被分配有新的物理寄存器)。如果所述另一指令引起异常或是被错误预测分支 指令,那么可从管线16冲洗写入指令且将其物理寄存器解除分配。另一方面,必须保留 在所述写入指令之前的寄存器重命名。
为了能够在任何时间(例如紧接在检测到被错误预测分支之后)冲洗下部管线16并 恢复,在每次将逻辑GPR识别符重命名到物理寄存器时,即每次将寄存器写入指令发出 到管线16中时,必须创建重命名表的单独副本,且必须维持所述副本直到寄存器写入指 令提交以供执行为止。随后可基于从管线16冲洗了哪些指令来选择性地丢弃这些寄存器 表。在维持重命名表的许多副本方面,以及在当冲洗管线16时逻辑跟踪必须丢弃哪些重 命名表方面,此方法都是昂贵的。
在一个或一个以上实施例中,仅维持重命名表的两个副本推测性重命名表(SRT) 22和所提交重命名表(CRT) 24。每次在将逻辑GPR识别符重命名到新的物理寄存器时 更新SRT22。仅当提交相关的寄存器写入指令以供执行时才更新CRT24中的寄存器重命 名映射。当由于被错误预测分支而冲洗下部管线16时,由于被错误预测分支指令是最新 提交的指令,因此已知在分支之前(以编程次序)提交的所有寄存器写入指令均将其寄存 器重命名映射记录在CRT24中。此外,已知由在被错误预测分支指令之后(以编程次序) 的寄存器写入指令执行的任何寄存器重命名均仅被记录在SRT 22中而不记录在CRT 24 中。应丢弃这些寄存器重命名,且作为下部管线16冲洗的一部分将相关联的物理寄存器 解除分配。
在一个或一个以上实施例中,当在被错误预测分支指令是最新提交的指令时由于被错 误预测分支而冲洗下部管线16时,将CRT 24复制到SRT 22。这从被错误预测分支指令 时起使SRT 22处于正确状态,且将推测性地分配给经冲洗寄存器写入指令的物理寄存器 解除分配。通过在被错误预测分支指令提交前维持仅两个重命名表且推迟冲洗下部管线 16,大大简化了将推测性地分配的处理器资源解除分配的任务。
图2描绘根据一个或一个以上实施例的在允许无序执行的管线式处理器10中执行指令的方法。相关方法在处理器IO检测到被错误预测分支(MPB)时开始(方框100)。这 通常将发生在下部管线16a、 16b中的执行(EXE)级中。紧接在检测到MPB之后,处理 器IO例如在下一循环中冲洗上部管线14 (102),且开始从正确的分支目标地址获取指令 (方框114)。处理器10随后在上部管线14上设置暂停(方框116)直到冲洗下部管线16 为止。当所述暂停被释放时,正常的处理器10执行继续(方框118)。
并行地,处理器10在下部管线16中继续执行,直到MPB指令确认为止(方框120)。 此确认通常将紧接在检测到分支错误预测之后发生于管级中。当MPB指令确认时(方框 120),在IOM 13中设置确认旗标和MPB旗标(方框122)。正常的处理继续,直到MPB 指令提交为止。当MPB指令是最新提交的指令时(方框124), IOM 13触发从下部管线 16冲洗所有未提交的指令(方框126)。处理器10随后将CRT24复制到SRT22,且继续 正常的执行(方框118)。
以此方式,实施例实现了对上部管线14的即时冲洗,从而使从正确的分支目标地址 获取指令过程中的延迟最小化,并实现了对下部管线16的有效冲洗,从而避免复杂计算 和重复硬件,以正确地仅冲洗从错误分支目标地址获取的指令且将推测性地分配给所述指 令的处理器资源解除分配。尽管本文已参考实施异常冲洗的IOM 13描述了实施例,但本 发明不限于这些实施例。具体来说,本文描述的用以在被错误预测分支指令变为最新提交 的指令时从下部管线16冲洗所有未提交的指令的指令跟踪机构不需要也执行异常冲洗。 此外,尽管本文相对于寄存器重命名方案描述了处理器资源10的推测性分配,但许多其 它形式的推测性资源分配是此项技术中已知的,例如重命名缓冲器等。
当然,可在不脱离本发明的本质特征的情况下,以除了本文特定陈述的方式以外的其 它方式来实行本发明。本发明实施例将在所有方面均被视为说明性而不是限制性的,且既 定将处于所附权利要求书的含义和等效范围内的所有改变均包含于其中。
权利要求
1.一种在允许无序执行的管线式处理器中执行指令的方法,其包括在检测到分支指令错误预测之后,在指令可能脱离编程次序的点的较早期之前冲洗上部管线;以及在提交所述被错误预测分支指令以供执行之后,超过指令可能脱离编程次序的所述点从下部管线冲洗所有未提交的指令。
2. 根据权利要求1所述的方法,其进一步包括在确认所述被错误预测分支指令之后在 指令排序机构中指示所述被错误预测分支指令。
3. 根据权利要求2所述的方法,其中从所述下部管线冲洗所有未提交的指令包括当 所述被错误预测分支指令是最新提交的指令时,响应于所述指令排序机构中的被错 误预测分支指令指示符而冲洗所述指令。
4. 根据权利要求2所述的方法,其中所述处理器包含两个或两个以上管线,且其中执 行分支指令执行的每一管线包含确认级,所述确认级操作以在所述指令排序机构中 设置所述被错误预测分支指令指示符。
5. 根据权利要求1所述的方法,其进一步包括在冲洗所述上部管线之后,从正确的分 支指令目标地址获取指令。
6. 根据权利要求5所述的方法,其进一步包括在冲洗所述上部管线之后,在指令可变 为无序的所述点处或所述点之前使所述上部管线中止,直到从所述下部管线冲洗所 有未提交的指令为止。
7. 根据权利要求6所述的方法,其中推测性地分配的资源包含寄存器重命名资源。
8. 根据权利要求1所述的方法,其进一步包括在从所述下部管线冲洗未提交的指令之 后,将推测性地分配给未提交的指令的资源解除分配。
9. 根据权利要求8所述的方法,其中将推测性地分配给未提交的指令的资源解除分配包含将所提交寄存器重命名表的内容复制到推测性寄存器重命名表。
10. —种处理器,其包括控制逻辑;以及分段指令执行管线,其包括在指令可能脱离编程次序的点之前的上部管线以及超 过指令可能脱离编程次序的所述点的一个或一个以上下部管线; >其中所述控制逻辑操作以在检测到被错误预测分支之后从所述上部管线冲洗所 有指令,且进一步操作以在提交所述被错误预测分支指令以供执行后从所述下部管 线冲洗所有未提交的指令。
11. 根据权利要求IO所述的处理器,其中所述控制逻辑进一步操作以在冲洗所述上部 管线之后的循环中从正确的分支目标地址获取指令。
12. 根据权利要求11所述的处理器,其中所述控制逻辑进一步操作以在所述上部管线 冲洗之后在所述上部管线的末尾设置暂停,且在从所述下部管线冲洗所有未提交的 指令后移除所述暂停。
13. 根据权利要求IO所述的处理器,其中所述控制逻辑包含指令排序机构,所述指令 排序机构操作以跟踪指令的被确认和被提交状态,且进一步操作以在所述被错误预 测分支指令是最新的被确认指令时从所述下部管线冲洗所有未提交的指令。
14. 根据权利要求13所述的处理器,其中所述指令排序机构中的每一条目包含相关联 的指令是否为被错误预测分支指令的指示。
15. 根据权利要求14所述的处理器,其中执行分支指令的每一下部管线包含确认状态, 所述确认状态操作以在分支指令被确定为己被错误预测时在所述指令排序机构中 设置被错误预测分支指示。
16. 根据权利要求IO所述的处理器,其进一步包括通用寄存器(GPR)堆,其操作以将GPR逻辑识别符动态地关联到物理寄存器, 所述通用寄存器堆包括-多个物理寄存器;推测性重命名表(SRT),其含有所有当前GPR逻辑识别符到物理寄存器的映 射;以及所提交重命名表(CRT),其含有仅针对已被提交的指令的GPR逻辑识别符到 物理寄存器的映射;其中所述控制逻辑操作以在从所述下部管线冲洗所有未提交的指令后将所述 CRT的内容复制到所述SRT。
全文摘要
将处理器管线分段为在脱离编程次序的指令之前的一上部部分以及超过所述上部部分的一个或一个以上下部部分。在检测到分支指令被错误预测后冲洗所述上部管线,从而使从正确的分支目标地址获取指令过程中的延迟最小化。所述下部管线可继续执行,直到所述被错误预测分支指令确认为止,此时从所述下部管线冲洗出所有未提交的指令。可通过添加被错误预测分支识别符来利用现存的异常管线冲洗机构,从而降低冲洗所述下部管线的复杂性和硬件成本。
文档编号G06F9/38GK101601009SQ200880002977
公开日2009年12月9日 申请日期2008年1月24日 优先权日2007年1月24日
发明者托马斯·安德鲁·萨托里乌斯, 罗德尼·韦恩·史密斯, 詹姆斯·诺里斯·迪芬德尔费尔, 迈克尔·斯科特·麦克勒瓦伊内 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1