TAGE predictor

news2024/11/15 15:40:59

参考文档:分支预测算法(一):TAGE|SunnyChen的小窝

TAGE的基础概念

        TAGE是现今最经典的分支预测算法,TAGE及其后续的变体都是当今高性能微处理器的分支预测算法基础。因此,要聊分支预测算法的话题必定绕不开TAGE。

        TAGE的全称是 TAgged GEometric history length (predictor),也就是基于带标签的几何级数递增历史长度的分支预测算法,其核心主要是两个部份:

 

 TAGE的组成:

  • 一个直接索引预测表,T0, 双峰预测方式,用于在Tn表都miss的时候,提供基本的预测;
  • 若干个基于几何级数递增的分支历史长度进行匹配的索引表项Tn;
    • 索引方式:PC值和GHR的值,继续hash操作;
    • 标签的意义:索引到具体的entry后,需要再次进行pc和GHR的值的hash操作,与这个entry中的tag进行比较,才能决定是否hit;
    • 这就意味着,索引的计算方式,以及tag的计算方式,是不一样的,可以有多种方式;
    • 每个表使用分支指令的地址与不同长度的全局分支历史的哈希值进行索引,每个表Ti匹配的全局分支历史长度服从几何级数递增:L(i) = (int)(ai-1 * L(1))

TAGE预测器的特点:

  • 使用基于几何级数递增的分支历史长度允许预测器在允许捕捉超长全局分支历史模式的同时,将大部份的存储资源分配给使用较短的分支历史长度进行匹配的表项。
  • 因为能够匹配到很长的GHR的场景是非常少的,大部分都是集中在比较短的范围内,这样,既可以保证很长的规律能捕捉到,也能保证存储资源不会因为很少的场景而过度的浪费;

TAGE架构

一些基本的术语:

       

从上图中可以看出TAGE的特点:

  • T0表是使用PC直接索引的2位饱和计数器组成的bimodal表项;
  • TN表是使用PC与对应全局分支历史长度进行哈希索引的带标签表,其每个表项中:
    • pred:3位的有符号饱和计数器,符号位表示预测跳转与否,1表示预测跳转(taken),0表示预测不跳转(not-taken)
    • tag:PC与分支历史哈希得到的标签信息,不同TN表的tag长度可以相同,也可以不同。
    • u:2位useful计数器,表示当前表项“有用”的程度。

预测方式

根据pc值和GHR值,并行索引T0~Tn;

预测结果由 tag hit的最长的Tn表的pred计数器的符号位给出;如果都没有命中,则由T0表的2位饱和计数器给出;

信息更新

  • 对useful的更新
    • fpred的结果,与最终分支指令的结果相同,则pcpn.u + 1;
    • 不同,则pcpn.u - 1;
    • u满足饱和计数的规则;
    • 同时,useful计数器u还起到年龄计数器的作用,其MSB(bit-1)以及LSB(bit-0)会周期性的交替重置为0。原文中的周期设置为每256K个分支指令进行一次重置操作。
  • 对pred的更新
    • fpred与最终的分支指令跳转结果相同:
      • 最终结果为taken, 则pcpn.pred+1;
      • 最终结果为not-taken, 则pcpn.pred-1;
    • fpred与最终的分支指令跳转结果不同,更新方式与上面是一致的;
  • 错误预测的更新
  1. 更新pcpn.pred, 根据最终结果进行更新;
  2. 如果pcpn不是最长的全局分支历史信息表,也就是Ti(0<i<max), 则需要往使用更长的全局分支历史信息的表上分配一个新的entry;
    1. 根据PC值和GHR,计算出idex, 然后基于该index, 读取比i更大的所有的表中,对应idex位置的entry中的u位;
    2. 读出来的多个entry中的u位,如果都不是0,则所有比i更长的全局分支历史信息表项的u值都-1;
    3. 如果存在一个表k,索引到的u==0,则将该预测信息,分配到该entry中;
    4. 如果存在多个这样的表(0<i<j<k<max),优先分配第一个(j);
  3. 新分配的表项,需要进行如下的初始化步骤,此时需要根据该分支指令的指令结果进行处理:
    1. pred的初始化;
      1. 该分支指令的结果为taken, 则pred==3'b100,弱跳转;
      2. 该分支指令的结果为not-taken, 则pred==3'b011,弱不跳转;
    2. tag的初始化:pc值与GHR的哈希值;
    3. u初始化为0,strong not useful;

其他说明

  • 之所以每次错误预测,都只会分配一个且仅此一个表项,是为了最小化一些偶发性或者与分支历史不甚相关的分支指令占据过多的表项的现象。
  • useful计数器的作用机理:
    • 保证最近“有用”的表项不会被替换掉
    • 维护一种近似于伪LRU的替换策略
    • 初始化为0,是为了保证该表项在有效的提供准确的预测结果时才可以获得长时间逗留的资格;而为了防止发生乒乓替换的现象,分配的优先级仲裁可以防止该现象的发生。

改进方向

        某些时候,当最长命中表项的pred计数器表明,该预测结果信心不足时,altpred会拥有更准确的预测结果。

        当然,如何定义强信心以及弱信心也可以有多种不同的定义方式,比如可以定义仅3'b100以及3'b011为弱信心,其他都为强信心。当然,你也可以定义仅3'b111以及3'b000为强信心,其他都为弱信心。

静态策略

        如果最长命中表项pcpn的预测信心为强,则选择最长命中表项的预测结果;否则,选择altpred为最终预测结果。

动态策略

        使用一个有符号的USE_ALT_ON_NA计数器来作为一个动态的阈值,来决定当最长命中表项信心不足时,最终预测结果的选择方式。USE_ALT_ON_NA可以是单个计数器,也可以是一个计数器寄存器组,其使用分支指令的PC直接索引。当最长命中表项的预测信息不为弱且USE_ALT_ON_NA为负时,选择最长命中预测的结果,否则选择altpred。 当altpred与最终的分支结果相同时,USE_ALT_ON_NA递增,反之则递减。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】(C语言):快速排序(递归)、归并排序(递归)、希尔排序

快速排序&#xff08;递归&#xff09; 左指针指向第一个数据&#xff0c;右指针指向最后一个数据。取第一个数据作为中间值。右指针指向的数据 循环与中间值比对&#xff0c;若大于中间值&#xff0c;右指针往左移动一位&#xff0c;若小于中间值&#xff0c;右指针停住。右…

【学术会议征稿】第五届大数据、人工智能与物联网工程国际会议

第五届大数据、人工智能与物联网工程国际会议 2024 5th International Conference on Big Data, Artificial Intelligence and Internet of Things 第五届大数据、人工智能与物联网工程国际会议&#xff08;ICBAIE 2024&#xff09;定于2024年10月25-27号在中国深圳隆重举行。…

新功能上线 | 自定义工作台,成就个性化办公

为进一步优化用户操作体验&#xff0c;帮助用户更轻松、便捷的使用采购系统&#xff0c;隆道平台面向用户推出自定义工作台。根据个人的工作习惯和需求&#xff0c;轻松定制专属的工作界面。无论您需要快速查看待办事项&#xff0c;还是实时追踪业务进度&#xff0c;或是全面掌…

掌握这五大关键,轻松驾驭AI大模型项目落地

随着AI技术的蓬勃发展&#xff0c;众多企业纷纷投身于大模型项目的浪潮中&#xff0c;力求在这场技术革新中占据一席之地。然而&#xff0c;成功与失败并存&#xff0c;背后的原因引人深思。本文将为您揭示五大关键因素&#xff0c;助您轻松驾驭AI大模型项目的落地过程。 一、…

FL Studio 24.1.1.4234 Crack

Image-Line bvba 的 FL Studio 是一款数字音频工作站&#xff08;DAW&#xff09;软件&#xff0c;是音乐家、制作人和音频工程师的完整音乐制作解决方案。FL Studio 以其直观的界面、强大的功能和广泛的性能而著称&#xff0c;用户可以利用它高效、创造性地进行作曲、编曲、录…

动手学深度学习53 语言模型

动手学深度学习53 语言模型 语言模型代码QA 语言模型 核心&#xff1a;预测文本出现的概率 最常见应用&#xff1a;做预训练模型 当数据序列很长怎么办&#xff1f;常用n-gram 。 一元语法&#xff1a;马尔科夫假设tao0 基本认为每一个字是独立的&#xff0c;不管前面的东西。…

zabbix“专家坐诊”第245期问答

问题一 Q&#xff1a;vfs.dev.discovery拿的是哪里的文件&#xff0c;我看源码里面获取的是/proc/parttions里面的信息&#xff0c;但是我没有这个device&#xff0c;是怎么获取出来的&#xff1f; 在这里插入图片描述 A&#xff1a;检查下系统内核版本或者agent程序版本&…

收银系统源码

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 私有化独立部署/全开源源码&#xff0c;系统开发语言&#xff1a; 核心开发语言: PHP、HTML…

数据结构(初阶1)

文章目录 一、复杂度概念 二、时间复杂度 2.1 大O的渐进表示法 2.2 时间复杂度计算示例 2.2.1. // 计算Func2的时间复杂度&#xff1f; 2.2.2.// 计算Func3的时间复杂度&#xff1f; 2.2.3.// 计算Func4的时间复杂度&#xff1f; 2.2.4.// 计算strchr的时间复杂度&#xff1f; …

区间贪心

目录 1.贪心算法的思想 2.区间贪心算法常用的一些题目类型 1.选择最多不相交区间问题 P2970 [USACO09DEC] Selfish Grazing S 1.思路分析 2.上代码 2.区间选点问题 P1250 种树 1.题目 2.方法一 1.代码解释 3.方法二 3.区间合并问题 P2434 [SDOI2005] 区间 1. 思路…

容器docker

文章目录 前言一、docker1.1 为什么有docker1.2 docker架构1.3 docker 安装1.4 docker中央仓库1.5 docker 基本指令1.6 docker数据卷&#xff0c;挂载例&#xff1a;nginx 数据卷挂载例&#xff1a;mysql 本地持久化 1.7 镜像制作镜像结构dockerfile基础指令容器生成镜像 1.8 d…

JFlash读取和烧录加密stm32程序

JFlash读取和烧录加密stm32程序 安装后JFlash所在的目录&#xff1a;C:\Program Files\SEGGER\JLink 一、烧写加密程序 1、打开C:\Program Files\SEGGER\JLink目录&#xff0c;找到JFlash.exe,双击它&#xff0c;就可以打开该执行程序。见下图&#xff1a; 2、选择“Create …

Vue基础知识:Vue3.3出现的defineOptions,如何使用,解决了什么问题?

1.那么为什么会出现defineOptions? 原因说明&#xff1a; 有<script setup></script>语法糖应用之前&#xff0c;如果要定义 props&#xff0c;emits 可以轻而易举地添加一个与 setup 平级的属性。但是用了<script setup>后&#xff0c;就没法这么干了整个…

地理服务零成本:免费地图API合辑

在全球化和数字化不断推进的今天&#xff0c;地图已成为我们日常生活和工作中不可或缺的工具。无论是规划日常通勤、探索未知地域&#xff0c;还是进行地理数据分析&#xff0c;地图都发挥着至关重要的作用。它们不仅提供了地理信息的直观表示&#xff0c;还支持复杂的空间查询…

【U8+】登录U8时,选择账套登录窗口闪退。

【问题描述】 打开用友U8企业应用平台登录窗口&#xff0c; 输入账号和密码后&#xff0c;选择账套的时候闪退。 【解决方法】 方法一&#xff1a; 重装微软的silverlight&#xff0c;在U8soft\3rdprogram中有安装包。 注&#xff1a;不要自动更新此程序版本。关闭杀毒软件防火…

【线程安全】线程互斥的原理

文章目录 Linux线程互斥线程互斥相关概念互斥量mutex引出线程并发问题引出互斥锁、互斥量 互斥量的接口初始化互斥量销毁互斥量互斥量加锁和解锁使用互斥锁抢票 可重入和线程安全概念&#xff1a;常见线程不安全的情况常见线程安全的情况常见不可重入的情况常见可重入情况可重入…

jvm 05JVM - 对象的创建 ,oop模型,字符串常量池

01.JVM - 对象的创建 1、对象的创建的方式 Java语言中&#xff0c;对象创建的方式有六种&#xff1a; new关键字&#xff1a;最常见的形式、Xxx的静态方法、XxxBuilder、XxxFactory的静态方法。 Class类的newInstance()方法&#xff1a;通过反射的方式创建对象&#xff0c;调…

92. 反转链表 II (Swift 版本)

题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 分析 这是一个经典的链表问题&#xff0c;要求反转链表的部分节点。我们可以通过以下步骤实…

Codesys 连接 EtherCAT 总线伺服

本文内容是根据参考视频做的笔记&#xff1a; EtherCAT Master 控制&#xff1a;https://www.bilibili.com/video/BV1L14y1t7ks/EtherCAT Master Motion 控制&#xff1a;https://www.bilibili.com/video/BV16P411j71E/ EtherCAT 总线简单介绍 从站站号&#xff1a;如果使用扫…