[处理器芯片]-4 超标量CPU实现之分支预测

分支预测通过预测程序中分支指令(如条件跳转、循环、函数调用等)的执行路径,从而减少因分支指令带来的流水线停顿和性能下降,用于提高指令流水线的效率,是处理器非常关键的一项技术。

1 设计原理

分支指令:分支指令决定了程序的执行路径,当执行条件满足时跳转到目标地址,否则继续顺序执行。常见的分支指令有条件跳转(如 if-else 语句)、循环(如 for 和 while 语句)以及函数调用和返回。

流水线停顿:当处理器遇到分支指令时,如果不能提前确定跳转路径,就需要等待分支条件的计算结果,从而导致流水线停顿。

分支预测:分支预测通过猜测分支指令的执行路径(跳转方向和跳转目标),使处理器能够继续提前加载和执行指令,而不必等待分支条件的计算结果,从而提高指令级并行度和处理器性能。

2 预测分类

分支预测器通常按照预测的内容来分类,主要包括跳转方向预测和跳转目标预测。

1)跳转方向预测

跳转方向预测的主要目标是预测条件分支指令是否会跳转,即分支是否成立,大多数现代处理器的分支预测器集中在这一方面,又可分为静态预测器和动态预测器两种。

静态预测器

静态预测使用固定的规则预测分支跳转方向,如“总是跳转”或“总是不跳转”,不依赖运行时的分支行为,而是根据预定义的规则进行预测。

固定方向预测:总是跳转,假设所有分支指令都会跳转;总是不跳转,假设所有分支指令都不会跳转。这种方法在一些情况下效果较好,但总体预测准确性不高。

基于编译器的预测:编译器根据代码的上下文和结构,对分支进行预测,编译器可能使用启发式规则(如循环中的分支多为跳转)或静态分析(如频繁执行的路径)。

动态预测器

动态预测使用运行时的分支历史信息进行预测。

单比特预测:使用一个比特记录分支的上一次行为(跳转或不跳转),如果上一次分支跳转,则预测这次也跳转,反之亦然。

双比特预测:使用两个比特记录分支的历史行为状态(如强跳转、弱跳转、弱不跳转、强不跳转)。这种方法比单比特预测更稳定,减少了因为一次错误预测导致的连续错误预测。

全局历史预测:使用全局历史寄存器记录最近几次分支的结果,并根据全局历史进行预测。

局部历史预测:使用每个分支的局部历史记录进行预测,针对特定分支指令的行为进行更准确的预测。

混合预测:结合多种预测方法,综合使用全局历史和局部历史进行预测,并通过选择器选择最合适的预测器。

2)跳转目标预测

跳转目标预测,预测条件分支或间接跳转指令的目标地址,减少因跳转目标未确定而导致的流水线停顿。

分支目标缓冲器(Branch Target Buffer,BTB):缓存最近的分支指令和对应的目标地址,根据当前分支指令的地址快速查找目标地址。

返回地址栈(Return Address Stack,RAS):专门用于预测函数调用和返回指令的目标地址,通过维护一个调用/返回堆栈来预测返回地址。

间接跳转预测器:用于预测间接跳转指令(如函数指针调用或虚函数调用)的目标地址,可以使用类似于BTB的方法但更复杂。

3 分支预测器实例

TAGE预测器

TAGE(TAgged GEometric)是一种先进的分支预测器,专为现代高性能处理器设计:利用多个预测表,每个表使用不同长度的全局历史进行索引,并且每个条目都有一个标签,用于验证该条目是否适用于当前分支;通过选择最匹配的条目来进行预测,从而提高预测的准确性。

主要组件

基础预测器:通常是一个简单的两位饱和计数器数组,使用全局历史的一部分来进行索引。

多个标签预测表:每个表具有不同的历史长度,条目由索引和标签组成,标签用于验证条目是否匹配当前的分支历史。

设计步骤

1)初始化

基础预测器,初始化为一个大小为2n的两位饱和计数器数组,其中n是索引位数。

标签预测表,多个表,每个表的大小为2m,其中m是索引位数,每个条目包括一个标签和一个计数器。

2)预测过程

索引计算:对于每个标签预测表,使用不同长度的全局历史与分支指令地址组合计算索引。例如,索引计算可以是:index = hash(global_history[:length] + PC),其中 length 是当前表的历史长度,PC 是程序计数器。

标签比较:计算索引后,从每个表中提取条目并比较标签,如果找到匹配的条目,则该表的计数器值用于预测。

选择预测:从匹配的条目中选择使用最长历史匹配的条目进行预测,如果没有匹配的条目,则使用基础预测器的结果。

3)更新过程

更新基础预测器:根据分支实际结果(跳转或不跳转)更新基础预测器的计数器。

更新标签预测表:根据实际结果更新匹配的标签预测表的计数器,如果预测错误,则分配一个新的条目或者替换现有的条目。

4)分配新条目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值