为什么有些指令在现代 cpu 中会在一个时钟周期内执行?
why could some instructions be excuted in one clock cycle in modern cpu?
很多相关问题都说,例如。
然而,据我所知(来自Computer Systems: A Programmer's Perspective一书),管道中有很多步骤,例如fetch、decode、execute、store等等。每一步至少花费一个周期。如果是这样,为什么任何指令都可以在一个时钟周期内执行?
链接的问题区分了吞吐量和延迟。例如在 dec eax
之后,另一个 dec eax
多久可以执行?它只需要在到达简单有序管道的 EXEC 阶段时准备好 EAX 值。将执行单元本身的延迟保持在 1 个周期内,可以实现依赖指令的背靠背执行。
从 fetch 到 exec 的管道总延迟仅对错误预测的分支有影响。
流水线中有多条指令是流水线的全部要点;如果您需要一条指令在开始获取另一条指令之前一直通过管道,则不会将其称为管道。
另见 https://en.wikipedia.org/wiki/Classic_RISC_pipeline 和
现代微处理器
90 分钟指南!.
或者继续阅读您的 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 - 它没有,但我在那里的回答解释了 单个 现代核心如何包含多个执行单元以找到指令级并行性和 运行 多条指令并行。
很多相关问题都说,例如
然而,据我所知(来自Computer Systems: A Programmer's Perspective一书),管道中有很多步骤,例如fetch、decode、execute、store等等。每一步至少花费一个周期。如果是这样,为什么任何指令都可以在一个时钟周期内执行?
链接的问题区分了吞吐量和延迟。例如在 dec eax
之后,另一个 dec eax
多久可以执行?它只需要在到达简单有序管道的 EXEC 阶段时准备好 EAX 值。将执行单元本身的延迟保持在 1 个周期内,可以实现依赖指令的背靠背执行。
从 fetch 到 exec 的管道总延迟仅对错误预测的分支有影响。
流水线中有多条指令是流水线的全部要点;如果您需要一条指令在开始获取另一条指令之前一直通过管道,则不会将其称为管道。
另见 https://en.wikipedia.org/wiki/Classic_RISC_pipeline 和
现代微处理器
90 分钟指南!.
或者继续阅读您的 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 - 它没有,但我在那里的回答解释了 单个 现代核心如何包含多个执行单元以找到指令级并行性和 运行 多条指令并行。