我刚刚了解了超标量处理器(https://en.wikipedia.org/wiki/Superscalar_processor)。
我还了解到,随着超标量处理器宽度/方式数量的增加,事情变得更加复杂,复杂性也如此之快,以至于最好添加更多核心而不是更多宽度。我的教练说,在4路和8路超标量之间的地方添加更多的方法不再是值得的。
这让我感到奇怪:英特尔在哪里停止添加方式并开始添加内核?英特尔第8代酷睿i7的每个内核有几种方式?
方法的概念甚至适用于这些处理器吗?
答案 0 :(得分:5)
有关此类管道的详细信息,请参见Agner Fog's microarch guide。 https://www.realworldtech.com/haswell-cpu/,也是使用Haswell在Haswell上进行深入研究的框图。 (并链接到David Kanter关于其他架构的一些文章,例如SnB和Core2,以及AMD Bulldozer和K8。)还有https://stackoverflow.com/tags/x86/info
中的其他链接。是的,现代x86内核是超标量乱序执行。自PPro以来,基本面没有改变:将x86机器代码解码为可以由ROB + RS调度的微操作(ops)。
(术语:英特尔使用“问题”来表示“复制到无序的后端”,使用“调度”来表示“从调度程序发送到执行单元”,分配资源并更新RAT 。在计算机架构的其余部分中,人们使用相反的术语。)
英特尔,因为在发行/重命名/分配阶段,Core 2的超标量为4 ups宽,这是最狭窄的瓶颈。(在此之前,PPro到Pentium-M的带宽是3宽。) 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乌奇湖)将发行阶段扩大到5。
AMD Zen的宽度为6uop,但是宽度仅为5 ,因此,当至少运行一些2uop指令时,它只能达到6uop /时钟。例如256位AVX SIMD指令,可将其解码为2个128位的一半(对于越过通道的混洗效果更差)。
Skylake将传统解码器的时钟范围扩大到了5微秒/时钟,而uop缓存的获取速度又提高到了6微秒/时钟,而从SnB到Broadwell的时钟是4微秒/时钟。这将更多时间隐藏前端气泡,并在高吞吐量代码中使问题/重命名阶段每时钟更多时间获得4 ups的反馈。 (各阶段之间有缓冲区/队列,例如用于提供问题/重命名阶段的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。这样一来,就不会浪费更宽的内核,但是内核的成本不会随宽度线性增长,因此只有在有时单个线程可以使用该宽度的大部分时,才可以这样做。否则,您将只构建更多较小的内核。 (至少如果您具有可扩展的互连以容纳更多的内核...)我在Why not make one big CPU core?电子产品上的回答。SE提供了有关折衷和实际工作负载中可用的有限ILP的更多详细信息。