与 Zen 3 一样,Zen 4 使用三个 AGU 来计算加载和存储指令的地址。 这些地址以及存储数据(如果适用)被传递到加载/存储单元。 然后,加载/存储单元必须面对确保内存访问看起来按照程序顺序执行的复杂工作,同时尽可能多地提取性能。
高性能意味着保持大量操作处于运行状态以隐藏内存访问延迟,加载/存储单元必须通过跟踪待处理的内存操作来发挥其作用。 为此,Zen 4 实现了一个大型加载队列。 自 Zen 1 以来,AMD 的加载队列的工作方式与 Intel 的不同。 在加载操作接收到数据后,加载队列可以自由地释放它。 一个单独的、更大的结构用于跟踪装载操作直至退役。 为了区分这些结构,我们将较大的结构称为“加载验证队列”,将发布的加载队列称为“加载执行队列”。 分离出这些结构让 AMD 可以保持 136 次加载操作,远远超过他们公布的加载队列大小所暗示的

Zen 4 上的存储必须缓冲在一个相对较小的 64 条目存储队列中。 这个存储队列对 AVX-512 代码的压力更大,因为 512 位存储将消耗两个存储队列条目。
一旦内存操作在各自的队列中,加载/存储单元必须确保保留内存顺序。 如果动态存储的地址与较新加载的地址重叠,则可以将存储的数据转发给加载。 与 Zen 3 一样,Zen 4 可以无延迟地进行存储转发。 也就是说,依赖加载和存储的链将在 2 个 IPC 上执行。
但是,可能适用条款和条件。 加载和存储地址必须完全匹配。 如果存储跨越 32 字节对齐边界,则会评估额外的 1 个周期延迟损失。 如果存储跨越 4 KB 对齐的页面边界,该机制将完全失败。
Zen 4 的存储到加载转发特性,使用 Henry Wong 的测试方法
负载完全包含在存储中的部分重叠情况以 6-7 个周期的延迟处理,这比 Zen 3 的 7-8 个周期略有改进。 如果加载和存储重叠,则两代 Zen 的存储转发都会失败,但仅使用存储中的数据无法完成加载。 Zen 4 在这种情况下需要 19 个周期的惩罚,这可能对应于等待 store 退出并从 L1D 读取数据。 相比之下,Zen 3 可以在 18 个周期内处理故障情况,但前提是存储地址与 4 字节边界对齐。 否则,Zen 3 将遭受 25 个周期的惩罚,而 Zen 4 避免了这一点。 对于所有测试的存储转发案例,总结依赖于存储的负载的互惠吞吐量:
禅4 禅3 金湾 推土机 精确地址匹配 1个周期 1个周期 0.5 个周期(每个时钟 2x 加载 + 2x 存储)
8-9 个周期(加载和存储跨越 64B 缓存线边界) 8个周期 精确的地址匹配,未对齐的存储 32B 边界:
2个周期 32B 边界:
2 个周期(28B 对齐)或 5 个周期 64B 边界:
2 个循环(存储交叉)或 8-9 个循环(加载和存储两个交叉) 16B边界:
13-14 个周期 存储完全重叠负载 6-7个周期 7-8个周期 5-6个周期 与下面的失败案例相同 存储部分重叠负载(转发失败) 19 个周期 18 个周期(存储是 4B 对齐的)或 25 个周期,否则 19-20 个周期
如果加载和存储都跨越 64B 边界,则为 21 个周期 36 个周期
如果越过 16B 边界,则为 39 个周期 跨越 4K 页面边界 43-44 个周期 商店中包含的负载:34-36 个周期
存储部分重叠:41-44 个周期
两种情况都取决于负载是否也越过页面边界 加载跨越页面边界:27-28 个周期
存储跨页边界:34 个周期
跨页边界加载和存储:41 个周期 存储跨页边界:50-51 个周期
跨页面边界加载和存储:53-54 个周期
推土机在这里做什么? 我们是否考虑稍后再讨论?
Zen 4 保留了 Zen 3 的大部分存储转发特性,并在最常见的情况下略有改进。 不太常见的页面边界交叉情况略有回归。 在两种架构上,在处理存储转发案例时跨越页面边界都非常昂贵。 它比 Zen 1 和 Zen 2 还要贵,最好避免使用。
在大多数情况下,Golden Cove 的存储转发延迟比 Zen 4 略低,除非加载和存储都跨越 64B 缓存线边界。 对于精确地址匹配的情况,Golden Cove 享有吞吐量优势而不是延迟优势。 使用四个 AGU,Golden Cove 可以为每个周期的两个加载和两个存储生成地址。
对于更常见的非重叠负载,Golden Cove 继续具有优势,因为 L1D 以更大的块访问,并且将遭受更少的未对齐访问。 我们喜欢将内存访问视为可字节寻址且完全随机的。 但在实践中,缓存是在更大的、对齐的块中寻址的。 这里的“对齐”意味着内存地址是特定大小的倍数。 例如,32 字节对齐的内存地址的低 5 位将为零。 “未对齐”访问跨越对齐边界,迫使加载/存储单元进行两次 L1D 查找以满足请求。
Golden Cove 的 L1D 以 64 字节、缓存线大小的块处理加载和存储。 相比之下,AMD 的 L1D 以 32 字节块处理写入,从 Zen 2 开始。跨越 Zen 4 上两个 32B 块或 Golden Cove 上 64B 块之间边界的写入需要两个周期才能完成。 Zen 4 比 Zen 3 有所改进,后者可能需要 5 个周期来处理这种未对齐的负载,并且如果存储也是 4B 对齐的,则只能获得 2 个周期的情况。 Golden Cove、Zen 3 和 Zen 4 也发现超过 64B 边界的负载吞吐量降低,但这种情况处理得更好,因为负载吞吐量首先更高。
跨越 4 KB 边界的访问会带来更多复杂性,因为虚拟地址到物理地址的转换通常在 4 KB 页面中处理。 处理这样的访问也需要访问两个 TLB 条目。 所有 Zen 世代都比常规的未对齐负载情况更容易处理这种情况,这表明他们的 TLB 可以为每个周期提供多个查找服务。 在处理跨越 4K 边界的负载时,英特尔的 Golden Cove 和 Ice Lake 架构确实会产生轻微的损失。
禅4 禅3 金湾 服务器冰湖 错位负载 1个周期 1-2个周期 1个周期 1个周期 错位存储 2个周期 如果 4B 对齐,则为 2 个周期,否则为 5-6 个周期 2个周期 2个周期 未对齐的负载,跨越 4K 页面边界 1个周期 1个周期 3-4个周期 4个周期 未对齐的存储,跨越 4K 页面边界 33-34 个周期 如果 4B 对齐,则为 25 个周期
否则为 27 个周期 24 个周期 25 个周期
未对齐访问的倒数吞吐量
在所有经过测试的架构中,写入都会带来巨大的损失。 即使与前几代 Zen 相比,它们对 Zen 4 的关注度也很高。 我想知道 AMD 是否发现分页访问非常罕见,以至于可以接受更高的惩罚来换取更高的时钟速度。
在过去的三十年里,计算能力一直在稳步超过内存性能。 作为响应,CPU 使用越来越复杂的缓存设置来不断提高性能。 英特尔和 AMD 的高性能内核已采用三级缓存方案。 每个内核都有一个小型 L1 缓存和一个中等大小的 L2 缓存,以使其免受 L3 延迟的影响。 L3 缓存大小为数兆字节,并在一组内核之间共享。
让我们从测试 2 MB 页面的内存延迟开始,从单核的角度了解缓存层次结构。 使用 2 MB 页面并不能代表大多数应用程序将如何访问内存,但它确实更有效地利用了 TLB 容量,并且让我们分别查看缓存延迟和 TLB 损失。
Zen 4 的缓存与 Zen 3 非常相似。 最大的变化是将 L2 大小翻倍至 1 MB,代价是 2 个周期的延迟。 这反过来也将 L3 延迟推高了两个周期。

英特尔的 Golden Cove 在所有缓存级别都有更高的延迟,尽管英特尔的核心私有缓存稍大一些。 Golden Cove 的 L1D 有 5 个延迟周期,或者比 Zen 4 的 4 个周期多一个周期。 一个周期可能看起来不多,但这代表着比 AMD 增加了 25% 的延迟,并且 L1D 缓存将位于所有内存访问的路径中。 L2 的延迟差异较小,其中 Intel 的 1280 KB 缓存与 AMD 的 1024 KB 的延迟为 15 个周期,为 14 个周期。 L2 将看到比 L1 少得多的访问,这里 1 个周期的差异是一个小得多的差异百分比明智。
在 L3 中,延迟存在巨大差异。 英特尔不会在核心时钟上运行环,而是有一个更长的环,为两个 E-Core 集群和一个 iGPU 提供服务。 Golden Cove 从其 L3 获取数据的周期比 Zen 3 和 Zen 4 多近 20 个周期。因此,英特尔使用更大的 L2 来保护内核免受 L3 延迟的影响,并赋予 Golden Cove 巨大的重新排序能力以隐藏 L3 延迟。

如果我们看看真正的延迟,Zen 4 的 5.7 GHz 非常高的时钟速度就会发挥作用。 我们看到 L1D 延迟极低,仅为 0.7 ns。 L1D 命中率通常超过 80-90%,因此大多数内存访问将享受这种非常低的延迟。 AMD 的新 L2 同样令人印象深刻。 Zen 4 的时钟速度提高意味着其 L2 的延迟比前几代 Zen 的 L2 略低。
最后,AMD 将 Zen 4 的 L3 延迟降至 8-9 ns 范围。 Zen 3 通过在 8 个内核和 8 个 L3 片上统一 L3 缓存,增加了单个内核可访问的 L3 数量,但这样做会产生延迟损失。 随着 Zen 4 的时钟速度,L3 延迟恢复到 Zen 2 的水平,但容量增加了一倍。 Zen 4 的 L3 延迟也领先于 Zen 3 的 V-Cache 延迟。 然而,Zen 3 的 V-Cache 变体在缓存容量方面拥有 3 倍的优势。
在内存中,我们看到 1 GB 测试大小的合理延迟为 73.35 ns。 我们不会过多关注这一点,因为内存延迟高度依赖于用户与 CPU 配对的特定 DDR 设置,而且我们测试的分布式特性意味着即使平台支持相同的内存也无法匹配内存设置类型。 我们的 Ryzen 7950X 测试台使用 DDR5-6000 设置,与使用 JEDEC DDR5-4800 的 i7-12700K Golden Cove 结果相比,它具有更好的内存延迟。 反过来,我的(Clam 的)个人 Ryzen 3950X 使用 DDR4-3333 16-18-18-38 在 72.76 ns 时实现了稍低的延迟。 在延迟方面,没有什么不寻常的。
虽然 2 MB 页面有助于有效地使用 TLB 容量,但大多数应用程序使用 4 KB 页面来减少碎片和浪费的内存。 例如,如果您正在缓冲大小小于 2 KB 的数据包,或者缓存一个小文件,则将内存映射为 2 MB 块可能会非常浪费。 但是以 4 KB 的粒度跟踪地址转换会给 TLB 容量带来更大的压力。 为了提高性能,Zen 4 将 L1 DTLB 的大小从 64 个条目增加到 72 个。L2 TLB 的条目数从 2048 个增加到 3072 个。因此 Zen 4 能够缓存 288 KB 内存的地址转换而没有延迟开销,或者12 MB,有轻微的 7-8 个周期损失。
与 Zen 3 和 Zen 2 一样,英特尔的 Golden Cove 也有一个 2048 入口的 L2 TLB。因此,Zen 4 在更大的测试规模下具有更大的延迟优势。 如果我们使用 4 KB 页面访问 Zen 4、Zen 3 和 Golden Cove 上的 L3 缓存但不超过 L2 TLB 容量,我们会看到延迟分别约为 9.47 ns、10.44 ns 和 13.72 ns。 Zen 4 和 Zen 3 都已经大大领先于 Golden Cove,但我们主要在这里看到了原始 L3 延迟的差异。
在 12 MB 或更大的测试大小时,我们开始看到 Zen 4 更大的 L2 TLB 开始发挥作用。 Zen 3 和 Golden Cove 都必须开始进行页面遍历,因为访问会溢出 L2 TLB,这可能会导致多达 4 次额外的内存访问来计算物理地址。 这三种架构在它们的页面遍历器中都有单独的页面目录缓存,这些缓存在更高级别的分页结构中缓存条目,因此它们可能不会在几乎不会溢出 L2 TLB 的测试大小下进行太多额外的访问。
尽管如此,即使是快速的页面遍历也比直接从 L2 TLB 中获取翻译更糟糕,因此区别很明显。 Zen 3 的 L3 延迟在 12 MB 测试大小时上升到 12 ns 以上,而 Zen 4 保持在略低于 10 ns。 Golden Cove 遭受的损失更大,延迟超过 15 ns,尽管我们仍然在 12700K 的 25 MB L3 容量范围内。
因此,AMD 在改善缓存访问延迟方面做得非常出色,而标题周期计数数字并未完全捕捉到这一点。 Zen 4 更高的时钟速度意味着 L1 和 L3 缓存的实际延迟得到了改善,而 L2 缓存的容量翻了一番,延迟回归极小(7950X 为 2.44 ns,5950X 为 2.4 ns)。 通过减少典型应用程序的虚拟到物理地址转换开销,改进的 TLB 容量进一步改善了实践中的延迟。 所有这些结合在一起,使 Zen 4 在所有缓存级别上都比 Golden Cove 具有显着的延迟优势。
虽然内存访问延迟很重要,但带宽也很重要。 矢量化代码可能特别需要内存带宽。 尽管增加了对 AVX-512 的支持,AMD 并没有对核心私有缓存进行重大调整。 每个周期的负载带宽与 Zen 3 和 Zen 2 相似。Zen 4 更大的 L2 是一个受欢迎的补充,因为它应该减少共享 L3 的带宽需求。 但 L1 和 L2 带宽的改进归结为 Zen 4 的时钟速度提高。
Zen 4 的单核 L3 带宽有所改善,平均每周期 27 字节,而 Zen 3 的每周期 24 字节。这非常接近从每个内核到 L3 的接口的理论带宽。 AMD 可能已经增加了 L2 和 L3 之间的队列大小,以至于它几乎大到足以完全吸收 L3 延迟。
使用了不同的内存设置,所以不要比较 DRAM 带宽。 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 未命中,或者更具体地说,L2 未命中。 AMD 仅使用从 L2 驱逐的行(因此称为“受害者缓存”)填充其 L3 缓存,这意味着它不会预取到 L3。 这使得 Zen 4 的 L2 成为能够生成预取请求的最后一个缓存级别。 通过能够根据从 L1 未命中中看到的访问模式生成对 L3 及更高级别的请求,L2 可以在其级别上利用更多可用的内存级别并行性,而不受 L1 未命中生成的内存级别并行性的限制。
我们甚至可以使用 Little 定律估计 L2 未命中队列的大小:
核 利特尔定律计算(队列长度 = 吞吐量 * 延迟) 7950X,禅4 (每个请求 57.29 GB/s / 64B 行)*(78.72 ns,4K 页)= 70.45 5950X,禅3 (每个请求 34.96 GB/s / 64B 行)*(91.04 ns,4K 页面)= 49.72 3950X,禅2 (每个请求 24.33 GB/s / 64B 行)*(95.92 ns,4K 页)= 36.46
显然,这个计算并不完美,因为我们测试了 4 KB 页面到非常大的测试大小,并且没有尝试估计页面遍历会导致对 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 1(+) 评论 分支预测器 大型但未指定的改进
L1 BTB 大小增加 50%,L2 BTB 容量适度增加 为 L2 实现的 TAGE 预测器
L0、L1 BTB 大小翻倍。 L2 BTB 容量增加 75% 更高的密度可能允许更大的 BTB 结构 在缓存上 ~68% 运算缓存容量增加 Zen 1 容量翻倍,但 L1i 容量减半 更高的密度使操作缓存容量增加成为可能 再订货能力 向量寄存器扩展到 512 位以处理 AVX-512 向量寄存器扩展至 256 位 更高的密度使得寄存器文件容量大幅增加是可以接受的 调度和执行 无调度能力变化
没有执行管道布局更改 整数调度队列从 14 个条目增加到 16 个条目
AGU调度器统一
添加了额外的 AGU 管道 通过避免重大的调度布局更改来降低风险 向量执行 对最常用的执行单元没有重大变化 128 位 FP 和向量单元的宽度加倍至 256 位 L1D 带宽 没有显着变化。 仍然是 2×256 位加载和 1×256 位存储 128 位路径加倍至 256 位宽,提供 2×256 位加载和 1×256 位存储 L2 TLB 容量增加 50%,从 2K 条目增加到 3K 容量增加 33%,从 1.5K 条目增加到 2K TLB 是另一个名称的缓存,因此更高的密度也有帮助 L2 以 2 个时钟周期的延迟为代价,容量翻倍至 1 MB 没变
但是,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 改进 最大时钟速度 时钟速度提升 * IPC 改进 Zen 2 关于 Zen+ 15% 3950X 上 4.7 GHz(比 2700X 的 4.3 GHz 增加 9%) +25.3% 禅 3 关于禅 2 19% 在 5950X 上为 5.05 GHz(在 3950X 上增加 7.4%) +27.8% Zen 4 关于 Zen 3 13% 7950X 上 5.7 GHz(比 5950X 增加 12.8%) +27.4%
性能提升绝不仅仅是 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,表明非常深的缓冲区可以跟踪未决缓存未命中。 这些深缓冲区有助于吸收对高速缓存和内存带宽的需求峰值。 另一方面,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 在重命名器上最窄,仍然是 6 宽。 我猜 AMD 发现他们可以通过增加时钟而不是增加核心宽度来提高性能。 重命名器可能是一个对时间非常敏感的电路。 进入的每条指令都可能需要从寄存器别名表中读取两次或多次,并且必须立即反映对寄存器映射的修改,以便稍后进入同一个 6 宽组内的指令。
您如何真正衡量宽度利用率?
考虑到所有这些,我想知道 AMD 可以从某个核心宽度和一组执行资源中挤出多少。 与竞争对手的英特尔内核相比,Zen 4 内核的某些区域看起来非常轻巧。 例如,向量加载和存储的 L1D 带宽只有英特尔使用 AVX-512 可以实现的一半。 即使使用 AVX 限制为 256 位访问,Golden Cove 仍然可以实现比 Zen 4 更多的每个周期的带宽。当然,英特尔不能将 16 个 Golden Cove 内核打包到一个芯片中并在高时钟下运行它们。 此外,英特尔设法在 Conroe 和 Skylake 之间以荒谬的数量增加了 IPC,尽管这两种架构(以及介于两者之间的所有架构)都是 4 宽。 我期待看到 AMD 和英特尔都为后代带来什么。