Post

4.5 pipeline

4.5 pipeline

流水线概述

1. 每条指令的执行需要一个时钟周期,而这个时钟周期是固定的,等于执行最慢(延迟最长)的指令的时间
![[Pasted image 20241217002903.png500]]

譬如图中设计的一个时钟周期的时长为800ps,即ld指令的时长;执行beq指令时,虽然它本身只需要500ps,但也会消耗800ps;

2. 指令的每个阶段(每个功能单元的操作)的执行时间也是固定的,等于延迟最长的阶段的时长

![[Pasted image 20241217003111.png|500]]
如图,Reg执行阶段消耗了200ps的时间(等于最长的ALU或Data access时间),尽管它本身不需要这么久;

3. [使用]流水线的指令执行时间 = [不使用]流水线的指令执行时间 ÷ 流水线级数

(加速比=流水线级数)
譬如:对于800ps的非流水线时钟周期,五级流水线会将其改善为800ps/5=160 ps

ps:流水线级数为k,即把一个指令划分成k个阶段

4. 符号解释

IF:取指令阶段(instruction memory)
ID:译码/读寄存器阶段(寄存器堆)
EX:执行阶段(ALU)
MEM:访问存储器阶段(data memory)
WB:写回阶段
==左写右读==:左半边阴影表示写操作、右半边阴影表示读操作

![[Pasted image 20241217012923.png500]]
5. 前递 —— 处理数据冒险的第1个方法

![[Pasted image 20241217013050.png|500]]

6. 停顿 —— 处理数据冒险的第2个方法

![[Pasted image 20241217013203.png|500]]
对于如图的指令,前递无法解决数据冒险,只能选择停顿+前递

7. 重排指令顺序 —— 处理数据冒险的第3个方法
![[Pasted image 20241217013418.png200]]
![[Pasted image 20241217013451.png120]]
8. 控制冒险的解决方案

![[Pasted image 20241217022057.png|500]]

9. 动态预测
  • 动态硬件预测器 根据每个条件分支指令的行为进行预测;

  • 实现方法是 保存每个条件分支是否发生跳转的历史记录,从而利用过去预测未来;

  • 如果预测错误,必须 从正确的分支地址处重新启动流水线

This post is licensed under CC BY 4.0 by the author.