问题描述
许多相关问题都说,例如,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(超标量乱序):
- What considerations go into predicting latency for operations on modern superscalar processors and how can I calculate them by hand?
- How many CPU cycles are needed for each assembly instruction? - 即使在现代 CPU 上,性能也不是这样,没有固定的周期成本,您可以将各个指令相加来计算总时间。前端成本、延迟和后端执行单元吞吐量是可能成为循环主要瓶颈的 3 个主要维度。
- https://softwareengineering.stackexchange.com/questions/349972/how-does-a-single-thread-run-on-multiple-cores/350024#350024 - 不是,但我在那里的回答解释了单个现代内核如何包含多个执行单元以查找指令级并行性并并行运行多条指令。立>