超标量处理器设计:重排序缓存(ROB)

★超标量处理器的很多地方用到了重排序缓存,但是我对它不是很了解,所以我整理一下重排序缓存的知识点。

重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit),也可以用来寄存器重命名。

ROB是一个先进先出的表,每个项是ROB表项,可以记录指令执行的信息。

ROB表项的字段

(1)Complete: 标志位,用来标记指令是否已经完成执行阶段。当指令的所有操作(包括计算、访存等)都完成,标志就会被置为“是”,指令准备好进入退休阶段。

(2)Areg:指令在程序代码中指定的目的寄存器(逻辑寄存器)。

(3)Preg:物理寄存器的编号,经过寄存器重命名后指令实际使用的物理寄存器。

(4)OPreg:Old Physical Register,记录Areg在被重命名到当前Preg之前所对应的物理寄存器编号。在指令因异常需要回滚恢复状态时,OPreg用于指向应该恢复的物理寄存器状态,确保异常处理后的状态正确。

(5)PC:指令的程序计数器(PC)值。当指令执行过程中遇到中断时,保存这个PC能够从正确的点重新开始执行程序。

(6)Exception:如果指令执行中触发了异常,字段会记录异常的类型。指令即将退休时,处理器会根据异常类型执行相应的处理逻辑,可能是中止指令执行、恢复现场或是执行特定的异常处理程序。

(7)Type:记录指令的类型,如算术逻辑运算、加载、存储、跳转等。指令退休时,处理器会依据不同的指令类型执行相应的动作,比如存储指令需要把结果写入数据缓存(D-Cache),分支指令则可能需要清理预测执行的痕迹(如恢复检查点资源)。

ROB工作原理

分发(Dispatch)阶段

指令从指令队列或解码阶段被取出,进入流水线执行。每个指令在进入流水线时,会在ROB中分配一个唯一的表项(Entry)。表项会记录该指令的初始状态。将complete状态位设为0,表示指令尚未执行完成。同时,指令的目的寄存器信息、PC值等也会被记录下来。

执行(Execution)阶段

指令在执行阶段完成计算后,将complete状态位设为1,该指令已经执行完毕,计算结果可能被暂时存储在ROB中或直接写入物理寄存器堆(PRF)。如果执行过程中发生异常,异常类型也会被记录在ROB对应的表项中,但异常的实际处理被推迟到提交阶段。

异常与退休(Exception & Commit)阶段

所有对程序状态的最终更改,包括结果的写回、异常处理,都发生在提交阶段。只有当指令的complete状态为1,且所有先前的指令(在程序顺序上)也已正确执行并退休时,该指令才能退休。计算结果根据Areg和Preg信息被写入到寄存器或内存中。

若存在异常,处理器会根据ROB中记录的异常类型进行相应处理,可能包括恢复现场、跳转到异常处理程序等。

ROB工作例子

所以ROB就是一个先进先出的队列,当后面的指令执行完必须等到前面的执行完才可以退休。

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

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

相关文章

教你解决PUBG绝地求生游戏中闪退掉线无法重连回去的问题

《绝地求生》(PUBG),作为一款在全球范围内掀起热潮的战术竞技游戏,以其栩栩如生的战场环境和令人心跳加速的生存冒险博得了广大玩家的青睐。然而,一些玩家在经历了一场惊心动魄的对局后,却面临了一个不大不…

uniapp video 层级覆盖

层级覆盖 cover-view组件 我这里做了个判断 监听全屏时隐藏按钮 根据项目需求自行更改

汉诺塔问题和爬楼梯(递归)

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 c语言基础_LaNzikinh篮子的博客-CSDN博客 文章目录 一.爬楼梯问题二.汉诺塔问题总结 一.爬楼梯问题 假设你正…

第八篇:深入探索操作系统架构:从基础到前沿

深入探索操作系统架构:从基础到前沿 1 引言 在当今这个高速发展的数字时代,操作系统无疑是计算机科学领域的基石之一。它不仅是计算机硬件与最终用户之间的桥梁,更是实现高效计算和资源管理的关键。操作系统的架构,即其内部结构和…

AIGC 时代软件工程师:前景、需求与大模型提效探究

过去,在互联网浪潮汹涌的十年来,软件工程师的角色愈发凸显其不可或缺的价值。随着AIGC(人工智能生成内容)时代的到来,软件开发的每个环节都正在经历一场前所未有的革新。今天,我们深入研究了大型AI模型如何…

ETL中如何执行Python脚本

Python的解读 Python 是一种高级、通用的编程语言,由荷兰程序员吉多范罗苏姆(Guido van Rossum)于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性,它的语法清晰且表达力强,使得开发者能够以更少的代…

【二分查找 滑动窗口】100257找出唯一性数组的中位数

本文涉及知识点 二分查找算法合集 C算法:滑动窗口总结 LeetCode 100257找出唯一性数组的中位数 给你一个整数数组 nums 。数组 nums 的 唯一性数组 是一个按元素从小到大排序的数组,包含了 nums 的所有非空子数组中不同元素的个数。 换句话说&#xf…

QAnything 在mac M2 上纯python环境安装使用体验(避坑指南)

这是一篇mac m2本地纯python环境安装 qanything的文章。安装并不顺利,官方提供的模型无法在本地跑。 这篇文章记录了,使用xinference来部署本地模型,并利用openAi的通用接口的方式,可以正常使用。 记录了遇到的所有的问题&#xf…

安全数据交换系统哪个好?该如何选型?

安全数据交换系统是用于在不同网络或组织之间安全、高效地传输和共享数据的解决方案。安全数据交换系统对于任何需要处理敏感数据、确保数据安全、并满足合规要求的组织来说都是至关重要的。 这种系统通常用于以下目的: 1)数据传输:允许用户…

Docker快速搭建NAS服务——NextCloud

Docker快速搭建NAS服务——NextCloud 文章目录 前言NextCloud的搭建docker-compose文件编写运行及访问 总结 前言 本文主要讲解如何使用docker在本地快速搭建NAS服务,这里主要写如下两种: FileBrowser1:是一个开源的Web文件管理器&#xff…

从0到1:低代码如何助力社会组织实现管理数字化

在数字化大时代,创业服务中心的数字化转型显得至关重要。数字化转型不仅是一个技术升级的过程,更是一个涉及业务模式、组织结构、服务方式等全方位的深刻变革。 随着信息技术的快速发展,数字化已经渗透到社会生活的各个领域,成为…

Docker笔记(七)使用Docker部署Spring Boot项目

本文介绍如何使用Docker打包并部署Spring Boot多模块项目。 其中本文涉及的Docker的私库是用Nexus3搭建的。 使用Docker部署Spring Boot项目有三种方式 (1)使用 spring-boot-maven-plugin内置的build-image. (2)使用 Google 的 j…

发票审核如何自查?报销没有发票,如何处理?

在财务管理中,发票是非常重要的一项凭证,是费用核算和税务申报的重要依据,但光靠发票入账可能会被定义为虚开。 一、费用报销审核必看的6个要点 1、票据与实际业务吻合 这是费用报销中最基本的常识,比如:采购一批物料&…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 专栏: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

新能源汽车中HEV与PHEV分别代表什么车型,它们与传统燃油车都有什么区别?

前言 新能源汽车正逐渐成为全球汽车工业的主流方向,而HEV(Hybrid Electric Vehicle)和PHEV(Plug-in Hybrid Electric Vehicle)这两种混合动力车型在这一转型过程中扮演着重要角色。下面我们详细探讨HEV与PHEV的定义&a…

Pandas数据取值与选择

文章目录 第1关:Series数据选择第2关:DataFrame数据选择方法 第1关:Series数据选择 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码,要求实现如下功能: 添加一行数据,时间戳2019-01-29值为…

TC3xx MTU概述(2)

目录 1.概述 2.如何配置NDT 3.小结 1.概述 上篇TC3xx MTU概述(1)-CSDN博客我们讲解了MTU基本功能和MBIST基本概念,接下来我们继续讲解MTU如何配置NDT算法。 2.如何配置NDT 前面聊了那么多概念,我们还是来看看如何配置MTU来实现NDT。 MTU寄存器分为…

WireShark对tcp通信数据的抓包

一、抓包准备工作 安装wireshark sudo apt update sudo apt install wireshark 运行 二、WireShark工具面板分析 上图中所显示的信息从上到下分布在 3 个面板中,每个面板包含的信息含义如下: Packet List 面板:显示 Wireshark 捕获到的所…

window golang 升级版本

执行go tidy,发现执行不了,得升级一下版本了 进入官网,并选择合适的系统以及版本。https://go.dev/dl/ 这台电脑是windows,我本人比较喜欢下载zip自己解压。 解压,这里我选择直接覆盖原文件,需要保留原版…

Vue3自定义封装音频播放组件(带拖拽进度条)

Vue3自定义封装音频播放组件(带拖拽进度条) 描述 该款自定义组件可作为音频、视频播放的进度条,用于控制音频、视频的播放进度、暂停开始、拖拽进度条拓展性极高。 实现效果 具体效果可以根据自定义内容进行位置调整 项目需求 有播放暂停…