超标量处理器设计:寄存器重命名(1)介绍

news2024/11/15 14:19:57

继续学习体系结构的知识。

指令之间的相关性

1.数据相关性

具体分为三类:

(1) Output Dependence (WAW):当两条指令尝试向同一个寄存器写入数据时发生。后面的写操作必须等待前面的写操作完成,因为它们争夺同一资源。

(2) Anti-Dependence (WAR):发生在一条指令试图向一个寄存器写入数据,而该寄存器的内容被前面某条指令作为输入使用的情况。写的指令必须等待前读的指令完成。

(3) True Dependence (RAW):一条指令读取的数据依赖于前一条指令写入的数据。真正的“依赖”,限制指令的执行顺序,必须先读后才能写。

数据相关性是并行处理中关键的问题。RAW相关性直接限制了指令的并行执行。

通过硬件设计(如乱序执行、寄存器重命名)和软件优化(编译器重排指令)可以减轻相关性的影响,提高处理器的效率和吞吐量。

2. 存储器数据相关性

这类相关性涉及对内存(通过load和store指令)的访问。与数据相关性相似,也分为WAW、WAR和RAW,但关注点在于内存地址而非寄存器。

3. 控制相关性

由条件分支指令引起,它决定了程序的执行路径。这种依赖关系基于分支条件的结果,影响后续指令的执行。通过分支预测技术可以尝试提前确定分支方向,减少控制相关性带来的延迟。

4. 结构相关性

指的是处理器内部资源限制导致的依赖,比如发射队列、重排序缓存或功能单元的可用性。当所有必要的处理器资源都被占用时,新指令必须等待,直到有资源可用才能继续执行。

数据相关性中WAW和WAR可以通过更换寄存器名来解决

我们可以看到,WAW和WAR相关性被称为“假相关性”。 理论上可以通过寄存器重命名(register renaming)来解决。

寄存器重命名的引入:

寄存器数量限制:现代处理器拥有较多的通用寄存器(如32个),而较老的CISC架构如早期的x86,通用寄存器较少(如8个)。寄存器很少的话编译器和处理器不得不复用寄存器,从而引入了WAW和WAR相关性。寄存器重命名是一种有效的解决方案,它通过映射逻辑寄存器到物理寄存器,允许逻辑上相同的寄存器在不同时间点映射到不同的物理寄存器,以此消除数据冲突。

下面介绍可能存在WAW相关性两个例子:循环和函数调用 

(1)循环是编程中常见的结构,循环内的寄存器使用很容易产生大量WAW相关性,即使通过循环展开减少迭代次数,最终也会受限于物理寄存器的数量。循环展开还可能增加代码大小,影响指令缓存(I-Cache)的命中率,降低性能。

(2)频繁调用的小函数也会造成类似的问题。当函数修改相同的寄存器时,会产生大量的WAW相关性。如果使用内联函数可以减少函数调用开销,但也可能导致寄存器耗尽和代码膨胀,影响缓存性能。

所以增加寄存器数量能缓解上述问题,但这涉及到兼容性问题,新增寄存器意味着现有软件需要重新编译,且不增加寄存器并不能根本解决由循环和函数调用等代码结构特性引起的资源竞争问题。所以最好的解决办法是引入寄存器重命名。

寄存器重命名的工作原理

重名名映射表:处理器内部维护一个映射表,记录逻辑寄存器到物理寄存器的当前映射关系。每当指令调度执行时,硬件会根据映射表将逻辑寄存器名转换为实际的物理寄存器。

空闲寄存器列表:记录那些寄存器是空闲的。

分配与回收:当一条指令准备执行,且需要写入寄存器时,寄存器重命名逻辑会检查映射表,为该逻辑寄存器分配一个新的物理寄存器。完成执行的指令所占用的物理寄存器会被释放,以便于后续指令的使用。

解决WAW和WAR:通过为每个写操作分配一个新的物理寄存器,WAW相关性自然消失,因为每个写入都不会覆盖另一个未来可能需要的值。对于WAR相关性,后面的写操作的寄存器和读操作的寄存器不同,两个不会影响。

寄存器重命名显著提高了处理器的指令级并行(ILP),使得更多的指令能够无冲突地同时执行。

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

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

相关文章

大厂面试sql手撕题目总结

文章目录 1. 常用函数1. 日期函数 2. 行转列(转置)1. 行转列 连续N天登录1. 查询出连续三天登录的人员姓名 N日留存率1. 求用户当天,次日,七日留存率 分组内topN1. 求出每个部门工资最高的前三名员工,并计算这些员工的…

AWS Cli Windows安装配置

1. 安装 下载地址:AWS 命令行界面(CLI)_管理AWS服务的统一工具-AWS云服务 检验安装: > aws --version aws-cli/2.15.44 Python/3.11.8 Windows/10 exe/AMD64 prompt/off 2. 创建IAM用户 1) 创建组 选择IAM 点击创建组 填写用户组名,…

YOLOv5改进 | 独家创新篇 | 利用MobileNetV4的UIB模块二次创新C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用MobileNetV4的UIB模块二次创新C3,其中UIB模块来自2024.5月发布的MobileNetV4网络,其是一种高度优化的神经网络架构,专为移动设备设计。它最新的改动总结主要有两点,采用了通用反向瓶…

synchronized关键字和ReentrantLock锁区别

synchronized关键字和ReentrantLock锁是Java中用于同步的两个重要机制,它们在很多方面有所不同: 1. **锁定范围**: synchronized关键字只能在方法的执行过程中提供锁定,而ReentrantLock可以锁定任何对象,包括方法、代码块和对象。…

django项目结构介绍

小白的django学习笔记 五一前的某天 文章目录 django项目结构介绍项目的基本配置templates项目模块manage.pyExternal Libraries django项目结构介绍 项目的基本配置 在这里配置,跟工程名是一样的 templates 放网页、js、css的地方 django 项目模块 项目开发时&…

Android Studio高版本安卓模拟器抓取https包

Android Studio avd 设置 证书生成 *.cer格式证书​ openssl x509 -inform DER -subject\_hash\_old -in charles-ssl-proxying-certificate.cer​ *.pem格式证书​ openssl x509 -inform PEM -subject\_hash\_old -in charles-ssl-proxying-certificate.pem会输出 2cb30a9e …

QX------mini51单片机学习------(5)数码管的静态与动态显示

目录 1数码管应用场景 2数码管显示原理 3静态与动态显示 474HC573锁存器工作原理 5上拉电阻的作用 6原理图分析 7实践 1数码管应用场景 2数码管显示原理 图(b)左边是共阴极,右边是共阳极 GND是公共极,可以用万用表测&am…

【JavaEE初阶系列】——理解Cookie 和 Session以及相关API

目录 🚩Cookie 🚩Session 🚩Servlet API 🎈HttpServletRequest 🎈HttpSession 🚩Cookie http请求header中一个属性,浏览器持久化存储数据的一种机制,网页无法访问主机的文件系…

技术速递|Python in Visual Studio Code 2024年4月发布

排版:Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展 2024 年 4 月发布! 此版本包括以下公告: 改进了 Flask 和 Django 的调试配置流程Jupyter Run Dependent Cells with Pylance 的模块和导入分析Hatch 环境发…

【Leetcode每日一题】 综合练习 - 逆波兰表达式求值(难度⭐⭐)(73)

1. 题目解析 题目链接&#xff1a;150. 逆波兰表达式求值 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 数据结构选择&#xff1a; 使用栈&#xff08;stack<int>&#xff09;来存储操作数&#xff0c;以便进…

OpenHarmony 3.2 Release版本实战开发——Codec HDI适配过程

简介 OpenHarmony Codec HDI&#xff08;Hardware Device Interface&#xff09;驱动框架基于 OpenMax 实现了视屏硬件编解码驱动&#xff0c;提供 Codec 基础能力接口供上层媒体服务调用&#xff0c;包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

OpenMVS学习笔记(一):WSL编译安装测试

1.CUDA和CUDNN安装 [1] WSL版本cuda安装&#xff1a; >> wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin >> sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 >> wg…

Burp Suite (bp)启动激活报错问题

一、自查 1、从哪里下载程序 【大部分同学的问题&#xff0c;都是重新下载解决的&#xff0c;简单快速直接】 一律使用“常用软件”中提供的Burp Suite软件包&#xff0c;方便排查问题 自带JDK的版本 Burp 2024.3&#xff0c;自带JDK21&#xff0c;双击bat即可启动&#xff…

YOLOv8网络结构介绍

将按照YOLOv8目标检测任务、实例分割任务、关键点检测任务以及旋转目标检测任务的顺序来介绍&#xff0c;主要内容也是在目标检测任务中介绍&#xff0c;其他任务也只是Head层不相同。 1.YOLOv8_det网络结构 首先&#xff0c;YOLOv8网络分成了三部分&#xff0c;分别是主干网络…

Java | Spring框架| 集合与复杂类型的注入:处理多值依赖

集合与复杂类型的注入&#xff1a;处理多值依赖 在Spring框架中&#xff0c;除了可以注入简单的依赖类型&#xff0c;如字符串、整数等&#xff0c;还可以注入集合类型和复杂类型的数据。集合类型包括List、Set、Map和数组&#xff0c;而复杂类型可以是自定义的对象、配置类等…

【JavaEE网络】用Form与Ajax构建HTTP请求

目录 通过 form 表单构造 HTTP 请求form 发送 GET 请求form 发送 POST 请求 通过 ajax 构造 HTTP 请求发送 GET 请求发送 POST 请求发送 application/json 数据封装 ajax 方法 通过 form 表单构造 HTTP 请求 form (表单) 是 HTML 中的一个常用标签. 可以用于给服务器发送 GET …

janus源码分析

基础说明 janus官网 https://janus.conf.meetecho.com/index.html janus源码地址 https://github.com/meetecho/janus-gateway 编译及部署参考 https://pro-hnb.blog.csdn.net/article/details/137730389?spm1001.2014.3001.5502 https://pro-hnb.blog.csdn.net/article/deta…

QT设计模式:策略模式

基本概念 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列方法&#xff0c;并使它们可以相互替换。策略模式使得算法可以独立于客户端而变化&#xff0c;使得客户端可以根据需要选择相应的算法。 策略模式通常由以下角色组…

AutoDL服务器远程桌面

文章目录 1.安装VNC和必要的一些图形显式库:2.SSH隧道2.1.本地安装openssh服务器2.2.服务开启2.3.显示当前安装的 SSH 版本信息2.3.设置一个 SSH 隧道 注意3.VNC Viewer客户端登录4.测试5.参考 VNC&#xff08;Virtual Network Computing &#xff09;是一种图形化的桌面共享协…

mac电脑如何安装java

1、检查当前系统的 Java 版本 打开终端,输入以下命令查看当前 Java 版本 /usr/bin/java -version 2、前往 Java 官网下载 Java JDK 打开 Java 官网 (https://www.java.com/zh-CN/download/) 并下载最新版本的 Java JDK。 3、安装 Java JDK 双击下载的 .dmg 文件启动安装程序…