性能指标

吞吐率:单位时间内完成的任务数

TP=nTkTP=\frac{n}{T_k}
  • 每段时间相等(n个任务,每个k段)

    T=kΔt+(n1)ΔtT_总=k \Delta t+(n-1)\Delta t

image-20251112192426971

  • 每段时间不完全相等(n个任务,每个k段)

    T=i=1kΔti+(n1)(Δt1,Δt2,...,Δtn)T_总=\sum_{i=1}^{k}\Delta t_i+(n-1)(\Delta t_1,\Delta t_2,...,\Delta t_n)

image-20251112193710984

②加速比

S=TsTk=nkk+(n1)S=\frac{T_s}{T_k}=\frac{nk}{k+(n-1)} (>1)

加速前/加速后

③效率:流水线设备利用率

实际使用时间/整个运行时间(占用方格/整块面积)

E=实际使用时间整个运行时间=nkΔtk[kΔt+(n1)Δt]=nk+n1E=\frac{实际使用时间}{整个运行时间}=\frac{nk\Delta t}{k[k\Delta t+(n-1)\Delta t]}=\frac{n}{k+n-1}

即⭐E=TPΔt=SkE=TP\Delta t=\frac{S}{k}

非线性流水线的调度

单功能

[例题]

image-20251112221039606

禁止表F=1,5,6,8F={1,5,6,8}

冲突向量C0=(10110001)C_0=(10110001)

CnextC_{\text{next}} (状态转换)

Ccurrent=(cNcjc1)C_{\text{current}} = (c_N \dots c_j \dots c_1) jj = 间隔 (允许     cj=0\iff c_j = 0) Cnext=SHR(j)(Ccurrent)C0C_{\text{next}} = \text{SHR}^{(j)}(C_{\text{current}}) \lor C_0

j等于多少就右移几位

计算

State: C=10110001C = 10110001 (C0C_0)

  • c2=0,c3=0,c4=0,c7=0    j{2,3,4,7}c_2=0, c_3=0, c_4=0, c_7=0 \implies j \in \{2, 3, 4, 7\}
  • j=2j=2:
    • C=SHR(2)(10110001)C0C' = \text{SHR}^{(2)}(10110001) \lor C_0
    • C=0010110010110001=10111101C' = 00101100 \lor 10110001 = 10111101
    • 1011000121011110110110001 \xrightarrow{2} 10111101
  • j=3j=3:
    • C=SHR(3)(10110001)C0C' = \text{SHR}^{(3)}(10110001) \lor C_0
    • C=0001011010110001=10110111C' = 00010110 \lor 10110001 = 10110111
    • 1011000131011011110110001 \xrightarrow{3} 10110111
  • j=4j=4:
    • C=SHR(4)(10110001)C0C' = \text{SHR}^{(4)}(10110001) \lor C_0
    • C=0000101110110001=10111011C' = 00001011 \lor 10110001 = 10111011
    • 1011000141011101110110001 \xrightarrow{4} 10111011
  • j=7j=7:
    • C=SHR(7)(10110001)C0C' = \text{SHR}^{(7)}(10110001) \lor C_0
    • C=0000000110110001=10110001C' = 00000001 \lor 10110001 = 10110001
    • 1011000171011000110110001 \xrightarrow{7} 10110001

State: C=10111101C = 10111101

  • c2=0,c7=0    j{2,7}c_2=0, c_7=0 \implies j \in \{2, 7\}
  • j=2j=2:
    • C=SHR(2)(10111101)C0C' = \text{SHR}^{(2)}(10111101) \lor C_0
    • C=0010111110110001=10111111C' = 00101111 \lor 10110001 = 10111111
    • 1011110121011111110111101 \xrightarrow{2} 10111111
  • j=7j=7:
    • C=SHR(7)(10111101)C0C' = \text{SHR}^{(7)}(10111101) \lor C_0
    • C=0000000110110001=10110001C' = 00000001 \lor 10110001 = 10110001
    • 1011110171011000110111101 \xrightarrow{7} 10110001

……循环直至找不到新的状态

image-20251112222802692

多功能

教材p68-69

流水线相关与冲突

经典5段流水线

IF - ID - EX - MEM - WB

取指-译码-执行-访存-写回

相关

指2条指令之间存在某种依赖关系(即不能完全重叠执行)

  • ①数据相关

  • ②名相关:访问的寄存器/存储单元名称

    • 反相关:j写的名=i读的名

      • 消除

        image-20251112232817349

    • 输出相关:j写的名=i写的名

  • ③控制相关:因程序的执行方向可能被改变而引起

    若读入分支指令,需要stall至ex之后,在mem阶段才能取下一条指令

    • 有k段的指令流水线,最坏情况下每一次条件转移指令造成k-1个“停顿”;条件转移指令占比为p,转移成功概率为q。TKIF=(n+k1)Δt+pqn(k1)ΔtT_{K-IF}=(n+k-1)\Delta t+pqn(k-1)\Delta t

    • 条件转移影响的流水线吞吐率TPIF=n(n+k1)Δt+pqn(k1)ΔtTP_{IF}=\frac{n}{(n+k-1)\Delta t+pqn(k-1)\Delta t}

    • 预测:选概率发生高的分支,运行不写回。

      猜对→继续执行;猜错→作废,返回。

延迟分支方法

  • 编译器 实现(都是静态调度

    • ①从分支前调度:调一条不相干的指令
    • ②从分支失败处调度(猜“不跳转”):把下一条的下一条调来
    • ③从分支目标处调度(猜“跳转”):把目标的下一条调来

冲突

  • ①结构冲突

    硬件资源不足。引入停顿 stall 来消除

  • ②数据冲突

    数据没准备好

  • ③控制冲突

    不知道该取哪条指令(如:执行下一条 / 跳转)

多指令发射技术

①超标量处理机

标量处理机:1条指令流水线,单发射技术

拥有 ≥2 条指令流水线,多发射技术

image-20251113195535624

image-20251113195406312

  • 性能分析

    每周期发射m条指令:

    执行时间 T(m,1)=(k+Nmm)ΔtT(m,1)=(k+\frac{N-m}{m})\Delta t

​ 最大加速比S(m,1)max=mS(m,1)_{max}=m

②超长指令字处理机(VLIW)

和超标量处理机(CPU硬件完成)不同,它由编译器来完成分析调度,CPU只执行

③超流水线处理机

把每个流水线进一步细分

image-20251114113706906