许多相关的问题说,例如,一些指令可以在一个时钟周期内执行。
然而,据我所知(从Computer Systems: A Programmer's Perspective这本书)),在管道中有许多步骤,如读取、解码、执行、存储等。每一步至少需要一个循环。如果是这样,为什么任何指令都可以在一个时钟周期内执行?
链接的问题区分了吞吐量和延迟。例如,在dec eax
之后,另一个dec eax
多久可以执行?它只需要在到达简单顺序管道的EXEC阶段时准备好EAX值。将执行单元本身的延迟降低到1个周期,可以实现依赖指令的背靠背执行。
管道从fetch到执行的总延迟只对错误预测的分支有影响。
在流水线中有多个指令是流水线的全部要点;如果你需要一条指令在你开始获取另一条指令之前通过管道,你就不会把它称为管道。
参见https://en.wikipedia.org/wiki/Classic_RISC_pipeline和
Modern Microprocessors90分钟指南!
或者继续读CS:APP课本。
同样相关的,对于现代cpu,如当前的x86和高端ARM(超标量乱序):
- 在预测现代超标量处理器的操作延迟时需要考虑哪些因素?如何手动计算它们?
- 每条汇编指令需要多少CPU周期?-这甚至不是现代cpu的性能工作方式,没有固定的周期成本,你可以把指令加起来找到总时间。前端成本、延迟和后端执行单元吞吐量是可能构成循环主要瓶颈的3个主要维度。
- https://softwareengineering.stackexchange.com/questions/349972/how-does-a-single-thread-run-on-multiple-cores/350024#350024 -它没有,但我的答案解释了单个现代核心如何包含多个执行单元来找到指令级并行性并并行运行多条指令。