流水线是个好东西,但是不能贪心

目录

什么是流水线

数字电路中的流水线,与工厂里的流水线,思路是一样的:拆分复杂的任务,将其转换成一系列简单的任务,上一个任务的输出是下一个任务的输入;整体吞吐量被费时最长的一个简单任务所限制;单个复杂任务从接收到完成所需的时间延长,因为每一级任务的传递需要时间;单位时间内复杂任务的完成数量提升,即吞吐量提升。

在数字逻辑设计的地位

回到数字电路,流水线就是将复杂的组合逻辑拆分成简单的组合逻辑,插入的寄存器则是每一级操作的沟通桥梁,系统频率由延时最长的简单组合逻辑决定,而非原始的复杂组合逻辑。这样一来,虽然处理一个数据需要花费多个时钟周期,但是数据的吞吐量得到了质的飞跃。
流水线可以有效地提升工作频率,增加数据吞吐量,这一切看上去很美好。那么,代价呢?

流水线过度拆分导致收益降低

前文可知,流水线可以将复杂逻辑拆分,提高系统频率,提升吞吐量;那我写个233级流水线处理器,岂不是吞吐量直接爆表?
答案是不行。随着流水线深度(级数)的提升,收益会越来越低。流水线较浅,组合逻辑延时占主要部分;流水线深度增加,组合逻辑得到进一步拆分,延时降低,寄存器的建立/保持时间成为了制约。至此,继续加深流水线,已经几乎没有收益了,而且白白浪费寄存器资源。

分支与流水线

流水线想要高效运行,数据必须要连续不断地输入。在嵌入式处理器领域,遇到条件分支,过长的流水线就会产生负面影响。
条件分支意味着后续指令是不能确定的,而流水线要求指令不断地流入,此时就产生了矛盾。为了防止错误的指令进入流水线,若发生条件分支或中断,流水线必须先停下,等待下一条指令得到确定,才能继续运行。流水线越长,等待的周期数就越多,分支开销也越大。
目前已经有非常成熟的分支预测技术,可以极大降低多级流水线在分支的开销,但是这种矛盾依然值得重视。

处理延时

前文提到,流水线提升的是数据吞吐量,而非单个任务的处理延时。这也就意味着,如果实时性要求高或有其他需求的任务,对数据处理延时或周期有严格要求,过长的流水线并不适合。
流水线的长度应当符合实际应用需求,不是越长越好,也不是越短越好。

打赏?

取消

不用哦

扫码支持
这里只有暗黑赛钱箱

深邃♂黑暗♂幻想

>