执行一条指令需要一组操作。为了简单起见,假设有 5 个:
获取-指令解码-执行-内存访问-写回。
这可以通过多种方案来实现。
A/ 单循环处理器
方案如下:
处理器获取一条指令,将其引导至一个解码器,该解码器控制一组多路复用器,这些多路复用器将配置一个用于实现该指令的大型组合数据路径。
在此模型中,每条指令需要一个周期,并且假设所有 5 个“阶段”需要相等的时间 t,则周期将为 5t。
因此CPI=1,T=5
实际上,这或多或少是 20 世纪 40 年代末早期计算机的基本模型。除此之外,还没有真正的处理器这样做,但理论上是完全可行的。
B/ 多周期处理器
与之前的模型相比,您在数据路径上引入了寄存器。第一个获取指令并将其发送到自动机的输入,该自动机将顺序应用计算“阶段”。
在这种情况下,指令需要 5 个周期(可能会稍微少一些,因为某些指令可能更简单,例如跳过内存访问)。周期为 1t(或者可能稍长一些,以考虑寄存器遍历时间)。
消费者物价指数=5,T=1
第一个“真正的”计算机就是这样实现的,这是直到 80 年代初的主要架构模型。如今,一些微控制器,或者例如更简单的 NIOS 版本,仍然依赖于这种方案。
C/管道处理器
您可以在各个阶段之间添加额外的寄存器,以便跟踪指令和所有部分结果。在这种情况下,每个阶段的执行可以是独立的,您可以在不同阶段同时执行多个指令。
CPI 变为 1,因为您可以在每个时钟周期启动一条新指令(由于存在危险,可能会多一点,但那是另一个故事了)。
并且T=1。
所以CPI=1,T=1
(CPI反映了吞吐量的增加但单条指令的执行时间并没有减少)
因此,管道可以被视为减少方案 A 的周期时间,或减少方案 B 的 CPI。您还可以想象一个中间方案(例如 3 个阶段,周期为 2),其中管道将减少两者。