流水线

最后修改于

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

流水线冒险#

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

性能指标#

吞吐率:单位时间完成的任务数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,但是需要更多寄存器,限制了流水线级数