导言
今年的CNB
大会HotChips
如期启动,没有ARM有点遗憾,原本是想看看N3/V3微架构的,大会涉及到很多的AI主题,后续再聊。本文给大家介绍一下AMD的Zen5
微架构设计。文章按照小模块功能划分,不一定是按照流水线顺序。
L1 Cache
L1 Cache
是8路组相联结构,具有32KB
大小,Cache line
是64bytes
,每个周期最多可以取64byte
(需要2对齐的32byte
块)发到下游的2个decode
流水线。L1 Cache
使用LRU
替换算法,校验方式使用奇偶校验。这里的升级比较大,Zen4是每个周期取最多32byte(2对齐的16byte块)。
分支预测器
Zen5的分支预测错误惩罚是12-18cycle
,L1 BTB
是16Kentry
大小,对于有条件/无条件直接/相同目标的间接都是0预测气泡,对于Return
和多目标的间接都是2cycle
的气泡。L2是8Kentry
,如果L1 MISS
命中L2 BTB
则会有8个预测气泡(这里我也不清楚L2为什么这么长,而L1居然多数那么短的延迟,按照这个大小和延迟大概率不是同时访问L1 BTB
和L2 BTB
)。RAS
做到了52entry
。
间接目标预测器有3072entry
,间接指令一般会有多个目标,预测会根据间接指令的历史从中选择一个目标。对于经常是一个目标的间接指令,一般用普通的BTB来预测结果,延迟也很低,这个特性如果普遍,微架构一般会在硬件上优化这个点。所以也说明代码使用间接类型的指令尽量不使用太多的目标,这对硬件来讲不友好,代码运行效率也低下。
方向预测使用TAGE算法,官方描述是更大。
Zen5的分支预测错误惩罚是12-18cycle
,典型的是15cycle
,相比基于ARM/RISC-V
设计出的微架构惩罚稍微多点。
L1 Dcache
L1 Dcache
是12路组相联结构,具有48KB
大小。每个周期最多支持4个对Cache
操作,最多支持2个load
和2个store
,如果是2个load
,则可以支持512/256/128bit的load
,如果是2个store
,则支持8-256b
,如果仅有1个store
,则支持512bit
。与IC不同,ID使用ECC校验。延迟方面整数LS是4-5周期,FPU LS 7-8
周期。
Op Cache
OC
用于存储之前解码过的指令,可以跳过取指和解码阶段直接到下级的Dispatch
,降低了流水线的延迟,并且提高了流水线的带宽,最多是每周期12条指令出来即6inst x2
。结构是64set,16路,每个set-way可以出6指令。一共能存6K指令或者融合指令(OC的优化技术,感兴趣可以找找论文看看)Dispatch
是8宽度,下面就不说它的特性了。
Decode
双流水线解码32byte x2以支持ICache最多出64byte指令,每个decode流水线有20深度的队列IBQ
用于对预测/取指等单元的解耦。每个解码流水线可以扫描2个IBQ entry
,最多出4条指令。
L2/L3 Cache
Zen5
的L2是每个Core一个统一的16路1M大小的L2,L3则是最多96M,相比较于前代L3那是大大提升了。
MMU
L1 TLB
也在这里说,ITLB
是64entry
全相联的设计,存储4KB
,2MB
,1GB
的页面,DTLB
是96entry
全相联设计,存储4KB
,16KB
,2MB
,1GB
的页面。并且对4KB
的连续页面进行聚合。(这里顺便说一下,ARM是4KB/16KB/64KB
聚合,都是页面粒度的最后一级,也是4聚合)
L2 ITLB
是8路组相联具有2048entry
,存储4KB和2MB页面,这里1GB是不存到L2的,仅存在L1 TLB
,对于指令而言,操作系统基本不会分配1GB的页面,放到L2 ITLB
里面增加访问次数,从这个角度看,放到L1 ITLB
更合理。
L2 DTLB
是16路组相联具有4096entry
,存储4KB和2MB,额外的4路组相连结构的L2 DTLB
存储1GB,具有1024entry
。这里的选择是PPA的平衡,例如页面混装还是分开装的选择,分开TLB装不同页面有利于降低延迟,同时访问增大了功耗。混合装页面有利于资源利用率,一个周期的功耗相对低(但完成一个任务的功耗未必低),可能需要多次访问,这里只是简单聊下,不展开讲,不同的场景这些利弊也可能不同,不是绝对的,但不会差的太远,这里的权衡没有我讲的那么简单。
PWC(page walk cache)
加速页面转换的过程,常用的技术。
整数执行单元
三个主要模块,调度器,执行单元,退休控制。调度器每个周期可以接收8个macro-ops
,并跟踪所包含的micro-ops
的操作数可用性和依赖性执行要求。执行单元包含6个通用ALU
,ALU0-3
有multiply/CRC
能力,ALU3-5
有PDEP/PEXT/shift/branch
执行能力。有四个AGU
单元作为LS地址生成。
3个乘法单元可以处理64x64bit
的计算,需要3个cycle
延迟,计算过程是流水化的,但如果乘法指令有2个dest
寄存器,需要额外的一个cycle
。除法单元典型延迟是8cycle,取决于商位数,每9位商增加一个cycle延迟。
浮点执行单元
浮点执行单元支持32bit单精度,64bit双精度,80bit拓展精度,以及128位、256位和512位压缩整数、单、双和bfloat16
精度向量浮点数据类型。浮点的LS是512b宽度。有96个NSQ(Non-Scheduling Queue
),浮点的调度器是3x38entry
,存macro-op
,每个流水线每周期发1 micro-op
。具体的参阅图片。
总结
文中还有不少内容没写,例如LSU仅描述了Cache,预取这些也没写,各模块的参数请参考图片内容。一些策略性的东西,不宜展开讲,三两句说不明白反而显得很累赘。
如果本文对您有所帮助,欢迎点赞转发收藏
,如果有任何问题请留言指正。CPU微架构问题可以加我微信讨论,点击公众号菜单”联系我
“即可。