TAGE predictor

参考文档:分支预测算法(一):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://xiahunao.cn/news/3224728.html

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

相关文章

C语言编程4:复合赋值,递增递减运算符,局部变量与全局变量,本地变量,转义字符

一篇文章带你玩转C语言基础语法4&#xff1a;复合赋值&#xff0c;递增递减运算符&#xff0c;局部变量与全局变量&#xff0c;本地变量&#xff0c;转义字符 一、复合赋值&#x1f33f; 1.1&#x1f4a0;定义 赋值就是给任意一个变量或者常量赋一个值&#xff0c;这个值可以…

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了&#xff0c;如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

在亚马逊云科技AWS上利用SageMaker机器学习模型平台搭建生成式AI应用(附Llama大模型部署和测试代码)

项目简介&#xff1a; 接下来&#xff0c;小李哥将会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。本次介绍的是如何在Amazon …

VBA实现Excel的数据透视表

前言 本节会介绍通过VBA的PivotCaches.Create方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。 本节测试内容以下表信息为例 1、创建数据透视表 语法&#xff1a;PivotCaches.Create(SourceType, [SourceData], [Version]) 说明&am…

C语言程序题(一)

一.三个整数从大到小输出 首先做这个题目需要知道理清排序的思路&#xff0c;通过比较三个整数的值&#xff0c;使之从大到小输出。解这道题有很多方法我就总结了两种方法&#xff1a;一是通过中间变量比较和交换&#xff0c;二是可以用冒泡排序法&#xff08;虽然三个数字排序…

【重大消息】报告称OpenAI的产品可经由微软的服务提供给中国客户

尽管OpenAI正在采取措施限制中国用户访问其平台&#xff0c;但一份最新报告称&#xff0c;中国用户仍可通过微软的Azure云计算平台访问该公司的产品。微软和OpenAI有着密切的合作关系&#xff0c;前者通过人工智能功能获得了独家产品访问权以拓展企业计算。最新的报道来自《The…

秋招突击——7/9——复习{Java实现——LRU,Java实现——搜索插入位置}——新作{二分查找——搜索二维矩阵}

文章目录 引言复习Java实现——LRU缓存对照实现 Java实现——搜索插入位置java实现知识补充 新作搜索二维矩阵个人实现参考实现 总结 引言 以后都要向使用Java刷算法进行过滤了&#xff0c;所以今天主要是复习为主&#xff0c;复习两道之前做过的题目&#xff0c;然后做两道新…

STM32智能交通灯控制系统教程

目录 引言环境准备智能交通灯控制系统基础代码实现&#xff1a;实现智能交通灯控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;交通灯管理与优化问题解决方案与优化收尾与总结 1. 引言 智能交通灯控…

迅狐抖音机构号授权矩阵系统源码

在数字化营销的浪潮中&#xff0c;抖音以其独特的短视频形式迅速崛起&#xff0c;成为品牌传播和用户互动的重要平台。迅狐抖音机构号授权矩阵系统源码作为一项创新技术&#xff0c;为品牌在抖音上的深度运营提供了强大支持。 迅狐抖音机构号授权矩阵系统源码简介 迅狐抖音机…

Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比

章节内容 上一节完成了如下的内容&#xff1a; 编写Agent Conf配置文件收集Hive数据汇聚到HDFS中测试效果 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0…

【动态规划Ⅵ】背包问题 /// 组合问题

背包问题 什么是背包问题0-1背包问题分数背包完全背包问题重复背包问题 背包问题例题416. 分割等和子集474. 一和零 完全平方数279. 完全平方数322. 零钱兑换 排列与组合组合&#xff0c;无重复&#xff1a;518. 零钱兑换 II排列&#xff0c;可重复&#xff1a;377. 组合总和 Ⅳ…

【效率提升】多功能组织和整理软件一Notion

Notion下载地址&#xff1a;https://www.notion.so/desktop Notion 是一款多功能办公软件&#xff0c;非常适合进行知识整理、团队协作、项目整理等。 下面是几个我推荐Notion的关键点&#xff1a; 一、排版高度自由&#xff1a;Notion的页面可以嵌套&#xff0c;在页面中还支…

Games101——光珊化——深度缓存——shading着色 1

深度缓存 如何解决远近的问题&#xff0c;能正确的覆盖 按照画作来说&#xff0c;先画出远处的物体&#xff0c;再画出近处的物体&#xff0c;近处会将其覆盖&#xff0c;这种算法叫做画家算法 但事实上&#xff0c;排序不仅要花更多的时间&#xff0c;而且排序并不容易&…

apache:the requested operation has failed使用httpd -t

Apache24\bin cmd 回车 httpd -t 因为我重新压缩了&#xff0c;记住&#xff0c;重新压缩要使用原路径&#xff0c; 因为你安装的 时候使用的是原路径 还是不行就改个端口&#xff0c;切记修改配置文件httpd.conf先把Tomcat停了 Define SRVROOT "F:\Apache\Apache24&q…

“Numpy数据分析与挖掘:高效学习重点技能“

目录 # 开篇 # 补充 zeros & ones eye 1. numpy数组的创建 1.1 array 1.2 range 1.3 arange 1.4 常见的数据类型 1.5 astype 1.6 random.random() & round 2. numpy数组计算和数组计算 2.1 reshape 2.2 shape 2.3 将一维数组变成多维数组 2.4 指定一维…

生产者消费者模型和线程同步问题

文章目录 线程同步概念生产者消费者模型条件变量使用条件变量唤醒条件变量 阻塞队列 线程同步概念 互斥能保证安全,但是仅有安全不够,同步可以更高效的使用资源 生产者消费者模型 下面就基于生产者消费者来深入线程同步等概念: 如何理解生产消费者模型: 以函数调用为例: 两…

14-58 剑和诗人32 - 使用矢量数据库增强 LLM 应用程序

GPT-4、Bloom、LaMDA 等大型语言模型 (LLM) 在生成类似人类的文本方面表现出了令人印象深刻的能力。然而,它们在事实准确性和推理能力等方面仍然面临限制。这是因为,虽然它们的基础是从大量文本数据中提取统计模式,但它们缺乏结构化的知识源来为其输出提供依据。 最近,我们…

红日靶场----(三)漏洞利用

上期已经信息收集阶段已经完成&#xff0c;接下来是漏洞利用。 靶场思路 通过信息收集得到两个吧靶场的思路 1、http://192.168.195.33/phpmyadmin/&#xff08;数据库的管理界面&#xff09; root/root 2、http://192.168.195.33/yxcms/index.php?radmin/index/login&am…

(自用)gtest单元测试

gtest是Google的一套用于编写C测试的框架&#xff0c;可以运行在很多平台上&#xff08;包括Linux、Mac OS X、Windows、Cygwin等等&#xff09;。基于xUnit架构。支持很多好用的特性&#xff0c;包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报…

Python | Leetcode Python题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack:def __init__(self):"""Initialize your data structure here."""self.queue collections.deque()def push(self, x: int) -> None:"""Push element x onto stack."&…