AMD 逆袭的新武器:Zen 2 核心详解
扫描二维码
随时随地手机看文章
在过去的一个月里,AMD发布了许多公告。AMD正在准备推出他们的第三代Ryzen台式机处理器。这些处理器将利用AMD最新的微架构Zen 2,采用台积电领先的7nm工艺制造。
我们先来看看核心的微架构改进。
Zen 2
新芯片的核心是Zen 2。这一核心将用于AMD的移动APU、高性能台式机处理器和数据中心芯片。
Zen 2是继Zen之后的下一个主要微架构。随着Zen 2的推出,AMD承诺分别基于Cinebench 1T和Spec2006进行13-15%的IPC改进。要了解他们如何能够提取IPC的收益,我们需要仔细研究基础微架构的变化。
前端
前端的很大一部分已经进行了重新设计。在没有标识分支的典型情况下,从下一个64B块的地址开始从第一级高速缓存提取指令。Zen最初提供了一个64 KiB L1缓存。它由4路256组(4 ways of 256 sets)组成。Zen 2对L1进行了大改。关联性已经变为8路64组(8 ways of 64 sets),缓存大小减半到32 KiB。如果没有AMD的更多细节,我们很难描述其他变化,更高的关联性也应该降低未命中率。AMD指出,通过减小指令缓存的大小,并利用该区域来增加一些其他组件,特别是BPU和OC,它们能够从每单位面积的硅中获得更好的性能。顺便说一下,从组织的角度来看,Zen 2现在和英特尔的Skylake和Sunny Cove是一样的。值得注意的是,一级指令高速缓存转换后备缓冲区保持不变。它仍然是完全关联的64条目深度缓冲区,能够存储4 KiB、2 MIB和1 GiB页面。
高速缓存线保持64字节,每个周期可以获取32个字节。在不太常见的高速缓存未命中的情况下,L1将为包含未命中地址的线生成填充请求。每个周期最多32个字节可以从共享L2传输到指令高速缓存。
除了由提取生成的填充请求外,分支预测器和预提取器还可以发出额外的请求。这一点很重要,因为预取器能够利用空间局部性以避免停顿。这是AMD花了很多努力改进的另一个领域。
最好的预测器会赢吗?
分支预测单元的目标是预测条件分支的下一个地址。换句话说,猜测它是否被占用了。这里的基本思想是猜测指令流的路径,而不是通过停止流水线直到最终知道路径来浪费周期。然而,这必须明智地进行,因为糟糕的预测会直接导致工作的浪费。当发生分支时,将其存储在分支目标缓冲区中,以便可以更容易地确定和采用(或不采用)后续分支。诸如Zen之类的现代微处理器通过不仅将最后一个分支的历史而是最后几个分支的历史存储在全局历史寄存器(GHR)中,以便提取分支之间的相关性(例如,如果采用较早的分支,则可能也将采用下一个分支),从而进一步实现这一点。
Zen上的BTB是一个三级缓存——每个缓存都具有更高的容量,但代价是更长的延迟。Zen 2保持结构不变,但几乎将第二级和第三级BTB中的条目数量增加了一倍,分别从256和4K增加到512和7K条目。
顺便说一句,在Zen中,第一级(L0)BTB中的查找是零延迟查找,而L1和L2 BTB中的后续表查找分别导致一个和四个冒泡。目前还不清楚Zen 2是否改变了这些成本。
Zen采用了一种称为散列感知器的动态预测器。利用人工智能的大肆宣传,营销人员喜欢将其称为神经网络预测器。感知器是最简单的机器学习形式,与其他一些机器学习算法相比,感知器本身更易于实现硬件。它们往往也比gshare之类的预测器更准确,但它们的实现确实更复杂。Zen上的实际实现尚不清楚,但我们至少可以描述一个简单的实现是什么样子的。当处理器遇到条件分支时,它的地址用于从感知器表中获取感知器。对于我们来说,感知器只不过是权重向量。这些权重表示历史分支的结果与预测的分支之间的相关性。例如,考虑以下三种模式:“TTN”、“NTN”和“NNN”。如果这三个模式都导致下一个分支没被采用,那么或许我们可以说前两个分支之间没有相关性,并为它们分配很小的权重。先前分支的结果是从全局历史寄存器中获取的。寄存器中的各个位用作输入。输出值是计算出的权重和先前分支历史的点积。在这种情况下,负输出可能意味着“不采取”,而其他值可能被预测为“采取”。值得一提的是,分支历史之外的其他输入也可以用于推理相关性,尽管不知道是否有现实世界的实现利用了这一想法。Zen的实现可能要复杂得多,或许是对不同类型的历史进行采样。尽管如此,它的工作方式仍然是一样的。
鉴于Zen流水线的长度和宽度,错误的预测可能导致超过100个槽被刷新。这直接导致性能的损失。Zen 2保留了散列感知器预测器,但增加了第二层新的TAGE预测器。这个预测器是由Andre Seznec在2006年首次提出的,它是对Michaud的PPM类预测器的改进。TAGE预报器赢得了上一届分支预测(CBP)大赛(2006-2016)的全部四项冠军。TAGE的理念是,程序中的不同分支需要不同的历史长度。换句话说,对于某些分支,非常小的历史记录效果最好。例如1位预测器:如果某一分支以前采用过,它将再次采用。不同的分支可能依赖于先前的分支,因此需要更长的多位历史以充分预测它是否将被采用。标记几何历史长度(TAGE)预测器由多个全局历史表组成,这些表使用不同长度的全局历史寄存器索引,以便涵盖所有这些情况。寄存器使用的长度形成了几何级数,因此得名。
使用TAGE预测器的想法是,它试图找出哪个分支的历史数量最适合哪个分支,将最长的历史优先于较短的历史。
这种多预测器方案类似于分支目标缓冲区的分层。第一级预测器是感知器,用于快速查找(例如,单周期分辨率)。第二级TAGE预测器是一个复杂的预测器,需要很多周期才能完成,因此必须在简单预测器之上分层。换句话说,L2预测器速度较慢,但更好,因此用于对较快和较不准确预测器的结果进行双重检查。如果L2预测器与L1预测器不同,则当TAGE预测器覆盖感知器预测器时,会发生少量刷新,提取返回并使用L2预测,因为L2预测器被认为是更准确的预测。
除了使用TAGE预测器以外,AMD没有透露更多的内容。值得指出的是,至少就字面而言,TAGE预测器不再被认为是最好的预测器。之后,Seznec在TAGE预测器上进行了改进,增加了统计校正器(TAGE-SC),后来又增加了循环预测器(TAGE-SC-L)。替代方案包括BATAGE预测器。尽管如此,我们得到的结论是,有更多的机会找到更好的分支预测器,这是一个非常活跃的研究领域。
AMD表示,与之前的感知器相比,新的分支预测单元显示出的误预测率目标低30%。因为现代微处理器的精确度高达90%。与在Zen中的实现相比,这种错误预测率的大幅降低将直接转化为更高的IPC。事实上,如此大的改进可以单独占据Zen 2声称的性能提升的很大一部分。
改变现状
关于AMD的这一代芯片,我们注意到的一件事是现状的变化。从历史上看,英特尔在设计最先进、性能最高的预测器方面投入了大量资源。另一方面,AMD往往落后于一个“足够好”的更保守的预测器。随着Zen的成功,Zen 2的情况变得有所不同。虽然AMD正在摘取所有唾手可得的成果,但它们现在正直接瞄准英特尔,而英特尔一直拥有无可争辩的领先优势。换句话说,AMD似乎对他们目前的核心设计充满信心,可以腾出更多的资源来解决次要的缺陷。