Zen5 8发射的全新微架构 先行分析
Zen5 8发射的全新微架构 先行分析

有言以对默无声希望亲眼见到人类步入星际文明的硬核科幻迷、RPG游戏开发者61 人赞同了该文章
AMD 将 Zen 5 架构称为“全新微架构”。也就是说,它不是对 Zen 4 的渐进式改进,而是像Zen 3 那样从前端到后端全都换血洗髓。
AMD 透露,他们预计整体IPC 10~ 15%。单线程性能是 IPC ×频率,考虑到Zen4的最高默认频率5.7GHz,提升频率的幅度有限,此前的小道消息称性能提升22-30%,也就是说频率可能提升6-13%,频率达到6-6.4GHz。


前端
Zen5 和此前所有Zen架构总框架一样,采用分支预测和指令缓存分离的取指架构,微指令缓存与解码器可交替运行。
分支预测与指令获取
PPT显示Zen5 在分支预测器下有三点改进,即零气泡条件分支(更少的流水线气泡)、更高的分支预测精度和更大的 BTB(分支目标缓冲区)。
零气泡条件分支
Zen架构的分支预测器,一开始是 神经网络(感知机),自从Zen2 开始 引入了TAGE预测器,一直是L1/L2 二级BTB结构。
Zen的分支预测器从一开始就具有零气泡条件分支功能,可以更新L1 BTB中的分支目标,而且Intel 更早就有了零气泡条件分支预测能力, AMD 的Zen3在分支预测速度上做了改进,能更快速更新L1 BTB的数据,减少更多的气泡。
更高的分支预测精度
分支预测器的改进对Zen 4的性能的增益贡献最大,也就是说一般分支预测器越好的处理器,性能越高(当然要考虑其它方面)。
更准确的分支预测可以减少处理器因分支错误而导致的流水线停顿(气泡),从而提高了处理器的吞吐量。
更大的 BTB
Zen 4具有2*1536个条目的1级BTB和2*7168个条目的2级BTB。
Zen5更大,可能是2*2048个条目的1级BTB和2*10K+个条目的2级BTB。
2 basic block fetch
PPT显示,Zen5 有 2 basic block fetch。前端的吞吐量得到改善,basic block就是CacheLine取的东西,2 basic block的大小一般是2×64字节,从字面意思上看Zen1就已经是2 basic block fetch了,所以这个东西指的应该是具有2 Taken取指单元,可以每个周期采用两个分支指令以及执行两个分支指令。
但兆芯/半人马的CNS、Intel的Sunny Cove都可以展开循环队列中小循环语句中的分支指令,从而每周期执行两条分支语句,在ARM、苹果、可能还有华为的8发射(6发射没有),2020年后的现代的的高性能6发射CPU基本上都可以通过L0 BTB来展开小循环语句中的分支指令,从而每周期执行两条分支语句。
实际上,Zen4就已经可以每周期执行两条分支语句了,“如果分支驻留在同一个 64 字节对齐的Cacheline中并且第一个分支是条件分支,则每个 BTB 条目最多可以容纳两个分支。----AMD 系列 17h 处理器优化手册”。
Zen4在后端它有2个分支执行单元,也许这里的2 basic block fetch的意思是更稳定,更快,更高吞吐量的对更深更宽的2 Taken 采取/不采取的分支树,进行更精准预测和取指?
CISC解码
CISC 指令集的主要缺点是指令解码成为瓶颈。将每个可变长度指令转换为固定长度微指令的这一额外步骤导致了较高的解码延迟和更多的功耗,从而影响了到后端乱序执行单元的指令调度带宽。
Zen5的解码器数量和Zen1234一样是4个,对于SIMD指令,每个周期只能处理4条指令,Zen架构的解码器从一开始就与Intel 的解码器不同。
此前 AMD Zen上的n个多用途解码器具有比 Intel 传统的 1 复杂 + n-1 简单解码器设计更好一些,虽然都是每周期4条指令,但具有更高的解码带宽。 Intel 的这种解码器设计仍然限于每个时钟周期 16 字节的解码吞吐量,这在许多情况下是不够的,特别是运行256bit的AVX2向量指令。
对于提升解码性能,更多地关注改进解码器的可解码指令长度可能是更有效的解决方案。
而Zen5的一对一解码的可解码指令长度是512bit,比Zen2/3/4的256bit要长一倍。它的解码吞吐量可能达到了64字节/周期。
AVX 和更高版本的指令使用 VEX 编码方案,其中包含有关指令长度的信息。这开启了折衷的可能性,其中解码器对于使用 VEX 和 EVEX 编码的指令比对于最复杂的非 VEX 编码具有更高的吞吐量。
但对于普通的非AVX指令,似乎每个周期仍然只能处理4条指令,仍然是16字节/周期。
Intel 和 AMD 处理器的取指和解码单元都限制为 16 字节或每个时钟周期 4 条指令。这一瓶颈在多代微处理器中都存在,主要是由于指令长度检测的复杂性造成的。
对于具有长循环的 CPU 密集型指令来说,每个时钟周期的最大吞吐量为 4 条指令或 16 字节(以较小者为准)的限制很可能是一个瓶颈。
为此Intel和AMD都利用了微指令缓存来减轻对非AVX指令的解码负担。如果不使用微指令缓存,则Intel在Tremont上使用多个解码簇进行乱序解码,获得了最大为2×16字节/周期的非AVX指令的解码吞吐量。AMD也有类似的设计来降低非AVX指令解码延迟。
但这种方法不是绝对是好的,一对一解码通常是最快的,如果一对一解码出的微指令往往大小不一,那么同一个寄存器宽度的向量乱序执行单元很难保证没有气泡的执行,这反而会降低性能。所以如果后端没有引入执行不同宽度微指令的多个乱序执行簇,那么通常是像Tremont这样对256bit的AVX2一对二解码和对128bit的SSE/AVX一对一解码,保证微指令的解码宽度为128bit。
PPT上说Zen5的指令融合有进步,让吞吐量提高。
重命名和分派
Zen5有8宽重命名,而Zen 4是6宽。
乱序执行
Zen5的具有更深的执行窗口,ROB大小根据某些小道消息可能达到了500+。
而Zen4的ROB为320。
整数和浮点执行引擎
实际Zen5和Zen4的整数浮点执行在延迟上没有太大变化,除了512bit evex指令涉及load/store操作的加法、除法延迟降低了大约1~2个周期,其余类型的指令执行延迟基本一样。
整数与分支
Zen5 整数流水线上有 6 个 ALU,Zen4有 4 个。
Zen5 流水线上有2个分支执行单元,Zen4有 2 个。
浮点与向量
Zen5的浮点有4个512位宽的FP/AVX单元,Zen4也是4个。AVX512指令解码为单个微指令。
Zen5的融合乘加(fma)执行具有 2×512 位吞吐量和 4 个周期延迟,而Zen4是2×256 位吞吐量和 4 个周期延迟。
乱序执行流水级
Zen5可能具有18~20级流水线,和Zen4一样有15~18个周期的分支预测失败惩罚,Zen 1-3 的平均误预测损失约为 18 个时钟周期。它们为缓存访问分配了4个阶段,因为它们的执行延迟看上去没什么区别。
AGU与Load/Store单元
Zen4有3个 AGU ,每个AGU都能够处理加载或存储,PPT显示Zen5有4个AGU,还有2个只能存储的Store AGU。
Zen5有 更大的DTLB(数据翻译后备缓冲区),意味着将有助于改善对内存翻译缓冲区大小敏感的中轻度负载应用的性能。
缓存层次结构与存储器设计
L1I 还是32KB。
与当前Zen4的 32 KB 相比,Zen5有更大的 48 KB L1D 缓存。
每个核心的专用 L2 缓存大小仍为 1 MB。
也许AMD将每个CCX的最大核心数从8个增加到16个。CCD将拥有16 个“Zen 5c”,而不是分布在具有较小 L3 缓存的两个 CCX 中。
这些Zen5c 是不同的sku,没有512bit位宽浮点执行单元,而是256bit位宽。
AMD正在桌面端和服务端应用台积电N4节点(可能是N4X,性能比N4提高6%)。
基于“Zen 5”的移动处理器可能基于更先进的台积电N3E节点。
结论
这些PPT可能都是对的,因为和某些东西对上了,但它只展示了改变比较明显的表面部分。更深层次的改变有待挖掘。
Zen架构演化到Zen5这里,对于很多年前的传统的低IPC应用的效益越来越小了,例如2012年前的3A游戏。这些应用往往对缓存和内存延迟敏感,它们可供每周期并行执行的指令数很少,而且可能都是32bit或64bit的传统整数/浮点指令,没有用到向量指令。
因此你主要使用很多年前的低IPC应用,而且买了Zen4,其实不用太担心,单核性能可能就提升10%左右。你应该去买intel的arrow lake,它对这方面更好一些,因为改善了内存和缓存延迟,传统游戏应该能跑的更高。
如果你是服务器高性能计算用户,你应该不用发愁,Zen5对这些高IPC缓存带宽瓶颈的应用有比较好的作用。arrow lake可能在能耗比上不太行。
因此你主要使用最近的高IPC高吞吐量为主的应用,例如 最新版本的工业软件,Zen5单核性能可能会提升25%~35%左右。