从技术上讲,x86 不是 RISC 处理器。这是一个CISC处理器。有些指令需要更少的时间,但那些不是 RISC 指令。我相信英特尔在内部将指令转换为 RISC 指令,但这并不重要。
如果我们有需要不同时间的指令,那么它就变成了一个 CISC 处理器。流水线化 CISC 处理器几乎是不可能的——据我所知,没有人做过。为了加快执行速度,您可以在 CPU 内部执行许多操作,例如乱序执行。因此,您不可能有管道拥塞,因为所有指令都必须按顺序执行。
现在,如果我们发出一条 risc 指令,它需要一个时钟周期来执行,所以没有问题……但是如果发出一条 cisc 指令,它的执行将需要时间……
RISC 指令不一定需要一个时钟周期。在 MIPS 上,它需要 5。但是,流水线的要点是,在您执行一条指令后,下一条指令将在当前一条指令完成后一个时钟周期完成。
现在在超标量结构中,在处理第一条指令时发出的两条指令被转移到其他可用的功能单元中......
在超标量架构中,两条指令同时执行并完成。在纯超标量架构中,循环如下所示(F = Fetch,D = Decode,X = eXecute,M = Memory,W = Writeback):
(inst. 1) F D X M W
(inst. 2) F D X M W
(inst. 3) F D X M W
(inst. 4) F D X M W
但是在简单的流水线中不可能有这样的转移,因为只有一个功能单元可用于执行指令......
对,所以循环看起来像这样:
(inst. 1) F D X M W
(inst. 2) F D X M W
(inst. 3) F D X M W
(inst. 4) F D X M W
现在,如果我们有需要不同时间的指令(CISC 计算机),则流水线更难,因为只有一个执行单元,我们可能必须等待前一条指令完成执行。指令 1 需要 2 个执行周期,指令 2 需要 5 个执行周期,指令 3 需要 2 个,指令 4 在这个例子中只需要 1 个
(inst. 1) F D X X M W
(inst. 2) F D X X X X X M W
(inst. 3) F D X X M W
(inst. 4) F D X M W
因此,我们不能真正对 CISC 处理器进行流水线化——我们必须等待执行周期完成才能进入下一条指令。我们不必在 MIPS 中这样做,因为它可以在解码阶段确定指令是否是分支和目标。