【计算机系统结构】流水线

本文深入探讨了流水线技术的基本概念、特点和分类,包括部件级、处理机级和系统级流水线,以及线性和非线性流水线。详细介绍了经典五段流水线的执行过程,并分析了分支指令对其的影响。同时,讨论了解决流水线中的冲突和提高性能的方法,如通过增加部件、编译调度等手段。此外,还提到了吞吐率、加速比和效率等关键性能指标。
摘要由CSDN通过智能技术生成

在这里插入图片描述

流水线的概念

流水线基本概念
  • 流水线技术:将一个重复的时序过程分解成为若干个子过程,而每个子过程都可有效地在其专用功能段上与其他子过程同时执行。
  • 流水线中每个子过程及其功能部件称为流水线的段(级),段与段相互连接形成流水线。
    同时执行的是不同过程的子过程;
    同一过程的子过程依次通过各功能段
  • 流水线的段数称为流水线的深度
  • 最慢的流水段称为流水线的瓶颈
    流水线的速率受限于最慢的流水段,流水线的瓶颈
  • 流水线操作不能提高单个任务的执行时间,提高整体工作负载的吞吐量
  • 多个不同任务同时操作,使用不同资源
  • 潜在加速比=流水线级数
    流水段的执行时间如果不均衡,那么加速比就会降;开始填充流水线的时间和最后排放流水线的时间降低加速比
流水线特点
流水线分类
  • 分类1:用于计算机系统的等级不同
    1. 部件级流水线 / 运算操作流水线:浮点加法流水线
    2. 处理机级流水线 / 指令流水线
    3. 系统级流水线
  • 分类2:是否有反馈回路
    1. 线性流水线
    2. 非线性流水线
  • 分类3:
    1. 单功能流水线:各段之间的连接固定不变,只能完成一种固定功能的流水线
    2. 多功能流水线:各段可以进行不同的连接,以实现不同功能
  • 分类3补充:多功能流水线下
    1. 静态流水线:同一时间内,各段只能按照同一种功能的连接方式工作。功能切换时,必须等前一个功能的任务都流出流水线。
    2. 动态流水线:同一时间内,各段可以按照不同的方式连接,同时执行多种功能。允许某些段在执行某种运算时,另一些段在实现另一种功能
两种不同的时空图

流水线的基本实现

一条经典的五段流水
  • 取指令 周期 IF
    IF/ID.NPC,PC ← (if EX/MEM.cond {EX/MEM.NPC} else {PC+4});
    1. Fetch the current instruction from memory
    2. Update the PC to the next sequential PC by adding 4 to the PC
  • 指令译码 / 读寄存器 周期 ID
    1. 译码
      ID/EX.A ← Regs[IF/ID.IR6…10];
      ID/EX.B ← Regs[IF/ID.IR11…15];
      ID/EX.Imm ← (IR16)16##IR16…31;
    2. 分支预判
  • 执行 / 有效地址计算 周期 EX
    1. load和store:计算地址EX/MEM.ALUOutput ← ID/EX.A + ID/EX.Imm
    2. 寄存器-寄存器ALU:计算EX/MEM.ALUOutput ← ID/EX.A op ID/EX.B
    3. 寄存器-立即数ALU:计算EX/MEM.ALUOutput ← ID/EX.A op ID/EX.Imm;
    4. 分支指令:
      计算偏移地址;EX/MEM.ALUOutput ← ID/EX.NPC + ID/EX.Imm;
      判断分支是否成功;EX/MEM.cond ← (ID/EX.A op 0);
      失败则结束
  • 存储器访问 / 分支完成 周期 MEM
    1. load和store:访存,store指令结束
      MEM/WB.LMD ← Mem[EX/MEM.ALUOutput];
      Mem[EX/MEM.ALUOutput] ← EX/MEM.B;
    2. 分支指令:若成功,则把计算好的地址放入PC,否则不做;分支指令结束
    3. 其他类型指令不做
  • 写回 周期 WB
    1. load:存储器内容写入通用寄存器
      Regs[MEM/WB.IR11…15]← MEM/WB.LMD;
    2. ALU:ALU结果写入通用寄存器
      Regs[MEM/WB.IR16…20]← MEM/WB.ALUOutput;
      Regs[MEM/WB.IR11…15]← MEM/WB.ALUOutput;
一些问题
  • 保证不会在同一时钟周期要求同一功能段做两件不同的工作
  • 避免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,相关就放在那里了
结构冲突
  • 某些功能部件没有充分流水
  • 某些资源没有充分重复设置
  • 增加部件
数据冲突
  • 三种冲突:
    1. RAW
    2. WAR不会发生在本章,ILP中会出现
    3. WAW不会发生在本章,ILP中会出现
  • 解决方法:
    1. 旁路 / 定向⭐
      【什么时候可以定向】ALU指令最快在EX/MEM;load指令最快在MEM/WB
      【通过反馈通路完成】ID段当硬件检测到前面某条指令的结果寄存器就是当前指令的源寄存器时,控制逻辑会将前面那条指令的结果直接从其产生的地方前递到当前指令所需的位置。
      在这里插入图片描述
    2. 编译调度
      在这里插入图片描述
控制冲突
  • 分支转移成功导致暂停3拍
  • 提前到第二段判断分支,暂停3拍变为暂停1拍
    在这里插入图片描述
    在这里插入图片描述
  • 编译时调度方法
    1. 什么也不做
    2. 猜测分支失败
    3. 猜测分支成功
    4. 分支延迟(分支延迟槽)
      取分支延迟槽的地方:分支指令之前;成功目标处;失败处

流水线性能(计算题)

吞吐率TP (ThroughPut)
  • 单位时间内流水线完成的任务数量或输出结果的数量
  • 最大吞吐率TPmax是指流水线在连续流动达到稳定状态后所得到的吞吐率
  • 解决流水线瓶颈问题的常用方法
    1. 细分瓶颈段
    2. 重复设置瓶颈段:控制逻辑比较复杂,所需的硬件增加了。
  • 实际吞吐率TP= n / T流水
加速比S
  • 流水线的速度与等功能非流水线的速度之比

在这里插入图片描述

效率E
  • 效率E 是指流水线的设备利用率
  • 由于流水线有通过时间和排空时间,所以流水线的各段并不是一直满负荷地工作。故:E <1
  • 计算
    在这里插入图片描述
  • 提高流水线效率所采取的措施对于提高吞吐率也有好处
额外开销
  • 建立时间:在触发写操作的时钟信号到达之前,寄存器输入必须保持稳定的时间
  • 传输延迟:时钟信号到达后到寄存器输出可用的时间
  • 时钟偏移开销:流水线中,时钟到达各流水寄存器的最大差值时间。(时钟到达各流水寄存器的时间不是完全相同)

流水线实例


复习所用,侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值