当前位置: 首页 > news >正文

408第二季 - 组成原理 - 流水线

闲聊

流水线五阶段

缩写也得记得

然后流水线长这个样子

然后这里是5级流水线

比如执行2条指令就是  5*t + (2-1)t  = 6t,对照图一看,是这样的

流水段寄存器

比如说下面的这个图片

ID在译码,IF在干什么,在取值,这样就很麻烦了

看这个图,你通过IF取指完后给到IR,后面继续执行ID和IF,他们是同时运行的,很有可能下面的IF取值完后覆盖了IR,然后ID取的是下面IF取得的指令,

所以整了个流水段寄存器,比如这里取完指令后放入流水段寄存器和IR,然后在通过流水段寄存器给到译码,不用担心被覆盖

题目

1

选最大的然后+20的寄存器延时 

d

流水线的冒险与处理

表格很重要

ALU是计算类指令 内存阶段啥也没干

取/存是访存指令 EX是算有效地址,MEM是芳村,最后是写回寄存器

以前的我们

在指令里找内存的地址里的数据

然后我们学的流水线这里就变捞了

通过地址到内存里取出来放入寄存器

转移是转移指令

转移目的地址到PC

结构冒险

解释一下

这里IF取值是要访问内存的,然后MEM也是要访问内存的,所以冲突了,这就是结构冒险,LOAD和ALU尼玛的犯病

那第五列是怎么回事呢

第五列的MEM和IF可以看成计算类指令,所以没事

因为有结构冒险,所以指令cache和数据cache会分开

d

数据冒险

看个例子

I1阶段:这里的WB这个阶段才会写回到R1

I2阶段:这里R1是ID读寄存器这个阶段才行

然后还没读呢,就写

所以这是流水线带来的问题,如果不是流水线那一定是线写后读的,比如下图

解决方法

硬件堵塞这里就是往后推迟而已

当然也可以这样堵塞(下面)

然后是nop空操作

可以看见中间3条指令啥也不做,就这个意思

第二种解决方法

这个很牛逼啊,EX这个阶段不是给你计算好了吗,后面就要存了

很显然这里就是别存了,直接把运算结果给到第二个就行,ID就不需要等WB的存了,直接上手用

第三个解决方法

这里是变成load看注意

然后就是load指令不是EX指令结束后就有的,而是在访存完之后的MEM才有的,所以要像获得load指令访存完的东西,你得在MEM后面

所以,这里必须先延迟加转发往后移一下,保证在MEM后面,最后再把MEM给到EX进行执行操作

控制冒险

也就是说

比如第一段是if语句,那么下面的就不用执行,但他是流水线。。。

所以要尽早转移目标地址

然后来看一下神秘语言

b是分支语言,ne是!=

branch not equal

EX和MEM,MEM这里要送目的地址到PC,所以只有IF在MEM后面才能取值

所以看图

题目

1

这里会触发转发(旁路)技术,因为I1和I2 都要取或写s2

然后第三条即会用到s2,也会用到s3

所以这里的ID正常会在WB之后

但这里依旧可以用转发(旁路)技术,但注意,因为上一步是load,所以用load-use方法来做

然后因为I3是转移指令,你得在EX之后算出转移的地址,然后在MEM送目的地址到PC后,才能继续取指

然后可以看见打×的是堵塞的情况

所以只有i3和i4

c

2

R5这里又当又立,I2和I3中的R5要先写后读,所以会数据冒险,先读后写入肯定不会

所以b

3

从之前讲的nop空操作可知

你得间隔3条才不会有数据冒险

A i1和i3 间隔1条 有数据冒险

B i2和i3 s3 写后读 有

C 没有

D s2写后读 有

c

http://www.lqws.cn/news/459037.html

相关文章:

  • 开疆智能ModbusTCP转EtherCAT网关连接IVO编码器配置案例
  • Python 的内置函数 globals
  • [MSPM0开发]之九 MSPM0G3507的ADC
  • 全球首款5G-A人形机器人亮相,通信与AI融合进入新阶段
  • 展锐android13修改开机logo和开机图片
  • 阿里云申请ssl证书,同时需要绑定域名,下载nginx压缩包,nginx添加证书路径即可
  • java面试题03静态修饰类,属性,方法有什么特点?
  • Mac电脑 窗口分屏管理 Magnet Pro
  • 零基础入门PCB设计 一实践项目篇 第三章(STM32开发板原理图设计)
  • lingma(阿里云Ai)结合idea使用
  • Redis03
  • STM32[笔记]--开发环境的安装
  • 三种经典算法无人机三维路径规划对比(SMA、HHO、GWO三种算法),Matlab代码实现
  • Python 中设置布尔值参数为 True 来启用验证
  • Rsync异地备份的使用方式
  • 网络编程简介与Netty实战:从入门到高性能Echo服务器
  • Node.js 在前端开发中的作用与 npm 的核心理解
  • FPGA基础 -- Verilog 的值变转储文件(VCD:Value Change Dump)
  • Spring Boot + MyBatis + Vue:全栈开发中的最佳实践
  • 压铸件超声波清洗设备有哪些常见的故障原因?
  • Android Kotlin 用法对比Java使用小结
  • 阿里云OSS对象云储存入门操作
  • 前端工程结构设计指南:如何让模块解耦、易维护、可拓展
  • 讯方“教学有方”平台获华为昇腾应用开发技术认证!
  • Linux系统时间不对导致mysql初始化失败:Data Dictionary initialization failed.(数据字典版本验证失败)
  • 【案例分享】如何用 DHTMLX Scheduler 构建灵活高效的资源调度系统?
  • Vue 比较两个数组对象,页面展示差异数据值
  • 1.22Node.js 中操作 Redis
  • 党建赋能 医校协同|广州附医华南医院与湖南中医药高等专科学校签约携手共育英才
  • Unity3D仿星露谷物语开发67之创建新的NPC