许多相关问题说,例如,某些指令可以在一个时钟周期内执行。
但是,据我所知(来自《计算机系统:程序员的视角》一书),管道中有许多步骤,例如获取、解码、执行、存储等。每个步骤至少需要一个周期。如果是这样,为什么任何指令都可以在一个时钟周期内执行?
许多相关问题说,例如,某些指令可以在一个时钟周期内执行。
但是,据我所知(来自《计算机系统:程序员的视角》一书),管道中有许多步骤,例如获取、解码、执行、存储等。每个步骤至少需要一个周期。如果是这样,为什么任何指令都可以在一个时钟周期内执行?
链接的问题区分了吞吐量和延迟。例如之后dec eax
,另一个dec eax
执行多久?它只需要在到达简单有序管道的 EXEC 阶段时准备好 EAX 值。将执行单元本身的延迟降低到 1 个周期是实现依赖指令的背靠背执行的原因。
从 fetch 到 exec 的管道总延迟仅对错误预测的分支很重要。
流水线中有多个指令是流水线的全部要点。如果您在开始获取另一条指令之前需要一条指令一直通过管道,那么您不会将其称为管道。
另请参阅https://en.wikipedia.org/wiki/Classic_RISC_pipeline和
现代微处理器 90 分钟指南!.
或者继续阅读你的 CS:APP 教科书。
同样相关的是,对于现代 CPU,如当前 x86 和高端 ARM(超标量无序):