众所周知,Intel x86_64 处理器不仅是流水线架构,而且还是超标量架构。
这意味着 CPU 可以:
这是可能的,因为处理器有多个指令调度程序(英特尔酷睿有 4 个简单解码器)。
但是只有调度程序(4个简单解码器)的副本,还是算术单元的副本?
IE。例如,我们可以在相同的阶段执行两个 ADD,但在同一 CPU 核心上的独立算术单元(例如, 端口 0 上的 ALU 和端口 1 上的 ALU )?
是否有任何执行单元的副本,可以在同一个时钟执行两条相同的指令?
最佳答案
是的。正如评论所解释的那样,该问题已经包含了答案。 :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/