RSIC-V 分支预测

一、概述

在处理器中,分支预测是除Cache之外另一个决定处理器性能的重要内容。分支预测本质上是对分支指令的结果进行预测,分支指令包含两个要素。

1.方向,指令有跳转指令和非跳转指令两种,跳转指令中又包含无条件跳转和有条件跳转,例如jump指令是无跳转指令,branch指令是有条件跳转。

2.目标地址,如果指令需要跳转,那么就需要知道跳转的目标地址,而跳转目标地址也会存在于指令中。跳转目标地址在指令中的存在形式分为两种,

(1)直接跳转,指令中直接提供了立即数形式表示的相对于PC的偏移值offset,PC加上offset就可得到跳转目标地址。在指令解码阶段就可以提取出偏移值,从而提高分支预测的准确性。但是指令长度直接决定了offset的跳转范围。

(2)间接跳转,目标地址通常存在于通用寄存器中,由于是通用寄存器,所以可以跳转到程序的任意地方,同时目标地址也是其他指令的执行结果。在没有得到最终的目标地址之前,当前执行的预测方向上的指令又可能都是错的,这就增加了分支预测失败时的惩罚。好在绝大多数的分支指令跳转都是由一定规律的,比如Call/Return指令。

对于流水线不深的简单处理器而言,通常采用静态分支预测方法,即认为所有的分支指令不跳转,也就是认为处理器一直是顺序取指,顺序执行,如果发生了分支预测失败的情况,惩罚相对较小,对处理器性能也不会有太大影响。

但是对于超长流水线的高性能处理器而言,静态分支预测已经远远不能满足要求,尤其是分支预测失败时的惩罚让人无法承受。动态分支预测应运而生,所谓动态分支预测指的是根据分支指令的历史跳转记录进行预测。

要进行分支预测,就需要处理器将指令从I-Cache中取出来,判断是否是分支指令,如果是分支指令,将其送入分支预测单元,如下图所示。

因为从取指、解码再到分支预测,往往需要几个周期才能得到预测结果,这极大地影响了性能处理器的性能,尽可能地减少这个过程的处理时间才是当务之急。最理想的结果是当前周期得到取值指令地址,同时进行分支预测,这样在下一个周期就可以根据分支预测结果进行取指。

二、分支指令的方向预测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值