为什么有些指令可以在现代cpu的一个时钟周期内执行?

问题描述

许多相关问题都说,例如,some instructions can be excuted in one clock cycle

但是,据我所知(来自Computer Systems: A Programmer's Perspective一书),管道中有很多步骤,例如获取、解码、执行、存储等。每一步都需要花费至少一个周期。如果是这样,为什么在一个时钟周期内可以执行任何指令?

解决方法

链接的问题区分了吞吐量和延迟。例如在 dec eax 之后,另一个 dec eax 多久可以执行?当它到达一个简单的有序管道的 EXEC 阶段时,它只需要准备好 EAX 值。将执行单元本身的延迟降低到 1 个周期是实现依赖指令的背靠背执行的原因。

从 fetch 到 exec 的管道总延迟仅对预测错误的分支有影响。

在流水线中有多条指令是流水线的重点;如果在开始获取另一条指令之前需要一条指令使其一直通过管道,则不会将其称为管道。

另见https://en.wikipedia.org/wiki/Classic_RISC_pipeline
Modern Microprocessors A 90-Minute Guide!

或者继续阅读您的 CS:APP 教科书。

同样适用于现代 CPU,例如当前的 x86 和高端 ARM(超标量乱序):