静态转移预测技术

静态转移预测技术

1. 静态转移预测技术:十分简单,并且不会包含任何运行时的反馈信息
  • 优点:实现非常简单,只需要很少的硬件资源。问题在于在现代处理器中,晶体管的资源足够,因此足够提供动态转移预测的资源,但是静态的预测仍旧可以作为复杂的混合预测器中的组件,提供后备的预测方案使用。
  • 缺点:没有使用程序运行时的动态行为特征,预测器也将无法使用分支结果模式的变化,而这些变化通常是由于不同的程序输入和程序不同阶段的执行行为所决定的。
2. 基于剖视的静态转移预测:相对于基于简单规则的静态预测更好
  • 基本假设:程序的实际执行行为可以通过在不同输入集上执行程序来分析近似得到
  • 优点:能够利用分析得到近似的运行时行为信息,也能够利用编译时可以看到的程序高级特征,包括分支间相关信息之类的信息
  • 缺点:剖视技术需要在编译时进行,因此对于已经编译的程序需要再次重新编译才行。同时如果分析得到的信息不能够代表实际的执行行为,将也无法带来好处
3. 单方向的静态预测:简单的预测跳转/不跳转
  • 预测所有分支不跳转:1997年,Intel i486
    • 优点:简化了前端取指,因为不需要计算跳转的目标地址,也不会打断前端的取指流
    • 缺点:1997年有论文分析,对于整数程序,60%的分支都会发生跳转
  • 预测所有分支跳转:
    • 优点:通常情况下,比上一类更加准确
    • 缺点:硬件会更加复杂。因为预测跳转需要跳转地址的计算,这将导致处理器需要等待目标地址得到之后才能够进行跳转
    • 优化:MIPS的转移延迟槽,用于在分支指令在计算目标地址的时间内执行一条一定会被执行的指令。1986年有论文研究,编译器无法有效的使用所有可用的延迟槽,并且随着流水线级数增加,计算地址延迟会更大,浪费也会更多。
4. 向后跳转/向前不跳转策略
  • 向后跳转:如果分支指令的跳转地址是在该指令之前的指令,则预测会发生跳转。原因:大部分的后向分支都是循环分支,因此发生跳转的可能性更大
  • Intel Pentium4在处理器的动态预测器无法提供预测时,采用此方案作为备用策略
5. 基于程序的预测:利用ISA提供的分支hint接口,在编译时根据程序的高级信息指导分支指令的预测
  • 示例:对于异常处理的分支指令通常不会发生,而这些信息需要高级语言才能够反映出来

    void *p=malloc(bytes);
    if(p==NULL){
        errorHandlingFuc();
    }
    
  • 1993年,Ball和Larus提供了一组基于程序结构的启发式静态条件转移预测方案。这些方案充分的利用了分支指令的操作码,操作数和分支指令之后的指令块的特点,尝试基于常见的编程习惯提供分支预测
    在这里插入图片描述

6. 剖视分析
  • 剖视技术会在样本输入数据上执行一个工具版(instrumented)的程序,收集执行过程中的数据,然后将这些信息反馈给编译器。编译器利用这些信息进行静态的转移预测,并且预测结果通过ISA中的hint接口传递给硬件使用
  • 简单的分析方法:分析在执行时每条静态分支指令发生跳转的频率,然后指导预测。1992年,Fisher和Freudenberger测试了这样的方法,结果表明也仅是在部分程序中会带来较好的结果,而其它程序的执行行为将取决于程序实际的输入。
  • 优点:在硬件上容易实现
    来较好的结果,而其它程序的执行行为将取决于程序实际的输入。
  • 优点:在硬件上容易实现
  • 缺点:每条静态分支指令的预测结果固定,无法应对所有可能的程序输入和行为。ISA必须要提供接口给程序员或者编译器,用于传递hint信息。在硬件上,为了使用hint信息,流水线前端需要获取到分支指令之后才能够根据hint信息进行预测
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值