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

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...