计算机体系结构----寄存器重命名/Tomasulo算法

news2024/12/25 12:58:47

前情提要

计分板算法可看我写的博文计算机体系结构----计分板(scoreboard)算法

Tomasulo算法的核心是寄存器重命名(register renaming);通过寄存器重命名,可彻底消除WAR/WAW冲突,计分板算法中,WAR/WAW都是通过停顿解决的,当然计分板算法虽然没那么厉害但还是通过动态调度消除了RAW冲突的。

Tomasulo算法如何实现乱序执行

  1. 需要在值的生产者和消费者之间建立通信,这里消费者指的是当前这条指令,生产者指的是在与这条指令相关的指令。
  • 寄存器重命名:给每个值一个tag
  1. 需要给指令提供缓冲区,这个缓冲区称为保留站
  2. 指令需要持续监测值是否可用,当这个值准备好了,就广播自己的tag,消费者匹配tag,如
    果是自己用的,就知道这个值已经准备好了
  3. 当全部的值都准备好,需要分发指令到对应的功能单元上去,即当需要的全部值都准备好,分发指令,出保留站

Tomasulo算法的核心要素

  1. 保留站 Reservation stations (scheduling window),缓存指令以及指令的操作数
  2. 公共数据总线 Common data bus (CDB),广播结果给保留站(RS)
  3. 寄存器重命名:消除WAR/WAW相关
  4. 转发/前递:Forwarding,消除RAW相关(注:我们看下面的例子会发现在RAW相关的前一条指令处于write result阶段时,后一条指令就可以进入EXE阶段了)

典型的Tomasulo系统:IBM 360/91

在这里插入图片描述

Tomasulo算法的各个功能区

保留站(发射队列)

  1. 指令顺序发射到保留站
  • 缓存指令及操作数
  • 如果操作数未就绪,保留站监听数据总线
  • 如果操作数已就绪,缓存到保留站
  1. 每个功能部件有独立的保留站(计分板算法里面所有的功能部件共用一个计分板),如果保留站已全部占用,无法发射指令,只能等。

保留站示意图如下。
在这里插入图片描述

保留站结构

  1. Busy字段:表明对应功能部件的保留站已被占用
  2. Op字段:表明具体的操作,如ADD
  3. Vj、Vk字段:保留源操作数的值
  4. Qj、Qk字段
  • Qj:产生源操作数Vj的保留站编号,或者0
  • Qk:产生源操作数Vk的保留站编号,或者0
  • 0表示源操作数已在Vj或Vk
  1. A字段:为load与store指令存放存储器地址计算信息

上述字段的含义和计分板很相似。

重命名映射表Register Alias Table (RAT)

如果设置了“有效位”,则表中的“值”正确。 否则,Tag 指定在何处查找正确的值。 Tag 是要生成的 Value 的唯一名称、
在这里插入图片描述

公共数据总线

Common Data Bus (CDB):广播已完成 insns 的<RS#, value> 。

Tomasulo算法 – 处理WAR

在这里插入图片描述

Tomasulo算法 – 处理WAW

在这里插入图片描述

Tomasulo算法 – 基本结构

在这里插入图片描述

  1. 每个功能部件有自己的保留站,Load/store buffers和保留站结构基本相同
  2. 保留站中的每一行保存着一条发射到相应功能部件的指令,并缓存了已就绪的操作数,和未就绪操作数的标签(即生 产指令所在的保留站行号)
  3. CDB不仅把结果送到寄存器中,也送到所有正在等待该结果的保留站中
  • 每个结果会附带一个标签(即生产指令所在的保留站行号),用来和保留站中的标签相匹配
  • CDB相当于实现了前送功能

Tomasulo算法 – 三个阶段

每条指令的执行经历三个阶段
在这里插入图片描述

Tomasulo算法 – 算法流程

  1. 如果在重命名之前保留站可用
  • 指令 + 重命名的操作数(源值/标签)插入到保留站中
  • 仅当保留站可用时重命名
  1. 否则停顿
  2. 在保留站时,每条指令:
  • 监视公共数据总线 (CDB) 的源标签
  • 当看到标签时,获取源的值并将其保存在保留站中
  • 当两个操作数都可用时, 指令准备分派
  1. 指令准备就绪时向功能单元发送指令
  2. 指令在功能单元中完成后
  • CDB 仲裁
  • 将标记值放入 CDB 上(标记广播)
  • 寄存器文件已连接到 CDB
    – 寄存器包含一个标签,指示寄存器的最新写入者
    – 如果寄存器文件中的标签与广播标签匹配, 将广播值写入寄存器(并设置有效位)
  • 回收重命名标签
    – 系统中没有标签的有效副本

Tomasulo算法示例

初始化

在这里插入图片描述
注意下面的示例中,W和E阶段是同时发生的,因为Tomasulo算法采用了forwarding技术,其他细节不用过多说明,图中均 详细介绍了,自己推导一边这个过程即可熟练掌握。

Cycle1

在这里插入图片描述

Cycle2

在这里插入图片描述

Cycle3

在这里插入图片描述

Cycle4

在这里插入图片描述

Cycle5

在这里插入图片描述

Cycle6

在这里插入图片描述

Cycle7

在这里插入图片描述
虽然cycle7中R5被二次标记,但是R5第一次重命名的值仍存在保留站项a中,是要比保留站项d先计算出来并广播的。

Cycle8

在这里插入图片描述

Cycle8

在这里插入图片描述

Cycle8

在这里插入图片描述

Cycle 9

在这里插入图片描述

Cycle 10

在这里插入图片描述

Cycle 11

在这里插入图片描述

Cycle 12

在这里插入图片描述

Cycle 13

在这里插入图片描述

Cycle 14

在这里插入图片描述

Cycle 15

在这里插入图片描述

Cycle 16

在这里插入图片描述

Cycle 17

在这里插入图片描述

Cycle 18

在这里插入图片描述

Cycle 19

在这里插入图片描述

Cycle 20

在这里插入图片描述

Tomasulo算法性能分析

  1. Tomasulo算法完善的处理了数据冲突,与分支预测和猜测执行配合起来后能达到很高的性能,当今处理器仍在广泛采用
  2. 仍没有处理控制冲突,乱序执行仍局限在一个基本块内
  3. 要求高速CDB: 性能受限于Common Data Bus

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

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

相关文章

2024--Django平台开发-Django知识点(五)

day05 django知识点 今日概要&#xff1a; 中间件 【使用】【源码】cookie 【使用】【源码 - Django底层请求本质】session【使用】【源码 - 数据库请求周期中间件】 1.中间件 1.1 使用 编写类&#xff0c;在类型定义&#xff1a;process_request、process_view、process_…

C++重新认知:inline关键字

一、为什么要使用inline关键字 在C中.&#xff0c;为了解决频繁调用小函数造成大量消耗栈空间的问题&#xff0c;引进了inline关键字&#xff0c;inline修饰的函数为内敛函数&#xff08;频繁大量的使用栈空间会造成栈溢出&#xff09;。 在这段代码中&#xff0c;每次执行for…

RT-Thread:SPI万能驱动 SFUD 驱动Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动

关键词&#xff1a;SFUD,FLASH,W25Q64&#xff0c;W25Q128&#xff0c;STM32F407 说明&#xff1a;RT-Thread 系统 使用 SPI万能驱动 SFUD 驱动 Flash W25Q64&#xff0c;通过 STM32CubeMX 配置 STM32 SPI 驱动。 提示&#xff1a;SFUD添加后的存储位置 1.打开RT-Thread Sett…

【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数 (一)

目录 0 引言1 3DTiles数据2 objTo3DTiles2.1 工具的安装2.1.1 拓展&#xff1a;Node.js 和 npm 2.2 工具的使用2.2.1 输出成瓦片数据2.2.2 输出带有坐标参数的瓦片数据 3 查看3DTiles数据 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;Cesiumfor…

强化学习9——免模型预测算法介绍(蒙特卡洛方法和时步差分方法)

对于大部分情况来说&#xff0c;环境是未知的&#xff0c;也就是说状态转移概率未知&#xff0c;对于这种情况的算法称为免模型预测算法。免模型算法与环境不断交互学习&#xff0c;但是需要大量的运算。 蒙特卡洛方法 蒙特卡罗方法通过重复随机抽选&#xff0c;之后运用统计…

条款21:必须返回对象时,别妄想返回其引用

考虑一个表示有理数的类&#xff0c;其中包含一个计算两个有理数相乘的函数: class Rational { public:Rational(int numerator 0, int denominator 1) :n{ numerator }, d{ denominator }{} private:int n, d; // 分子和分母friend const Rational& operator*(const R…

vue知识-03

购物车案例 要实现的功能&#xff1a; 1、计算商品总价格 2、全选框和取消全选框 3、商品数量的增加和减少 <body> <div id"app"><div class"row"><div class"col-md-6 col-md-offset-3"><h1 class"text-center…

C++模板——(4)C++泛型编程与标准模板库简介

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 勤奋&#xff0c;机会&#xff0c;乐观…

苍穹外卖Day01——解决总结1中存在的问题

前序章节&#xff1a; 苍穹外卖Day01——总结1 解决总结1中存在的问题 1. 什么是JWT2. POJO、Entity、VO、DTO3. Nginx&#xff08;反向代理&#xff09;4. Data注解 1. 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种用于在网络应用间传递信息的开放标准&#…

智慧校园电子班牌管理系统源码 Java Android原生

智慧校园电子班牌系统源码是一种智能化的教育管理解决方案&#xff0c;它可以在学校内实现信息共享、教学管理、学生管理、家校互通等各个方面的协调与配合&#xff0c;帮助教师、学生和家长更加高效地开展教学活动、管理学生、协同合作&#xff0c;从而推动学校教育水平的提高…

【高等数学之泰勒公式】

一、从零开始 1.1、泰勒中值定理1 什么是泰勒公式?我们先看看权威解读: 那么我们从古至今到底是如何创造出泰勒公式的呢? 由上图可知&#xff0c;任一无穷小数均可以表示成用一系列数字的求和而得出的结果&#xff0c;我们称之为“无穷算法”。 那么同理我们想对任一曲线来…

Ubuntu启动Xming报错:cannot open display: :1.0

Ubuntu启动Xming报错&#xff1a;cannot open display: :1.0 1、问题描述&#xff1a;2、问题解决&#xff1a;3、实践结果&#xff1a; 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 1、…

Android 事件分发介绍

文章目录 一、目的二、环境三、相关概念3.1 事件分发 四、详细设计4.1应用布局4.1.1 应用布局结构4.1.2 LayoutInspector 4.2 关键View&方法4.2.1 相关View4.2.2 相关方法4.2.3 View与方法关系 4.3 事件分发概念图4.3.1 事件分发类图4.3.2 事件分发模型图 4.4 Activity组件…

C#编程-描述异常

描述异常 异常是在程序执行期间出现的错误。异常情况发生在运算不能正常完成的时候。当程序中出现异常是,系统会抛出错误。错误通过异常处理过程被处理。 例如,System.IO.IOException异常在试图访问非法流对象时抛出。同样,如果分母是0,整数除法运算抛出System.DivideByZ…

02.构建和使用的大型语言模型(LLMs)阶段

我们为什么要建立自己的LLMs?LLM从头开始编码是了解其机制和局限性的绝佳练习。此外,它还为我们提供了必要的知识,可以保留或微调现有的开源LLM架构,以适应我们自己的特定领域的数据集或任务。 研究表明,在建模性能方面,定制(LLMs为特定任务或领域量身定制的)可以胜过…

前端项目构建打包生成Git信息文件

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、前端项目构建打包生成Git信息文件作用二、步骤1.引入相关的npm包1.1. **fs** 包1.2. **child_process** 包1.3. **os** 包 (非必须 如果你想生成的文件信息中包含当前电脑信息则可用)1.4. **path** 包…

Qt QCheckBox复选按钮控件

文章目录 1 属性和方法1.1 文本1.2 三态1.3 自动排他1.4 信号和槽 2 实例2.1 布局2.2 代码实现 Qt中的复选按钮类是QCheckBox它和单选按钮很相似&#xff0c;单选按钮常用在“多选一”的场景&#xff0c;而复选按钮常用在"多选多"的场景比如喜欢的水果选项中&#xf…

Python从入门到网络爬虫(控制语句详解)

前言 做任何事情都要遵循一定的原则。例如&#xff0c;到图书馆去借书&#xff0c;就需要有借书证&#xff0c;并且借书证不能过期&#xff0c;这两个条件缺一不可。程序设计亦是如此&#xff0c;需要使用流程控制实现与用户的交流&#xff0c;并根据用户需求决定程序“做什么…

特征工程:图像数据不足时的处理办法

在机器学习中&#xff0c;绝大部分模型都需要大量的数据进行训练和学习&#xff08;包括有监督学习和无监督学习&#xff09;&#xff0c;然而在实际应用中经常会遇到训练数据不足的问题。比如图像分类&#xff0c;作为计算机视觉最基本的任务之一&#xff0c;其目标是将每幅图…

Android学习(四):常用布局

Android学习&#xff08;四&#xff09;&#xff1a;常用布局 五种常用布局 线性布局&#xff1a;以水平或垂直方向排列相对布局&#xff1a;通过相对定位排列帧布局&#xff1a;开辟空白区域&#xff0c;帧里的控件(层)叠加表格布局&#xff1a;表格形式排列绝对布局&#x…