zoukankan      html  css  js  c++  java
  • 指令级并行:动态分支预测技术

    动态分支预测技术用于处理控制冒险。其基本思想是,在遇到控制冒险时,预测转移方向,并执行该方向的指令,猜对时继续执行后续指令,猜错时回头执行另一方向的指令。

    分支预测算法分为静态和动态两种。静态预测算法直接进行固定的猜测或按指令能容进行猜测,其常见时机则分别为IF段和ID段。动态预测算法根据转移历史来预测新的转移方向,其主要类型有饱和计数预测、相关预测、自适应预测等,均可以用于IF段预测。

    基本预测器即饱和计数预测器通常将分支历史用两个二进制位表示,根据高位来预测,根据结果来更新,其本质是一个具有4各状态的DFA。它只根据当前分支的分支历史来预测,在连续两次错误预测时改变预测方向,用于循环时性能较好。实现上,需要用分支历史表来记录各分支指令地址对应的分支历史信息,设置查找更新机构来实现数据的更新。

    相关预测器使用其它分支的行为来预测当前分支,(m,n)预测器包含m位全局历史和n*2^m位模式历史,根据前m个分支的行为去选一个预测器,根据这个预测器内的分支历史来预测当前方向。其性能远好于基本预测器。在此基础上再做改进,有锦标赛预测器,即全局/局部自适应预测器,由自适应选择器来决定是使用全局预测器还是局部预测器。锦标赛预测器是目前最好的预测器。

    预测时应当可以获得分支目标地址,否则预测是没有意义的,因此,仅有分支历史表BHT的信息不足以进行动态分支预测的实现,我们通常需要分支目标缓冲器BTB来实现转移历史的管理。BTB是一个类似Cache的结构。查找时,用PC查BTB,当标记与PC内容相等时命中。当BTB缺失且执行结果为转移时建立新行。当BTB命中时根据执行结果更新对应行的转移历史。

    在设置BTB后,IF段时查BTB,命中时写入PC,否则PC正常自增。ID段判断是否为BTB缺失的分支指令,此处可以进行静态预测。EX段根据执行结果更新BTB。当出现错误预测时,需要清空流水线以恢复现场,并重置PC。

    采取动态分支预测的MIPS流水线,若在IF段预测,则预测正确时停顿0拍,错误时比阻塞法多停顿一拍。若在ID段预测,则预测正确时停顿1拍,错误时比阻塞法多停顿一拍。当然,如果没有BTB只有BHT,那么预测应当在转移目标地址产生时进行预测,通常为ID段。

  • 相关阅读:
    理解 Delphi 的类(十) 深入方法[15] 调用其他单元的函数
    理解 Delphi 的类(十) 深入方法[13] 在 interface 区声明的方法
    理解 Delphi 的类(十) 深入方法[12] implementation 区中的方法
    理解 Delphi 的类(十) 深入方法[6] Result
    什么是B*树倒排索引技术 已解决 搜搜问问
    caoruntao的博客 数据结构及算法分类文章列表 ITeye技术网站
    PForDelta索引压缩算法的实现
    计算机词汇(融合了搜狗所有的计算机词库)_搜狗输入法词库
    一种由B+树实现的倒排索引《电脑知识与技术》2011年08期
    海量数据处理专题(九)——外排序
  • 原文地址:https://www.cnblogs.com/mollnn/p/14773588.html
Copyright © 2011-2022 走看看