计算机体系结构----重排序缓冲(ROB)

ROB的思想:不按顺序完成指令,但在使结果对体系结构状态可见之前重新排序

  • 当指令被解码时,它会在 ROB 中保留下一个顺序条目
  • 当指令完成时,它将结果写入 ROB 条目
  • 当指令在 ROB 中最早并且无一例外地完成时,其结果移动到寄存器堆或存储器中
  • 缓冲有关已解码但尚未停用(retire)/提交(commit)的所有指令的信息

在这里插入图片描述

重排序缓冲的条目ROB Entry

在这里插入图片描述

  • 正确地将指令重新排序回程序顺序
  • 使用指令的结果更新架构状态,如果指令可以毫无问题地退出
  • 精确处理异常/中断,如果需要在停用指令之前处理异常/中断
  • 需要有效位来跟踪结果的准备情况,并找出指令是否已完成执行

ROB是环形缓冲器

在这里插入图片描述
ROB存在两个指针,一个用来指示最早进入ROB的指令,一个用来指示最晚的。

Tomasulo系统复习

在这里插入图片描述
详细的Tomasulo系统解释点击这个:计算机体系结构----寄存器重命名/Tomasulo算法

Tomasulo+ROB

在这里插入图片描述

  1. 在指令完成时首先将结果写入 ROB
  2. 在提交时将结果写入寄存器堆
  3. 如果后面的指令需要重排序缓冲区中的值怎么办?
  • 一种选择:流水线停顿
  • 更好的做法:从重排序缓冲区中读取值。

一个简易的假如ROB的流水线示意图如下:
在这里插入图片描述

访问ROB的方法1

寄存器值可以位于寄存器堆、重新排序缓冲区(或旁路/转发路径)中。

在这里插入图片描述

在这里插入图片描述
看上图可以发现,访问ROB中所需求的寄存器的值就是遍历法,从上往下一一比对ROB Dest reg ID 直到一样。

访问ROB的方法2

  1. 首先访问寄存器堆(检查寄存器是否有效)
  • 如果寄存器无效,寄存器堆存储包含(或将包含)寄存器值的重新排序缓冲区条目的 ID
  • 寄存器到 ROB 条目的映射: 如果寄存器堆有写入寄存器的飞行指令,则寄存器堆将寄存器映射到重新排序缓冲区条目
  1. 访问重新排序缓冲区
  2. 现在, 重新排序缓冲区不需要是内容可寻址的
    在这里插入图片描述
    相较于访问ROB方法1,方法2在寄存器堆中添加了Tag位,用于直接映射到ROB的条目,方便寻找。

ROB的流水线构造

  1. Decode(D):访问regfile/ROB,在ROB中分配条目,检查指令是否可以执行,如果可以,则调度指令
  2. Execute (E):指令可以无序完成
  3. Completion (R):将结果写入重新排序缓冲区
  4. Retirement/Commit (W):检查异常;如果没有,则将结果写入架构寄存器文件或存储器;否则,刷新流水线并从异常处理程序开始
  5. 按顺序调度/执行、无序完成、按顺序停用(retirement)

在这里插入图片描述

Tomasulo+ROB运行示例

初始状态

假设延时:Load:1, Add:2, Mult:6, Divide:12
在这里插入图片描述
可以发现 ,每条指令都在ROB中有一个条目(entry)

CC1:第一条Load发射

在这里插入图片描述

CC2:第一条Load完成地址计算;第二条Load发射

在这里插入图片描述

CC3:第一条Load执行完毕;第二条Load等待;MUL.D发射

在这里插入图片描述

CC4:第一条Load写回完毕;第二条Load等待;MUL.D等待操作数;SUB.D发射

在这里插入图片描述

CC5:第一条Load提交;第二条Load完成地址计算;MUL.D/SUB.D等待操作数;DIV.D发射

在这里插入图片描述

CC6:第二条Load执行完毕;MUL.D/SUB.D/DIV.D等待操作数;ADD.D发射

在这里插入图片描述

CC7:第二条Load写回完毕;MUL.D/SUB.D就绪;DIV.D/ADD.D等待操作数

在这里插入图片描述

CC8:第二条Load提交;MUL.D/SUB.D执行完第一拍;DIV.D/ADD.D等待操作数

在这里插入图片描述

CC9:SUB.D执行完毕;MUL.D执行完第二拍;DIV.D/ADD.D等待操作数

在这里插入图片描述

CC10:SUB.D写回完毕;MUL.D执行完第三拍;ADD.D就绪;DIV.D等待操作数

在这里插入图片描述

CC11:SUB.D等待提交;MUL.D执行完第四拍;ADD.D执行完第一拍;DIV.D等待操作数

在这里插入图片描述

CC12:ADD.D执行完毕;SUB.D等待提交;MUL.D执行完第五拍;DIV.D等待操作数

在这里插入图片描述

CC13:ADD.D写回完毕;MUL.D执行完毕;SUB.D等待提交;DIV.D等待操作数

在这里插入图片描述

CC14:MUL.D写回完毕;DIV.D就绪;SUB.D/ADD.D等待提交

在这里插入图片描述

CC15:MUL.D提交;DIV.D执行完毕第一拍;SUB.D/ADD.D等待提交

在这里插入图片描述

CC16:SUB.D提交;DIV.D执行完毕第二拍;ADD.D等待提交

在这里插入图片描述

CC26:DIV.D执行完毕;ADD.D等待提交

在这里插入图片描述

CC27:DIV.D写回完毕;ADD.D等待提交

在这里插入图片描述

CC28:DIV.D提交;ADD.D等待提交

在这里插入图片描述

CC29:ADD.D提交

在这里插入图片描述

ROB的折衷

  1. 优点 :
  • 概念简单,支持精确异常
  • 可以消除错误的依赖性
  1. 缺点:
  • 需要访问重新排序缓冲区以获得尚未写入寄存器文件的结果 ,CAM 或间接会增加延迟和复杂性
  1. 其他解决方案旨在消除缺点
  • History buffer
  • Future file
  • Checkpointing

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java-布隆过滤器的实现

文章目录 前言一、概述二、误差率三、hash 函数的选择四、手写布隆过滤器五、guava 中的布隆过滤器 前言 如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路&…

LeetCode 145. 二叉树的后序遍历

145. 二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1]示例 2: 输入:root [] 输出:[]示例 3: 输入&…

Vue3:vue-cli项目创建及vue.config.js配置

一、node.js检测或安装: node -v node.js官方 二、vue-cli安装: npm install -g vue/cli # OR yarn global add vue/cli/*如果安装的时候报错,可以尝试一下方法 删除C:\Users**\AppData\Roaming下的npm和npm-cache文件夹 删除项目下的node…

C语言基础语法跟练 day2

题源&#xff1a;牛客网 16、BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 #include <stdio.h>int main() { //创建变量char arr[] "ABCDEF";int i;int sum0,c; //依次转换十六进制为十进制for(i0; arr[i]!\0; i){char b …

每日学习更新(LQR+iLQR)

一直想更新一下根据cost to go来推导LQR&#xff0c;之前的话可能会直接套问题&#xff0c;但是对于理论有些困惑&#xff0c;正好最近在学习ilqr轨迹生成/优化&#xff0c;因此来推一下公式&#xff0c;以下参考B站Dr_CAN&#xff0c;链接如下&#xff1a; 【最优控制】5_线性…

记录汇川:H5U与Fctory IO测试6

主程序&#xff1a; 子程序: IO映射 子程序&#xff1a; 辅助上料 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; 实际动作如下&#xff1a; Fctory IO测试6

软件测试工具Robot Framework如何安装

安装文件准备 表1 安装文件准备 Robot框架结构 为了更好的了解环境安装&#xff0c;我们先看下框架结构&#xff1a; 图1 Robot Framework Architecture Robot Framework 通过导入不同的库&#xff0c;就可以使用库中所提供的关键字&#xff0c;从而时行相关的测试。有几个标…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷②

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷2 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷2 模块一 …

大众汽车宣布将ChatGPT,批量集成在多种汽车中!

1月9日&#xff0c;大众汽车在官网宣布&#xff0c;将ChatGPT批量集成到电动、内燃机汽车中。 大众表示&#xff0c;将ChatGPT与其IDA语音助手相结合&#xff0c;用户通过自然语言就能与ChatGPT进行互动&#xff0c;例如&#xff0c;帮我看看最近的三星米其林饭店在哪里&#…

Redis系列-15.Redis的IO多路复用原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

Java顺序表(1)

&#x1f435;本篇文章将对顺序表中的方法进行模拟实现 一、线性表 线性表是指在逻辑结构上呈连续的线性结构&#xff0c;而在物理结构上不一定是连续的结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列等 二、顺序表 顺序表一般采用数组来存储数据&#x…

ELF文件格式解析二

使用objdump命令查看elf文件 objdump -x 查看elf文件所有头部的信息 所有的elf文件。 程序头部&#xff08;Program Header&#xff09;中&#xff0c;都以 PT_PHDR和PT_INTERP先开始。这两个段必须在所有可加载段项目的前面。 从上图中的INTERP段中&#xff0c;可以看到改段…

Android App打包加固后的APK无法安装问题

最近开发的一个应用要上架&#xff0c;正常流程打完包后去加固&#xff0c;由于以前一直用的是360的加固助手&#xff0c;这里开始也是选择用它。 使用360加固&#xff1a; 问题一、开始出现的问题是说应用未签名无法加固&#xff0c;我明明是签名后打的包&#xff0c;怎么会…

十分钟部署清华 ChatGLM-6B,实测效果超预期(Linux版)

前段时间&#xff0c;清华公布了中英双语对话模型 ChatGLM-6B&#xff0c;具有60亿的参数&#xff0c;初具问答和对话功能。 最&#xff01;最&#xff01;最重要的是它能够支持私有化部署&#xff0c;大部分实验室的服务器基本上都能跑起来。因为条件特殊&#xff0c;实验室网…

介绍几种常见的质数筛选法

质数筛选法 1.暴力筛选法 :smirk:2.普通优化 :rofl:3.埃氏筛法:cold_sweat:4.线性筛选法:scream: 质数&#xff1a;除了1和他本身没有其它因数的正整数就是质数。1不是质数&#xff0c;2是质数。 1.暴力筛选法 &#x1f60f; 原理 求x的质数&#xff0c;令y从2到 x \sqrt[]{x…

资源素材网站源码,功能齐备,界面干净整洁,附带安装教程

搭建教程 简单安装说明&#xff1a; 1、整站程序上传后台 2、然后导入数据库文件到数据库&#xff0c; 3、修改conf里面的conf的数据库名字及密码 4、配置伪静态 规则&#xff1a; location ~* \.(htm)$ { rewrite "^(.*)/(.?).htm(.*?)$" $1/index.php?$2…

Docker安装Jenkins,配置Maven和Java

前言 这是一个java的springboot项目&#xff0c;使用maven构建 安装准备 需要将maven和jdk安装在服务器上&#xff0c;Jenkins需要用到&#xff0c;还有创建一个jenkins的目录&#xff0c;安装命令如下&#xff1a; docker run -d -uroot -p 9095:8080 -p 50000:50000 --n…

20240109适配selinux让移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通

20240109适配selinux让移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通 2024/1/9 10:46 缘起&#xff1a;使用友善之臂的Android11可以让EC20上网&#xff0c;但是同样的修改步骤&#xff0c;Toybrick的Android11不能让EC20上网。 最后确认是selinux的问题&#…

UGUI Image图像控件替换图片

代码为探索而来&#xff0c;不是最优代码&#xff0c;请按需使用。 Unity3d引擎版本&#xff1a;Uinty3d 20233.2.3f1 补充一下图片如何改成Texture2D&#xff1a; 1、将图片导入unity。 2、选择图片&#xff0c;按下图操作&#xff0c;点击应用即可。 脚本代码&#xff1a…

【ECShop电子商务系统__软件测试作业】ECSHOP系统搭建文档+接口测试用例+接口文档+接口测试脚本

一、选题题目可选《ECShop电子商务系统》、《EPShop电子商城系统》或者自选其它的开源系统(至少有十个以上的功能模块的系统&#xff0c;不得选功能少、简单的系统)。 软件测试作业 说明:接口测试相关资料 二、具体要求 1、搭建测试系统并写出搭建被测系统的全过程。 2、根…