间接分支预测器:ITTAGE [3]、基于VPC的分支预测器、TAP预测器 [4]、call/return 堆栈预测过程返回目标地址 [2]。

背景:面向对象编程中存在许多间接分支指令。多态性(polymorphism)使用通过间接分支实现的动态分派函数调用来支持动态子类型,间接分支在虚函数调用中是必要的。大约28%的分支误预测是来自间接分支[1]。除了虚函数调用, 间接分支在switch-case语句、跳转表、函数指针调用、程序返回和接口调用中也广泛使用。

程序返回:不同的地方调用同一个函数,同一个分支指令但返回地址是不同的,即有多个目标地址。

间接分支指令本质上比条件分支(conditional branch)更难预测,因为后者只是简单地预测跳转或不跳转,而间接分支跳转地址无法在指令执行前得到,因此还要预测特定地目标地址值

相关工作:间接分支指令导致的控制流中断主要通过两种策略缓解。第一种是基于软件分析和编译器优化可以从程序中学习从而预测分支目标,或者最小化间接分支的频率。第二种是基于硬件机制动态预测分支目标。

基于硬件:最简单的目标预测硬件机制是分支目标缓冲区(BTB),使用分支地址索引和缓存分支的最后一个目标地址。对于目标地址唯一的单态指令,如直接分支指令,BTB是足够的,但间接分支可能是多态的,因此BTB往往不够,2位的BTB也不够。

VPC(Virtual Program Counter) 预测器:其思想是把具有T个不同已知目标的多态分支指令看作一系列T个单独的之间分支指令。预测器试图在硬件中“偏离”间接分支指令,以预测哪个测试目标是正确的目标输出。VPC不适用专用硬件,而是重用现有的条件分支预测器和BTB。查询条件分支预测器,并使用对应于间接分支T个目标的“虚拟PC“访问BTB。输出taken的第一个虚拟PC所对应的BTB目标作为间接分支目标


基于感知器的Bit级间接分支预测器(BLBP)

结构

BLBP基于Scaled Neural Indirect Prediction(SNIP)[5]。

BLBP使用一个64路组相连的间接分支目标缓冲区(IBTB),由间接分支PC中的9位索引。

针对每一位的感知器:

BLBP以与散列感知器相同的方式训练感知器,它不是为每个目标训练一个单个权重,而是训练一个长度为K的权重向量,表示预测目标地址每一对应位为1。

BLBP有8个历史特征索引表,称为子预测器(sub-predictor),8个子预测器使用不同的历史长度或局部历史进行训练。每个子预测器对每个可能的目标地址的值进行预测,该值反映了该预测器认为其所对应的目标地址中的位是1的置信度。对于每个可能目标的每一位,BLBP把每个子预测器对该位的输出相加,并由所有预测位所对应的输出构造一个向量(y-out),然后计算每个可能的目标和该向量的相似度。具有最高相似度的目标被选为预测结果。相似度由向量点积表征。

BLBP把最近条件分支的结果记录到630位的全局历史中,并所使用不同长度和部分的全局历史训练7个不同的子预测器。同时,BLBP也把先前最近256个分支的迭代结果分别记录到10位局部历史中。BLBP使用局部历史索引每个子预测器。

图4中,第一个子预测器使用局部历史进行训练。其余7个子预测器使用不同历史长度和历史间隔进行训练。每个w-ij代表目标地址中的一位,向量由所有预测位构成,图中假设只预测目标地址中的4位。

采用感知器进行预测:

算法1.预测算法

k=1...K,代表k个预测位;(同一分支目标地址多个bits)

i=1...N,代表N个子预测器;(同一分支不同历史长度预测器)

j代表预测器中该分支对应的权重的索引值。

Gi是预测器中第i个位置的历史长度。

M代表权重表中的行数,因此索引值是 Gi mod M。(不同分支)

首先,预测器使用历史索引权重表得到权重向量,其中每个向量对应目标地址中的一位。权重在-7到7之间,假设初始值均为ie3。然后预测器计算向量和目标地址预测位向量的点积,采取点积最大的目标地址作为预测结果。

 图3.简化的预测和训练算法

 训练感知器:

算法2.权重更新算法

如果实际目标地址中该预测位为1,则其在8个预测器中对应权重增加;如果为0,则权重减少。

算法中 k=1...K,代表k个预测位;i=1...N,代表N个预测器;j代表预测器中该分支对应的权重。

优化技术

文章中采用如下一些优化以提高预测器的精度:

  • 局部历史:使用具有目标地址3位的一位寄存器记录局部历史,预测一个给定位的第一个权重向量是有局部历史的散列进行索引的。
  • 采用历史间隔而非几何历史:其余权重根据历史间隔由全局历史的散列进行索引。历史间隔的选取是初始时采用几何历史,然后通过爬山法进行改进,随机改变历史间隔的起始点和结束点,如果该间隔使MPKI提高则保留。
  • Transfer Functions:和多视角感知预测 [6]一样,对求和前的权重采用一个非线性转变汉书可以有效提高精确度。凸函数可以放大更高权重的影响并减少较低权重的影响,允许有限的权重值范围以更精确地对预测位进行建模。
  • 自适应阈值训练:类似O-GEHL和先前的感知器预测器,BLBP使用自适应阈值训练算法,调整训练过程中的阈值,使得正确预测的训练实例数大致等于错误预测的数量。
  • 选择性位训练:许多分支可能的目标地址中,最低位相同的概率可能较高,此时若采取预测最低位的方法不太适用。因此,预测器选择性的预测在所有目标地址中都不同的bit,从而减少用于多个分支的向量之间的破坏性混叠(aliasing)。
  • BTB压缩:BTB中的分支目标被表示为一种压缩格式,这种压缩格式基于区域(region-based)的组织(在ITTAGE中提出)。有许多内存区域表示为高阶目标位(higher-order bits)并存储在数组中。 BTB 中的目标被表示为这些区域之一加上一个偏移量。区域的数量很少,并且一个偏移量中的位数少于一个完整的目标,所以我们可以用大约一半的数量来表示一个 64 位的目标位。 区域阵列通过最近最少使用 (LRU) 替换进行管理。 BTB 仅存储分支 PC 的部分标签,在偶然标签匹配的低概率与部分标签的存储优势之间进行权衡

实现

  • 输出y_out:有N个表,每个表的每项是长度为K的向量,求和运算进行在 N 个表的 K 个位置中的每个位置上并行输出。每个权重4bits是精度和空间效率的很好折衷。
  • 计算Cosine相似度:得到y_out后,计算其与潜在目标表示地址的位向量之间的非归一化余弦相似度(即两个向量角的余弦)。W N,M,K是一个4bit整数权重的三维数组,该数组实现为N个SRAM数组,每个数组有一和不同的全局历史散列索引,索引得到权重向量,每一预测位对应一个权重。点积运算等价于计算两个向量的余弦相似度。余弦相似度越高,表示两个向量越接近。
  • 重复计算余弦相似度:最多有64个可能的目标地址,因此最多需要计算64个余弦相似度。实际中绝大多数间接分支只有一些可能的目标地址,从图7可以看出,大多数间接分支只有不超过5个的目标地址。一个可行的实现是每个周期并行计算5个余弦相似度,成本适中,这样超过一半的预测只需要一个周期,90% 的预测不超过 4 个周期。

 查找BTB

该算法需要收集所有匹配一个分支目标来自 BTB 的给定分支 PC。 这可以通过内容可寻址存储器 (CAM) 或通过顺序查找类似于VPC算法采取的策略。

测试

使用CBP的仿真架构,增加了额外的BTB代码和包括BLBP在内的间接分支预测器。

为什么用MKPI (misprediction per kilo-instruction) :考虑了分支指令与其他指令相比的相对频率,文献 [7] 中证明了 MPKI与性能之间的线性关系。

使用一个很大的BTB作为间接分支预测的baseline。

几点优化的效果

分别描述了只打开一种优化或只关闭一种优化时,与ITTAGE相比BLBP性能及MPKI的相对水平。

其中使用历史间隔效果最为显著,有选择性地选择预测位最次。

IBTB使用64路组相连的好处:结构的组相连足够大从而可以应对冲突未命中且可以容纳具有很多目标的分支。

参考文献:

[1] H. Kim, J. A. Joao, O. Mutlu, C. J. Lee, Y . N. Patt, and R. Cohn, “Vpc prediction:Reducing the cost of indirect branches via hardware-based dynamic devirtualization,” in Proceedings of the 34th Annual International Symposium on Computer Architecture, ISCA ’07, (New Y ork, NY , USA), pp. 424–435, ACM, 2007.

[2] D. R. Kaeli and P. G. Emma, “Branch history table prediction of moving target branches due to subroutine returns,” in [1991] Proceedings. The 18th Annual International Symposium on Computer Architecture, pp. 34–42, May 1991.

[3] A. Seznec, “A 64-kbytes ittage indirect branch predictor,” in Proceedings of the JWAC-2: Championship Branch Prediction, June 2011.

[4] Z. Xie, D. Tong, M. Huang, X. Wang, Q. Shi, and X. Cheng, “Tap prediction: Reusing conditional branch predictor for indirect branches with target address pointers,” in 2011 IEEE 29th International Conference on Computer Design (ICCD), pp. 119–126, Oct 2011.

[5] D. A. Jiménez, “Snip: Scaled neural indirect predictor,” in Proceedings of the
JWAC-2: Championship Branch Prediction, June 2011.

[6] D. A. Jiménez, “Multiperspective perceptron predictor,” The Fifth Championship
Branch Prediction Competition (CBP-5), June 2016.

[7] Z. Wang and D. A. Jiménez, “Program inteferometry,” in Proceedings of the 2011
IEEE International Symposium on Workload Characerization, November 2011.

[8] D. A. Jiménez, “Strided sampling hashed perceptron predictor,” in Proceedings of
JWAC-4: Championship Branch Prediction, June 2014.

针对间接分支的比特级感知预测器BLBP “Bit-level Perceptron Prediction for Indirect Branches”(2019 ISCA)相关推荐

  1. 径向基函数神经网络_基于RBF神经网络的网络安全态势感知预测研究

    点击上方"网络空间安全学术期刊"关注我们 基于RBF神经网络的网络安全态势 感知预测研究 钱建, 李思宇 摘要 针对网络安全态势的感知问题,结合巨龙山和者磨山风电场的运行情况,文章 ...

  2. 【论文翻译】(UAI 2018)使用感知预测网络进行潜在物理属性的无监督学习

    目录 摘要 1 介绍 2 相关工作 3 模型 3.1 感知-预测网络 3.2 交互网络 3.3 感知网络 3.4 预测网络 4 实验 4.1 物理系统 4.2 模型架构 5 结果 5.1 提取潜在属性 ...

  3. 群智感知-MobiSys2012-论文简析:基于移动电话的参与式感知预测公交车的到站时间

    MobiSys2012论文简析:基于移动电话的参与式感知预测公交车的到站时间 论文思想 论文背景 论文工作 解决方法 总结 论文思想 利用手机+群智感知的思想以节能低开销(非用户定位)的方法预测公交车

  4. 感知算法论文(一)YOLACT: Real-time Instance Segmentation(2019)译文

    文章目录 摘要 1. 引言 2. 相关工作 3. YOLACT 3.1 模板的产生 3.2 Mask 系数 3.3 Mask集成 3.4 其他情况 4. 检测器 5. 其他贡献 6. 结果 6.1 实 ...

  5. TypeWriter: Neural Type Prediction with Search-based Validation基于搜索的神经网络预测器

    ABSTRACT 维护使用动态类型语言(JavaScript,Python等)写的大型数据库是非常有挑战性的.简单 数据兼容性错误激增,缺乏IDE支持和API 难理解.最近的一些工作尝试用静态分析或概 ...

  6. LncLocator 2.0:具有可解释深度学习的长链非编码RNA的细胞特异性亚细胞定位预测器

    Motivation:长链非编码RNA ( lncRNA )通常以组织特异性的方式表达,lncRNA的亚细胞定位取决于它们表达的组织或细胞系. <特色> 以前用于预测lncRNA亚细胞定位 ...

  7. TAGE-SC-L预测器 “TAGE-SC-L Branch Predictors”(2016)

    TAGE + 简单的辅助预测器统计校正器(statistical corrector简称SC)+ 循环预测器(loop predictor简称L) 为什么要用不同长度的历史? 既适用于有较长历史的分支 ...

  8. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...

  9. predictor = dlib.shape_predictor()关键点预测器用法

    predictor = dlib.shape_predictor('data/data_dlib/shape_predictor_68_face_landmarks.dat') 功能:标记人脸关键点 ...

最新文章

  1. easymock快速入门
  2. C++ Vector用法深入剖析
  3. Android ANR视角InputDispatcher
  4. 父子组建传值_浅谈Vue父子组件和非父子组件传值问题
  5. 苹果为了提升销量真是拼:用你的iPhone做最后一件好事
  6. 严重: Servlet.service() for servlet [taotao-manager] in context with path [] threw exception [Request
  7. C++基础知识点(3)
  8. airpin linux电脑,AirPinPcSender
  9. Office2010的故事 1、从精简版无法升级
  10. 7年了,为什么智慧城市还不智慧?
  11. 对话框ModifyStyle(0, WS_MINIMIZEBOX)最小化按钮无效的解决方法
  12. win10 安装mysql 卡死_win10安装Mysql5.5卡住假死
  13. dms mysql定义变量_数据管理DMS:自建MySQL数据库 全量SQL诊断功能发布啦!-阿里云开发者社区...
  14. FLAC3D 的入门介绍
  15. golang牛牛算法规则与聊天功能
  16. Spark中repartition和coalesce的用法
  17. ubuntu10.10下更新无线网卡驱动
  18. 本Blog被http://www.dotnetnukeblogs.com/ 收录
  19. 记一次折腾可移动式Ubuntu 20.04 安装在折腾折腾系列的WD p50上(即移动式挂在nvme协议下的移动固态硬盘以uefi模式启动的Ubuntu20.04 (to go))
  20. 美国高清晕渲地形图分享,每一幅都值得珍藏

热门文章

  1. 详细线上问题跟进流程
  2. 杰里之用于做对讲机【篇】
  3. MHDD详细图解教程一
  4. 强烈推荐,7个资源搜索网站,从此告别资源付费
  5. 16款免费开源的商业智能工具
  6. 在Word 中用C#查找Wingdings符号
  7. 互联网家装驶入深水区:谁在求变,又有谁在裸泳?
  8. 80年前的奥运会火了电视,今年火了移动视频
  9. 为什么websocket没有被广泛使用,他解决了前后端数据没有实时刷新的问题,原因来了。
  10. 信创版本电脑使用心得