指令长度一致,有利于简化取指和指令译码操作。指令格式规整(源寄存器相同)
流水线冒险#
结构冒险:多条指令征用同一个硬件资源(同时访存)。
解决:可以将后一条指令暂停一个周期,或是取指取数分开
数据冒险:下一条指令用到当前指令的运算结果,可能写后读、读后写、写后写。
解决:数据旁路,编译优化,硬件阻塞暂停
控制冒险:指令跳转导致流水线堵塞。
解决:可以使用分支预测加快执行
性能指标#
吞吐率:单位时间完成的任务数TP=Tkn,n=任务数,Tk=总时间,k=流水线段数,Δt是时钟周期
理想情况下,k 段流水线能在 k+n-1 个周期内完成 n 个任务
TP=(k+n−1)Δtn,TPmax=limn→inf(k+n−1)Δtn=Δt1
加速比:完成同一批任务流水线的提升
S=TkT0=(k+n−1)ΔtknΔt=k+n−1kn,Smax=limn→infk+n−1kn=k
高级流水线#
超标量流水线:每个时钟周期发射多个指令进入流水线
超长指令字技术:编译器优化,将多条可并行执行的指令组合成一个具有多操作码的长指令
超流水线技术:增加流水线级数,缩短时钟周期,提高流水线主频,充满后 CPI=1,但是需要更多寄存器,限制了流水线级数