【基于C++】利用pin工具模拟分支预测器Agree Predictor

实现Agree Predictor

  1. 题目分析

现代CPU通常使用超标量的深度流水线来提高性能,而超标量和深度流水线通常需要分支预测技术来加以配合。尤其是在多发射的深度流水线架构中,分支预测的准确率直接影响流水线效率、取指带宽利用率等性能指标。了解分支预测的实现、提升分支预测的准确率可以说,至具有很大的现实意义。
本实验需要使用C/C++语言,利用Pin工具进行代码插桩,在spec的实际程序上模拟实现分支预测器,统计预测的准确性。对于分支预测器而言,需要根据每条分支指令的地址,每条分支指令对应的分支历史情况,全局历史、局部转移历史的情况,以及多个不同的分支预测器的预测准确性来,来做出该条指令是否会产生分支跳转还是顺序执行的预测(以及给出目标分支地址)。
指令的地址可以通过Pin插桩的方式在代码直接中获得,其他的辅助信息则需要构建更多的数据结构来保持与维护。因而在分支预测器实现的过程中,首先需要构建饱和计数器、移位寄存器等类、以及分支预测器的基类;在此基础上进一步地编写动态分支预测器、锦标赛分支预测器,在不同的预测器中引入饱和计数器、移位寄存器来保存分支历史、全局/局部历史信息、预测历史信息,并作出预测。
饱和计数器类似于“状态机”,根据分支情况进行状态的更新与分支预测的输出,其示意图如下。
在这里插入图片描述

预测器的工作大都可以分为两步:第一步是预测,根据各种已知信息预测出后续指令将会顺序执行还是出现跳转;第二部是更新,根据预测结果与指令的实际跳转情况,更新维护的各种辅助信息,为未来的分支预测做好准备。

The Agree Predictor:A Mechanism for Reducing Negative Branch History Interference中,作者指出,在二阶段全局历史预测器中,GHR的使用会导致PHT干扰,即原本由一个分支处理的一个PHT条目,由于GHR的散列处理,导致这个条目由不同的分支进行更新,如下图所示。
在这里插入图片描述

文章通过提出一种新的PHT结构来试图从整体上消解这种干扰。如下图所示,在agree predictor中,我们将一个偏置位(即一个1位的饱和计数器)附加到每个分支,用以指示最可能的结果,根据每次程序的是否跳转进行更新。PHT中的2位饱和计数器不再是预测被驱动的分支的方向,而是预测分支是否沿着偏置位指示的方向前进,即分支的实际方向是否与偏置位一致;当每次经过分支语句时,PHT中的2位计数器将被更新。在这种预测方案中,如果分支的方向与偏置位一致,PHT中的2位计数器就增加;如果分支与该位不一致,计数器就减少。
在这里插入图片描述

  1. 实验过程
    根据论文的说明,该预测器需要维护1个2位饱和计数器数组作为PHT,1个1位饱和计数器数组,以及一个移位寄存器GHR存储分支历史。根据论文与博客的说明,对预测器的预测、更新函数进行调整,实现代码如下:(以下省略)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值