【发布时间】:2015-12-17 19:08:48
【问题描述】:
我缺少一些基本的东西。 CPU 流水线:在基本层面上,为什么指令需要不同数量的时钟周期才能完成,为什么在多级 CPU 中某些指令只需要 1 个周期?
除了明显的“不同的指令需要不同的工作量来完成”,听我说...
考虑具有大约 14 级管道的 i7。这需要 14 个时钟周期才能完成一次运行。 AFAIK,这应该意味着整个管道有 14 个时钟的延迟。然而事实并非如此。
XOR 在 1 个周期内完成,延迟为 1 个周期,表明它没有经过所有 14 个阶段。 BSR 有 3 个周期的延迟,但每个周期的吞吐量为 1。 AAM 的延迟为 20 个周期(超过阶段数)和 8 个吞吐量(在 Ivy Bridge 上)。
有些指令不能每个时钟都发出,但需要不到 14 个时钟才能完成。
我知道多个执行单元。我不明白延迟和吞吐量方面的指令长度与管道阶段的数量有何关系。
【问题讨论】:
-
当您说 XOR 具有“1 个周期的延迟”时,您究竟是什么意思?你的来源是什么?这似乎是一个毫无意义的衡量标准。
-
Agner Fog 的图表 (agner.org/optimize/instruction_tables.pdf)。这意味着 XOR 需要 1 个时钟周期来执行,因此延迟为 1,而 BSR 需要 3。
-
你读过他对延迟的解释吗?如果是这样,我不明白您为什么会说“XOR 在 1 个周期内完成并且延迟为 1 个周期,表明它没有经过所有 14 个阶段”。
-
@IanC 通过阅读您的问题和 cmets,我认为您对管道的阶段和功能单元的延迟感到困惑。他们不是一回事。每条(正确的)指令都必须经过所有的流水线阶段。有些阶段有固定的延迟,有些阶段有可变的延迟,例如执行阶段。
-
@IanC 是的,这是典型的行为。当您阅读 Intel 或 Agner Fog 等优化手册时,延迟和吞吐量是指功能单元(执行阶段)。
标签: cpu pipeline cpu-architecture latency instructions