《用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf》由会员分享,可在线阅读,更多相关《用于使用预先通知技术改变程序的顺序流程的方法和设备.pdf(29页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102934075 A (43)申请公布日 2013.02.13 CN 102934075 A *CN102934075A* (21)申请号 201180028116.0 (22)申请日 2011.06.28 12/824,599 2010.06.28 US G06F 9/32(2006.01) G06F 9/30(2006.01) G06F 9/38(2006.01) (71)申请人 高通股份有限公司 地址 美国加利福尼亚州 (72)发明人 詹姆斯诺里斯迪芬德尔费尔 迈克尔威廉莫罗 (74)专利代理机构 北京律盟知识产权代理有限 责任公司 11287 代理人 宋献涛。
2、 (54) 发明名称 用于使用预先通知技术改变程序的顺序流程 的方法和设备 (57) 摘要 一种处理器实施用于提供间接分支地址的预 先通知的设备和方法。自动地识别由指令产生的 目标地址。在推测性执行利用最当前目标地址的 间接分支指令之前基于所述最当前目标地址来准 备下一程序地址。 所述设备合适地采用寄存器, 其 用于保持由程序指定为间接分支指令的最当前间 接地址的指令存储器地址。所述设备还采用下一 程序地址选择器, 其从所述寄存器选择所述最当 前间接地址作为所述下一程序地址以用于在推测 性执行所述间接分支指令时使用。 (30)优先权数据 (85)PCT申请进入国家阶段日 2012.12.07 。
3、(86)PCT申请的申请数据 PCT/US2011/042087 2011.06.28 (87)PCT申请的公布数据 WO2012/006046 EN 2012.01.12 (51)Int.Cl. 权利要求书 2 页 说明书 13 页 附图 13 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 13 页 附图 13 页 1/2 页 2 1. 一种用于改变程序的顺序流程的方法, 其包括 : 从由第一指令识别的寄存器检索程序指定的目标地址, 其中所述寄存器是在指令集架 构中界定 ; 以及 在遇到第二指令之后将推测性执行流程改变到所述程序指定的目标地址, 。
4、其中所述第 二指令经动态地确定为间接分支指令。 2. 根据权利要求 1 所述的方法, 其中所述间接分支指令是在所述第一指令之后的下一 遇到的间接分支指令。 3. 根据权利要求 1 所述的方法, 其中所述间接分支指令是指定匹配由所述第一指令识 别的所述寄存器的目标寄存器的下一遇到的间接分支指令。 4. 根据权利要求 1 所述的方法, 其进一步包括 : 将所述第一指令插入代码序列中处于所述间接分支之前至少 N 个程序指令, 其中所述 N 个程序指令对应于接收所述间接分支的管线级与辨识由所述第一指令识别的所述寄存器 的管线级之间的管线级的数目。 5. 根据权利要求 4 所述的方法, 其中接收所述间接。
5、分支的所述管线级是获取级, 且辨 识由所述第一指令识别的所述寄存器的所述管线级是执行级。 6. 根据权利要求 1 所述的方法, 其进一步包括 : 在遇到对应多个间接分支指令之前接收多个预先通知 (ADVN) 指令, 其中所述第一指 令是 (ADVN) 指令 ; 以及 以先入先出堆栈跟踪所述多个 (ADVN) 指令与所述遇到的对应多个间接分支指令之间 的对应关系。 7. 根据权利要求 1 所述的方法, 其进一步包括 : 确定存储在分支目标地址寄存器中的值是有效指令地址 ; 以及 在对所述间接分支进行解码后即刻从所述分支目标地址寄存器选择所述值以用于识 别待获取的下一指令地址。 8. 根据权利要求。
6、 1 所述的方法, 其进一步包括 : 执行所述间接分支以确定分支目标地址 ; 将所述确定的分支目标地址与所述程序指定的目标地址进行比较 ; 以及 当所述确定的分支目标地址与所述程序指定的目标地址不相同时清空处理器管线。 9. 根据权利要求 1 所述的方法, 其进一步包括 : 在遇到所述第一指令之后超驰分支预测电路。 10. 根据权利要求 1 所述的方法, 其进一步包括 : 将所述指令处理为具有分支历史预测电路的处理器管线中的无操作, 所述分支历史预 测电路具有用以跟踪在代码区段的执行期间遇到的分支的硬件资源 ; 以及 针对超过所述分支历史预测电路可用的所述硬件资源的代码区段启用所述指令。 11。
7、. 一种用于提供间接分支地址的预先通知的方法, 其包括 : 分析指令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址 ; 以 及 在推测性执行利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地 址来准备下一程序地址。 权 利 要 求 书 CN 102934075 A 2 2/2 页 3 12. 根据权利要求 11 所述的方法, 其进一步包括 : 在第一次通过代码区段时自动识别所述间接分支指令的目标地址寄存器, 其中所述识 别的目标地址寄存器用以自动识别由所述指令产生的所述最当前目标地址。 13. 根据权利要求 11 所述的方法, 其中当对所述间接分支指令进行解码时准备所。
8、述下 一程序地址。 14. 根据权利要求 11 所述的方法, 其进一步包括 : 将所述指令序列中的所述目标地址改变指令移动到所述指令序列中在间接分支指令 之前至少 N 个程序指令的位置, 其中 N 对应于接收所述间接分支的管线级与辨识由所述目 标地址改变指令识别的所述寄存器的管线级之间的管线级的数目。 15. 根据权利要求 14 所述的方法, 其中接收所述间接分支的所述管线级是获取级, 且 辨识由所述目标地址改变指令识别的所述寄存器的所述管线级是执行级。 16. 根据权利要求 11 所述的方法, 其进一步包括 : 在第一表中在由所述间接分支指令指定的目标地址寄存器条目处加载产生所述最当 前目标。
9、地址的所述指令的指令地址。 17. 根据权利要求 16 所述的方法, 其进一步包括 : 在所述指令地址处检查有效位的关联性存储器中是否有经断言的有效位 ; 以及 响应于经断言的有效位而用从执行由所述第一表识别的所述指令得到的值来加载分 支目标地址寄存器。 18. 根据权利要求 17 所述的方法, 其进一步包括 : 使用存储在所述分支目标地址寄存器中的所述值提供所述分支目标地址。 19. 一种用于提供间接分支目标地址的预先通知的设备, 其包括 : 寄存器, 其用于保持由程序指定为间接分支指令的预先通知 (ADVN) 间接地址的指令 存储器地址 ; 以及 下一程序地址选择器电路, 其监视以所述寄存。
10、器为目标的指令, 且基于所述监视的指 令而从所述寄存器将在遇到所述间接分支指令之前的最当前目标地址选择为所述 (ADVN) 间接地址, 以用于在推测性执行所述间接分支指令时用作下一程序地址。 20. 根据权利要求 19 所述的设备, 其进一步包括 : 解码器, 其用以对程序指令进行解码以识别待存储在所述寄存器中的分支目标地址。 21. 根据权利要求 19 所述的设备, 其进一步包括 : 处理器管线, 其在接收所述间接分支指令的级与辨识所述最当前目标地址的级之间具 有 N 个级, 其中所述下一程序地址选择器电路选择在所述间接分支之前至少所述 N 个级的 所述 ADVN 间接地址。 22. 根据权。
11、利要求 21 所述的设备, 其中接收所述间接分支指令的所述管线级是获取 级, 且辨识所述最当前目标地址的所述管线级是执行级。 23. 根据权利要求 19 所述的设备, 其中所述 ADVN 间接地址是基于跟踪表, 所述跟踪表 存储所述程序的在当前执行循环之前的影响所述间接分支指令的所述分支目标地址的指 令的执行状态。 权 利 要 求 书 CN 102934075 A 3 1/13 页 4 用于使用预先通知技术改变程序的顺序流程的方法和设备 技术领域 0001 本发明大体上涉及用于在处理器管线中处理指令的技术, 且更具体来说涉及用于 产生间接分支指令的目标地址的早期指示的技术。 背景技术 0002。
12、 许多便携式产品, 例如手机、 膝上型计算机、 个人数据助理 (PDA) 或类似物, 需要 使用执行支持通信和多媒体应用的程序的处理器。用于这些产品的处理系统包含处理器、 指令源、 输入操作数源以及用于存储执行结果的存储空间。 举例来说, 指令和输入操作数可 存储在由通用寄存器和多级高速缓冲存储器组成的阶层式存储器配置中, 其包含例如指令 高速缓冲存储器、 数据高速缓冲存储器和系统存储器。 0003 为了在程序的执行中提供高性能, 处理器通常在管线中执行指令。处理器还可使 用推测性执行来获取和执行在预测分支目标地址处开始的指令。如果分支被误预测, 那么 必须从管线清空推测性执行的指令, 并且在。
13、正确的路径地址处重新开始管线。在许多处理 器指令集中, 经常有分支到从寄存器的内容导出的程序目的地地址的指令。此指令通常称 为间接分支指令。 由于间接分支对寄存器的内容的依赖性, 通常难以预测分支目标地址, 因 为在每次执行间接分支指令时寄存器可能具有不同的值。由于校正误预测的间接分支通 常需要对间接分支指令的反向跟踪以便在正确的分支路径上获取和执行指令, 因此处理器 的性能可能降低。而且, 误预测指示处理器不正确地推测性获取和开始在错误分支路径上 的指令处理, 从而造成用于处理并不使用的指令以及用于从管线中清空所述指令的功率增 加。 发明内容 0004 在本发明的若干方面中, 本发明认识到有。
14、利的是使在执行指令时可能发生的误预 测的数目最少以在处理器系统中改善性能且减少功率要求。为此, 本发明的实施例适用于 一种用于改变程序的顺序流程的方法。 所述方法从由第一指令识别的寄存器检索程序指定 的目标地址, 其中所述寄存器是在指令集架构中界定。在遇到第二指令之后将推测性执行 流程改变到所述程序指定的目标地址, 其中所述第二指令经动态地确定为间接分支指令。 0005 本发明的另一实施例针对一种用于提供间接分支地址的预先通知的方法。 分析指 令序列以识别由所述指令序列的目标地址改变指令产生的最当前目标地址。 在推测性执行 利用所述最当前目标地址的间接分支指令之前基于所述最当前目标地址来准备下。
15、一程序 地址。 0006 本发明的另一方面针对一种用于提供间接分支目标地址的预先通知的设备。 所述 设备采用寄存器, 其用于保持由程序指定为间接分支指令的预先通知 (ADVN) 间接地址的 指令存储器地址。所述设备还采用下一程序地址选择器电路, 其监视以所述寄存器为目标 的指令, 且基于所述监视的指令而从所述寄存器将在遇到所述间接分支指令之前的最当前 目标地址选择为所述 ADVN 间接地址, 以用于在推测性执行所述间接分支指令时用作下一 说 明 书 CN 102934075 A 4 2/13 页 5 程序地址。 0007 从以下具体实施方式和附图将明了本发明的更完整理解以及本发明的另外特征 和。
16、优点。 附图说明 0008 图 1 是其中可有利地采用本发明的实施例的示范性无线通信系统的框图 ; 0009 图 2 是根据本发明的支持间接分支指令的分支目标地址的处理器复合体的功能 框图 ; 0010 图 3A 是根据本发明的 32 位预先通知 (ADVN) 指令的一般格式, 其指定具有间接分 支目标地址值的寄存器 ; 0011 图 3B 是根据本发明的 16 位 ADVN 指令的一般格式, 其指定具有间接分支目标地址 值的寄存器 ; 0012 图 4A 是根据本发明的用于使用先前间接分支执行的历史的间接分支预测的方法 的代码实例 ; 0013 图 4B 是根据本发明的用于间接分支预先通知的。
17、方法的代码实例, 所述方法使用 图 3A 的 ADVN 指令以用于提供间接分支目标地址的预先通知 ; 0014 图 5 说明根据本发明的示范性第一间接分支目标地址 (BTA) 预先通知电路 ; 0015 图 6 是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预 先通知的方法的代码实例 ; 0016 图7是根据本发明的第一间接分支预先通知(ADVN)过程, 其合适地用于间接分支 指令的分支目标地址 ; 0017 图 8A 说明示范性目标跟踪表 (TTT) ; 0018 图 8B 是根据本发明的第二间接分支预先通知 (ADVN) 过程, 其合适地用于提供间 接分支指令的分支目标地址。
18、的预先通知 ; 0019 图 9A 说明根据本发明的示范性第二间接分支目标地址 (BTA) 预先通知 (ADVN) 电 路 ; 0020 图 9B 说明根据本发明的示范性第三间接分支目标地址 (BTA) 预先通知 (ADVN) 电 路 ; 以及 0021 图10A和10B是根据本发明的使用软件代码仿形方法来确定间接分支目标地址的 预先通知的方法的代码实例。 具体实施方式 0022 现在将参考附图更完整地描述本发明, 其中展示本发明的若干实施例。 然而, 本发 明可以各种形式体现, 且不应解释为限于本文陈述的实施例。 事实上, 提供这些实施例以使 得本发明将为详尽且完整的, 且将本发明的范围完整。
19、地传达给所属领域的技术人员。 0023 根 据 本 发 明 教 示 的 用 于 被 操 作 或 用 于 实 行 操 作 的 计 算 机 程 序 代 码 或 “程 序 代 码”可 初 始 以 高 级 编 程 语 言 来 编 写, 例 如 C、 C+、Smalltalk、 TSQL、 Perl 或各种其它编程语言。通过将高级程序代码转换 为原生汇编程序来将以这些语言中的一者编写的程序编译为目标处理器架构。 用于目标处 说 明 书 CN 102934075 A 5 3/13 页 6 理器架构的程序也可以原生汇编语言直接编写。 原生汇编程序使用机器级二进制指令的指 令助记表示。如本文使用的程序代码或计。
20、算机可读媒体称为机器语言代码, 例如格式可被 处理器理解的目标代码。 0024 图 1 说明其中可有利地采用本发明的实施例的示范性无线通信系统 100。出于说 明的目的, 图 1 展示三个远程单元 120、 130 和 150 以及两个基站 140。将认识到, 常见的无 线通信系统可具有多得多的远程单元和基站。分别包含由组件 125A、 125C、 125B 和 125D 表 示的硬件组件、 软件组件或两者的远程单元 120、 130、 150 和基站 140 已经调适以体现如下 文进一步论述的本发明。图 1 展示从基站 140 到远程单元 120、 130 和 150 的前向链路信号 180。
21、 以及从远程单元 120、 130 和 150 到基站 140 的反向链路信号 190。 0025 在图 1 中, 将远程单元 120 展示为移动电话, 将远程单元 130 展示为便携式计算 机, 且将远程单元 150 展示为无线本地回路系统中的固定位置远程单元。举例来说, 远程单 元可替代地为手机、 寻呼机、 对讲机、 手持式个人通信系统 (PCS) 单元、 例如个人数据助理 等便携式数据单元, 或例如仪表读取装备等固定位置数据单元。尽管图 1 说明根据本发明 的教示的远程单元, 但本发明不限于这些示范性所说明单元。本发明的实施例可合适地用 于具有间接分支指令的任何处理器系统中。 0026 。
22、图 2 是根据本发明的处理器复合体 200 的功能框图, 其支持准备间接分支指 令的分支目标地址的预先通知。处理器复合体 200 包含处理器管线 202、 通用寄存器堆 (GPRF)204、 控制电路 206、 L1 指令高速缓冲存储器 208、 L1 数据高速缓冲存储器 210 以及存 储器阶层 212。控制电路 206 包含程序计数器 (PC)215 和分支目标地址寄存器 (BTAR)219, 其如下文更详细描述般相互作用以用于控制包含指令获取级 214 的处理器管线 202 的目 的。为了论述的清楚而未展示外围装置 ( 其可连接到处理器复合体 )。处理器复合体 200 可合适地用于图 1。
23、 的硬件组件 125A 到 125D 中以用于执行存储在 L1 指令高速缓冲存储器 208 中的程序代码, 利用存储在 L1 数据高速缓冲存储器 210 中且与存储器阶层 212 相关联 的数据。处理器管线 202 可在通用处理器、 数字信号处理器 (DSP)、 专用处理器 (ASP) 或类 似物中操作。处理器复合体 200 的各种组件可使用专用集成电路 (ASIC) 技术、 现场可编程 门阵列 (FPGA) 技术或其它可编程逻辑、 离散门或晶体管逻辑或适合于既定应用的任何其 它可用技术来实施。 0027 处理器管线 202 包含六个主要级 : 指令获取级 214、 解码与预先通知 (ADVN。
24、) 级 216、 分派级218、 读取寄存器级220、 执行级222以及回写级224。 虽然展示单个处理器管线 202, 但本发明的具有间接分支目标地址预先通知的指令处理适用于超标量设计和实施并 行管线的其它架构。举例来说, 为高时钟速率设计的超标量处理器可具有两个或两个以上 并行管线且每一管线可将指令获取级 214、 具有 ADVN 逻辑电路 217 的解码与 ADVN 级 216、 分派级 218、 读取寄存器级 220、 执行级 222 以及回写级 224 划分为两个或两个以上管线式 级, 从而增加总体处理器管线深度以便支持高时钟速率。 0028 以处理器管线202的第一级开始, 与程序。
25、计数器(PC)215相关联的指令获取级214 从 L1 指令高速缓冲存储器 208 获取指令以供稍后的级处理。如果指令获取在 L1 指令高速 缓冲存储器 208 中未命中, 意味着待获取的指令不在 L1 指令高速缓冲存储器 208 中, 那么 从存储器阶层 212 获取所述指令, 存储器阶层 212 可包含多级高速缓冲存储器, 例如第 2 级 (L2) 高速缓冲存储器, 以及主存储器。指令可从其它源加载到存储器阶层 212, 例如引导只 说 明 书 CN 102934075 A 6 4/13 页 7 读存储器 (ROM)、 硬驱动器、 光盘, 或从例如因特网等外部接口加载到存储器阶层 212。。
26、随后 在具有 ADVN 逻辑电路 217 的解码与 ADVN 级 216 中解码所获取的指令, 从而提供如下文更 详细描述的用于间接分支目标地址值的预先通知的额外能力。与 ADVN 逻辑电路 217 相关 联的是分支目标地址寄存器 (BTAR)219, 其可如图 2 所示位于控制电路 206 中, 但不限于这 种放置。举例来说, BTAR 219 可合适地位于解码与 ADVN 级 216 内。 0029 分派级 218 取得一个或一个以上经解码指令且将其分派到例如在超标量或多线 程处理器中利用的一个或一个以上指令管线。读取寄存器级 220 从 GPRF 204 获取数据操 作数或从转发网络 2。
27、26 接收数据操作数。转发网络 226 在 GPRF 204 周围提供快速路径以 在每当结果操作数从执行级可用时供应所述结果操作数。即使具有转发网络, 来自深执行 管线的结果操作数也可能花费三个或三个以上执行循环。在这些循环期间, 读取寄存器级 220 中的需要来自执行管线的结果操作数数据的指令必须等待直到结果操作数可用为止。 执行级 222 执行所分派的指令, 且回写级 224 将结果写入到 GPRF 204 且也可在结果将用于 随后指令中的情况下通过转发网络 226 将结果发送回到读取寄存器级 220。由于结果可能 在回写级224中是以与编程次序相比不同的次序接收的, 因此在将结果写入到G。
28、PRF 204时 回写级 224 使用处理器工具来保留编程次序。下文关于详细代码实例来提供用于提供间接 分支指令的目标地址的预先通知的处理器管线 202 的更详细描述。 0030 处理器复合体 200 可经配置以在存储在计算机可读存储媒体上的程序的控制下 执行指令。举例来说, 计算机可读存储媒体可直接在本地与处理器复合体 200 相关联, 例如 可从 L1 指令高速缓冲存储器 208( 用于对从 L1 数据高速缓冲存储器 210 获得的数据进行 操作 ) 和存储器阶层 212 可用, 或者通过例如输入 / 输出接口 ( 未图示 ) 而关联。处理器 复合体 200 还在程序的执行中从 L1 数据。
29、高速缓冲存储器 210 和存储器阶层 212 存取数据。 计算机可读存储媒体可包含随机存取存储器 (RAM)、 动态随机存取存储器 (DRAM)、 同步动 态随机存取存储器 (SDRAM)、 快闪存储器、 只读存储器 (ROM)、 可编程只读存储器 (PROM)、 可 擦除可编程只读存储器 (EPROM)、 电可擦除可编程只读存储器 (EEPROM)、 压缩光盘 (CD)、 数 字视频光盘 (DVD)、 其它类型的可装卸式盘或任何其它合适的存储媒体。 0031 图 3A 是根据本发明的 32 位 ADVN 指令 300 的一般格式, 其将由编程人员或软件工 具识别的寄存器指定为保持间接分支目标。
30、地址值。 ADVN指令300在指定所识别寄存器的传 入的间接分支指令之前向处理器复合体 200 通知存储在所识别寄存器中的实际分支目标 地址。通过如下文更详细描述提供预先通知, 可改善处理器性能。ADVN 指令 300 经说明为 具有条件代码字段 304, 其由若干指令集架构 (ISA) 利用以基于指定的一或多个旗标而指 定指令将无条件地还是有条件地执行。操作码 305 将指令识别为具有至少一个分支目标地 址寄存器字段 Rm 307 的分支 ADVN 指令。指令特定字段 306 允许操作码扩展和其它指令特 定的编码。在具有含根据指令中的指定条件代码字段有条件地执行的指令的此 ISA 的处理 器。
31、中, 影响分支目标地址寄存器的最后指令的条件字段 Rm 将通常用作 ADVN 指令的条件字 段, 但不限于此指定。 0032 本发明的教示适用于多种指令格式和架构规范。举例来说, 图 3B 是根据本发明的 16 位 ADVN 指令 350 的一般格式, 其指定具有间接分支目标地址值的寄存器。16 位 ADVN 指 令 350 类似于 32 位 ADVN 指令 300, 具有操作码 355、 分支目标地址寄存器字段 Rm 357 以及 指令特定位 356。还注意到, 可利用其它位格式和指令宽度来编码 ADVN 指令。 说 明 书 CN 102934075 A 7 5/13 页 8 0033 间接。
32、分支型指令的一般形式可在处理器管线 202 中有利地使用和执行, 例如依寄 存器分支 Rx(BX)、 相加 PC、 移动 Rx PC 和类似物。为了描述本发明, 在如下文进一步描述的 代码序列实例中使用间接分支指令的 BX Rx 形式。 0034 应注意, 其它形式的分支指令通常在 ISA 中提供, 例如具有指令指定的分支目标 地址 (BTA) 的分支指令、 具有经计算为指令指定的偏移地址与基地址寄存器的和的 BTA 的 分支指令和类似指令。为了支持这些分支指令, 处理器管线 202 可利用分支历史预测技术, 其基于跟踪例如先前分支指令执行的条件执行状态且存储此执行状态以用于预测这些指 令的未。
33、来执行。处理器管线 202 可支持此分支历史预测技术且另外支持使用 ADVN 指令来 提供间接分支目标地址的预先通知。举例来说, 处理器管线 202 可使用分支历史预测技术 直到遇到 ADVN 指令为止, 所述 ADVN 指令随后使用如本文描述的 ADVN 工具来超驰分支目标 历史预测技术。 0035 在本发明的其它实施例中, 处理器管线202还可经设置以监视使用ADVN指令的准 确性, 且当 ADVN 识别的目标地址不正确一次或一次以上时对于后续遇到同一间接分支忽 略 ADVN 指令。还应注意, 对于支持具有 ADVN 指令的 ISA 的处理器的特定实施方案, 处理器 可将遇到的 ADVN 。
34、指令处理为无操作 (NOP) 指令或将检测到的 ADVN 指令标记为未定义。此 外, ADVN 指令可在具有动态分支历史预测电路的处理器管线中被处理为 NOP, 所述动态分 支历史预测电路具有足够的硬件资源来跟踪在代码区段的执行期间遇到的分支且如下文 描述针对超过所述动态分支历史预测电路可用的硬件资源的代码区段启用 ADVN 指令。而 且, 在动态分支历史预测电路具有用于预测间接分支目标地址的不良结果的情况下, ADVN 指令可结合动态分支历史预测电路来使用以用于提供间接分支目标地址的预先通知。 举例 来说, 从动态分支历史预测电路产生的经预测分支目标地址可由通过使用 ADVN 指令提供 的目。
35、标地址超驰。另外, 呈现有利的自动间接目标推断方法以用于提供如下文描述的间接 分支目标地址的预先通知。 0036 图 4A 是根据本发明的用于间接分支预测的方法的代码实例 400, 所述方法在未遇 到 ADVN 指令的情况下使用一般历史方法来预测间接分支执行。代码实例 400 的执行是参 考处理器复合体 200 来描述。为了此实例的目的, 指令 A 到 D401 到 404 可为循序算术指令 集, 其基于指令 A 到 D401 到 404 的分析并不影响 GPRF 204 中的寄存器 R0。寄存器 R0 由加 载 R0 指令 405 用用于间接分支指令 BX R0 406 的目标地址加载。为了。
36、此实例的目的, 指令 401 到 406 中的每一者经指定为无条件地执行。还假定, 加载 R0 指令 405 在 L1 指令高速 缓冲存储器 208 中可用, 使得当指令 A401 在执行级 222 中完成执行时, 已在获取级 214 中 获取加载 R0 指令 405。随后获取间接分支 BX R0 指令 406, 同时在解码与 ADVN 级 216 中解 码加载 R0 指令 405。在下一管线级中, 准备加载 R0 指令 405 以经分派用于执行, 且解码 BX R0指令406。 而且, 在解码与ADVN级216中, 基于先前间接分支执行的历史而做出BX R0指 令 406 是被取得还是未被取。
37、得的预测, 且还预测间接分支的目标地址。对于此实例, BX R0 指令 406 经指定为被无条件地 “取得” 且 ADVN 逻辑电路 217 仅需要将间接分支目标地址预 测为地址 X。基于此预测, 引导处理器管线 202 开始推测性获取从地址 X 开始的指令, 地址 X 在给定 “取得” 状态时通常是从当前指令寻址的重定向。处理器管线 202 还清空管线中在 间接分支 BX R0 指令 406 之后的任何指令, 如果这些指令不与在地址 X 处开始的指令相关 联。处理器管线 202 继续获取指令直到在执行级中可确定经预测地址 X 是否经正确预测为 说 明 书 CN 102934075 A 8 6。
38、/13 页 9 止。 0037 在处理指令的同时, 可能遇到暂停情形, 例如关于加载 R0 指令 405 的执行可能发 生的暂停情形。加载 R0 指令 405 的执行可在 L1 数据高速缓冲存储器中存在命中的情况下 无延迟地返回来自 L1 数据高速缓冲存储器 210 的值。然而, 加载 R0 指令 405 的执行在 L1 数据高速缓冲存储器 210 中存在未命中的情况下可能花费大量周期。加载指令可使用来自 GPRF 204 的寄存器来供应基地址, 且随后在执行级 222 中将中间值加到基地址以产生有效 地址。所述有效地址经由数据路径 232 发送到 L1 数据高速缓冲存储器 210。在 L1 。
39、数据高 速缓冲存储器210中的未命中的情况下, 必须从可包含例如L2高速缓冲存储器和主存储器 的存储器阶层212获取数据。 此外, 数据可能在L2高速缓冲存储器中未命中, 从而导致从主 存储器获取数据。 举例来说, L1数据高速缓冲存储器210中的未命中、 存储器阶层212中的 L2 高速缓冲存储器中的未命中以及对主存储器的存取可能需要数百个 CPU 周期来获取数 据。在 L1 数据高速缓冲存储器未命中之后获取数据所花费的周期期间, BX R0 指令 406 在 处理器管线 202 中暂停直到运行中操作数可用为止。所述暂停可视为在读取寄存器级 220 中或执行级 222 的开始处发生。 003。
40、8 应注意, 在具有多个指令管线的处理器中, 加载 R0 指令 405 的暂停可能并不暂停 在任何其它管线中发生的推测性操作。由于 L1 D 高速缓冲存储器 210 中的未命中所造成 的暂停的长度, 可能推测性获取大量指令, 这在存在间接分支目标地址的不正确预测的情 况下可能显著影响性能和功率使用。可通过使用作为图 2 的控制电路 206 的部分的保持电 路来在处理器管线中产生暂停。所述保持电路产生保持信号, 其可例如用以选通管线级寄 存器以暂停管线中的指令。 对于图2的处理器管线202, 可例如在读取寄存器级中在并非所 有输入都可用的情况下激活保持信号, 使得管线保持等待完成指令执行所必要的。
41、输入的到 达。当所有必要的操作数变为可用时释放所述保持信号。 0039 在未命中的解析后, 将加载数据经由路径 240 发送到作为回写级 224 的部分的回 写操作。随后将操作数写入到 GPRF 204 且也可发送到上文描述的转发网络 226。现在可 将 R0 的值与经预测地址 X 进行比较以确定是否需要清空推测性获取的指令。由于用以存 储分支目标地址的寄存器在每次执行间接分支指令时可能具有不同的值, 因此存在将使用 当前预测方法清空推测性获取的指令的高概率。 0040 图 4B 是根据本发明的用于间接分支预先通知的方法的代码实例 420, 所述方法 使用图 3A 的 ADVN 指令以用于提供。
42、间接分支目标地址的预先通知。基于图 4A 的指令 A 到 D401 到 404 不影响分支目标地址寄存器 R0 的先前提到的分析, 加载 R0 指令 405 可在指令 序列中向上移动以例如在图 4B 的代码实例中放置于指令 A421 之后。另外, ADVN R0 指令 423, 例如图 3A 的 ADVN 指令 300, 直接放置于加载 R0 指令 422 之后作为用于间接 BX R0 指 令 427 的分支目标地址的预先通知的先行辅助。 0041 在图 4B 的新指令序列 421 到 427 流过处理器管线 202 时, 当加载 R0 指令 422 在 执行级中时 ADVN R0 指令 42。
43、3 将在读取级 220 中, 且指令 D426 将在获取级 214 中。对于加 载 R0 指令 422 在 L1 数据高速缓冲存储器 210 中命中的情形, R0 的值在加载 R0 执行结束 之前是已知的且与 R0 值一起经由转发网络 226 快速转发到读取级, R0 值在读取级 220 的 末尾或在用于 ADVN R0 指令的执行级的开始之前也是已知的。在间接分支指令进入解码与 ADVN 级 216 之前确定 R0 值允许 ADVN 逻辑电路 217 将确定的 R0 值选择为 BX R0 指令 427 说 明 书 CN 102934075 A 9 7/13 页 10 的分支目标地址而不会有任。
44、何额外的周期延迟。 应注意, BX R0指令427在管线中是动态识 别的。虽然通常 ADVN 指定的寄存器 ( 例如此代码实例中的 R0) 将保持与间接分支指定的 目标地址寄存器相同的地址, 但可能遇到异常。 在针对此地址异常的一种方法中, 不将ADVN 指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较, 且如果选择了不正 确的目标地址, 那么在管线中稍后会检测到错误且采取适当动作, 例如清空管线。 在一不同 方法中, 将 ADVN 指定的寄存器值与下一遇到的间接分支指令指定的寄存器值进行比较, 且 在找到匹配之前将不针对推测性执行做出改变, 通常情况将是这样。 如果未找到匹配, 。
45、那么 管线将如同未遇到 ADVN 指令那样操作。 0042 应注意, 对于处理器管线202, 对于在L1数据高速缓冲存储器210中存在命中的情 况, 加载 R0 指令和 ADVN R0 指令可能已放置在指令 B 之后而不会引起任何进一步延迟。然 而, 如果在 L1 数据高速缓冲存储器中存在未命中, 那么将起始暂停情形。对于 L1 数据高速 缓冲存储器 210 中的未命中的此情况, 加载 R0 和 ADVN R0 指令将需要基于管线深度而放置 在 BX R0 指令之前适当数目个未命中延迟周期 ( 如果可能的话 ) 以避免引起任何进一步延 迟。 0043 大体上, ADVN指令在代码序列中的放置优。
46、选为在BX指令之前N个指令。 在处理器 管线的上下文中, N 表示接收间接分支指令的级与辨识 ADVN 指定的分支目标地址的级 ( 例 指令获取级 214 和执行级 222) 之间的级的数目。在与转发网络 226 一起使用的示范性处 理器管线 202 中, N 为二, 且在不使用转发网络 226 的情况下, N 为三。对于例如使用转发网 络的处理器管线, 如果 BX 指令在 ADVN 指令之前 N 等于二个指令, 那么 ADVN 目标地址寄存 器 Rm 值是由于转发网络 226 而在读取寄存器级 220 的末尾处确定。在例如针对 ADVN 指令 使用并不使用转发网络226的处理器管线的替代实施。
47、例中, 如果BX指令在ADVN指令之前N 等于三个指令, 那么 ADVN 目标地址寄存器 Rm 值是在 BX 指令进入解码与 ADVN 级 216 时在 执行级 222 的末尾处确定。指令的数目 N 也可取决于额外的因素, 包含上部管线中的暂停 ( 例如归因于指令获取级 214 中的延迟 )、 可能改变高达超标量处理器中发布的 K 个指令的 指令发布宽度, 以及例如在 ADVN 与 BX 指令之间出现的中断。大体上, ISA 可推荐尽可能早 地调度 ADVN 指令, 以最小化这些因素的影响。 0044 虽然图4B是以单个ADVN R0指令来说明, 但在遇到任何间接分支之前可例示多个 ADVN 。
48、指令。所述多个 ADVN 指令以 FIFO 方式应用于接下来遇到的间接分支, 例如可通过使 用堆栈设备而获得。应注意, 下一遇到的间接分支指令在编程次序上大体上与下一间接分 支指令相同。可在确定使用多个 ADVN 指令是否适当之前评估可能对此一般规则引起异常 的代码。 0045 图 5 说明根据本发明的示范性第一间接分支目标地址 (BTA) 预先通知电路 500。 第一间接 BTA 预先通知电路 500 包含 ADVN 执行电路 504、 分支目标地址寄存器 (BTAR) 电 路 508、 BX 解码电路 512、 选择电路 516, 以及用于响应于影响 PC 地址产生的输入的下一程 序计数器。
49、 (PC) 电路 520。在 ADVN 执行电路 504 中执行 ADVN Rx 指令之后, 将 Rx 的值加载 到 BTAR 电路 508 中。当在 BX 解码电路 512 中解码 BX 指令时且如果 BTAR 如选择电路 516 所选择是有效的, 那么将 BTAR 电路 508 中的 BTA 值由下一 PC 电路 520 用作下一获取地址。 也可在 BTAR 有效处于作用中时使用 BTAR 有效指示来停止获取, 从而节省原本将与获取错 误地址处的指令相关联的功率。 说 明 书 CN 102934075 A 10 8/13 页 11 0046 图 6 是根据本发明的使用自动间接目标推断方法来提供间接分支目标地址的预 先通知的方法的代码实例 600。在代码序列 601 到 607 中, 指令 A601、 B603、 C604 和 D606 与先前描述的相同, 且因此不影响分支目标地址寄存器。两个指令 : 加载 R0 指令 602 和相 加 R0、 R7、 R8 指令 605 影响此实例的分支目标寄存器 R0。间接分支指令 BX R0 607 与图 4A 和 4B 的先前实例中使用的相同。在代。