分支预测器实验简述

经 yyh 提醒,加了一条优化,在一些测试点上有很大提升(final2)。


本来没打算写的,一是因为最近太忙了,二是因为这个东西太玄学了,很多地方都在吊打我的常识。开始做的时候已经是提交当天下午了(当时还没有延期的通知),所以前面没做好数据记录。

拿到代码以后我首先试了很多种平凡的改法,比如 PC xor ghr 改为 (PC << 2) xor ghr 之类的,改进不大,大多数情况下都要比基本的 gshare 劣。

然后实现了一个仅用局部历史的预测器,测量几组数据发现比 gshare 优秀。嗯,很好。然后我又写了个预测器来选择是采纳局部信息的预测器还是全局信息的预测器,效果出乎意料的好。

本来故事到这里一帆风顺,当时单纯的我还有点疑惑为什么大家都花那么多时间来做这个作业——直到我发现我的基于局部历史的预测器有一个bug:我想写的是把 PC 和局部历史信息拼接起来作为地址去查表,但我写成了 (PC << 8) ^ lhr,其中 lhr 不止 8 位。这个东西看起来就没有什么道理,于是我顺手把这个 bug 改掉了,再一跑结果差的难以想象。好吧,那就像 gshare 一样改成 PC ^ lhr 呗,结果还是差,就是要左移八位再异或才是最优的。

这有什么道理?

后面还发生了很多很多的类似的情况,我完全解释不通为什么这么改会更好,事情已经朝着我无法控制的方向发展了。

后面的一个多小时我做的东西就是:随机改动某几个参数/某个地方的写法,在测试集上跑,根据结果的变化反过来再来改参数。这不就是在测试集上人肉梯度下降么?认识到这一点的时候我就一点往下优化的欲望都没了。

那就这样吧,最后放一个表:

LONG-1LONG-2LONG-3LONG-4SHORT-1SHORT-2SHORT-3SHORT-4SHORT-24SHORT-25SHORT-27SHORT-28SHORT-30
gshare0.57721.38617.78710.00522.917611.39013.72085.16290.00050.00180.4710.00747.0143
21bits0.10730.91396.75340.00660.68384.16963.31001.89590.00050.00180.04080.00741.3241
24bits0.09120.84666.81110.00730.60403.55913.21301.67890.00050.00180.04980.00751.0796
mixed0.12310.95476.90000.00530.82514.09813.20702.65270.00100.00230.24450.01101.4643
final0.09020.84606.81500.00730.60283.43963.21231.66860.00050.00180.04980.00751.0663
final20.08880.76706.61210.00651.16720.56022.30011.13480.00050.00180.14040.00830.2364
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 流水线分支预测是一种在计算机体系结构中常用的技术,用于优化指令执行的效率。在使用Vivado进行流水线分支预测时,我们可以通过以下几个步骤来实现。 首先,需要明确流水线分支预测的目标是为了减少由于条件分支导致的指令流水线的停顿,从而提高程序的执行效率。在采用了流水线分支预测技术后,我们可以在分支指令的执行过程中预测分支的目标地址,并提前取出并执行该目标地址处的指令,从而减少流水线的停顿。 其次,Vivado提供了丰富的资源和工具来帮助我们实现流水线分支预测。其中,重要的组件之一是分支目标缓冲器(Branch Target Buffer,BTB),它可以存储分支指令的目标地址,并根据历史分支的结果来预测分支的目标地址。此外,Vivado还提供了分支预测器,它可以根据分支指令的特征来确定是否进行分支预测,并选择适当的预测策略。 在进行流水线分支预测时,我们还需要考虑分支指令的静态特征和动态特征。静态特征包括分支指令的类型和位置,动态特征则包括分支历史信息,如分支的执行结果。通过综合考虑静态特征和动态特征,我们可以选择合适的流水线分支预测策略,提高分支预测的准确性。 最后,我们需要进行仿真和验证,以确保流水线分支预测的正确性和有效性。通过运行实际程序和对比预测结果和实际结果,我们可以评估分支预测的准确性,并对优化策略进行调整。 总而言之,流水线分支预测vivado是一种有效的优化技术,可以提高分支指令的执行效率。通过合理选择分支预测策略,使用Vivado提供的工具和资源,我们可以实现准确、高效的分支预测。 ### 回答2: 流水线分支预测是指在计算机流水线操作中,为了解决分支指令带来的流水线停顿,采用“猜测”的方式来提前执行分支指令。Vivado是一种适用于FPGA设计的开发软件,通过Vivado可以对FPGA的设计进行综合、实现和生成比特流文件。 在流水线中,分支指令可能会导致流水线中断,因为在执行分支指令之前,无法确定分支的目标地址。为了充分利用流水线的并行性,可以采用分支预测的方法来提前执行分支指令。分支预测的基本原理是根据历史分支的结果,采用一定的算法对下一次分支的目标进行预测。如果预测正确,则可以提前执行分支指令;如果预测错误,则需要进行流水线中断和清空部分流水线指令。 Vivado是一种先进的FPGA设计开发软件,它提供了丰富的功能和工具,可以实现高效的FPGA设计。在Vivado中,流水线分支预测可以通过在设计中增加预测器来实现。预测器可以根据历史分支的结果进行训练,然后根据训练结果对下一次分支进行预测。通过使用Vivado中的分支预测功能,可以使得FPGA的设计在执行分支指令时可以更好地利用流水线的并行性,提高整体的性能。 总之,流水线分支预测是为了解决分支指令带来的流水线停顿问题而采用的一种技术。在Vivado中,可以通过增加预测器来实现流水线分支预测,从而提高FPGA设计的性能。 ### 回答3: Vivado 是赛灵思(Xilinx)公司推出的一款用于FPGA(现场可编程门阵列)开发的综合工具。流水线分支预测是一种用于提高CPU性能的技术,在Vivado 中也得到了支持。 流水线分支预测是指在程序执行过程中,当遇到条件分支指令(如if语句或循环)时,预测分支的方向,从而在程序继续执行之前预测下一条指令的位置。这种预测机制可以减少分支带来的流水线停顿,提高CPU的指令执行速度。 在Vivado 中,流水线分支预测的实现是通过逻辑电路和控制器相结合来完成的。Vivado 的软件工具提供了一些优化技术,如自动路由和时序优化,以便实现高效的流水线分支预测。这些技术可以帮助开发人员在FPGA中实现更好的预测性能,并最大程度地减少流水线停顿。 通过在Vivado 中配置适当的参数和设置,开发人员可以根据具体的应用需求来调整流水线分支预测的性能。Vivado 还提供了大量的文档和教程,以帮助开发人员理解和使用流水线分支预测功能。 总之,Vivado 是一款强大的FPGA开发工具,提供了流水线分支预测技术的支持。通过使用Vivado,开发人员可以有效地实现流水线分支预测,提高CPU性能和指令执行速度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值