超长流水线的性能瓶颈

超长流水线的性能瓶颈

超长流水线的性能瓶颈 #

既然流水线可以增加的吞吐率,为什么不把流水线级数做得更深呢?为什么不做成 20 级,乃至 40 级呢?

一个最基本的原因,就是增加流水线深度,其实是有性能成本的。

用来同步时钟周期的,不再是指令级别的,而是流水线阶段级别的。每一级流水线对应的输出,都要放到流水线寄存器(Pipeline Register)里面,然后在下一个时钟周期,交给下一个流水线级去处理。所以,每增加一级的流水线,就要多一级写入到流水线寄存器的操作。虽然流水线寄存器非常快,比如只有 20 皮秒(ps,10^−12 秒)。 但是,如果不断加深流水线,这些操作占整个指令的执行时间的比例就会不断增加。

最后,性能瓶颈就会出现在这些 overhead 上。如果指令的执行有 3 纳秒,也就是 3000 皮秒。需要 20 级的流水线,那流水线寄存器的写入就需要花费 400 皮秒,占了超过 10%。如果需要 50 级流水线,就要多花费 1 纳秒在流水线寄存器上,占到 25%。这也就意味着,单纯地增加流水线级数,不仅不能提升性能,反而会有更多的 overhead 的开销。

所以,设计合理的流水线级数也是现代 CPU 中非常重要的一点。

Viewpoint #

From #

20 | 面向流水线的指令设计(上):一心多用的现代CPU