我刚刚了解了超标量处理器(https://en.wikipedia.org/wiki/Superscalar_processor)。
我还了解到,随着超标量处理器宽度/方式数量的增加,事情变得更加复杂,复杂性增加得如此之快,以至于最好添加更多内核而不是更多宽度。我的导师说,在 4 路和 8 路超标量之间添加更多方法是不值得的。
这让我想知道:英特尔在哪里停止添加方式并开始添加内核?我的英特尔第 8 代酷睿 i7 的每个核心有多少种方式?
方法的概念甚至适用于这些处理器吗?
我刚刚了解了超标量处理器(https://en.wikipedia.org/wiki/Superscalar_processor)。
我还了解到,随着超标量处理器宽度/方式数量的增加,事情变得更加复杂,复杂性增加得如此之快,以至于最好添加更多内核而不是更多宽度。我的导师说,在 4 路和 8 路超标量之间添加更多方法是不值得的。
这让我想知道:英特尔在哪里停止添加方式并开始添加内核?我的英特尔第 8 代酷睿 i7 的每个核心有多少种方式?
方法的概念甚至适用于这些处理器吗?
有关此类管道的详细信息,请参阅Agner Fog 的微架构指南。 https://www.realworldtech.com/haswell-cpu/以及带有框图的 Haswell 的 uarch 深入研究。(以及 David Kanter 关于其他 uarches 的一些文章的链接,例如 SnB 和 Core2,以及 AMD Bulldozer 和 K8。)还有https://stackoverflow.com/tags/x86/info中的其他链接
是的,现代 x86 内核是超标量乱序执行。自 PPro 以来,基本原理没有改变:将 x86 机器代码解码为可由 ROB + RS 调度的微操作 (uop)。
(术语:Intel 使用“issue”表示“复制到乱序后端”,“dispatch”表示“从调度程序发送到执行单元”,分配资源并更新 RAT。在计算机体系结构领域的其他许多领域,人们使用相反的术语。)
Intel,因为 Core 2 在 issue/rename/allocate 阶段是 4 uops 宽的超标量,是最窄的瓶颈。 (在此之前,从 PPro 到 Pentium-M,它是 3 宽。)Core 2 在实践中很少能维持这种状态,因为有太多其他瓶颈。Skylake 通常可以在高吞吐量代码中非常接近。
为了在每个融合域 uop 中进行更多工作,需要将 ALU uop 与其内存源负载进行微融合。以及例如 cmp/test + jcc 的宏融合,因此比较和分支指令一起解码为一个 uop。(请参阅 Agner Fog 的微架构指南)。这包括您的 Kaby 或 Coffee Lake CPU。未融合域的最大持续吞吐量为每时钟 7 微秒,在 Skylake 的实践中可以实现。在突发中,调度程序可以向每个端口发送微指令。
Ice Lake (Sunny Cove uarch) 将发行阶段扩大到 5。
AMD Zen 的宽度是 6 uop,但只有 5条指令宽,所以在运行至少一些 2-uop 指令时,它只能达到 6 uop/clock。例如 256 位 AVX SIMD 指令,将其解码为 2x 128 位一半(或更糟的是,对于车道交叉洗牌)。
Skylake 将传统解码器扩大到 5 微指令/时钟,将 uop 缓存提取扩展到 6 微指令/时钟,从 Broadwell 的 SnB 中的 4/时钟提高。这在更多时间隐藏了前端气泡,并在高吞吐量代码中使问题/重命名阶段在更多时间以每时钟 4 uop 的速度提供。(阶段之间有缓冲区/队列,例如提供问题/重命名阶段的 64 uop IDQ。)
这包括您的 Kaby 或 Coffee Lake CPU:微架构上,KBL 中的 IA 内核与 SKL 相同,Coffee Lake 是一个非常小的调整(修复了 SKL 在微码更新中由于部分寄存器合并 uop 而必须禁用的循环缓冲区勘误,又名 CPU 错误)。KBL 和 CFL 具有比 SKL 更好的 GPU,但 x86 内核基本相同。
是的,对于大多数代码来说,超过 3 或 4 宽的回报会递减,但 SMT 让宽核心可以同时在两个(或 4 或 8 个)执行线程中找到 ILP。这使得更宽的内核不会被浪费,但内核的成本与宽度的线性比例超过线性比例,因此只有在有时单个线程可以使用大部分宽度时才这样做。否则,您只会构建更多更小的内核。(至少如果您有一个可扩展的互连以支持更多内核......)我的回答为什么不制造一个大 CPU 内核?关于electronics.SE 有更多关于权衡和实际工作负载中可用的有限ILP 的详细信息。