前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CPU pipeline面试题Q4:如何实现基于硬件的分支预测?

CPU pipeline面试题Q4:如何实现基于硬件的分支预测?

作者头像
AsicWonder
发布2024-07-12 19:22:00
670
发布2024-07-12 19:22:00
举报
文章被收录于专栏:数字芯片实验室

基于硬件的分支预测有两个方面:分支条件预测和分支目标预测。 分支条件决定是否接受分支,分支目标决定目标地址。 这两个方面都同样重要。

分支条件预测

分支条件预测由静态预测和动态预测组成。 静态预测意味着分支要么总是被采用,要么总是不被采用。 在现代CPU技术中,静态预测没什么意义,比较过时,因此我们应该专注于动态预测。

最简单的解决方案是1位状态机。 当状态为1时,将进行预测taken,否则将预测not taken。 如果预测不正确,状态将被翻转。

为了进一步改进预测,状态机的状态可以用2位而不是1位。一个常用的2位状态机实现如下所示。

当状态为11或10时,将进行预测taken,否则将预测Not taken。状态只能通过2个失败的预测来改变。这在for-for循环中特别有用。使用1位预测器,内循环的最后一次迭代将始终失败,但使用2位预测器不会。

到目前为止,我们讨论的预测器只考虑“local”分支历史,即分支本身的先前行为。条件分支的行为也取决于程序到该分支的路径。这意味着最后几个条件分支或“global”历史的行为也会影响预测的准确性。

一个常见的解决方案是有(m,n)相关预测器,其中m代表“global ”历史最近发生了分支,n代表n位“local”预测器。A(2,2)相关预测器如下所示。

2位global分支历史记录跟踪2个最新分支的行为,并用于索引要使用的2位预测器。各组2位预测器由分支地址的最后4位进行索引,这意味着每组都有16个2位预测器。最终预测结果取决于global 分支历史和local分支地址。

“终极”解决方案被称为锦标赛预测器Tournament Predictor。顾名思义,两个预测器同时工作并相互竞争。有一个2位预测器用于选择哪个预测器提供结果。如果选择的预测器有两次错误的结果,而另一个预测正确,则第二个预测器被选中进行分支预测。相对而言,锦标赛预测器比其他类型的预测器更准确。

有种俄罗斯套娃的意思了。

分支目标预测 Branch Target Prediction

分支目标预测涉及尽快获得分支目标地址。如果没有分支目标预测,即使我们知道应该采取分支,我们也不知道该跳到哪里。

一个常见的实现是分支目标缓冲区Branch Target Buffer或BTB,以存储预测的分支目标地址。BTB由分支指令的PC或程序计数进行索引,预测的目标地址将在一个周期内可用。

总结

只有当条件预测和目标预测并存时,分支预测才能很好地发挥作用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档