指令集并行与开发进阶算法

进阶算法
基础算法无法解决中断恢复的问题,即假如有两个写寄存器的操作,指令1,指令2,可能乱序执行时指令2的结果已经将写回了寄存器,但是指令1还未执行,此时发生中断后,从指令1重新开始执行,就会重新进行两次写入,将会发生错误。
只要保证后面指令修改机器状态时, 前面的指令都已经不会发生中断即可。很自然想到用一个额外的缓冲部件来存储即将写入寄存器内的数据,然后根据前置写入的数据是否都以完成写入来将缓存器中的内容重新写回寄存器中。这种做法也叫做 乱序执行,有序结束,所用的缓冲器通常被称为Reorder Buffer(ROB),所以基础算法的过程中要加入一个提交Commit过程。
新算法的流程如下:
1) 发射: 把操作队列的指令根据操作类型送到保留站 (如果保留站以及ROB有空), 并在 ROB 中指定一项作为临时保存该指令结果之用; 发射过程中读寄存器的值和结果状态域, 如果结果状态域指出结果寄存器已被重命名到ROB, 则读ROB 执行: 如果所需的操作数都准备好, 则执行, 否则根据结果 ROB 号侦听结果总线并接收结果总线的值
2) 写回: 把结果送到结果总线, 释放保留站; ROB根据结果总线修改相应项
3) 提交: 如果队列中第一条指令的结果已经写回且没有发生例外, 把该指令的结果从 ROB 写回到寄存器或存储器, 释放 ROB 的相应项。如果队列头的指令发生了中断或是猜测错误的转移指令, 清除操作队列以及 ROB 等。
如果某个值在提交写回寄存器时发现发生了溢出,直接清除ROB缓存即可,如果时发生中断并准备继续执行,那么从中断的指令重新执行即可。
4)示例介绍
多了一个ROB,并且结果总线和浮点寄存器的连接被断开了,内容的写回必须通过ROB进行
1)保留站(发射队列)把有序变成乱序。
2)ROB把乱序重新变成有序。
3)重命名寄存器用于保存未提交的临时结果(就是把寄存器前边加了一个空位存储ROB序号)。
这里保留站的各个位置代表的含义有变动,取消了固定的编号,同时以ROB的序号作为替代,假设依次为 Ind Qj Vj , Qk Vk,Ind表示ROB序号,即执行完需要写回哪里。Qj,Qk表示如果寄存器没有结果时,发现依赖ROB的结果,此时将ROB对应的序号填入即可。
浮点寄存器新增了一个格子,用来存储ROB序号,表明它的值依赖哪个ROB的结果
ROB缓存中三个位置分别代表 (操作类型,写入寄存器的序号,值),例如(MUL,f0,2),值为空即正在等待保留站内的指令执行完毕,如图2-20所示。
 
图2-20 浮点寄存器新增了一个格子,用来存储ROB序号
1) DIV发射,首先访问寄存器发现F1F2都有值,直接写入乘法保留站(如果发现有前置序号还没写入,那么就将ROB序号写入保留站中的操作数值左边的序号部分)因为其结果要写回F0,所以将写入的信息先写入ROB1,并在寄存器0前边加上ROB序号1,表明他的值依赖于ROB1的执行,如图2-21所示。
 
图2-21 DIV发射示例
2) MUL1发射,对F0F2首先检索寄存器,发现F2存在,但F0依赖ROB1所以将其依赖的ROB序号1写入乘法保留站中F0的序号部分,F2则直接将值写入即可序号默认写0。此时其执行结果需要写入F3,所以将其写入的内容暂时保存在ROB2中,ROB2说明其正在等待写入。同时浮点寄存器中真正要写入的F3位置标记上对应等待的ROB序号2,表示接下来的指令如果需要寄存器3的内容时,直接找ROB2就行了,如图2-22所示。
 
图2-22 MUL1发射
3) ADD发射,并且两个操作数都已准备好,按照上述流程继续写入即可,如图2-23所示。
 
图2-23 ADD发射
4) MUL2发射,F0需要等待ROB3,所以将其序号3写入乘法保留站,如图2-24所示。
 
图2-24 MUL2发射
5) ADD 写回,ADD执行结果写入ROB3,并且因为保留站的第一个序号就代表写回的ROB序号,所以广播时其他需要ROB3的保留站指令,都会检查并接受相关值(这里保留站4就接受了ADD的结果,因为它就在等待ROB3),结果被写入ROB3中,此时不能写回寄存器,要等待它前边的12号ROB都有了值之后才行,如图2-25所示。
图2-25 ADD写回
6) DIV写回,广播以后保留站2收到值并修改自身。ROB1接受并修改自身。此时ROB中最前边的缓存1已经有值了,开始提交,并且提交可以和写回同时执行(执行不冲突),如图2-26所示。
 
图2-26 DIV写回
7) 提交ROB1并修改寄存器 f0(虽然此时修改已经没啥用了),此时将指令队列中第一条指令删去。同时MUL2写回(尽管MUL1和MUL2都准备好了,但是MUL2先准备好,先来后到),如图2-27所示。
 
图2-27 提交ROB1并修改寄存器 f0
8) 写回MUL1,此时ROB中所有缓存都已写入,按照ROB序号的次序,依次提交三个缓存内容来修改对应的寄存器即可,如图2-28所示。
图2-28 写回MUL1
9) 依次写入三个缓存,如图2-29与图2-30所示。
 
图2-29 依次写入三个缓存(前)
 
 
图2-30 依次写入三个缓存(后)
 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指令集并行与开发Tomasulo算法

指令集并行与开发Tomasulo算法 1. 概念 Tomasulo 方法是一种用于在超标量处理器中执行指令并处理数据相关(数据相关性)的方法。它主要通过对指令进行乱序执行和动态调度来提高指令级并行性。 可以通过寄存器重命名消除 WAR 和 WAW 相关(通过保留站号间接实现重命名) 也可以…

芯片存储器层次结构概述

存储器层次结构概述 1. Cache的作用 Cache结构与作用,如图2-5所示。图2-5 Cache结构与作用 介绍一下Cache具有特征。Cache没有程序上的意义,只是为了降低访存延迟;处理器访问Cache和访问存储器使用相同的地址。 Tag存储cache块在主存中的首地址(cache每个字节都给一个地址太…

推荐1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》书,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

MYSQL-DDL操作

点击查看代码 ```plaintext create table tb(id int comment ID,username varchar(20) comment 用户名,name varchar(10) comment 姓名,age int comment 年龄,gender char(1) comment 性别 )comment user测试表</details> ![](https://img2024.cnblogs.com/blog/3619156…

JetBrains IDEA破解后一直跳出激活弹窗

正文 一直跳弹窗是因为选了区域中国,你可以断网,然后到打开设置,搜索区域,选择亚洲。保险起见,保存后先关闭idea,再连接网络,启动IDEA。

三分钟教学:手把手教你实现Arduino发布第三方库

Arduino 发布第三方库的流程包括:构建库的基本框架后将其打包并上传至 GitHub,在 GitHub 上创建 Tag 和 Release 后,提交到 Arduino 库管理器,最后在Arduino IDE进行验证。三分钟教学:手把手教你实现Arduino发布第三方库原文链接: 手把手教你实现Arduino发布第三方库 摘要…

2025-315晚会总结

🔖简介 2025年315晚会曝光了多个行业的消费乱象和违法侵权行为。 主题:“共铸诚信 提振消费”,聚焦食品安全、公共安全、金融安全、数字经济等领域。 核心诉求:打击消费陷阱,推动构建公平、诚信的消费环境。 📢曝光现象 🔒数据安全与隐私侵权非法窃取个人信息涉事企业…

再破难关(BFS)

问题 F: 再破难关 题目描述 OIBH组织派出的黄金十二人+青铜五小强还没有到, 他们只能指望原先的机关能够阻拦住柯南的脚步。柯南打开大门之后发现里面还有一个门, 门上还有一个神奇的锁(-,-) 这是一个4*4的锁, 上面有8个凸起的格子和8个被按下的格子,当且仅当两个格子有公共边…

LLM大模型:OpenManus原理

继deepseek之后,武汉一个开发monica的团队又开发了manus,号称是全球第一个通用的agent!各路自媒体企图复刻下一个deepseek,疯狂报道!然而manus发布后不久,metaGPT团队5个工程师号称耗时3小时就搞定了一个demo版本的manus,取名openManus,才几天时间就收获了34.4K的start…

Day14_TCP三次握手

每日一题 TCP三次握手详解 三次握手(Three-Way Handshake) 是TCP协议建立可靠连接的核心过程,确保通信双方能够正常收发数据并同步初始序列号。以下是详细步骤和原理:1. 第一次握手:SYN(客户端 → 服务器)动作:客户端发送一个TCP报文,设置SYN=1(同步标志位),并生成…

Paimon merge into 实现原理

语法 MERGE INTO target USING source ON source.a = target.a WHEN MATCHED THEN UPDATE SET a = source.a, b = source.b, c = source.c WHEN NOT MATCHED THEN INSERT (a, b, c) values (a, b, c)merge into 实际上是一个语法糖, 相对应的语义也可以通过其他的 sql…

MACD

目录背景和价值用法快线在0轴上方 - 多头较强,否则多头较弱快线上穿慢线 形成金叉,形成多头信号。 快线下穿慢线 形成死叉,形成空头信号顶背离和底背离参考资料 背景和价值 指数平滑移动平均线两个(12和26)均线相交,12EMA上穿26EMA形成金叉,快线从0轴下方上穿0轴上方 用…