HotChips2024:AMD Zen5,CPU微架构介绍

导言

今年的CNB大会HotChips如期启动,没有ARM有点遗憾,原本是想看看N3/V3微架构的,大会涉及到很多的AI主题,后续再聊。本文给大家介绍一下AMD的Zen5微架构设计。文章按照小模块功能划分,不一定是按照流水线顺序。

L1 Cache

L1 Cache是8路组相联结构,具有32KB大小,Cache line64bytes,每个周期最多可以取64byte(需要2对齐的32byte块)发到下游的2个decode流水线。L1 Cache使用LRU替换算法,校验方式使用奇偶校验。这里的升级比较大,Zen4是每个周期取最多32byte(2对齐的16byte块)。

分支预测器

Zen5的分支预测错误惩罚是12-18cycleL1 BTB16Kentry大小,对于有条件/无条件直接/相同目标的间接都是0预测气泡,对于Return和多目标的间接都是2cycle的气泡。L2是8Kentry,如果L1 MISS命中L2 BTB则会有8个预测气泡(这里我也不清楚L2为什么这么长,而L1居然多数那么短的延迟,按照这个大小和延迟大概率不是同时访问L1 BTBL2 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也在这里说,ITLB64entry全相联的设计,存储4KB2MB1GB的页面,DTLB96entry全相联设计,存储4KB16KB2MB1GB的页面。并且对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个通用ALUALU0-3multiply/CRC能力,ALU3-5PDEP/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微架构问题可以加我微信讨论,点击公众号菜单”联系我“即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值