【计算机系统结构】第三章 流水线技术

第三章 流水线技术

提高计算机性能

  • 缩短 CPI:RISC技术
  • 提高指令并行度:流水线技术

3.1 先行控制技术

指令重叠执行

  • 指令执行时间: T i = t 取 指令 + t 分 析 + t 执 行 T_i = t_取指令+t_分析+t_执行 Ti=t指令+t+t
  • 执行方式(假设三个阶段的 t 相等,一共 N 条指令)
    • 顺序执行: T = 3 N t T = 3Nt T=3Nt
    • 重叠执行
      • 一次重叠: T = ( 1 + 2 N ) t T = (1+2N)t T=(1+2N)t
      • 两次重叠: T = ( 2 + N ) t T = (2+N)t T=(2+N)t

先行控制技术

  • 关键:缓冲技术、预处理技术
  • 目的:指令流和数据流的预处理和缓冲,使指令分析器和指令执行独立工作,始终忙碌
  • 问题
    • 部件独立
      • 独立取指、分析、执行部件,设置对应存储、指令、运算控制器
    • 主存访问冲突
      • 拆分程序和数据总线和存储器/cache(哈佛结构)
        • 结构复杂,数据线多,对汇编、机器程序员不透明
      • 多体交叉存储结构
      • 先行控制技术
    • 分析和执行指令时间不同
      • 先行控制技术
  • 先行控制处理机
    • 缓冲栈深度: D 取指栈 ≥ D 操作栈 ≥ D 读栈 ≥ D 写栈 D取指栈≥D操作栈≥D读栈≥D写栈 D取指栈D操作栈D读栈D写栈

在这里插入图片描述

3.2 流水线的基本概念

概念

  • 流水线技术:重复过程 -> 若干子过程,子过程由专门部件实现
  • 流水线级或段:子过程及其功能部件
  • 流水线深度:流水线段数
  • 标量流水:取指、译码、执行、访存、写回
  • 流水线结构:功能部件+缓冲寄存器
  • 时空图: k k k 段流水线, n n n 条指令,每段用时 △ t \triangle t t
    • 填入时间: k ⋅ △ t k \cdot \triangle t kt
    • 填满+排空时间: ( n − 1 ) ⋅ △ t (n-1) \cdot \triangle t (n1)t
    • 功能部件延时 △ t s \triangle ts ts,锁定时间 △ t l \triangle tl tl
      • 最高工作频率 T P M A X = 1 △ t s + △ t l TP_{MAX} = \frac{1}{\triangle ts+\triangle tl} TPMAX=ts+tl1
      • 延时时间不等,则最高工作频率 T P M A X = 1 m a x ( △ t s + △ t l ) TP_{MAX} = \frac{1}{max(\triangle ts+\triangle tl)} TPMAX=max(ts+tl)1
  • 特点
    • 每段用时 △ t \triangle t t 应尽量相等,否则成为瓶颈,影响吞吐率,造成阻塞或断流
      • 分割瓶颈部件工作
      • 重复设置瓶颈部件
    • 满载时每隔 △ t \triangle t t 将有一个结果输出

分类

  • 按处理机
    • 操作部件级:处理机算术逻辑运算部件分段,如浮点运算,超流水线处理机,子部件+缓冲
    • 处理机级:指令流水线,拆分指令解释执行过程,部件+缓冲
    • 处理机间级:多处理机系统任务调度策略,处理机+缓冲
  • 按功能
    • 单功能:一条流水线完成单一任务
    • 多功能:改变部件连接,从而改变流水线功能,标量运算
  • 按工作方式
    • 静态流水线:某功能指令全部流出后,才允许改变部件连接,单/多功能
    • 动态流水线:可在任何时候改变连接,多功能
  • 按连接方式
    • 线性流水线:没有反馈连接,常用
    • 非线性流水线:通过反馈线使部件重复使用
  • 按流入流出顺序
    • 顺序流水线:输出结果与输入次序相同,早期
    • 乱序流水线:打乱次序利于执行,结果恢复原次序,现代、
  • 按数据表示方式:标量流水线、向量流水线
  • 按控制方法:同步、异步
    • 处理机内:同步
    • 处理机间:异步

性能指标

  • 吞吐率:单位时间内完成任务量
    • T P = n T k = n ( m + n − 1 ) △ t TP = \frac{n}{T_k} = \frac{n}{(m+n-1) \triangle t} TP=Tkn=(m+n1)tn
    • n n n 完成指令条数
    • T k T_k Tk 完成任务所用时间 T k = ( m + n − 1 ) △ t T_k = (m+n-1) \triangle t Tk=(m+n1)t各级执行时间相等且无气泡时才可用,否则看图说话
    • n → ∞ n \to \infty n T P m a x = lim ⁡ n → ∞ n ( m + n − 1 ) △ t = 1 △ t TP_{max} = \lim_{n \to \infty} \frac{n}{(m+n-1) \triangle t} = \frac{1}{\triangle t} TPmax=limn(m+n1)tn=t1
    • m 级流水线,n 条指令,各级执行时间不等
      • T P = n ∑ i = 1 m △ t i + ( n − 1 ) max ⁡ ( △ t 1 , … , △ t m ) TP = \frac{n}{\sum_{i=1}^{m} \triangle t_i+(n-1)\max(\triangle t_1,\dots,\triangle t_m)} TP=i=1mti+(n1)max(t1,,tm)n
      • n → ∞ n \to \infty n T P m a x = 1 max ⁡ ( △ t 1 , … , △ t m ) TP_{max} = \frac{1}{\max(\triangle t_1,\dots,\triangle t_m)} TPmax=max(t1,,tm)1
  • 加速比:同一批任务,不用和采用流水线所用时间之比
    • S = T 0 T k = n m △ t ( m + n − 1 ) △ t = n m m + n − 1 S = \frac{T_0}{T_k} = \frac{nm \triangle t}{(m+n-1) \triangle t} = \frac{nm}{m+n-1} S=TkT0=(m+n1)tnmt=m+n1nm
    • T 0 T_0 T0 不用流水线所用时间 T 0 = n m △ t T_0 = nm \triangle t T0=nmt各级执行时间相等可用,否则看条件说话
    • T k T_k Tk 采用流水线所用时间
    • n → ∞ n \to \infty n S m a x = lim ⁡ n → ∞ n m m + n − 1 = m S_{max} = \lim_{n \to \infty} \frac{nm}{m+n-1} = m Smax=limnm+n1nm=m
    • m 级流水线,n 条指令,各级执行时间不等
      • S = n ⋅ ∑ i = 1 m △ t i ∑ i = 1 m △ t i + ( n − 1 ) max ⁡ ( △ t 1 , … , △ t m ) S = \frac{n \cdot \sum_{i=1}^{m} \triangle t_i}{\sum_{i=1}^{m} \triangle t_i+(n-1)\max(\triangle t_1,\dots,\triangle t_m)} S=i=1mti+(n1)max(t1,,tm)ni=1mti
  • 效率: n 个任务占用的时空区与 m 个功能段总的时空区之比
    • E = T 0 m ⋅ T k = n m △ t m ( m + n − 1 ) △ t = n m + n − 1 E = \frac{T_0}{m \cdot T_k} = \frac{nm \triangle t}{m(m+n-1) \triangle t} = \frac{n}{m+n-1} E=mTkT0=m(m+n1)tnmt=m+n1n
    • n → ∞ n \to \infty n E m a x = lim ⁡ n → ∞ n m + n − 1 = 1 E_{max} = \lim_{n \to \infty} \frac{n}{m+n-1} = 1 Emax=limnm+n1n=1
    • m 级流水线,n 条指令,各级执行时间不等
      • E = n ⋅ ∑ i = 1 m △ t i m ⋅ [ ∑ i = 1 m △ t i + ( n − 1 ) max ⁡ ( △ t 1 , … , △ t m ) ] E = \frac{n \cdot \sum_{i=1}^{m} \triangle t_i}{m \cdot [\sum_{i=1}^{m} \triangle t_i+(n-1)\max(\triangle t_1,\dots,\triangle t_m)]} E=m[i=1mti+(n1)max(t1,,tm)]ni=1mti
    • 效率不高的原因
      • 数据相关
      • 任务较少时,填入和排空所占比例较大
      • 静态流水线导致排空拉长
  • 关系(各级执行时间相等): S = m ⋅ E = m ⋅ △ t ⋅ T P S = m \cdot E = m \cdot \triangle t \cdot TP S=mE=mtTP
  • 性能价格比
    • P C R = T P m a x C = 1 t k + d ⋅ 1 a + b k PCR = \frac{TP_{max}}{C} = \frac{1}{\frac{t}{k}+d} \cdot \frac{1}{a+bk} PCR=CTPmax=kt+d1a+bk1
    • T P m a x = 1 △ t = 1 t k + d TP_{max} = \frac{1}{\triangle t} = \frac{1}{\frac{t}{k}+d} TPmax=t1=kt+d1
      • t t t 串行执行一个任务所用时间(取指分析执行一条指令所用时间)
      • t k + d \frac{t}{k}+d kt+d 同等速度在 k 段流水机执行一个任务所用时间
      • d d d 锁存器延迟时间
    • C = a + b k C = a+bk C=a+bk 流水线总价格
      • a a a 流水段本身价格总和
      • b b b 单个锁存器价格
    • 对 k 求导得,PCR 极值时 K 0 = t a d b K_0 = \sqrt{\frac{ta}{db}} K0=dbta
    • k >= 8 超流水线,超流水线处理机

若干问题

  • 瓶颈问题:流水线各段不均匀,时钟周期取决于瓶颈段延迟时间
  • 额外开销:寄存器延迟,时钟偏移开销
  • 冲突问题:重要问题

非线性流水线的竞争与调度

  • 冲突
    • 启动距离:前一条指令输入开始到下一条指令输入为止的时间差
      • 禁止启动距离:会引起冲突的启动距离
      • 启动循环:任何时间都不会发生冲突的启动距离
  • 最优调度方法
    • 根据预约表写出第一条指令的禁止向量 F
      • 对每个部件计算任意两次复用时间差
      • 求所有部件的时间差的集合为禁止向量 F
      • 向量元素为禁止距离
    • 根据禁止向量计算初始冲突向量
      • 为一串二进制串,F 中存在 i 时该位为 0 否则为 1,串长度 l e n = max ⁡ ( F i ) len = \max(F_i) len=max(Fi)(len <= 流水段数 m)
      • 第 i 位表示启动距离为 i △ t i \triangle t it 时的冲突情况,0 不会冲突,1 冲突
    • 根据初始冲突向量推算出全部冲突向量
      • 初始向量右移,高位补零,地位溢出 1 时不做处理,溢出 0 时与初始向量相或,结果加入冲突向量集合
      • 再从向量集合中选中一个未操作向量,重复上述步骤,直至冲突向量集合不再扩展
    • 画出表示冲突向量迁移的有向图
      • 将冲突向量高位隐式补充到 n-1 位,n 为预约表最大周期数
      • 冲突向量第 i 位为 0,右移 i 位后与初始向量相或,得到结果向量,用有向边连接冲突向量节点与结果向量节点,边权为 i
      • 保证节点出度 = 冲突向量中 0 的个数
    • 根据冲突向量迁移图写出启动循环
      • 简单循环:有向图中的闭合回路,(1,7)表示第二条在 1 个周期后进入,第三条在 7 个周期后进入,第四条循环为 1 个周期后进入…
      • 平均启动距离(平均间隔时钟周期数):闭合回路的平均边权,
      • 最小启动循环(最优调度方案):平均启动距离最小的,且同时考虑奇、偶条指令的情况
      • 最小恒定循环:只有一条边的闭合回路
    • 计算最大吞吐率
    • 画出功能部件连接图
      • 最后一个到达的功能部件连接输出

3.3 流水操作中的相关

相关

  • 概念:指令存在依赖关系
  • 名相关:两条指令访问相同名称的寄存器/存储器单元,但没有数据流动
    • 反相关:j 写 = i 读
    • 输出相关:j 写 = i 写
    • 换名技术:修改操作数名,一改全改
  • 数据相关:
    • 条件(满足其一即是数据相关)
      • j 使用 i 的结果
      • j 与 k 数据相关且 k 与 i 数据相关(传递性)
    • 存储器数据相关考虑其有效地址
  • 控制相关:分支指令引起
    • 两个限制
      • 被分支指令控制的指令不能移动到分支指令之前
      • 不被分支指令控制的指令不能移动到分支指令之后

冲突

  • 概念:由于相关使得下一条指令不能在指定时钟周期执行
  • 结构冲突:同一时间争用同一功能部件
    • 解决方法:暂停一拍,气泡
  • 数据冲突:指令重叠执行导致数据访存顺序改变
    • 解决方法:定向传送技术,旁路技术,相关专用通路技术
    • 类型
      • RAW 先读后写
        • 定向传送技术:顺序流动流水线,不一定管用
        • 互锁硬件:检测流水线冲突,插入暂停,直至冲突消失
        • 指令调度:乱序流动流水线,编译调整指令顺序
      • WAR 先写后读,覆盖了真正想读出的原来的内容,乱序流水
      • WAW 写后写,改变写入顺序,乱序流水
  • 控制冲突:分支指令引起 PC 值变化
    • 解决办法
      • 尽早计算目标地址,尽早判断转移是否成功
        • 使得目标地址能在 ID 后可知
      • 预测分支失败
        • 失败:正常流动(不浪费周期)
        • 成功:后一条指令做空(浪费 1T)然后执行目标指令
      • 预测分支成功
        • 条件:先知道目标地址,后知道是否成功(同时知道,则没有作用)
      • 延迟分支:“延长”分支指令执行时间
        • 从前调度:不被依赖,总能提高流水线性能
        • 从目标处调度:失败必须保证被调度的指令对程序的执行没有影响,成功时可提高流水线性能
        • 从失败处调度:成功必须保证被调度的指令对程序的执行没有影响,失败时可提高流水线性能
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶涟风不息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值