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

news2025/1/12 0:58:37

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.coloradmin.cn/o/1373261.html

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

相关文章

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测 目录 多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-HKELM霜冰算法优化混合核极限学…

【论文综述】一篇关于GAN在计算机视觉邻域的综述

前言 这是一篇关于GAN在计算机视觉领域的综述。 正文 生成对抗网络是一种基于博弈论的生成模型,其中神经网络用于模拟数据分布。应用领域:语言生成、图像生成、图像到图像翻译、图像生成文本描述、视频生成。GAN模型能够复制数据分布并生成合成数据&a…

“编程语言大比拼:Python、JavaScript、Java与C#的优劣与选择“。

以下是一篇关于不同编程语言特性的比较和选择的文章。 在当今的编程世界中,有许多种不同的编程语言可供选择。每种语言都有其独特的特性和优点,这使得选择最适合特定项目的语言变得复杂。本文将比较几种流行的编程语言,以帮助您了解它们的特…

详细讲解MybatisPlus实现逻辑删除

目录 前言1. 基本知识2. 实战Demo3. 拓展 前言 对于MybatisPlus的相关知识可在我的博客进行搜索 对应的CRUD相关知识也可看我这篇文章:【Java项目】实战CRUD的功能整理(持续更新) 在讲述逻辑删除这个概念时,先引入另外一个概念&…

如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理

首先,需要用到的这个工具: 百度 密码:qwu2蓝奏云 密码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割 点击打开,出现如下窗口设置 相关的…

国产服务器 BIOS下组建RADI不同RAID卡-超详细

国产服务器 长城 组建Raid的方法 说明 大多数国产服务器通用型服务器进入BIOS的都是按DEL键。 9361RAID卡组建方法 在服务器启动过程中,按下DEL键进入BIOS界面。 进入设备管理器,选择AVAGO MegaRAID页签。 3. 进入RAID卡设备,选择Main Me…

软件测试|MySQL CROSS JOIN:交叉连接的详细解析

简介 在 MySQL 数据库中,CROSS JOIN 是一种用于生成两个或多个表的笛卡尔积的连接方法。CROSS JOIN 不需要任何连接条件,它将左表的每一行与右表的每一行进行组合,从而生成一个包含所有可能组合的结果集。本文将详细介绍 MySQL 中的 CROSS J…

Ubuntu 22.04.3 LTS arm64 aarch64 ISO jammy-desktop-arm64.iso 下载

Ubuntu 22.04.3 LTS (Jammy Jellyfish) Daily Build 参考 Are there official Ubuntu ARM / aarch64 desktop images? - Ask Ubuntu

Web组件的使用

文章目录 1 概述2 加载网页加载在线网页加载本地网页 3 网页缩放文本缩放 4 Web组件事件Web组件处理JS confirm事件 5 Web和JavaScript交互启用JavaScriptWeb组件调用JS方法JS调用Web组件方法 6 处理页面导航7 调试网络应用8 参考链接 1 概述 相信大家都遇到过这样的场景&…

强化学习求解TSP(六):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…

最新版CleanMyMac X4.14.7智能清理mac磁盘垃圾工具

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统,…

竞赛保研 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

MCU FT61F14x入门

目录 前言一、CMIDE的使用二、系统时钟与睡眠2.1 上电复位 (POR)与系统复位2.2 振荡器和系统时钟2.3 SLEEP睡眠模式 (POWER-DOWN)2.4 低电压检测/比较器 (LVD) 三、I/O端口与中断四、串口USART五、定时器六、ADC七、EEPROM 前言 FT61F14x是辉芒微电子的微控制器,是一…

【Python】AttributeError: module ‘torch.nn‘ has no attribute ‘HardSigmoid‘

AttributeError: module ‘torch.nn’ has no attribute ‘HardSigmoid’ 这个错误是因为PyTorch的torch.nn模块中并没有HardSigmoid这个函数。是拼写的大小写问题,换成nn.Hardsigmoid()即可。 如下述代码出错。 import torch import torch.nn as nn hard_sigmoid…

从0到1实现html文件转换为markdown文档(进度0.1)

Spider-Man 前言准备环境1、node.js2、git 执行指令顺序报错及其解决方案一、npm 错误!可以在以下位置找到此运行的完整日志解决方案 二、没有修改权限解决方案: 注意事项总结 前言 当我们处理文档时,常常会遇到将HTML文档转换为Markdown文档…

Python-代码雨【附源码】

Python-代码雨 运行效果:实现的是动态的代码雨 import sys import random import pygame from pygame.locals import *# 屏幕大小 WIDTH 800 HEIGHT 600 # 下落速度范围 SPEED [15, 30] # 字母大小范围 SIZE [5, 30] # CODE长度范围 LEN [1, 8]# 随机生成一个…

国家发改委:《电能质量管理办法(暂行)》2024年4月1日起施行

中华人民共和国国家发展和改革委员会令 第8号 《电能质量管理办法(暂行)》已经2023年12月26日第7次委务会议审议通过,现予公布,自2024 年4月1日起施行。 主任 郑栅洁 2023年12月27日 电能质量管理办法(暂行) 第一章 总则 第一条 为加强电能质量管理&…

【GoLang入门教程】Go语言几种标准库介绍(六)

文章目录 前言几种库Net库 (网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等)重要的子包和功能:示例 OS库(操作系统平台不依赖平台操作封装)主要功能:示例 path库(兼容各操作系统的路径操作实用函数)常用函数&#xff1…

中英双语8K向量大模型新鲜出炉,企业出海必备!

自从我们的 Embeddings V2 获得各界好评后,今日,我们推出了全新的中英双语文本向量大模型:jina-embeddings-v2-base-zh。此模型不仅继承了 V2 的全部优势,能够处理长达八千词元的文本,更能流畅应对中英文双语内容&…

Spring MVC 的RequestMapping注解

RequestMapping注解 使用说明 作用:用于建立请求URL和处理请求方法之间的对应关系。 出现位置: 类上: 请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以…