高性能cpu的基础:流水线

一个处理器,当然可以以一种直观的方式工作:将一串指令排列,给一个指令,下一周期直接吞吐出结果,一个一个循环往复。

但是要实现高吞吐量的处理器,我们就需要使用流水线设计。

简单来说,我们可以将执行一个指令的硬件部分分开,中间用触发器连接。经典的五级流水线就是:第一个周期取指令,第二个周期解码读取寄存器,第三个周期执行,第四个周期访问储存器,第五个周期写回寄存器。

这种执行方式,最大的优点就是,每个部分的路径都必然会比整个路径更短,时延更低。所以,处理器就可以运行在较高的频率。

接下来我们就可以简单的,取指令器每个周期都取一个指令,解码器每个周期都解码一个指令,以此类推。这样我们就可以保证每个处理器周期依旧能执行一个指令,同时处理器的频率要比之前高很多。所以,单位时间里,使用了流水线之后,处理器对指令的处理速度要快许多。

一个典型的物理流水线,可以看到,每个周期都能执行一个指令

到这里为止,你应该也发现了,其实流水线提高频率的关键就在于缩短关键路径。

所以,其实到这个点可以说,流水线的长度和预期的处理器工作频率是相关的。桌面级处理器本身就预期要运行在更高的频率,所以流水线就需要更长,缩短关键路径。移动平台需要处理器运行在更低的频率,就需要较短的流水线长度,但是这会使得他们的极限频率较低,硬要频率拉上去,也会需要很高的电压,很大的功率。

在这个点,好像拉长流水线是一个非常舒服的事。吞吐量还是那么大,频率越高吞吐量就越大。

但是程序很多时候具有前后的相关性。

举一个例子,当一个程序需要你先做出一个分支,比如说if语句。在执行的时候,处理器就需要先执行完分支,接下来处理器才知道下一个指令是什么,(准确来说完成执行这个周期)开始取指令。在这个过程中,整个流水线都必须要等待前面一个分支的指令执行完才能开始。中间的周期就会被浪费掉。

分支指令

同样的,一个经典的五级流水线的例子里,一个指令需要5个周期才能完成,而且执行的时间必然要比没有流水线设计的更长,因为中间还增加了触发器。

所以流水线实际上是以每条指令的执行速度作为代价,换取高吞吐量。处理器只有合适的流水线长度,才能在需求的场景中获得最大的表现。

xian333c

tech nerd,Vup

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注