当前位置: 首页 > news >正文

超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题

寄存器重命名

  • 重命名映射表
    • 基于 SRAM 的重命名映射表
  • 超标量处理器的寄存器重命名
    • 解决 RAW 相关性
    • 解决 WAW 相关性
      • 对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)
      • 对写 ROB 进行检查(判断)
    • 特殊指令处理方式

重命名映射表

重命名时

  • 源寄存器查找 RAT 获得对应物理寄存器标号
  • 指令的目的寄存器会新增对应新的物理寄存器

两种方式

  • SRAM 方式
    • SRAM 是每个逻辑寄存器分配一个物理寄存器
    • Entry 项为 32 个,一共有 32 个逻辑寄存器
    • SRAT 占据空间是 32 X 6 bits = 192 bits
  • CAM 方式(Content Addressable Memory)
    • CAM 是每个物理寄存器分配一个逻辑寄存器,所以需要 valid 位来表示
    • Entry 项为 64 个,一共有 64 个物理寄存器
    • CRAT 占用空间是 64 X 5 bits = 320 bits
    • 需要 valid 位来表示
  • 对比
    • 都是使用逻辑寄存器来寻址
    • SRAM 快,并且节省资源
    • 对 cRAT 进行 Checkpoint 只需要保存状态位

32 个逻辑寄存器 5 位来表示
64 个物理寄存器 6 位来表示

image.pngl200

#问题 CAM 的 check points 只需要一位?
在完成 RAT 写入时
对于一个特点的通用寄存器来说

  • SRAM 中
    • 需要保存当前值,当前值又因为 ARF 可能会不断映射新的值而被覆盖,所以需要保存所有
  • CAM 中
    • ARF 的内容不断写入,PRF 不断新增覆盖旧项,所以只需要指示 valid 即可

基于 SRAM 的重命名映射表

image.pngl200

超标量处理器的寄存器重命名

Dest = Src1 op Src2
过程

  • 从 RAT 里找到 Src1 和 Src2 的物理寄存器 Psrc1 和 Psrc2 image.pngl200
  • 从 free list 中找到一个空闲的物理寄存器 Pdest image.pngl200
  • 将 Dest 和 Pdest 的映射关系写到 RAT 中,之后可以用 Dest 去索引映射关系 image.pngl200

一条指令重命名,RAT 一共需要 3 读 1 写端口

  • 3 读
    • 2 个 Src1 和 Src2
    • 1 个 Dest 读取之前的映射
  • 1 写
    • 给 Dest 写入新的映射

4-way 指令则是 12 读,4 写

image.pngl200

重命名可以解决 WAR 和 WAW 问题
为什么重命名还需要 RAW 和 WAW 相关检查

image.pngl200

  • 指令 A 和 B 之间 RAW 相关
    • R0 需要查询指令 A 的结果,而不是 RAT 的结果
  • 指令 A、B、D 之间 WAW 相关
    • 写入 RAT 时,一个周期多条指令有相同目的寄存器,则将最新的映射写到 RAT 中即可
    • 而检查旧映射时,也应该使用有 WAW 相关性的指令,而不是 RAT 读取的值
  • 指令 B 和 D 之间的 WAR 相关
    • 对重命名没有影响

主要延迟的来源:

  • 多端口 SRAM 本身延迟
  • RAW 和 WAW 相关性检查的延迟

在不出现 RAW 和 WAW 相关下的映射

image.pngl200

解决 RAW 相关性

image.pngl200

#问题 R1 映射出来结果应该一致,为什么会不一致?

检查方式:

  • 每条指令的 Src 和之前的 Dst 编号进行比较,如过相等,则用 free list 取出来的值,如果有多个相等,则取出最新的指令对应的物理寄存器

image.pngl200

解决 WAW 相关性

对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)

只有最新的指令 D 才能写到 RAT,对周期内进行寄存器重命名的所有 WAW

image.pngl200

写之前完成检查
image.pngl200

对写 ROB 进行检查(判断)

为了释放不再使用的物理寄存器,需要从 RAT 读出以前对应的物理寄存器,并且写到 ROB 当中,告诉 ROB 我的值是在哪里,而不是让 ROB 去检查 ART 查到错误的值

image.pngl200

image.pngl200

如果寄存器地址,同时读写操作,先读后写

  • 读优先则能满足需求

FPGA 的两种特性

image.pngl200
写优先

  • 写入的内容可以马上读取到

image.pngl200
读优先

  • 写入的内容需要在下个周期读取

特殊指令处理方式

  • 根据当前目的寄存器的个数,决定当前周期从 free list 中读取的数值的个数
  • 使用目的寄存器读取 RAT 时,根据标记,明确哪些会读哪些不会读
  • 使用源寄存器读取 RAT 时,通用
  • RAW 和 WAW 检查时自动忽略比较的结果

相关文章:

超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题

寄存器重命名 重命名映射表基于 SRAM 的重命名映射表 超标量处理器的寄存器重命名解决 RAW 相关性解决 WAW 相关性对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)对写 ROB 进行检查(判断) 特殊指令处理方式 重命名映射表 重命名时…...

如何使用 Python 写入文本文件 ?

在Python编程中,写入文本文件是一项基本且重要的操作。 无论是生成日志文件、配置文件,还是进行数据输出,都需要用到这一技能。 下面,我将详细介绍如何使用Python写入文本文件,并提供一些实际开发中的建议和注意事项…...

07篇(附)--仿射变换矩阵

此篇献给某些 头铁 的小只因们,认真钻研下面的数学式吧 原理示例 首先我们以最简单的一个点的旋转为例子,且以最简单的情况举例,令旋转中心为坐标系中心O(0,0),假设有一点P0(x0,y0)&#xff0…...

KubeSphere搭建单节点RocketMQ

前提环境: Docker环境 Harbor仓库(可选) 参考官方文档: 《Docker 部署 RocketMQ》 https://rocketmq.apache.org/zh/docs/quickStart/02quickstartWithDocker参考官方文档: 《RocketMQ Dashboard》 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboard/ 声…...

深度学习中损失函数(loss function)介绍

深度学习中损失函数(loss function)介绍 ​ 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...

Vue3+Node中使用webrtc推流至mediamtx

前言 项目的 Web 端是 Vue3 框架,后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端,而我自己从未有媒体流相关经验,最初 leader 让我尝试通过 RTSP 协议推拉流,我的思路就局限在了 RTSP 方向。 最初使用的服务端…...

React 内置的Hook学习

useState:管理组件状态 useState 是一个用于在函数组件中添加状态的 Hook。它允许你在函数组件中声明一个状态变量,并提供一个更新该状态的方法,其中与组件生命周期的关系: 初始化:当组件首次渲染时,useS…...

Flutter Navigator2.0的原理和Web端实践

01 背景与动机 在Navigator 2.0推出之前,Flutter主要通过Navigator 1.0和其提供的 API(如push(), pop(), pushNamed()等)来管理页面路由。然而,Navigator 1.0存在一些局限性,如难以实现复杂的页面操作(如移…...

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容

uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…...

【HF设计模式】03-装饰者模式

声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第3章笔记:结合示例应用和代码,介绍装饰者模式,包括遇到的问题、遵循的 OO 原则、达到的效果。 …...

【人工智能-中级】模型部署与优化:从本地实验到云端与边缘部署

模型部署与优化:从本地实验到云端与边缘部署 在机器学习和深度学习模型训练完成后,如何高效、稳定地将模型部署到生产环境中,是实际应用中的关键环节。模型部署不仅涉及技术实现,还需要考虑性能优化、资源管理和安全性等多方面因素。本文将全面探讨模型部署与优化的相关内…...

Jenkins 编写Pipeline 简介及使用初识详解

一、Jenkins Pipeline简介 Jenkins Pipeline是Jenkins的一个重要功能,Jenkins 2.0 以上才会有,一系列 Jenkins 插件将整个持续集成用解释性代码 Jenkinsfile 来描述,它允许开发者以代码的方式定义整个持续集成和交付(CI/CD)流程,包括构建、测试、部署和监控等步骤。Jenk…...

uboot移植网络驱动过程,无法ping通mx6ull和ubuntu问题解决方案

开发板:mx6ull-ALPHA_V2.4 ubuntu版本:20.04 1.现在虚拟机设置中添加网路适配器用于开启桥接模式 2.在编辑中打开“虚拟网络编辑器” 我的电脑本身只有VMnet1和VMnet8,需要底下“添加网络”,增加这个VMnet0 ,并且进行…...

精准预测美国失业率和贫困率,谷歌人口动态基础模型PDFM已开源,可增强现有地理空间模型

疾病、经济危机、失业、灾害……人类世界长期以来被各种各样的问题「侵扰」,了解人口动态对于解决这类复杂的社会问题至关重要。 政府相关人员可以通过人口动态数据来模拟疾病的传播,预测房价和失业率,甚至预测经济危机。然而,在过…...

C#速成(文件读、写操作)

导包 using System.IO;1、写入文件(重要) StreamWriter sw new StreamWriter("C:\Users\29674\Desktop\volumn.txt");//创建一个TXT的文件 sw.WriteLine(textBox2.Text);//写入文件的内容 sw.Close();//关闭2、读取文件(不重要&…...

SQL server学习03-创建和管理数据表

目录 一,SQL server的数据类型 1,基本数据类型 2,自定义数据类型 二,使用T-SQL创建表 1,数据完整性的分类 2,约束的类型 3,创建表时创建约束 4,任务 5,由任务编写…...

【UE5 “RuntimeLoadFbx”插件】运行时加载FBX模型

前言 为了解决在Runtime时能够直接根据FBX模型路径直接加载FBX的问题,推荐一款名为“RuntimeLoadFBX”的插件。 用法 插件用法如下,只需要指定fbx的地址就可以在场景中生成Actor模型 通过指定输入参数“Cal Collision”来设置FBX模型的碰撞 还可以通过…...

【潜意识Java】深入理解 Java 面向对象编程(OOP)

目录 什么是面向对象编程(OOP)? 1. 封装(Encapsulation) Java 中的封装 2. 继承(Inheritance) Java 中的继承 3. 多态(Polymorphism) Java 中的多态 4. 抽象&…...

windows同时使用多个网卡

windows同时链接了有线网络,多个无线网卡,默认会使用有线网络,如果想要局域网内使用某个特定的网络,可以设置静态ip 1. 首先删除原来的静态网络(不冲突可以不删除),我这里usb无线网卡切换过usb插口,这里需要删除原来的. 使用 route print 查看接口列表及静态路由信息 route p…...

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

基于 TAPD 进行项目管理

起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...