408五级流水线强化课笔记

408强化课录播五级流水线相关内容笔记

  • 指令流水线基本概念:简单的概念题
  • 指令流水线基本实现:指令按序发射,按序完成
  • 各种冒险:结合MIPS指令序列分析并处理冒险
  • 超标量和动态流水线:简单的概念题

五级流水线

五级流水线的设计是为了通过并行提高处理器的吞吐量。
img
图片来自CSAPP。
一个指令通常被划分为五个阶段:

  • 取指(IF)
  • 译码(ID)
  • 执行(EX)
  • 访存(MEM)(如果需要的话)
  • 写回(WB)(如果需要的话)
    总体的图如下
    image

结构冒险(考的少)

一个被请求的资源仍处于忙碌状态。

多个阶段可能请求同一份资源,例如IF和MEM需要同一块Cache,就会发生结构冒险。
解决方法有:

  • 阻塞指令
  • 把指令Cache和数据Cache分离

数据冒险

需要等待上一个指令完成数据读写。

img
如上图所示,因为指令I1对寄存器R1的写操作发生在WB写回阶段,因此指令I2在ID译码阶段需要读寄存器时,R1的值还没有被写回,这就是数据冒险。
核心特点:两条指令,先写后读同一个寄存器。如果某条指令写了一个寄存器,则要观察后面三条指令是否读了这个寄存器。(个人感觉可能画图更直观)
img
解决方案:

  • 硬件阻塞:将读寄存器的指令ID段阻塞若干时钟,直到写寄存器的指令完成WB。
  • 转发(旁路)技术:将写寄存器的数据直接转发给读寄存器的指令。但转发旁路不能解决Load指令写寄存器引发的Load-Use数据冒险

Load-Use数据冒险

Load指令把数据从内存读到寄存器,后面的指令需要用到这个寄存器的值。这种情况下,即使使用转发技术也无法解决数据冒险。
img

控制冒险

一些控制取决于上一条指令的结果。

img
转移类指令会更改PC,因此下一条指令不是I2而是其他,会产生控制冒险。
解决方案:

  • 硬件阻塞:将转移类指令后一条指令IF段阻塞3时钟

冒险总结

img

posted @   CauchyPt  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示