TGL数据由cha0s提供,Golden Cove AVX-512数据来自CapFrameX
英特尔非常重视矢量性能,这表明了这一点。Golden Cove 的核心私有缓存可以提供出色的带宽,L1D 每个周期处理三个 256 位负载,或每个周期两个 512 位负载。后者仅适用于 AVX-512,但即使使用 AVX,Golden Cove 也拥有显着的 L1D 带宽优势。这一优势在 L2 中仍然存在,英特尔在 L1D 和 L2 之间有一个每周期 64 字节的接口。使用 AVX-512,Golden Cove 在 L2 大小的区域中比 Zen 4 具有惊人的 40% 带宽优势。AMD 无法达到与 AVX 相同的性能水平,因为L1D 没有足够的端口来处理来自 L2 的填充请求并同时向内核提供全带宽。尽管如此,Golden Cove 仍然可以仅用 AVX 击败 Zen 4。
L3 的情况发生了逆转,AMD 出色的 L3 设计可以提供几乎与 L2 一样多的带宽。相比之下,英特尔的带宽下降了。Golden Cove 从 L3 平均每个周期仅 20 字节,没有来自其他内核的争用。
当测试大小溢出到 DRAM 中时,Zen 4 保持非常高的每核带宽。这表明每个 Zen 4 内核都能够跟踪大量未决的 L3 misses,或者更具体地说,L2 misses。AMD 仅使用从 L2 驱逐的行(因此称为“victim cache”)填充其 L3 缓存,这意味着它不会预取到 L3。这使得 Zen 4 的 L2 成为能够生成预取请求的最后一个缓存级别。通过能够根据从 L1 misses中看到的访问模式生成对 L3 及更高级别的请求,L2 可以在其级别上利用更多可用的内存级别并行性,而不受 L1 misses生成的内存级别并行性的限制。
我们甚至可以使用 Little 定律估计 L2 misses队列的大小:
显然,这个计算并不完美,因为我们测试了 4 KB pages到非常大的测试大小,并且没有尝试估计pages walk会导致对 L3 及更高级别的请求的频率。但它确实表明 Zen 4 在 L2 有更积极的预取,在 L2 和 L3 之间有更深的队列,或两者兼而有之。
十一、多线程带宽
加载所有线程后,Zen 4 实现了非常高的总带宽。这主要是因为它能够保持超过 4.8 GHz 的非常高的时钟速度,从实现的 L1D 带宽来看。由于 Zen 4 缓存层次结构的所有级别都以核心时钟运行,或者至少以集群中最快核心的速度运行,7950X 还享有增加的 L2 和 L3 带宽,即使每个缓存级别之间的总线宽度没有在禅宗世代之间发生了变化。
英特尔的 Alder Lake 与前几代 AMD 16 核台式机 CPU 具有竞争力。AMD 有更多的“大”核心,但 Golden Cove 有更宽的总线连接到它的 L1D 和 L2 缓存。但是 Zen 4 更高的时钟改变了这一点。如果 AVX-512 正在运行,Alder Lake 只能匹配 AMD 的 L1D 带宽,但该功能当然没有启用。无论有没有 AVX-512,Alder Lake 都无法匹敌 Zen 4 的 L2 带宽。
通过将 L3 拆分为集群,AMD 牺牲了一些缓存容量效率,使带宽和延迟问题更容易解决。在过去的几代 Zen 中,AMD 在 L3 性能上比 Intel 拥有了巨大的优势。Zen 4 进一步扩展了这一点。
十一、内存带宽
Zen 4 也迁移到 DDR5,这极大地增加了内存子系统的理论带宽。我们看到使用配备 DDR4-3600 的 5950X 的读取带宽略高于 50 GB/s,或略高于理论 DRAM 带宽的 88%。我们配备 DDR5-6000 的 7950X 平台在相同的 3 GB 测试大小下实现了 72.85 GB/s。一方面,内存带宽显着增加了 43%。另一方面,Zen 4 实际上发现内存带宽效率有所下降。128 位 DDR5-6000 总线理论上可以达到 96 GB/s,而我们只达到了 76%。
一种理论是 Zen 4 的 DRAM 带宽受到内存控制器和结构之间的链接的限制。AMD 的图表显示,链路在两个方向上每个周期宽 32 字节。
然而,这不太可能。我们测试中的 FCLK 设置为 2000 MHz。在 2000 MHz 下,每个周期 32 字节可以达到 64 GB/s,这远低于我们能够达到的水平。UCLK 以 3000 MHz 运行,或 DDR 传输速率的一半。3000 MHz 时每个周期 32 字节意味着可以在任一方向上实现完整的 DDR 带宽。这并不排除 Infinity Fabric 和内存控制器之间链路的带宽限制,但它确实表明与结构的链路比 AMD 图表所暗示的要宽。
另一个相关理论是,如果我们以 1:1 的比例混合读取和写入,可以提高带宽,因为链路可以在每个方向上传输 32 个字节。然而,混合读取和写入在 DRAM 级别引入了不同的问题。与高速缓存链接不同,DRAM 总线不是双向的,必须在读取和写入模式之间显式切换。这些开关不是空闲的,并且会强制内存总线空闲多个周期,从而减少实现的带宽。因此,当使用混合读取和写入的访问模式时,我们没有看到显着的带宽增加。
使用各种访问模式和 128 位 DDR5-6000 设置实现的内存带宽。“添加”和“复制”测试使用 1:1 的读取和写入混合。
使用读-修改-写访问模式,我们看到带宽增加了 1%,这几乎不值得讨论。写入模式实际上也是读取和写入的 1:1 混合,因为每个写入操作(特殊情况除外)也需要读取缓存线。这是因为指令可能只修改了部分缓存线,而 CPU 需要将写入与现有缓存线内容合并。这种读取被称为“所有权读取”或 RFO,因为这意味着读取核心拥有缓存线,并保证没有其他人可以写入它。如果我们将 36.86 GB/s 的写入带宽乘以 2 来考虑这一点,我们得到 73.72 GB/s,这与纯读取带宽并没有太大区别。
其他访问模式出现显着下降,包括使用 REP MOVSB 的复制模式。该测试使用微编码字符串复制指令,该指令准确告诉 CPU 它需要移动多少数据,从而避免 RFO。因此,它还具有 1:1 的读取和写入混合。
我们确实看到了一些证据表明写入带宽可能受到 CCD 和 IO 芯片之间的链接的限制。AMD 的图表显示这些链接每个周期宽 16 个字节。在两个 CCD 上,在 2000 MHz FCLK 下的速度可达 64 GB/s。通过避免 RFO 的特殊写入指令,我们可以非常接近 64 GB/s,但不会更高。REP STOSB 指令预先告诉 CPU 将多少数据设置为特定值,让它在知道整个缓存行将被覆盖时避免 RFO。非临时写入(使用 MOVNTPS)使用写入组合内存协议,该协议也避免了 RFO,并绕过缓存。两种方法都达到理论 CCD 到 IO 芯片写入带宽的 1% 以内。在大多数应用程序中,这不太可能成为限制,其中内存读取远远超过内存写入。
就 Zen 4 的读取内存带宽而言,不太可能存在结构带宽限制。取而代之的是,新的 DDR5 内存控制器在提取带宽的最后一点方面似乎不如旧的 DDR4 有效。也许它也不是调度请求,而是更多地进入次要时间。但总体而言,得益于 DDR5 内存,Zen 4 与前几代 Zen 相比具有显着的带宽优势。AMD 的 16 核台式机 Ryzen 芯片可能会受到内存带宽的限制,如果给定线程良好的矢量化负载。即使有合理的缓存命中率,16 核也可以消耗大量带宽,因此 DDR5 的带宽提升值得赞赏。甚至 DDR5 带宽也不足以支持 16 个内核,因此 AMD 继续依靠有效的缓存来保持线程良好的工作负载的性能优势。
十二、结论
顾名思义,Zen 4 是 AMD Zen 架构系列的第四款。与 Zen 2 一样,Zen 4 将架构更改与改进的制程节点相结合,以提供代际性能提升。同时,AMD 在尝试过渡到新工艺节点时通过避免更剧烈的变化来降低风险。因此,在很多领域看到类似的变化也就不足为奇了,特别是在缓存和寄存器文件方面,提高密度使得更大的容量变得可行。
但是,Zen 4 确实跳过了某些领域,尤其是在涉及向量执行的方面。与 Zen 3 甚至 Zen 2 相比,Zen 4 并没有增加原生向量执行宽度,也没有提升最大 L1D 带宽。Zen 2 还对 Zen 1 进行了较小的执行和调度更改,而 Zen 4 保留了 Zen 3 的配置。结果是声称 IPC 增加了 13%。与前两代禅宗相比,这似乎令人印象深刻。但 13% 与Ivy Bridge 和 Haswell之间的增幅相当,Anandtech 将其定为 11.2%。我们还必须在上下文中考虑每时钟性能随时钟速度的增加。
性能提升绝不仅仅是 IPC 的提升,因为时钟速度也很重要。性能通常随着时钟速度的增加几乎呈线性增长,前提是您的缓存性能足够好,可以避免 DRAM 瓶颈。如果您可以在将某些结构大小增加 5% 或将内核时钟频率提高 5% 之间做出选择,则几乎可以保证通过选择后一个选项获得更高的整体性能。AMD 的工程师可能避免加强某些结构,例如调度程序和存储队列,而是支持让内核时钟频率更高。Zen 4 的时钟频率确实更高,幅度很大。最终结果是整体性能改进应该与我们从前几代 Zen 获得的一致。Zen 4 将这种时钟速度优势带到了多线程工作负载中。每一代 Zen 都提供了强大的全核性能,Zen 4 也不例外。英特尔还对 Raptor Lake 采取了类似的策略,避免了重大的架构变化。取而代之的是,使用 Thermal Velocity Boost 将最大时钟推至 5.8 GHz,或使用常规 Turbo Boost 3.0 将最大时钟推至 5.7 GHz。
在大量工作负载中平均 IPC 也掩盖了 Zen 4 的 AVX-512 优势。使用 AVX-512 的程序可以用更少的指令完成相同数量的工作,从而实现更低的 IPC,但更高的每时钟性能。我假设当 AMD 说 IPC 时,它们的意思是每时钟的性能,而不是每时钟的具体指令。在可以利用 AVX-512 的特定工作负载中,我预计 Zen 4 比 Zen 3 有很大的优势。如果使用 512 位向量,即使调度程序队列的大小保持不变,Zen 4 也会有更有效的调度能力同样,因为每个调度程序条目将跟踪 512 位的工作。即使不使用更长的向量,AVX-512 也提供了新的指令,再次让 CPU 用更少的指令完成相同数量的工作。
Zen 4 的其他变化同样侧重于更好地利用现有的执行能力。从 Zen 2 到 Zen 4,每个周期的原始执行吞吐量并没有真正改变,缓存带宽也没有增加。这是因为 AMD 在前几代产品中已经拥有大量的原始吞吐量,并且稳态执行吞吐量并不是大多数应用程序的瓶颈。
执行单元容量不是 libx264 的瓶颈,即使在峰值时(FP 调度程序填满的停顿很少),但 ROB 和整数寄存器确实填满并导致后端停顿
因此,Zen 4 提高了重新排序能力,以帮助吸收对执行单元的需求激增。改进的分支预测通过减少工作浪费,有助于更好地利用重新排序容量和执行单元吞吐量。Zen 4 还尝试通过切换到 DDR5 来更好地为执行单元提供服务,这提供了比 DDR4 更大的带宽提升。同时,AMD 赋予了每个核心更多的内存级并行能力。单核可实现的 DRAM 带宽量增加到超过 57 GB/s,表明非常深的缓冲区可以跟踪未决缓存misses。这些深缓冲区有助于吸收对高速缓存和内存带宽的需求峰值。另一方面,Zen 4 更大的 L2 TLB 和 L2 缓存有助于减少访问内存的指令的平均延迟。英特尔也采取了类似的策略Raptor Lake,其中 P 核 L2 大小从 1.25 MB 增加到 2 MB,代价是仅仅一个延迟周期。
Zen 4 还旨在提高前端宽度利用率,而不是让一切变得更宽。Zen 3 已经有一个非常快速的分支预测器,但 Zen 4 更进一步。具有更高命中率的更大 L1 BTB 意味着前端在执行分支后空闲的周期更少,从而提高了前端宽度利用率。与前几代 Zen 和许多英特尔架构一样,Zen 4 在renamer上最窄,仍然是 6 宽。我猜 AMD 发现他们可以通过增加时钟而不是增加核心宽度来提高性能。重命名器可能是一个对时间非常敏感的电路。进入的每条指令都可能需要从寄存器别名表中读取两次或多次,并且必须立即反映对寄存器映射的修改,以便稍后进入同一个 6 宽组内的指令。
十三、您如何真正衡量宽度利用率?
考虑到所有这些,我想知道 AMD 可以从某个核心宽度和一组执行资源中挤出多少。与竞争对手的英特尔内核相比,Zen 4 内核的某些区域看起来非常轻巧。例如,向量加载和存储的 L1D 带宽只有英特尔使用 AVX-512 可以实现的一半。即使使用 AVX 限制为 256 位访问,Golden Cove 仍然可以实现比 Zen 4 更多的每个周期的带宽。当然,英特尔无法将 16 个 Golden Cove 内核封装到一个芯片中并在高时钟下运行它们。此外,英特尔设法在 Conroe 和 Skylake 之间以荒谬的数量增加了 IPC,尽管这两种架构(以及介于两者之间的所有架构)都是 4 宽。我期待看到 AMD 和英特尔在后续将带来怎样的产品。
参考链接:
https://chipsandcheese.com/2022/11/05/amds-zen-4-part-1-frontend-and-execution-engine/
https://chipsandcheese.com/2022/11/08/amds-zen-4-part-2-memory-subsystem-and-conclusion/
完