5.6 指令流水线

1.基本概念

不同(指令)执行方式的总耗时

image-20260309145109250

1.顺序执行方式

  • 没有并行,一次只能执行一条指令。
  • 总耗时 :==指令数n * 指令执行的总时间3t==(3个阶段时间3t)
  • =3nt

image-20260309145348320

2.一次重叠方式

  • 重叠了一个阶段的时间(第n个的最末阶段和第n+1个的最初阶段重叠)
  • 总耗时:==第一条指令all 3t,后面的(n-1)条指令都是 2t。==
  • =(1+2n)t

image-20260309145637390

3.二次重叠执行方式

  • 重叠了两个阶段。
  • 总耗时:==第一条指令all 3t,后面的(n-1)条指令都是 t。==
  • =(2+n)t

image-20260309145852844

流水线的表示方法

  • 指令执行过程图:for分析影响流水线的因素
  • 时空图:for分析流水线的性能

image-20260308091348966

2.性能指标

吞吐率

  • ==单位时间流水线完成的任务数量。==
  • TP = ==任务数n / 总时间Tk==

image-20260309152059824

加速比

  • ==不使用流水线和使用流水线所用时间的比==
  • S = 不使用流水线T₀ / 使用流水线Tk

image-20260309152114326

效率

  • 设备的利用率(==空格数占比于所有格子数==)

image-20260308092228842

以上性能指标都是建立在理想情况下的:①各阶段花费时间相同 ②每个阶段结束后立即进入下一阶段

==但实际情况是②条件并不能满足==

3.影响因素⭐

  • (五段式)指令流水线:IF(instruction fetch),ID(ins.. decode),EX(excute),M(memory),W(writeback)。
  • 因为要固定100ns才到下一阶段,所以每个阶段后面都有一个==缓存寄存器==(锁存器)
    • 【锁存器:==作用是保存本段流水段的执行结果,提供给下一流水段使用。==】

image-20260308093929801

1.结构冒险(资源冲突)

  • ==由于多条指令在同一时刻争用同一资源造成的冲突。==
  • 如:Load和Instr3指令的 Mem寄存器可以细分为Dm和Im就不会冲突了(或者Dcache/Icache)
  • 解决方法:
    • ①后面的那个指令暂停一周期。
    • ②存储器分类:数据存储器和指令存储器。

image-20260308094345727

image-20260308094659542

2.数据冒险(数据冲突)

  • ==必须等前一条指令执行完才能执行后一条指令的情况==

  • 解决方法:

    • ①暂停相关指令:硬件阻塞
    • ①暂停相关指令:软件插入NOP(空指令)
    • ②数据旁路技术(转发机制)==【转发技术不能解决load-use类型的数据冒险】==
    • ③编译优化,调整指令顺序 (原理同NOP,但是不像NOP一样单纯消耗时间)
  • 例题:如果ALU运算指令的某个操作数,是,分支指令转移后的执行结果,就有可能发生数据冒险。

image-20260310093504331

image-20260310093721983

image-20260310093959636

image-20260310094133453

3.控制冒险(控制冲突)

  • ==当流水线 遇到 转移指令 和 其他改变PC值的指令(eg中断) 而造成断流。==
  • 解决方法:
    • ① ==转移指令分支预测==。简单预测(T/F,假定分支总是发生或者不发生),动态预测(根据历史情况调整)

      • (note:预测错误时,已被错误放入流水线执行的指令必须舍弃)
    • ② ==插入空操作==【使条件转移指令的结果提前确定(在取下一条有效指令之前确定),从而避免断流】

  • 例题:流水段的数量越多,发生错误导致转移的情况越多,控制冒险越多。

image-20260310095229812

4.指令流水线的分类

① 根据流水线使用级别

  • 处理机间流水线:一个CPU处理一个专门的任务,串行执行。
  • 处理机级流水线:把(一个)指令解释过程分成子过程,如取指译码执行访存写回5个子过程。
  • 部件功能级流水线:把复杂的算术逻辑运算分成多步执行。

② 根据流水线可以完成的功能

  • 单功能流水线:只能实现一种功能的流水线
  • 多功能流水线:能够完成多种功能的流水线(如指令流水线)【同时或者不同时地完成】
    • ③按同一时间各功能段的连接方式:
      • 静态流水线:在同一时间内,流水线各段只能按同一种功能的连接方式工作
      • 动态流水线:在同一时间内,当某些段正在实现某种运算时,另一些段却在进行另一种运算。

③ 按流水线的各功能段之间是否有反馈信号

  • 线性流水线:从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
  • 非线性流水线:存在反馈回路,适合递归运算

5.流水线多发技术

超标量技术

  • 每个时钟周期内,可以并行发射出多条指令。不能调整指令执行顺序。(需要多个功能部件)

image-20260310110131799

超流水技术

  • 在一个时钟周期再分段
  • 不能调整指令执行顺序

image-20260310110436472

超长指令字

  • 多条能并行操作的指令组合成一条

image-20260310132008035

6.五段式指令流水线

不同类型指令的执行过程

运算类指令的执行过程

image-20260310145017323

LOAD指令的执行过程

补充

  • 流水CPU利用的是:时间并行性

  • ==RISC==都采用了流水线技术,但反之不成立。

  • 流水CPU是:非常经济的。

  • 时钟信号不仅仅作用在流水段寄存器上,还用在PC,各类寄存器,存储器上面的。

  • 流水线按序流动,肯定不会出现先读后写(WAR),先写后写(WAW),只可能出现没等到上一条的结果就读寄存器的错误(RAW)