当前位置: 首页 > 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执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...