Pipline 中的Hazard, Forwarding, Stall, Flush和其他
设计:cmp和地址计算放在ID级
Flush和Stall
Flush产生的结果是:向上传递一条空指令,寄存器值被维持。
Stall产生的结果是:不向上传递指令,寄存器的值被维持。
对于A->B, 如果A Flush, 那么B得到了一条空指令,流水线在A级停顿,在B级继续。
如果A stall, 那么B的值也不会被更新,流水线在B级也停顿下来。
Hazard检测与解决
对于需要我们解决的Hazard一共有6种,解决方法如下:
冲突位置 | 冲突原因 | 解决方法 |
---|---|---|
ID和EXE | EXE级rd被ALU修改 | 使用EXE级ALU结果修改ID级寄存器 |
ID和EXE | EXE级rd被LW修改,此时ID不是SW | IF 级Stall, ID级Flush |
EXE和MEM | MEM级rd被LW修改,此时EXE是SW | MEM级读出的值修改EXE级寄存器 |
ID和MEM | MEM级rd被ALU修改 | 使用MEM级ALU结果修改ID级寄存器 |
ID和MEM | MEM级rd被LW修改 | 使用MEM级MEM结果修改ID级寄存器 |
IF | 跳转 | IF flush |
Forwarding
Forwarding 一共有4条路线
具体来说,ID级rs1和rs2的修正有3种选则:
- EXE级ALU的输出
- MEM级ALU的输出
- MEM级mem的输出
对于LW和SW的情况,有一种选择,
- 从MEM的输入口直接接到输入口。
(注意: 这种情况也满足EXE级是LW, ID级修改了reg的条件,因此stall时必须区分出ID是不是sw, 如果不是才stall)
信号含义解释
信号 | 含义 |
---|---|
RegWrite | 是否写寄存器,用来区别指令是否是LW或者ALU结果修改 |
DatatoReg/MemRead | 是否读mem,用来区别是否是lw指令 |
Pipline 中的Hazard, Forwarding, Stall, Flush和其他相关推荐
- java中outputstream以及其子类 flush有什么作用呢
面试题:close()和flush()的区别? A:close()关闭流对象,但是(也会)先刷新一次缓冲区,关闭之后,流对象不可以继续再使用了. B:flush()仅仅是刷新缓冲区(一般写字符时要用, ...
- pipline中替换tag变量
实验架构:192.168.0.96 gitlab192.168.0.97 jenkins192.168.0.98 harbor.docker集群说明:下面代码编译镜像那一步的代码必须靠左,目的是不要有 ...
- python中f点flush是什么函数_Python文件操作及内置函数flush原理解析
1.打开文件得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例文件 '你好呀' 我是于超 嗯 再见 文件操作基本流程 f=open('chenli',encoding='ut ...
- java的flush方法_Java中的BufferedWriter flush()方法及示例
Java中buffered writer类的flush()方法用于刷新缓冲的writer流中的字符.语法:公共void flush()指定者:此方法由Flushable接口的flush()方法指定.重 ...
- Scrapy中的item和pipline
Item Item文档 创建item 在items.py中创建item,示例如下: import scrapyclass Product(scrapy.Item):name = scrapy.Fiel ...
- mysql中flush用法,flush 的常规用法:
flush 的常规用法: flush logs : 刷新二进制日志文件 flush PRIVILEGES:刷新权限,修改权限或密码后,需要使用到该命令 flush tables:关闭所有表,并清空 ...
- qt有关tcpserver中读取数据时是否使用flush时的研究
tcpserver的读取槽函数如下: recBuffer.append(tcpSocket->readAll());///>缓存接收的数据 tcpSocket->flush(); 我 ...
- Ceph cache tier 中 flush 和 evict 机制源码分析
存储系统:ceph-14.2.22 操作系统:ubuntu-server-16.04.07 OSDService::agent_entry [ 文件路径 ] ceph/src/osd/OSD.cc O ...
- HBase源代码分析之MemStore的flush发起时机、推断条件等详情(二)
在<HBase源代码分析之MemStore的flush发起时机.推断条件等详情>一文中,我们具体介绍了MemStore flush的发起时机.推断条件等详情.主要是两类操作.一是会引起Me ...
- (018)java后台开发之语法输出流flush()方法
参考: http://blog.csdn.net/lsx991947534/article/details/45065773 在java开发中,有时我们会进行流的操作,所以可能会经常遇到这样一段代码 ...
最新文章
- TeamViewer介绍:远程控制计算机
- 神经拟态芯片拉近AI与人脑距离
- chrome打不开12306
- ios开发Base64编码以及加密相关学习
- 判断某个点是否在不规则图形内
- java回调如何理解_如何理解java中的回调
- leetcode328 奇偶链表
- 用NAnt 将StarTeam中的文件CheckOut回本地计算机
- Why String is Immutable or Final in Java
- Spring中事务管理的几种配法
- 医疗健康APP的开发和设计
- PS可以快速批量修改图片尺寸吗?
- 基于MATLAB的双重积分的数值求解
- linux 下进入root
- dva 配置antd
- 苹果Swift语言入门教程
- 8051单片机的存储器结构
- 学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
- 使用RT-Thread Studio DIY 迷你桌面时钟(三)| 获取NTP时间(at_device软件包 + netutils软件包)
- h5分享微信 QQ——Hbuilder app
热门文章
- HDU - 6438 Buy and Resell (贪心 + 优先队列)
- Acwing-873. 欧拉函数
- mysql修改frm,MySQL 修改.frm文件来更新字段
- mac ruby 环境变量_Ruby环境设置| 在Mac和Windows操作系统上安装Ruby
- Kindle PaperWhite 2越狱教程
- 【sv】enum赋值
- 冰山理论(理解笔记)
- 使用 *号在分别在控制台输出一个平行四边形、等腰三角形、菱形
- 饥荒服务器文档,建立饥荒服务器
- 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书