纵有疾风起
人生不言弃

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析

2020-11-05 22:00
来源:微型计算机杂志

原标题:单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析

北京时间2020年10月9日零点,本年度最受期待的一场处理器发布会:“WHERE GAMING BEGINS”(游戏从这里开始)终于召开,AMD公司总裁兼CEO苏姿丰博士正式发布了采用新一代Zen 3架构的AMD锐龙5000系列处理器,并带来了一系列好消息:Zen 3 核心架构的每时钟周期指令数(IPC)性能比上一代Zen 2产品提升了多达19%;锐龙5000系列处理器的单线程性能得到大幅提升,锐龙5000系列处理器中的高端产品在游戏性能上已经全面超越现在的游戏处理器旗舰:酷睿i9-10900K。

如果真如AMD所言,这可是一次堪比从“ 推土机”到Zen之后的又一次重大升级,毕竟尽管Zen、Zen+、Zen 2架构的问世让AMD处理器在总体技术水准上能与竞争对手平分秋色,但在处理器单线程性能、游戏性能上与对手相比一直略有差距,对手也总是拿这两点来打压AMD产品。那么Zen 3真能改变AMD处理器的以上不足,在单线程性能与游戏性能上形成反超吗?AMD又是怎样办到的?AMD Zen 3处理器架构有何神奇之处?

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图

如何实现19%的性能提升?

AMD Zen 3处理器架构技术设计解析

在AMD发布锐龙3000系列处理器也就是Zen 2架构之后,就公布了有关Zen 3架构的相关内容。当时AMD宣称Zen 3相比Zen 2能带来大约15%的IPC提升。考虑到Zen 2架构的锐龙3000系列处理器的频率较低,因此业内普遍估计新的Zen 3架构应该是基于Zen 2架构的小改款,核心架构改变应该不算太多,其性能增加主要来自缓存设计的改变和频率提升。但是,在Zen 3架构和相关处理器发布后,人们惊讶地发现,Zen 3架构是基于Zen 2架构做出了重大架构更新和全面优化的处理器架构,值得深入研究。

Zen 3架构设计一览

从宏观来看,Zen 3架构采用的仍是基于SMT同步多线程技术的设计,每个核心拥有2个线程。在Zen 3上,AMD首先提到的就是全新的分支预测单元,Zen 3架构大幅度加强了分支预测设计,并宣称其为目前最先进的分支预测单元。缓存方面,Zen 3的一级指令缓存和一级数据缓存都采用了8路设计,容量为32KB,Op缓存部分支持4K个指令排序,二级缓存采用了数据和指令混合的方案、8路设计,容量为512KB。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图1

AMD Zen 3架构设计一览

前端指令解码方面,Zen 3每周期可以执行4个指令解码(依旧是4发射设计)或者从Op缓存中提取8个指令——这里需要注意的是,AMD设计Op缓存的意义就在于,将之前使用过的指令结果直接存储在Op缓存中,如果下次流水线中重新出现这样的指令,那么Zen 3架构将会直接从Op缓存中取出结果进行宏指令执行,每次可以提取并派送8个结果。考虑到Op缓存可以存储高达4K指令,因此有比较大的几率可以实现更宽的指令分派并允许更多的指令进入后续的执行部分,这是一个非常巧妙的方案,后文我们还有针对这部分和Zen 2架构的对比。另外,对整数或者浮点数据而言,每周期可以分派6个宏指令或者微指令,这里Zen 3依旧采用了协处理器执行模型,且可以分别同时执行整数和浮点计算。

Zen 3的执行部分也经过了加强,现在Zen 3的整数执行单元有4个整数ALU单元、1个带分支预测的ALU单元、3个AGU单元和1个专用分支预测单元。由于有3个AGU单元,在地址计算方面,Zen 3每周期可以进行3个地址计算。浮点计算部分是Zen 3加强的重点之一,Zen 3现在拥有6个浮点计算单元,每周期可以执行2个256bit的FP乘积累加运算单元(FMAC)。FMAC计算是目前最重要的浮点计算基础方法之一,包括常见的卷积运算、点积运算、矩阵运算、数字滤波器运算、多项式的求值运算等都可分解为数个 FMAC 指令来进行求解。因此高效率、加强的FMAC单元可以有效提高处理器在这些计算中的效率。

最后则是内存单元部分。Zen 3的内存单元现在每周期可以执行3个数据加载,或者执行1个数据加载和2个数据存储,这样的混合模式也提高了数据存储效率。从Zen 3的宏观架构来看,AMD试图将Zen 3优化为一个更高效率、更低延迟和更为符合现代计算任务的全新综合体,这一点在和Zen 2架构的对比中更明显。

对比Zen 2:19%的IPC从何而来

在之前的发布会上,AMD宣称Zen 3相比Zen 2带来了大约19%的IPC提升,并且给出了一些详细的数据。这一点在本刊之前的文章中也有一些解释,包括Cache Prefetching(缓存数据预取)贡献了2.7%的力量;Execution Engine(执行引擎)的改进贡献了3.3%;更先进的Branch Predictor(分支预测)贡献了1.3%;Micro-op Cache(微操作缓存)的改进贡献了2.7%;处理器采用了新的Front End前端架构,为性能提升贡献了多达4.6%的力量;在整数运算单元上,Zen 3架构提升了Load/Store(数据载入和存储)带宽,贡献同样高达4.6%,这些数据加起来高达19%。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图2

三大部分的改进带来了19% IPC的提升

不过,由于当时AMD没有公布每个部分详细的设计细节,因此这些性能提升如何还有待探寻。现在,AMD给出了整个Zen 3架构设计的简图,并给出了每个部分比较重要的改进以及相对于Zen 2架构的对比,人们终于可以一窥Zen 3内部架构设计的奥秘了。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图3

Zen 3和Zen 2架构对比

从Zen 3和Zen 2的架构简图来看的话,前端部分,Zen 3的最大变化在于使用了Op排序单元和分派单元2个单元替换了原有的Micro-Op排序单元。具体来看,通过L1指令缓存、分支预测、解码、Op缓存后,Zen 2可以每周期给出4个指令或融合后的8个指令(此处AMD将其描写为Fused Ins,但应该还是Macro Ops),Zen 3则是每周期给出4个指令或8个宏指令(此处AMD直接写为Macro Ops)。这一部分看起来似乎没有变化,但是AMD宣称微操作缓存部分进行了改进,带来了2.7%的性能提升。另外,AMD数据显示,Zen 3相比Zen 2,在缓存数据预取和分支预测部分带来了2.7%和1.3%的IPC提升。这部分内容后文还有详细解释。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图4

19% IPC提升和每个部分的关系

值得注意的是,Zen 3相对于Zen 2,在前端架构设计上的重要变化在于Zen 2的指令进入了微指令排序单元(Micro-Op Queue)后,直接输出6个微指令给执行单元的整数或者浮点部分。但是,Zen 3经过指令排序单元(Op Queue)和指令分派单元(Dispatch)后,每周期可以输出6个宏指令给执行单元的整数部分或者6个微指令给浮点单元。

在这里,AMD所定义的“宏指令”可包含多条微指令,比如1条移动到某位置的内存数据,并和另外位置数据直接相加的指令可以使用宏指令完成,但是实际上在执行时需要进一步解码为多条微指令,包括定位地址、取得数据、移动数据、相加等。因此,Zen 3允许宏指令最多以每周期执行6个的方式发送给整数执行单元,使得前端最终输出给整数执行单元的实际指令吞吐量大大提升(整数执行模块的性能和指令并行度呈现高相关性,因此更多的指令有助于实现高效率的并行)。综合来看,前端部分的改进是Zen 3 IPC提升的最重要部分之一,AMD数据显示高达4.6%。

在执行引擎的整数部分,Zen 2拥有7个整数排序单元,Zen 3精简为4个,但是每个单元的性能有所变化。后端执行部分,Zen 2只有4个整数ALU单元和3个AGU单元,Zen 3则同样使用了4个ALU(其中1个有分支预测功能)、3个AGU以及1个额外的分支预测单元。AMD解释为,在执行部分新加入分支预测单元可以提供更多的分支吞吐量,并带来关键延迟的降低。

在执行引擎的浮点部分,Zen 2架构只有1个浮点排序单元,Zen 3架构提升至2个。后端执行部分,Zen 2架构拥有2个MUL和2个ADD单元,总计4个浮点计算单元。Zen 3架构则改为2个ADD单元不变,但是2个MUL单元同时也可以执行FMAC计算,另外还增加了2个F2I单元,主要用于将浮点数据转换为整数,其中1个用于地址计算,另1个专用于转换计算,总共6个浮点计算单元。根据AMD的数据,综合了整数和浮点部分的性能提升后,新的执行引擎架构设计带来了3.3%的性能增幅。

在数据存储和读取部分,AMD提到Zen 2每周期只能完成2次数据读取和1次数据存储,Zen 3将其提高为每周期3个数据读取和2个数据存储。AMD宣称数据存储和读取部分的改进也带来了高达4.6%的性能提升。上述所有的改进综合起来,实现了前文提到的总计19%的IPC提升,值得一提的是,这个数据并不包含频率或者其他方面的增益,是AMD采用了8核心、4GHz固定频率的Zen 3架构处理器对比相同配置的Zen 2架构处理器,综合了25个测试后得出的结果,其中最低的性能提升在9%,最高的在39%,其算数平均值是19%。AMD也给出了相关的测试对比。其中提升最大的部分依旧是11款游戏,包括《 CS:GO》《英雄联盟》《绝地求生》《战地4》《地铁:最后的光芒》等,这些游戏的性能提升最低都高达20%。

从前端到后端:详细解读Zen 3架构进化

在基本了解了Zen 3架构的宏观内容后,AMD还给出了从前端、执行到后端各个部分比较具体的性能提升情况。在整个指令拾取和解码阶段,AMD的设计目标是更快速的指令拾取,尤其是在面对分支预测和占据比较大空间的代码的时候。其中分支预测器依旧是Zen 3设计的重点之一。

之前Zen 2发布时,AMD宣称自己采用了基于神经网络的分支预测器结构,还采用了TAGE分支预测器(Tagged geometric length predictor标记几何长度分支预测器)的设计。从分支预测器的发展来看,这几乎是AMD能够使用的最先进的分支预测器了。

在Zen 3上,AMD继续使用基于TAGE架构的分支预测器,但做出了相当多细节上的改进。比如重新分配BTB(分支目标缓冲器)以获得更好的预测延迟。之前AMD在Zen 2架构上加大了BTB,其L0、L1、L2 BTB分别拥有16个、512个和7K个条目(entry)。在Zen 3上,L1 BTB进一步提高至1024条目,L2 BTB反而降低至6.5K条目。另外,Zen 3还使用了更大的ITA(Indirect Target Array,间接目标阵列),容量提升至1.5K,之前Zen 2为1K,更大的ITA有助于降低错误预测率。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图5

Zen 3前端设计总览

除了上述内容外,AMD在Zen 3的分支预测器部分还反复提到更低的分支预测错误延迟和“无气泡”模式。其中前者的改进主要来自通过前端宏指令发射的设计,这带来了流水线级数的降低,从而间接降低了分支预测错误后重新填充流水线的损失。后者提及的“气泡”,是指在现代超标量流水线处理器中,如果不同指令之间出现互相等待结果的情况,并且分支预测器又没有给出分支预测信息的话,那么整个处理器都会停摆来等待相关指令的完成,由于这个等待周期的存在,程序员形象地称之为“气泡”。“气泡”会带来处理器性能的显著降低。现在,AMD采用了新的“无气泡”模式的分支预测器,会在很大程度上避免这种问题的产生——即使这种问题已经非常少见了。

另外,有关L1指令缓存,AMD提高了其拾取指令的速度和利用率。在Op缓存方面,AMD进一步加强了Op缓存拾取的速度,同时还可以在Op缓存和指令缓存之间更快速的切换,这有助于提高指令读取的效率。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图6

Zen 3在前端分支预测、L1缓存、Op缓存方面的改进。

执行部分:更宽、更快

AMD在执行部分做出的改进也非常显著,整个执行单元主要是效率的提升,而不是规模的扩张。先来看整数部分。AMD在Zen 3上使用了4个整数排序单元,每个整数排序单元分别拥有24个条目,4个一共96个条目。相比之下,之前Zen 2架构拥有7个整数排序单元共计92个条目。新的Zen 3架构稍微扩大了整数排序单元的条目数量。随后的整数寄存器部分,Zen 3拥有192个条目空间,Zen 2则只有180个,也只是小幅度增加。后续执行部分,Zen 3的整数执行部分每周期够执行10个操作,之前的Zen 2只能执行7个,增加了大约42%,这是增加最显著的部分。ROB部分,Zen 3也进一步扩大至256个,之前Zen 2只有224个。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图7

Zen 3在执行部分的改进总览

从AMD在Zen 3的整数部分设计来看,AMD没有大规模增加计算资源,而是通过微调和对计算单元的合理设置,比如依旧采用4个ALU设计、共享ALU和AGU调度器以跨工作任务平衡负载、没有大幅度增加寄存器端口或者旁路网络输入端口等,但是通过这些优化尤其是执行部分每周期可执行操作数提升了42%,带来了整数部分性能的进一步提升。一般来说,整数部分的性能表现差异主要来自于指令级并行是否能够非常好地完成,之前Zen 2的表现非常不错,Zen 3自然不会有太大的问题。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图8

整数执行部分的改进情况细节,整数执行部分没有进行大幅度的提升,重点在于降低延迟、提高效率。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图9

整数执行部分更宽、更高效。

在浮点部分,Zen 3的设计目标是通过更低的延迟和更大的结构来实现指令级并行,同时提高执行效能。具体的改进包括增加拾取带宽、单独的F2I以及存储单元、更大的排序窗口、更快的4周期FMAC单元等。另外,AMD还提到Zen 3的MUL和ADD单元还可以实现整数文件存储和浮点寄存器文件处理,并且这两者是独立运作的,有助于同时执行不同的操作,来获得更大的数据吞吐量。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图10

浮点执行部分的改进情况一览

最后再来看看读取和存储单元两个部分。这个部分AMD的设计目标是提供更大的结构和更好的预取设计,以支撑更大规模的指令集并行。鉴于此目标,AMD在这部分做出了非常重大的改进。首先是存储排序单元从之前的48条目提升至64条目,L2 DTLB则保留了2K个条目的设计,这有助于提高这部分运作的效率。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图11

读取和存储单元的改进情况一览

在32KB、8路的L1缓存方面:缓存Ops提升至之前设计的3倍,每周期可以执行3个操作,但是在执行浮点操作时,每周期则只能执行2个,执行存储操作时更是回落至每周期1个操作。另外,AMD为读取和存储单元添加了新的指令,用于高效率复制较短的字符串,还改进了跨页面边界的预抓取操作的速度,以及更好的针对存储、加载转发关系的依赖等。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图12

读取和存储单元的改进细节

通过前文的介绍,AMD在Zen 3在前端、执行、读取和存储三大部分最重要的改进总结如下:

前端部分的改进包括:

2倍容量的L1 TBL,现在尺寸是1024单位。

提高了分支预测单元的带宽

分支预测单元的“无气泡”模式

可以从错误预测中更快速的恢复

Op缓存更快的排序速度

更细粒度的Op缓存管道切换

执行部分

整数部分拥有专用的分支预测和地址选择器

整数部分拥有更大的执行窗口(增加了32个单位)

降低了整数和浮点指令通过Ops选择的延迟

浮点计算部分现在变化为6个单元

浮点部分MAC计算降低了1个周期

读取和存储单元

更高的读取和存储带宽(分别增加了1个单位)

更为灵活的加载和存储操作

改进的内存依赖性检测

TLB部分的walker表从2个增加至6个

总的来看,AMD在Zen 3架构上的改进是多方面的,这些细微的改进加起来共同带来了整个Zen 3高达19% IPC的提升。从2017到2020,AMD通过Zen奠定的基础以及Zen 2、Zen 3两代架构的继续努力,终于实现了CPU微架构效能的大提升,值得庆贺。

锐龙5000:全新的SoC架构设计

在AMD的定义中,Zen 3是CPU微架构的代号,CPU微架构要联合其他部分,一起组成整个锐龙5000处理器。和之前的Zen 2一样,AMD将处理器设计为CCX、CCD、Infinity Fabric以及cIOD等多个模块,最终实现的锐龙5000处理器是以SoC的形式存在的。

现在,1个锐龙5000处理器将包含1个或者2个CCD,搭配1个cIOD来实现。CCD中包含了8个CPU核心组成的CCX和一个Infinity Fabric单元。其中前者采用Zen 3架构,8核心16线程,后者则执行总线功能,实现外部数据联通。对cIOD来说,内部同样包含了针对CPU通讯的Infinity Fabric总线,以及内存控制器、IO Hub控制器等设备。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图13

锐龙5000的一种配置方法,1个CCD搭配1个cIOD,最多为8核心。

以AMD给出的2个CCD搭配一个cIOD的“2+1”处理器为例,两个CCD都可以通过Infinity Fabric总线以写入16Bit/周期、读取32Bit/周期的速度和cIOD的Infinity Fabric总线连接,AMD还为cIOD的Infinity Fabric总线定义了fclk频率。接下来,cIOD的Infinity Fabric总线又会以32Bit/周期的速度和Unified Memory Controller也就是统一内存控制器进行连接,同时以64Bit/周期的速度和IO Hub控制器连接。其中,统一内存控制器的频率被称为uclk,IO Hub控制器的频率被称为Iclk。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图14

锐龙5000的另一种配置方法,2个CCD搭配1个cIOD,最多为16核心。

继续深入每一个CCD的话。可以看出,Zen 3相对Zen 2的最大变化在于CCX采用了8核心16线程,32MB L3,之前的Zen 2则是每个CCX 4核心16线程,16MB L3。AMD也特别提到,新的设计使每个核心可以访问2倍的L3缓存,这样做可以加速核心和缓存之间的通讯,对游戏应用非常有益,另外还降低了访问内存的次数和延迟等。

更具体一些来看的话,AMD还给出了更详细的Zen 3和CCD的缓存层次结构介绍。首先是缓存体系,Zen 3的每核心私有512KB L2缓存,同时8个核心共享32MB L3缓存。其中,L2缓存通过加强的读取和存储单元实现了带宽的提升(前文已有介绍),这也有助于提高数据预取性能。在缓存模式设计上,Zen 3的L2和L3缓存采用了部分非包含式,L2中只包含了有关L3指针部分的筛选和快速缓存数据的标签信息,换句话说,L2包含了L3部分信息的“标签”,这有助于CPU在未命中L2缓存时通过查询L2的方式快速寻找到L3内的信息,算是一个比较常见的优化做法。在信息处理方面,Zen 3每核心可以处理64个未在L2中命中的信息并转而向L3查询,L3一次可以处理192个未命中信息,并转向内存查询。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图15

Zen 3架构在8核心配置情况下的缓存层次结构和特性

在缓存带宽方面,核心每周期可以执行向32KB L1指令缓存的32Bit缓存拾取,针对32KB的数据缓存模式比较复杂,其模式是前文中提到的处理器对普通数据每周期可以执行3个操作,执行浮点操作时每周期则只能执行2个,执行存储操作时更是回落至每周期1个操作,每个操作都是256bit。L1数据缓存和L1指令缓存到L2的带宽、L2缓存到L3缓存、L3缓存到Infinity Fabric等外部设施的带宽分别都是每周期32Bit。

另外在Zen 3的CCD中,由于32MB L3要面对8颗核心,因此受制于较大的芯片面积占比,很难使用传统的类crossbar总线。如果基于L3缓存分片区通讯,并采用mesh架构的连接方式又不太符合AMD目前介绍的情况。因此AMD在CPU核心和L3缓存的连接方面采用了常见的环形总线,也就是设计了通讯环来挂接每个CPU核心并连接至L3的各个区块。环形总线的优势在于设计简单、实现方便,在优化得当的情况下能够带来多核心之间数据通讯、缓存信息拾取等比较高效的信息传输。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图16

Zen 2和Zen 3在CPU内部结构上存在显著差异,Zen 3的每个CCX拥有8个核心和32MB L3缓存。

最后再来看看Zen 3和锐龙5000系列处理器在安全性和新指令集方面的内容。安全性方面,由于之前包括英特尔“幽灵”和“熔断”在内的CPU安全漏洞接连出现,因此现在人们也颇为关注处理器的安全设计。AMD在Zen和Zen 2架构设计上引入了SME、IBC、GMET、UMIP等安全特性,并得到了市场的广泛好评后,在Zen 3上,AMD在继承之前的安全特性的基础上,又引入了名为CET(Control-flow Enforcement Techonlogy,控制流执行技术)的新安全方案,主要用于针对ROP攻击。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图17

锐龙5000系列处理器依旧采用AM4接口,最多16个核心,目前可搭配500系主板使用,未来也可在400系主板上工作。

在指令集方面,之前AMD在Zen和Zen 2架构的处理器上,也添加了包括ADX、SMAP、SHA1、CLWB、QOS等指令,现在在Zen 3上,AMD加入了新的VAES/VPCLMULQD,正式宣布了对AV2X指令集的兼容和支持,使得处理器在运行支持AVX2指令的应用时,效能进一步提升。

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图18

锐龙5000系列处理器新增了不少安全指令

单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析插图19

锐龙5000增加了对AVX2指令的支持

从16核心到6核心

首发产品有四款

最后,为了让用户能方便地使用Zen 3处理器,AMD表示现有500系芯片组主板,如X570、B550、A520等主板只需将BIOS中的AGESA(AMD Generic Encapsulated Software Architecture,AMD通用封装软件架构)升级到1.0.8.0,就能让Zen 3处理器通过自检、引导。当然如果想获得更好的体验,则需用户将AGESA升级到1.1.0.0或更新的版本。

读完以上AMD Zen 3处理器的技术详解,有没有感觉很过瘾?如果您想阅读更多深度技术文章,请在各大应用商店下载“知识星球”App,关注“MC-1981”知识号,您就能读到更多好文。返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()

未经允许不得转载:起风网 » 单核性能、多核性能全都碾压对手!AMD Zen 3处理器首测之技术解析
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录