Rename--CAM在checkpoint恢复上的流程与优势

参考自:计算机体系结构-寄存器重命名 - 知乎 (zhihu.com)

这里的重点在红色部分描述上,也是容易想不通的地方;

在SRAM方法中要恢复映射表状态,需要事先把分支指令来临时刻的映射表全份拷贝下来,然后在恢复时把备份复制回映射表,这使得在checkpoint数量增加的时候备份消耗的资源线性增加

而在CAM方法中要恢复映射表关系,只需要保存分支指令来临时刻映射表的有效位状态,然后在恢复的时候把有效位置回,这使得在CAM方法中增加checkpoint数量是一件不费力的事情,alpha21264通过CAM方法实现了80个checkpoint,这在SRAM方法中是不可想象的。

为什么CAM只需要保存有效位信息?假想以下指令序列:

上面的汇编程序在基于CAM的映射表进行重命名时,执行过程是这样的:

(1)分支指令F在重命名时,需要进行checkpoint保存机器状态,此时映射表的内容如下图所示:

其中B、D的V显示1->0,在实际实现中这两位肯定是0,这里写1->0是想说明这两条指令还没有提交(这个信息体现在ROB和空闲寄存器列表中,这里没有显示,所以写0->1),因此P11、P13这两个对应的物理寄存器尚处在不能解放的状态,即P11、P13的映射关系不能被改写

(2)在G、H指令重命名之后,机器发现分支预测错误,需要恢复机器状态,在恢复状态之前,映射表的内如如下:

 (3)在恢复映射表时,机器会将上图中的GC0复制到映射表的有效位V中,这样就可以恢复到分支指令F刚进入重命名阶段时的状态。

值得注意的是,此时P11、P13和(1)中一样是0,但是含义已经不一样。(1)中虽然V=0,但是BD指令没有提交,所以这两个物理寄存器不能释放,即没有进入空闲列表;但是在(3)中BD指令已经提交(假设机器的顺序提交的机器,那么当发现F指令预测错误且要处理错误信息时,BD大概率已经被提交掉),所以P11、P13已经是释放状态,可以被其他的逻辑寄存器占用。虽然这两个0含义不一样,但是不会导致程序出错

这里可能有人会有疑虑,可能会假想这么一种情况:F指令之后的指令修改了P14的映射关系,而只恢复V不能置回P14的信息。实际上这是不可能的,时刻记得机器是一个顺序提交的机器,在分支指令F提交时,E指令之后的一切指令都没有提交,所以P14的有效位虽然可能被改写为0,但是它不会进入空闲列表(因为,一个寄存器的释放,是靠下一次使用到这个寄存器的指令commit时,根据last reg来释放的,下一个使用这个寄存器的指令还在分支指令之后,不可能提交,自然也不可能释放掉,所以这个P14的映射关系也不可能被改写),所以P14的映射关系不会被改写。

总结一下,CAM方法用checkpoint恢复机器状态时只需要恢复有效位V,而不需要恢复其他内容,SRAM方法则需要复制整个SRAM,这导致虽然SRAM方法在查询映射表时即快速又节约资源(SRAM行数等于逻辑寄存器个数,而CAM行数等于物理寄存器个数),但是在处理分支错误的时候慢于CAM方法,且上限也远低于CAM方法(能容纳的checkpoint少于CAM方法)。在实现映射表时选用哪种方法是一件值得设计人员权衡的事情。

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

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

相关文章

Linux 环境下,jdbc连接mysql问题

1. 下载MySQL的JDBC驱动: 从MySQL官网下载最新的MySQL Connector/J,并将其解压到某个目录,比如/usr/local/mysql/。 2. 将JDBC驱动添加到类路径: 将JDBC驱动添加到类路径,可以使用以下命令: export CLA…

AMEYA360分析兆易创新GD32A490系列车规级MCU

兆易创新GigaDevice今日宣布,正式推出全新GD32A490系列高性能车规级MCU,以高主频、大容量、高集成和高可靠等优势特性紧贴汽车电子开发需求,适用于车窗、雨刷、智能车锁、电动座椅等BCM车身控制系统,以及仪表盘、娱乐影音、中控导…

每日OJ题_算法_双指针②_力扣1089. 复写零

目录 力扣1089. 复写零 解析代码 力扣1089. 复写零 1089. 复写零 - 力扣(LeetCode) 难度 简单 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在…

4.3 容器编排工具的比较与选择

容器编排工具的比较与选择 Kubernetes 介绍 Kubernetes,是目前最流行和功能强大的容器编排平台之一。强调 Kubernetes 的自动化、高可用、扩展性和灵活的特点。讨论 Kubernetes 的主要组件和架构,如 Master 节点、Node 节点、控制器和调度器等。分析 Ku…

智慧景区(园区)数字孪生可视化GIS解决方案

随着技术的日新月异,景区日常管理及运营中使用到的智慧化工具越来越丰富,智慧化硬件设备也越来越多,而其中各个管理系统往往又是相互独立,形成一个个数据孤岛。智慧景区管理平台就是将各个孤岛中的数据及功能汇集起来,…

政采云基于 Dubbo 的混合云数据跨网实践

作者:王晓彬,政采云资深开发工程师 项目背景 政采云的业务是为政府提供的购物网站,类似于淘宝。政府采购会在政采云上做企业采购、政府采购的业务。 云岛中的“云”是指我们的云平台,云平台是我们公司自己部署的一套购物网站&a…

【计算机网络漫谈】OSI七层模型与TCP/IP四层(参考)模型

一、七层?四层? 1.为什么需要协议?2.OSI七层模型是干什么的?3.TCP/IP四层(参考)模型4.TCP/IP(参考)模型与OSI七层模型有什么异同? 二、自底向上的网络分层 1. 物理层2…

阻止事件e.stopPropagation()和e.preventDefault的区别

e.stopPropagation() 和 e.preventDefault() 是两个在事件处理中常用的方法,它们有不同的作用: e.stopPropagation(): 作用:阻止事件在DOM中的进一步传播,即停止事件冒泡。使用场景:当你希望阻止一个事件从目标元素向上…

防火墙 iptables的使用

目录 什么是防火墙 原理 代理 防火墙的工具 4表5列 五链:控制流量的时机 四个表:如何控制流量 ​编辑 iptables 软件 格式 选项 跳转 查iptables 的规则 添加规则 A I 删除规则 清空规则 替换规则 R 修改默认规则(默…

校园外卖小程序源码系统 附带完整的搭建教程

随着大学生消费水平的提高,对于外卖服务的需求也在不断增加。很多学生都面临着课业繁重、时间紧张等问题,无法亲自到餐厅就餐。因此,开发一款适合校园外卖市场的应用软件,将为广大学生提供极大的便利。 以下是部分代码示例&#…

vector例题:hdu4841圆桌问题

解题代码来源于一本书:《算法竞赛:入门到进阶》 圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再…

Python Numpy学习(1)

python: np.pad() 函数的用法 np.einsum(爱因斯坦求和约定) python编程之np.isnan()的用法 Python_Numpy库中各种矩阵基本运算 numpy基本加减和取行操作 numpy的加减乘除运算 NumPy 算术函数 TypeError: can’t convert cuda:0 device type tensor to numpy. Use Tenso…

了解linux网络时间服务器

本章主要介绍网络时间服务器。 使用chrony配置时间服务器 配置chrony客户端向服务器同步时间 20.1 时间同步的必要性 些服务对时间要求非常严格,例如,图20-1所示的由三台服务器搭建的ceph集群。 这三台服务器的时间必须保持一致,如果不一致…

【征稿倒计时十天】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)

【有ISSN、ISBN号!!往届均已完成EI检索】 第三届高性能计算与通信工程国际学术会议(HPCCE 2023) 2023 3rd International Conference on High Performance Computing and Communication Engineering (HPCCE 2023) 2023年12月22-24日 | 中国哈尔滨 第三…

base64 转

$img_base64 substr($res[photo],strrpos($res[photo],,));$img_decode base64_decode($img_base64);$namess time().rand(10000,99999);$cc file_put_contents(img/avatar/.$namess..png,$img_decode);$urlsDS . img . DS . avatar/ .$namess..png;

CSS新手入门笔记整理:CSS溢出声名overflow

通常一个盒子的内容是被限制在盒子边框之内的,但是有时也会溢出,即部 分或者全部内容跑到盒子边框之外。 语法 元素{overflow:取值;} 属性值 说明 visible 若内容溢出,则溢出内容可见(默认值) hid…

Redis的数据类型以及如何解决大Key问题

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、Redis的数据类型 二、Big Key 2.1 什么是Big Key? 2.2 Big Key产生的场景? 2.3 如何识别Big Key&am…

面试——Java中实现多态的三要素,实现多态的机制是什么?

1.实现多态的三要素: 继承、重写、弗雷德引用指向子类的对象 2.实现多态的机制: 靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法…

数据结构与算法-D5-D7线性表之链表

结点类型描述 程序编写 节点定义 linklist.h linklist.c list_create 1、申请内存 2、赋值 3、返回头结点 list_tail_insert 1、建立一个新结点 2、找尾结点 3、尾部插入 list_show list_insert 链表在某一位置的插入 1、调用算法list_get 2、插入 1)新节点 2&a…

MySQL常见的存储引擎(InnoDB、MyISAM)data目录下(.frm,.myi,.myd)

查看支持的存储引擎 SHOW ENGINES;show variables like %storage_engine%; 看你的mysql当前默认的存储引擎:data目录 如果一个表同时有这3个文件,则存储引擎是myisam: (1)*.frm--表定义,是描述表结构的文件。 &#…