【问题标题】:Can x86_64 CPU execute two same operations on the same stage of pipeline?x86_64 CPU可以在管道的同一阶段执行两个相同的操作吗?
【发布时间】:2015-03-26 06:42:40
【问题描述】:

众所周知,英特尔 x86_64 处理器不仅是流水线架构,而且还是超标量。

这意味着 CPU 可以:

  1. 管道 - 在一个时钟,执行一个操作的某些阶段。例如,两个 ADD 与阶段移位并行:

    • 添加(stage1) -> 添加(stage2) -> 没有
    • 什么都没有 -> ADD(stage1) -> ADD(stage2)
  2. 超标量 - 在一个时钟执行一些不同的操作。例如,ADD 和 MUL 在同一阶段并行:

    • 添加(stage1) -> 添加(stage2)
    • MUL(stage1) -> MUL(stage2)

这是可能的,因为处理器有多个指令调度程序(英特尔酷睿有 4 个简单解码器)。

但是只有调度器的副本(4个简单解码器),还是算术单元的副本?

即例如,我们可以在同一个 CPU-Core 上的独立运算单元(例如,端口 0 上的 ALU 和端口 1 上的 ALU)上执行两个 ADD 吗? p>

  • ADD1(stage1) -> ADD1(stage2)
  • ADD2(stage1) -> ADD2(stage2)

是否存在能够在同一时钟执行两条相同指令的任何执行单元的副本?

【问题讨论】:

  • 前提是两个操作是数据无关的,没有限制。这里有一些有趣的细节(幻灯片 9):cis.upenn.edu/~milom/cis371-Spring09/lectures/…
  • optimized 本质上是通过使用超标量来优化的,因为有 4 个独立计算流。流水线可以通过将指令分解为基本操作来优化一个指令流。请记住,执行指令可以(大致)分解为:获取、解码、加载数据、计算、存储结果。因此,您可以在解码指令 i+1 的同时执行指令 i 的算术运算,同时获取指令 i+2,例如...吞吐量,而不是单独的指令。
  • 解码器不是调度器。他们只是解码数据并将其发送到乱序机器(从 RAT/ROB 开始)。调度是保留站 (RS) 为选择准备好的操作并将它们发送到执行而执行的操作。这与解码完全解耦(即 - 它不会在固定数量的周期后完成) - 它不是一条长管道。
  • 不,这取决于操作的类型,以及确切的处理器微架构。 SandyBridge 与 Haswell 不同,依此类推。您显示的图表(看起来像 Merom?)显示端口 0、1 和 5 支持 ALU 操作,因此每个周期可以执行 3 个。也许有一些聪明的你也可以使用内存地址端口进行简单的算术运算,LEA,这增加了一些额外的带宽。
  • 内存端口是为特定操作保留的——你有一个用于加载,一个用于存储(因为存储需要每个存储的地址和数据端口)。另请注意,解码器宽度会将您的可持续带宽限制为它可以发出的每个周期 4 条指令(在最好的情况下,没有人保证所有 4 条指令都可以在每个周期中工作),因此使您的 ALU 端口潜力饱和并不容易。不过,现代 CPU 不必依赖解码器(Sandy Bridge 添加了解码的 uop 缓存)

标签: x86 cpu x86-64 intel cpu-architecture


【解决方案1】:

是的。正如 cmets 所解释的,这个问题已经包含了答案。 :P

(只是发布一个答案以将其从未回答的问题列表中删除。)

我要补充一点,Sandybridge 和后来的英特尔 CPU 及其 uop 缓存,比以前的 CPU 更经常接近于在循环中维持每个周期 4 uop(如果前端是瓶颈,而不是数据依赖性(延迟)或执行端口争用(吞吐量)。)这是特别的。对较长的编码向量指令很有帮助,因为解码器只能处理 16B/周期,通常小于 4 uop。

http://agner.org/optimize/,尤其是。 microarch 文档,有关 uop 缓存中指令吞吐量的详细信息,以及 uop 缓存线边界如何干扰流水线可以处理的每个周期提供恒定的 4 uop。适合循环缓冲区的小循环不会受到这种潜在瓶颈的影响。

回复其中一位 cmets:微融合不会让您在每个周期获得超过 4 条指令来运行。只有宏融合将多条指令组合成一个微指令。 (微融合确实使使用内存操作数的指令更便宜,但是apparently only works with one-register addressing modes。这确实增加了 IPC,并且可以使平均值超过 4。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多