计组-5.6 指令流水线
5.6 指令流水线
1.基本概念
不同(指令)执行方式的总耗时

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

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

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

流水线的表示方法
- 指令执行过程图:for分析影响流水线的因素
- 时空图:for分析流水线的性能

2.性能指标
吞吐率
- ==单位时间流水线完成的任务数量。==
- TP = ==任务数n / 总时间Tk==

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

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

以上性能指标都是建立在理想情况下的:①各阶段花费时间相同 ②每个阶段结束后立即进入下一阶段
==但实际情况是②条件并不能满足==
3.影响因素⭐
- (五段式)指令流水线:IF(instruction fetch),ID(ins.. decode),EX(excute),M(memory),W(writeback)。
- 因为要固定100ns才到下一阶段,所以每个阶段后面都有一个==缓存寄存器==(锁存器)
- 【锁存器:==作用是保存本段流水段的执行结果,提供给下一流水段使用。==】

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


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





3.控制冒险(控制冲突)
- ==当流水线 遇到 转移指令 和 其他改变PC值的指令(eg中断) 而造成断流。==
- 解决方法:
① ==转移指令分支预测==。简单预测(T/F,假定分支总是发生或者不发生),动态预测(根据历史情况调整)
- (note:预测错误时,已被错误放入流水线执行的指令必须舍弃)
② ==插入空操作==【使条件转移指令的结果提前确定(在取下一条有效指令之前确定),从而避免断流】
- 例题:流水段的数量越多,发生错误导致转移的情况越多,控制冒险越多。

4.指令流水线的分类
① 根据流水线使用级别
- 处理机间流水线:一个CPU处理一个专门的任务,串行执行。
- 处理机级流水线:把(一个)指令解释过程分成子过程,如取指译码执行访存写回5个子过程。
- 部件功能级流水线:把复杂的算术逻辑运算分成多步执行。
② 根据流水线可以完成的功能
- 单功能流水线:只能实现一种功能的流水线
- 多功能流水线:能够完成多种功能的流水线(如指令流水线)【同时或者不同时地完成】
- ③按同一时间各功能段的连接方式:
- 静态流水线:在同一时间内,流水线各段只能按同一种功能的连接方式工作
- 动态流水线:在同一时间内,当某些段正在实现某种运算时,另一些段却在进行另一种运算。
- ③按同一时间各功能段的连接方式:
③ 按流水线的各功能段之间是否有反馈信号
- 线性流水线:从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
- 非线性流水线:存在反馈回路,适合递归运算
5.流水线多发技术
超标量技术
- 每个时钟周期内,可以并行发射出多条指令。且不能调整指令执行顺序。(需要多个功能部件)

超流水技术
- 在一个时钟周期再分段
- 不能调整指令执行顺序

超长指令字
- 多条能并行操作的指令组合成一条

6.五段式指令流水线
不同类型指令的执行过程
运算类指令的执行过程

LOAD指令的执行过程
补充
流水CPU利用的是:时间并行性
==RISC==都采用了流水线技术,但反之不成立。
流水CPU是:非常经济的。
时钟信号不仅仅作用在流水段寄存器上,还用在PC,各类寄存器,存储器上面的。
流水线按序流动,肯定不会出现先读后写(WAR),先写后写(WAW),只可能出现没等到上一条的结果就读寄存器的错误(RAW)
评论

