1. 厨房做菜的例子
采用流水线做菜方式,单独一道菜需要4+分钟,因为每个流程之间交接需要一些时间,对应处理器的流水线寄存器带来的延迟。
做4道菜用流水线的方式一共需要7+分钟,而非流水线方式需要16分钟,连续工作时,流水线每1+分钟可以上一道菜,而非流水线需要4分钟上一道菜。性能提升了大约4倍,这是理想情况。
我们说上面这个流水线理想化,是因为每个阶段所花费时间不一定完全相等,假设切菜需要2分钟,如下图所示,
上图中,切菜需要2分钟,那么司号员只好2分钟吹一次号,只有切菜是饱满工作,其他三个环节都是工作1分钟休息1分钟,单独一道菜需要8+分钟才可以完成,连续工作情况下,流水线的性能就不如之前那么好了,这就是不平衡的流水线。
优化不平衡流水线的方式是,把耗时多的流程切分,如下图所示,这样这个流水线的周期又可以是1分钟了。
2. 流水线级数的选择
从上面做菜的例子我们发现,如果是四级流水,性能提升约4倍,五级流水性能提升约5倍,那么是不是流水线越深越好?
超级流水线技术,Super Pipelining,将五级流水线细分成更多的阶段,增加流水线的深度,这样就可以提升时钟频率,从而提高指令吞吐率。
五级流水和十级流水的时钟周期的简单计算如下图所示,
通过上图的计算发现,十级流水确实可以做到比五级流水更高的时钟频率。
那么还是那个问题,流水线是不是越深越好?
我们用下面这幅图进行分析,
随着流水线深度增加,流水线寄存器带来的延迟占单条指令的执行时间的比重越大,也就是说,流水线越深,指令执行时间中,越多的时间被花费在了流水线寄存器上。
而且随着流水线深度增加,需要更多的指令去填满流水线,那么指令之间的依赖关系会更加复杂。
因此,结论是,流水线并不是越深越好。
3. 历史上处理器流水线深度的变化
如下图所示,频率大战在2004年达到顶峰,Pentium 4处理器采用了31级流水线。流水线深度的加深带来的最大好处是处理器频率的提高,这就是频率大战。
我们现在知道,处理器深度并不是越深越好,最近几年,流水线深度逐渐稳定在了15级。