现代英特尔处理器有多少种超标量方式?

How many ways-superscalar are modern Intel processors?

我刚刚了解了超标量处理器 (https://en.wikipedia.org/wiki/Superscalar_processor)。

我还了解到,随着超标量处理器宽度/路数的增加,事情变得越来越复杂,复杂性增加得如此之快,以至于最好添加更多的核心而不是更多的宽度。我的导师说,在 4 路和 8 路超标量之间添加更多方式不再值得。

这让我想知道:英特尔从哪里停止增加方式并开始增加核心?我的英特尔第 8 代酷睿 i7 的每个内核有多少路?

方式的概念是否适用于这些处理器?

Agner Fog's microarch guide for pipeline details like this. https://www.realworldtech.com/haswell-cpu/ and also a uarch deep-dive on Haswell with block diagrams. (And links to some of David Kanter's articles on other uarches, like SnB and Core2, and AMD Bulldozer and K8.) Also other links in https://whosebug.com/tags/x86/info

是的,现代 x86 核心是超标量乱序执行。自 PPro 以来,基本原理没有改变:将 x86 机器代码解码为可由 ROB + RS 调度的微操作 (uops)。


(术语:英特尔使用 "issue" 表示 "copy into the out-of-order back-end",使用 "dispatch" 表示 "send from the scheduler to an execution unit",分配资源并更新 RAT。在计算机体系结构领域,人们使用相反的术语。)

Intel 因为Core 2在issue/rename/allocate阶段是4 uops宽的超标量,最窄的瓶颈。(在此之前,PPro到Pentium-M,是3 -wide.) Core 2 在实践中很少能维持这一点,因为有太多其他瓶颈。 Skylake 通常可以在高吞吐量代码中非常接近。

为了在每个融合域 uop 中进行更多工作,ALU uop 与其内存源负载进行了微融合。和例如的宏观融合cmp/test + jcc 所以比较和分支指令一起解码为一个 uop。 (参见 Agner Fog 的微架构指南)。这包括您的 Kaby 或 Coffee Lake CPU。最大未融合域 持续 吞吐量为每个时钟 7 微指令,achievable in practice on Skylake。在一个突发中,调度程序可以将 uops 调度到每个端口。

Ice Lake (Sunny Cove uarch) 将问题阶段扩大到 5.

AMD Zen的是6 uops wide,但是只有5 instructions wide,所以只能做到6 uops/clock when 运行 至少一些 2-uop 指令。例如256 位 AVX SIMD 指令,它解码为 2x 128 位一半(或更糟的是交叉洗牌)。


Skylake 将传统解码器扩展到 5 个 uops/clock,uop 缓存提取到 6 uops/时钟,从 SnB 到 Broadwell 的 4 个/时钟。这更多地隐藏了前端气泡,并在高吞吐量代码中更多地保持 issue/rename 阶段每时钟 4 微指令。 (阶段之间有缓冲区/队列,例如为 issue/rename 阶段提供数据的 64 uop IDQ。)

这包括您的 Kaby 或 Coffee Lake CPU:在微架构上,KBL 中的 IA 核心与 SKL 相同,Coffee Lake 是一个非常小的调整(修复了 SKL 必须在微代码中禁用的循环缓冲区由于部分寄存器合并 uop 错误而更新,又名 CPU 错误)。 KBL 和 CFL 的 GPU 比 SKL 好,但 x86 内核基本相同。


是的,对于大多数代码来说 returns 超过 3 或 4 宽,但 SMT 允许宽内核在两个(或 4 或8) 一次执行的线程。这使得更宽的核心不会被浪费,但核心的成本与宽度成线性关系,所以你只有在有时单个线程可以使用大部分宽度的情况下才这样做。否则你只会构建更多更小的内核。 (至少如果你有更多内核的可扩展互连......)我在 electronics.SE 上对 Why not make one big CPU core? 的回答有更多关于权衡和实际工作负载中可用的有限 ILP 的详细信息。