无敌的Zen3,AMD Ryzen 5950X首发测试

您所在的位置:网站首页 5950x核心电压143是什么 无敌的Zen3,AMD Ryzen 5950X首发测试

无敌的Zen3,AMD Ryzen 5950X首发测试

2024-01-09 11:51| 来源: 网络整理| 查看: 265

Zen3架构介绍:

在AMD真正的翻身之作Zen2出来之后的第二年AMD又推出了它的改进版Zen3。这次的架构不再是一个单纯的改进版,而是一个融合了AMD各代处理器之长的全新架构,改进幅度相当的大,前所未有。下面我就简单的来介绍一下这次的具体改进。

Overall

取指部分

取指部分由分支预测器(橙色部分),控制给出预测的下一个指令地址,然后指令拾取(Fetch)拾取指令进入L1指令缓存。

L1指令缓存和之前一致依然是32KiB,8路组相连,32Byte每周期的带宽。但是改善了利用率和预取。和Intel明年将要发布的RKL相比,带宽上有翻倍的优势。

之后有一个指令字节缓冲,L1指令缓存以32Byte每周期的速度填满这个缓冲,这次AMD没有给出这个缓冲的大小,估计保持在Zen2水平,也就是16Byte*20,15Byte是X86指令的最大长度,所以这个缓冲其实是作为之后解码部分的取指窗口而存在的,能够保证装下至少一条X86指令。指令到达前面的指令字节缓冲之后,Pick部分则检查指令字节缓冲的前两个窗口,确定出其中x86指令,送给后方的解码器。

分支预测方面各个规格上的提升中规中矩,预测器类型依然是TAGE,L1 分支目标缓冲(BTB)从512槽位提高到1024槽位,而L2 BTB则从7K降到了6.5K,整体BTB的规模不变,但是因为第一级的容量增加,实际上降低了分支预测的延迟。间接目标阵列(ITA)从1K提高到1.5K。除开规格上的提升,分支预测部分最大的改进在于,消除了绝大多数的分支预测气泡,分支预测气泡会影响乱序核心的工作,导致分支前后指令无法完美乱序执行,这对于很短的分支来说(比如很短的循环)有很大的改进。

解码部分

解码部分从传统解码器开始,每周期解码最多四条X86指令,每条X86指令解码出一条或多条Macro-op宏操作,送进Micro-ops queue。(感觉叫Macro-ops queue是不是比较好?)

Macro op:K5开始AMD为了性能引入更先进的精简指令集(RISC)内核(其实就是自家的RISC处理器Am29000)。这个精简指令集的内核有一套自己的指令集,在X86处理器中,AMD将他称为RISC86,RISC86指令也就是我们所说的Macro op。X86指令进入解码器之后,解码器就会将他翻译为一个或者多个Macro op。

Micro op:Macro ops依然不是直接可以直接给硬件执行单元执行的指令,硬件执行单元需要更细的指令,比如需要访问内存中数据来作为操作数的加法Macro op,那么我们需要让这个Macro op生成一条控制加法器的指令,一条控制访存单元(LSU)的指令,生成的这些指令就是Micro op。一条Macro op可以翻译为一到多条Micro ops。

μop :Intel同样为了高性能引入了RISC内核,但Intel直接将X86指令解释为类似AMD的Micro op的东西,Intel将他称为μop。

传统上AMD把X86指令分为三类,fast path single,fast path double,micRocode。fast path single解码出来一条Macro op,fast path double两条,这两种都可以由任意一个解码器在一周期内解码完成,但不能超过6 Macro op的总带宽。micRocode则需要由micro code rom来生成两条以上的macro op。从Zen2开始因为SIMD扩宽为256bit,不再需要拆分执行,所以fast path double的指令已经极难看到了。

Intel的RKL的解码器由一个复杂解码器和四个简单解码器组成,生成μop数量大于1小于4的指令由复杂解码器解码,等于1的可以由任意解码器解码,总计5 μop的解码器总带宽。大于4的则由MSROM解码。

解码出来的这些宏操作在被送往执行单元之前,会先被堆栈引擎stack engine和memfile处理,stack engine主要处理push、pop、call、ret之类的堆栈相关的指令,memfile则通过寄存器重命名特性来处理寄存器移动mov reg,reg之类的指令,实现Register move eliminate 寄存器移动消除的效果,节约了之后Dispath的带宽、执行单元占用以及功耗。而需要送往执行单元的宏操作,则由分配器Dispatch送往整数或者浮点执行单元,最高六个宏操作每周期。

与此同时,Macro-ops cache宏操作缓存,会把解码器出来的Macro-op缓存起来,最多可以提供4K个位置给Macro-op。一旦遇到合适的情况,便会停止传统解码器,交由Macro-ops cache来为之后的流水线提供Macro-op,带宽峰值可以达到传统解码器的两倍,而且还能节约电力。Macro-ops cache容量和速度都没有变化,但提高了拾取操作排队的速度。相对于Intel下代RKL,容量上有近两倍的优势,带宽上也有33%的优势。

同时Macro-ops cache和传统解码器之间的切换也变得更快,因为切换速度快了,Zen3的切换条件也给的更加细致宽松以便让切换更加频繁,提高Macro-ops cache的利用率。

乱序引擎

从前一阶段的分配器出来的宏操作,会根据类型被分别送到整数和浮点引擎,他们都被一个统一的Reorder buffer重排序缓冲区跟踪记录,重排序缓冲区会记录指令和它需要的寄存器、目标操作数、结果、执行状态,并且保证指令按顺序被retire回退。Zen3将ROB的大小从Zen2的224提高到了256,但距离RKL 352还有相当的差距。ROB的retire带宽则是AMD的传统强项,Zen2是8,Zen3没有透露,但肯定也大于8,RKL只有5。

Rename重命名将Physic Register File物理寄存器堆中的寄存器重命名为指令所需的X86架构寄存器。Rename带宽Zen2的整数和浮点分别是6和4,而Zen3实测提高到了6和6,Intel没有分成整数和浮点两块,RKL上带宽是5。

Reservation station/Scheduler保留站或者说调度器,检查源操作数就绪状态,如果就绪,则被送往执行单元执行。执行完毕的指令由重排序缓冲区顺序完成。整数方面的保留站使用了全新的设计,这个设计类似早年间AMD自家的K7-K10这一系列的架构,每个ALU搭配一个AGU或者BR分支指令单元共用一个保留站,每个整数保留站的大小都为24槽位,总计96槽位,这样做使调度器的利用更加的均衡。在Zen2中4个ALU都有自己独立的保留站,每个16槽位,三个AGU则共用一个保留站,28槽位,RKL的不详。浮点这边的保留站大小没有公开,但数量从之前的1个变为2个,考虑到浮点发射数量从4变为6,这个改变非常的有必要。

整数寄存器堆的大小从180槽位变为192槽位,浮点不变。

最后AMD提到了使用了一个新的Picker(不太懂这是什么)提高了整数Pick带宽?

这里和去年一样,我们来实测一个ROB的大小,不过今年不再使用aida64的工具:

3950X5950X

可以看到都在各自官方数据的点上出现了延迟抬升,符合预期。

接着我们再测一下峰值IPC:

5950X峰值IPC3950X懒得测了,借用去年的3900X的

自从Zen1第一次实现X86 5发射的纪录之后,Intel的桌面端终于将在明年出世的RKL上追上AMD,但现在Zen3出世又打破了这个纪录,成为第一个实现不依赖宏融合真实达到6发射的X86处理器。

这里Zen2我借用了去年3900X的图,因为Zen2上要调整指令组合到跑满他的IPC太过于困难了,需要浮点整数混合仔细调整。Zen3因为分支部分消除了大部分的气泡,而且单单使用整数就能轻松跑到峰值,所以指令啥的随便凑凑就能跑到6的峰值。

整数执行单元

整数执行单元,接收从RS过来的micro op并执行。这部分的改进一眼就能看出来:

执行单元又变多了。在Zen2中,有4个ALU和3个AGU。而Zen3中增加了一个发射端,给一个独立的分支指令单元,BRU1。但这也不是改进的终点,AMD在AGU2和ALU1上增加了两个Store存储单元。Store不占用该发射端,可以与AGU2和ALU1并行。所以实际上整数部分可以达到10个微操作发射数每周期。考虑到没有和浮点争用端口的情况,这大概是X86史上最屌整数执行单元部分了。除开宽度,某些指令的延迟和吞吐也得到了优化,见下表:

越低越好

从这张表可以看到除开上面提到的改进,另有一个非常瞩目的点,所有的原子指令,比如LOCK ADD,XCHG之类的,延迟和吞吐都从18周期降低到了7.5周期,是个非常大的改进,对于多线程程序的线程同步会有很大帮助。

浮点执行单元

与整数部分类似,浮点部分也扩宽了执行单元。将浮点整数转换指令的执行单独提出来,做了两个F2I执行单元,并且加上了一个独立的存储单元,但这个存储单元并不能并行,所以浮点部分总宽度是6。相对于上代来说提高了50%之多。除此之外,继Zen2改进FMUL指令延迟之后,这次FMA指令的延迟也得到改善,从5周期优化到了4周期。当然也同整数一样,加了发射端自然要优化各个发射端中的指令配置。实际测试见下表:

越低越好

存取单元

存取单元主要是接收来自执行单元的访存请求,将请求的地址使用TLB加速求出真实地址之后进行数据存取。

L1D保持规格不变,依然8路组相联,64Byte/c读带宽,32Byte/c写带宽,但Zen3带来了一个关键性改进,请求不超过64bit的情况下(AMD说的不是256bit的情况下,但实测只能64bit和以下),现在访存单元最多可以接收3读或2写(Zen2位2读+1写),访存指令可以执行的非常灵活,比如2+1,1+2,3+0啥的。Rocket Lake相比,RKL可以做到2读加2写,各有优势,但AMD的应该更加符合传统使用场景,因为一般来说很少有读写比例一致的情况,都是读取多于写入。

同时LSU增强了数据依赖性检测,增加了4个TLB walker来应对更多的访存操作。读队列Load queue保持不变,然后写队列Store queue从48提升到了64,想来是为了适应翻倍的写吞吐率。

L2/L3缓存以及互联

Zen3的L2缓存与Zen2的保持一致依然是512KiB 8路组相连,读写吞吐率也保持在32Byte每周期,为包含式缓存。

Zen3的改动重点在于L3缓存。AMD想把Zen3的CCX扩大到8个核心,以便得到一个更大的共享缓存,但AMD以前CCX中所使用的Crossbar互联要扩大到8核心的话,复杂度和功耗都会极大的增加。所以AMD这次选择了另一条路,就是Ringbus。关于这部分AMD提的很少,基本信息只有读写带宽依然保持在32Byte每周期,延迟从以前的39周期提高到了46周期,L3依然作为L2的Victim。这里我们通过一些测试来研究一下L3缓存以及他们的互联。

首先是缓存延迟的曲线图

Zen3的延迟没有什么悬念,都符合AMD的描述,因为容量更大,所以最终进入内存延迟的时间也更晚32M才开始大幅攀升,这对于游戏等访存的foot print比较大,而对延迟又敏感的程序来说有非常打的帮助。有趣的是,我在使用不同的stride长度的时候,Zen3的L3缓存表现出了和Zen2截然不同的反应。

Zen2中无论stride长度如何,进入内存的点都在16M附近,变化很小,而Zen3中随着stride增大,进入的点也随之增大,4096Byte的stride甚至到了1G左右都还没有完全进入内存延迟范围。看来Zen3在缓存的预取策略和淘汰策略上都有不少的改动。更具体的,我会空闲下来之后细细研究。

接下来看看互联的情况,这次换用了Ringbus,所以我对互联的表现很感兴趣。Zen3的Ringbus和Intel的Ringbus有些不一样,Zen3的Ringbus不需要连接过多的设备,只有8个核心和一个GMI2接口,Intel的则需要连接多个核心、iGPU、内存控制器、PCIE控制器、和一堆外围设备。所以我对AMD的Ringbus延迟还是比较有信心的。PingPong测试具体结果如下:

3950X5950X

这里可以看到CCX内的延迟,Zen3的平均延迟比Zen2更低,因为8核心一个CCX,所以低延迟部分覆盖范围相比Zen2翻倍了。不过从图上可以看到波动非常大,感觉上是Ringbus的导致的。但有些不确信,所以又做了一个定频3Ghz的测试:

3950X5950X

这样可以明显的看到确实是延迟波动非常大,Ringbus的特性无误了。CCX内的平均延迟5950X有明显的优势,仅为33ns左右,而3950X高达45ns,提升非常大。

Ringbus和Crossbar不同,按Intel的做法,Ringbus需要将数据打散放在各个L3 Slice中,发出访存请求之后由近到远的访问,这里我们来研究一下AMD的策略,我使用一个修改版的PingPong程序进行测试,结果如下图:

5950X C2C in Cache Line 有BUG版5950X C2C in Cache Line 无BUG版,注意里面小块的方向换了3950X C2C in Cache Line

测试频率同样保持在3Ghz,但是测试方法有所不同,在预热好的Buffer中,我取前16个Cacheline进行PingPong测试,这样数据会从L3绕行一圈。图中我已经在空白部分用1-16的数字标出了16个Cache Line对应的位置。第一张有BUG的图中可以看到,每个核心对进行测试时,第一个Cache Line的延迟总是最高的,我一开始以为是预热不到位,但是测试发现跑两遍去第二遍也是一样的结果,检查代码之后发现给测试用的Buffer的对齐代码,写到别的变量身上去了,不过从这里也可以发现,Zen3似乎只会把访问地址开始后的第一个对齐地址之后的数据放在缓存上,Zen2上没有这个问题,说明替换策略有所变化。

5950X CCX0 CCX13950X CCX0 CCX1 CCX2 CCX3

上面是修正后测试中CCX内部分。大部分核心对中,前八个与后八个Cache Line几乎可以重合,说明AMD是将地址以Cache Line为粒度分散在每个CCX中八个核心对应的的八个L3 Slice中的。CCX内的延迟,在Zen3上面波动很大,应该是L3的特性导致的。我同样在Intel的处理器上进行过测试,但没有这么大的延迟波动,很平均,说明Intel的L3 数据分布粒度比Cache Line要小,以Cache Line为粒度还不足以测试出,只能测试出一个平均值。

5950X Average3950X Average

最后我取每个核心对之间的16次测试做了一个平均,生成了最后一张图,可以看到延迟波动就比较小了,说明对于较大粒度的数据进行核间传输的时候Ringbus也是可以保持稳定的。而Zen2,应该是以Cache Line为粒度地址分布在几个L3 Slice中,但因为使用Crossbar互联,延迟波动几乎没有,是最为稳定的架构,虽然整体的平均延迟比较高。

CCD互联方面,完全与Zen2保持一致,按AMD自己的说法,cIOD就是Ryzen 3000上面的那一颗。CCD通过上行32Byte/c 下行16Byte/c的GMI2总线与IOD互联。每颗CCD由IF总线的CCM和CS来维持缓存一致性和正确的访存。核心之间互联的时候,因为需要通过CS来维持一致性,所以互联延迟会比较高,差不多是内存延迟的样子。SDF和MC之间的链接速度为32Byte/c。IO方面则使用非一致性链接,速度为64Byte/c。我们用AIDA64实测一下来看看这部分的性能。

3950X with 3600MHz DRAM5950X with 3600MHz DRAM

可以看到内存带宽上,两者表现几乎一致,但是在延迟上,5950X比3950X低了9ns,对于延迟敏感的的程序,比如游戏之类的,有很大的帮助。L3缓存方面,因为互联改为Ringbus,带宽上受到了不少的影响,几乎只有3950X的一半,对于数据集比较大的SIMD计算密集的程序可能会有一些影响。延迟上5950X也稍高一点点,但是考虑到等效翻倍的容量,这应该是个不错的Trade off。

架构部分就到此为止。因为AMD的Profile工具还没有更新,等更新之后,我也会附上一些理论性能的测试给大家。

5950X性能测试:

测试平台:

一般软件性能

Benchmark类测试:

Cinebench R20 渲染性能测试:

5950X MT:10170 ST:6423950X MT:9003 ST:527

PCMARK10 对家用PC的综合性能进行测试:

5950X 综合分数 9842分3950X 综合分数 9386分

PCMARK8 老一点的PCMARK,里面的微软Office测试还是挺不错的:

Home小项:

5950X 5624分3950X 4999分

Creative小项因为PCMARK8自带的视频转换工具ffmpeg版本过老,导致5950X无法完成测试,所以不计入。

Work小项:

5950X 4611分3950X 4236分

微软Office小项:

5950X 5769分3950X 4971分

3DMark TSE 3DMark的CPU测试主要是针对一些游戏中的物理运算进行模拟:

5950X CPU分 9010分3950X CPU分 8637分

3DMark TS:

5950X CPU分 14479分3950X CPU分 14204分

SuperPI测试 老牌测试软件,Ifan最爱:

5950X 百万位7.09秒3950X 百万位9.158秒

Y-Cruncher测试 Ifan都爱跑PI:

5950X 85.955秒:

85.955 End Computation

3950X 90.346秒:

90.346 End Computation

软件实测:

视频编码测试;

X265:

5950X Pass1 5.11 fps , Pass2 6.80 fps:

encoded 8400 frames in 1642.88s (5.11 fps), 8868.32 kb/s, Avg QP:23.29

encoded 8400 frames in 1234.48s (6.80 fps), 9994.49 kb/s, Avg QP:22.43

3950X Pass1 3.92 fps , Pass2 5.00 fps:

encoded 8400 frames in 2142.59s (3.92 fps), 8868.52 kb/s, Avg QP:23.29

encoded 8400 frames in 1678.86s (5.00 fps), 9994.49 kb/s, Avg QP:22.43

SVT-AV1 虽然已经是测试时的最新版本,但看起来没有针对Zen3优化:

5950X 4.583 fps

SUMMARY --------------------------------- Channel 1 -------------------------------- Total Frames Frame Rate Byte Count Bitrate 8400 59.94 fps 23412378 1336.51 kbps Channel 1 Average Speed: 4.583 fps Total Encoding Time: 1832741 ms Total Execution Time: 1833527 ms Average Latency: 26821 ms Max Latency: 48947 ms

3950X 5.845 fps

SUMMARY --------------------------------- Channel 1 -------------------------------- Total Frames Frame Rate Byte Count Bitrate 8400 59.94 fps 26124766 1491.35 kbps Channel 1 Average Speed: 5.845 fps Total Encoding Time: 1437160 ms Total Execution Time: 1438669 ms Average Latency: 22681 ms Max Latency: 64783 ms Encoder finished

滤镜测试,采用Vapoursynth跑NNEDI3实现最简单的缩放功能,并且使用显卡编码来消除编码器瓶颈,两个CPU的测试中,显卡编码器均远未满载。

5950X 19.26 fps:

Output 8400 frames in 436.91 seconds (19.23 fps) encoded 8400 frames, 19.26 fps, 9921.44 kbps, 165.75 MB encode time 0:07:16, CPULoad: 0.7%

3950X 18.91 fps:

Output 8400 frames in 444.16 seconds (18.91 fps) encoded 8400 frames, 18.97 fps, 9920.06 kbps, 165.72 MB encode time 0:07:22, CPULoad: 0.8%

音频编码 QAAC 测试:

5950X 111.4X速率:

Knight's Song -GENERATION 3-.m4a AAC-LC Encoder, TVBR q127, Quality 96 [100.0%] 6:03.602/6:03.602 (111.4x), ETA 0:00.000 16034858/16034858 samples pRocessed in 0:03.265

3950X 88.5X速率:

Knight's Song -GENERATION 3-.m4a AAC-LC Encoder, TVBR q127, Quality 96 [100.0%] 6:03.602/6:03.602 (88.5x), ETA 0:00.000 16034858/16034858 samples pRocessed in 0:04.108

压缩软件7zip测试:

5950X 压缩速度 135875MIPS 解压速度 216015MIPS:

3950X 压缩速度 123294MIPS 解压速度 185214MIPS:

软件测试汇总:

整体上来说这么高端的CPU,在日常应用的比如PCMARK那一堆文本编辑,照片编辑,视频会议啥的应用中已经无法进一步提升体验了,毕竟已经做的非常好了。

测试中几乎没有几个单线程的,但所有单线程的测试都获得了很大的提升,这得益于架构的优化和单线程频率的改进。

多线程的程序中,各个测试对于不同架构的CPU利用程度不同,功耗也不近相同,所以具体提升差异非常大,最好根据自己的需求来判断。

另外PBO打开之后,会解除功耗限制,大部分多线程程序都会再得到10%以上的提升。

烤机测试

5950X烤鸡测试,C8DH因为BIOS问题,似乎频率有不少的问题,在PRO WS X570上面,可以达到3.975GHZ左右,并且功耗不变。Zen2被诟病的积热问题也有所改善,同功耗下比3950X低了近4度。3950X烤鸡

频率问题

AMD的Boost频率机制比较复杂,频率首先根据所有核心的负载来判断给出每一个CCX的基础Boost频率,然后根据每个核心内置的压降检测模块来控制DLL,DLL会在基础Boost频率上根据实际压降来精细的减去一定的值,以实现可工作频率的最大化。当然整体CPU功耗不能超过PPT上限。

5950X的标称Boost频率是4.9GHz,实际芯片设置的最大Boost频率是5.05GHz。上代3950X的标称是4.7Ghz,实际上限4.75Ghz。所以实际上5950X标称的4.9GHz比上代多留出了0.1GHz的裕量,这也使得5950X在游戏或者别的CPU轻载应用中,随随便便就能看到4.9GHz的频率在运行。不仅如此,在某些主板,比如Pro WS X570 ACE中,默认状态Boost频率更是可以超过上限5.05GHz,达到5.2Ghz之多,跑到5.1GHz的情况几乎差不多等于3950X跑到4.7GHz的概率差不多。

游戏测试

游戏测试部分除开AC这个赛车游戏外,其余均使用2560*1440分辨率,画质是能尽可能达到的最高画质,超分辨率和AA设置除外。AC使用5120*1440分辨率,能达到的最高画质。

LOL:

LOL使用匹配5V5的录像进行测试,用OCAT从固定时间点开始测试到固定时间点结束,因为手动开始所以会有些许偏差。

WOW:

WOW测试中,先将视角固定之后,从一个飞行点飞到另一个飞行点,OCAT测试整个过程。

DOTA2:

DOAT2测试方法与LOL类似

CSGO:

CSGO使用社区的性能测试地图,同样使用OCAT纪录其中一段时间的性能。

OW:

测试方法类似LOL:

SC2:

测试方法类似LOL

FF14:

FF14使用游戏自带的测试程序

5950X:

FINAL FANTASY XIV: Shadowbringers Benchmark Tested on: 1/11/2020 17:05:25 Score: 23154 Average Frame Rate: 163.0223 Minimum Frame Rate: 74 Performance: Extremely High -Easily capable of running the game on the highest settings. Loading Times by Scene Scene #1 1.263 sec Scene #2 2.226 sec Scene #3 2.411 sec Scene #4 1.507 sec Scene #5 0.814 sec Total Loading Time 8.221 sec

3950X:

FINAL FANTASY XIV: Shadowbringers Benchmark Tested on: 1/11/2020 13:46:44 Score: 19367 Average Frame Rate: 146.5436 Minimum Frame Rate: 63 Performance: Extremely High -Easily capable of running the game on the highest settings. Loading Times by Scene Scene #1 1.693 sec Scene #2 3.026 sec Scene #3 3.254 sec Scene #4 2.102 sec Scene #5 1.176 sec Total Loading Time 11.251 sec

古墓11:

古墓11使用游戏自带的测试程序

Assetto Corsa:

在官方自带Benchmark中使用OCAT纪录

游戏测试部分总结:

对于传统网游来说,AMD一向表现较为弱势,而5950X的出现扭转了乾坤,性能提升非常巨大,可以说是有了一个质的飞跃。除开OW这个原本表现就很不错的游戏外,别的游戏最少都获得了25%的性能提升,而且还不是在通常为了突出CPU性能而设的1080p中低画质中。即便算上OW,平均下来的话也有34%左右的性能提升,这补齐了AMD原本的的性能短板甚至有所超出。3A我只随手测了一个,因为Zen2尚且不会造成严重瓶颈,何况Zen3了。赛车游戏完全处于我自己的喜好来测试,采用了超宽屏分辨率,压力主要还是在显卡上。

最后的总结,5950X在目前的桌面平台上就是360°无死角的无敌!!!!!!

完。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3