流水线

    425
    最后修改于

    指令长度一致,有利于简化取指和指令译码操作。指令格式规整(源寄存器相同)

    流水线冒险#

    结构冒险:多条指令征用同一个硬件资源(同时访存)。
    解决:可以将后一条指令暂停一个周期,或是取指取数分开
    数据冒险:下一条指令用到当前指令的运算结果,可能写后读、读后写、写后写。
    解决:数据旁路,编译优化,硬件阻塞暂停
    控制冒险:指令跳转导致流水线堵塞。
    解决:可以使用分支预测加快执行

    性能指标#

    吞吐率:单位时间完成的任务数TP=nTk,n=任务数,Tk=总时间,k=流水线段数,Δt是时钟周期TP=\frac{n}{T_k},n=任务数,T_k=总时间,k=流水线段数,\Delta t是时钟周期
    理想情况下,k 段流水线能在 k+n-1 个周期内完成 n 个任务
    TP=n(k+n1)Δt,TPmax=limninfn(k+n1)Δt=1ΔtTP=\frac{n}{(k+n-1)\Delta t}, {TP}_{max} = \lim_{n\to\inf }\frac{n}{(k+n-1)\Delta t}=\frac{1}{\Delta t}
    加速比:完成同一批任务流水线的提升
    S=T0Tk=knΔt(k+n1)Δt=knk+n1,Smax=limninfknk+n1=kS=\frac{T_0}{T_k}=\frac{kn\Delta t}{(k+n-1)\Delta t}=\frac{kn}{k+n-1},S_{max}=\lim_{n\to\inf } \frac{kn}{k+n-1}= k

    高级流水线#

    超标量流水线:每个时钟周期发射多个指令进入流水线
    超长指令字技术:编译器优化,将多条可并行执行的指令组合成一个具有多操作码的长指令
    超流水线技术:增加流水线级数,缩短时钟周期,提高流水线主频,充满后 CPI=1,但是需要更多寄存器,限制了流水线级数

    • 🥳0
    • 👍0
    • 💩0
    • 🤩0