文章目录
流水线的概念
流水线基本概念
- 流水线技术:将一个重复的时序过程分解成为若干个子过程,而每个子过程都可有效地在其专用功能段上与其他子过程同时执行。
- 流水线中每个子过程及其功能部件称为流水线的段(级),段与段相互连接形成流水线。
同时执行的是不同过程的子过程;
同一过程的子过程依次通过各功能段 - 流水线的段数称为流水线的深度。
- 最慢的流水段称为流水线的瓶颈
流水线的速率受限于最慢的流水段,流水线的瓶颈 - 流水线操作不能提高单个任务的执行时间,提高整体工作负载的吞吐量
- 多个不同任务同时操作,使用不同资源
- 潜在加速比=流水线级数
流水段的执行时间如果不均衡,那么加速比就会降;开始填充流水线的时间和最后排放流水线的时间降低加速比
流水线特点
流水线分类
- 分类1:用于计算机系统的等级不同
- 部件级流水线 / 运算操作流水线:浮点加法流水线
- 处理机级流水线 / 指令流水线
- 系统级流水线
- 分类2:是否有反馈回路
- 线性流水线
- 非线性流水线
- 分类3:
- 单功能流水线:各段之间的连接固定不变,只能完成一种固定功能的流水线
- 多功能流水线:各段可以进行不同的连接,以实现不同功能
- 分类3补充:多功能流水线下
- 静态流水线:同一时间内,各段只能按照同一种功能的连接方式工作。功能切换时,必须等前一个功能的任务都流出流水线。
- 动态流水线:同一时间内,各段可以按照不同的方式连接,同时执行多种功能。允许某些段在执行某种运算时,另一些段在实现另一种功能
两种不同的时空图
流水线的基本实现
一条经典的五段流水
- 取指令 周期 IF
IF/ID.NPC,PC ← (if EX/MEM.cond {EX/MEM.NPC} else {PC+4});- Fetch the current instruction from memory
- Update the PC to the next sequential PC by adding 4 to the PC
- 指令译码 / 读寄存器 周期 ID
- 译码
ID/EX.A ← Regs[IF/ID.IR6…10];
ID/EX.B ← Regs[IF/ID.IR11…15];
ID/EX.Imm ← (IR16)16##IR16…31; - 分支预判
- 译码
- 执行 / 有效地址计算 周期 EX
- load和store:计算地址EX/MEM.ALUOutput ← ID/EX.A + ID/EX.Imm
- 寄存器-寄存器ALU:计算EX/MEM.ALUOutput ← ID/EX.A op ID/EX.B
- 寄存器-立即数ALU:计算EX/MEM.ALUOutput ← ID/EX.A op ID/EX.Imm;
- 分支指令:
计算偏移地址;EX/MEM.ALUOutput ← ID/EX.NPC + ID/EX.Imm;
判断分支是否成功;EX/MEM.cond ← (ID/EX.A op 0);
失败则结束
- 存储器访问 / 分支完成 周期 MEM
- load和store:访存,store指令结束
MEM/WB.LMD ← Mem[EX/MEM.ALUOutput];
Mem[EX/MEM.ALUOutput] ← EX/MEM.B; - 分支指令:若成功,则把计算好的地址放入PC,否则不做;分支指令结束
- 其他类型指令不做
- load和store:访存,store指令结束
- 写回 周期 WB
- load:存储器内容写入通用寄存器
Regs[MEM/WB.IR11…15]← MEM/WB.LMD; - ALU:ALU结果写入通用寄存器
Regs[MEM/WB.IR16…20]← MEM/WB.ALUOutput;
Regs[MEM/WB.IR11…15]← MEM/WB.ALUOutput;
- load:存储器内容写入通用寄存器
一些问题
- 保证不会在同一时钟周期要求同一功能段做两件不同的工作
- 避免IF的访存(指令)和MEM的访存(数据)冲突,采用分离的指令存储器和数据存储器,或公用存储器采用分离指令cache和数据cache
- ID对通用寄存器读,WB对通用寄存器写;为避免访存冲突,写操作在前半拍,读操作在后半拍
- IF段需要PC加4,所以在IF段加一个加法器
- 锁存器
分支指令的影响
- 顺序执行时PC+4必须在IF段完成,每个周期启动新指令;
- 若分支指令条件为真,在MEM段进行PC值的更新;
- 增加多路选择器,把所有改变PC值的操作都放在IF段进行。
- 第i+3条指令的PC+4不做,i+1,i+2,i+3指令均作废。
小结
流水线冲突与解决
- Stall 停顿 (also called bubble)
- 三种相关
见指令级并行虽然逻辑上这章在后面,但是复习的时候先写的ILP,相关就放在那里了
结构冲突
- 某些功能部件没有充分流水
- 某些资源没有充分重复设置
- 增加部件
数据冲突
- 三种冲突:
- RAW
- WAR不会发生在本章,ILP中会出现
- WAW不会发生在本章,ILP中会出现
- 解决方法:
- 旁路 / 定向⭐
【什么时候可以定向】ALU指令最快在EX/MEM;load指令最快在MEM/WB
【通过反馈通路完成】ID段当硬件检测到前面某条指令的结果寄存器就是当前指令的源寄存器时,控制逻辑会将前面那条指令的结果直接从其产生的地方前递到当前指令所需的位置。
- 编译调度
- 旁路 / 定向⭐
控制冲突
- 分支转移成功导致暂停3拍
- 提前到第二段判断分支,暂停3拍变为暂停1拍
- 编译时调度方法
- 什么也不做
- 猜测分支失败
- 猜测分支成功
- 分支延迟(分支延迟槽)
取分支延迟槽的地方:分支指令之前;成功目标处;失败处
流水线性能(计算题)
吞吐率TP (ThroughPut)
- 单位时间内流水线完成的任务数量或输出结果的数量
- 最大吞吐率TPmax是指流水线在连续流动达到稳定状态后所得到的吞吐率
- 解决流水线瓶颈问题的常用方法
- 细分瓶颈段
- 重复设置瓶颈段:控制逻辑比较复杂,所需的硬件增加了。
- 实际吞吐率TP= n / T流水
加速比S
- 流水线的速度与等功能非流水线的速度之比
效率E
- 效率E 是指流水线的设备利用率
- 由于流水线有通过时间和排空时间,所以流水线的各段并不是一直满负荷地工作。故:E <1
- 计算
- 提高流水线效率所采取的措施对于提高吞吐率也有好处
额外开销
- 建立时间:在触发写操作的时钟信号到达之前,寄存器输入必须保持稳定的时间
- 传输延迟:时钟信号到达后到寄存器输出可用的时间
- 时钟偏移开销:流水线中,时钟到达各流水寄存器的最大差值时间。(时钟到达各流水寄存器的时间不是完全相同)
流水线实例
复习所用,侵删