x86 - x86_64 CPU 能否在流水线的同一阶段执行两个相同的操作?

标签 x86 cpu x86-64 intel cpu-architecture

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

这意味着 CPU 可以:

  • 管道 - 在一个时钟上,执行一个操作的某些阶段。例如,与阶段转移并行的两个 ADD:
  • ADD(stage1) -> ADD(stage2) -> 没有
  • 什么都没有 -> ADD(stage1) -> ADD(stage2)
  • 超标量 - 在一个时钟,执行一些不同的操作。例如,在同一阶段并行 ADD 和 MUL:
  • ADD(stage1) -> ADD(stage2)
  • MUL(stage1) -> MUL(stage2)

  • enter image description here

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

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

    IE。例如,我们可以在相同的阶段执行两个 ADD,但在同一 CPU 核心上的独立算术单元(例如, 端口 0 上的 ALU 和端口 1 上的 ALU )?
  • ADD1(stage1) -> ADD1(stage2)
  • ADD2(stage1) -> ADD2(stage2)

  • 是否有任何执行单元的副本,可以在同一个时钟执行两条相同的指令?

    最佳答案

    是的。正如评论所解释的那样,该问题已经包含了答案。 :P

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

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

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

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

    关于x86 - x86_64 CPU 能否在流水线的同一阶段执行两个相同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28174069/

    相关文章:

    c - 遍历堆栈

    cpu - 什么时候使用自旋锁是个好主意?

    caching - CPU如何通过TLB和缓存发出数据请求?

    c - 如何将 C 库函数加载到汇编中,并在另一个 C 或汇编项目中使用汇编库函数

    assembly - 如何诊断 GNU ld 链接器行为随时间变化的差异?

    assembly - objdump 输出中的 data16 是什么意思?

    c++ - SSE:reinterpret_cast<__m128*> 而不是 _mm_load_ps

    assembly - : mean in x86? 是什么意思

    assembly - 编写一个简单的引导加载程序来读取用户名

    multithreading - 多线程进程对多核还是单核速度提高一倍?