3900X个人详细测试

LambdaDelta3月前73 次点击

本帖最后由 LambdaDelta 于 2019-7-7 22:03 编辑

没有美图所以就发这个版了。
Zen2架构介绍:在AMD翻身之作Zen1出来之后的第二年AMD又推出了它的改进版Zen2。这次的架构虽然说是改进版,但是比起AMD以往架构的各种改进版来说,改进幅度相当的大,甚至大于K8到K10的幅度。下面我就简单的来介绍一下这次的具体改进。
  • 取指部分(Fetch)
改进版的分支预测单元,改进版的一级指令缓存这部分最大的改进是,把原来的两级神经网络分支预测器的第二级,换成了新的TAGE分支预测器。说起原来的神经网络分支预测器,其实挺有意思的,按传统的分支预测器其实就是个单层的感知机,即便是推土机上的分支预测器要说成是神经网络分支预测器也是没问题的,所以Zen1的时候AMD用那个叫法其实是耍了个小聪明,蹭了个热点。新的TAGE分支预测器全名叫TAgged GEometric length predictor(标记几何长度分支预测器),差不多是目前最先进的分支预测器实现,这个分支预测器的逻辑很复杂,够写几页论文的,这里就不多做介绍了。除开分支预测的改进之外,L1I的也有不少变化,虽然容量从64KiB减少到32KiB,但组相关从4路增加到8路,其实从理论上来看,很难说这种改进是有益还是有害的,不过AMD敢这么改,应该是经过仔细权衡的。L1I的带宽是AMD的传统强项,32Byte/cycle对Intel的16Byte/ cycle 。
  • 解码部分(Decode)
容量扩充的Ops cache和改进版指令融合解码器本体没有什么变化,依然是4条指令每周期的带宽。这部分主要是把微指令缓存(Ops cache)的容量翻倍了,这样可以缓存更大的代码块,对于复杂的函数和循环来说很有帮助。Ops cache是用来缓存解码器解码出来的宏指令(Macro op)的,一来为后面的乱序核心提供更高的宏指令带宽,二来减少了解码器(Decoder)的工作,避免在解码器上消耗过多的电力,最后还顺带减少了等效的流水线级数,避免过高的分支预测失败惩罚。Intel的处理器也有一个对应的 μop cache,功能也相同,不过仅仅只有6 μops/c的带宽,低于AMD这边的8 Macro ops/c,容量上只有1536个 μops,远远低于Zen2的4096。 实际 μop的比Macro op更简单,X86指令解码出来的 μops也比Macro ops多,Intel的 μop cache容量就显得更小了。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没说,总之能改善整体吞吐率就是了。指令融合:分为宏融合(Macro fusion)和微融合(Micro fusion)。宏融合就是把两条连续的X86指令视为一条,整体进行解码,执行。微融合是Intel独有的,因为Intel没有Macro op这一说,而是直接解码成更简单更多的μop,导致解码器到执行单元的有效带宽不足,所以Intel不得不把多个过于简单的μops,组合成一个更复杂的fused μop来节约带宽,这就叫Micro fusion,之后快到执行单元之前再解开组合。
  • 浮点执行单元(FPU)
双倍宽度AMD的Zen1,之前最被人黑的一点就是这里。Zen1的的FPU由4个128bit的SIMD单元构成,一般浮点运算,可以支持4*128bit的AVX/SSE或者2*256bit的AVX并行,这一点上和隔壁Intel相比其实没有任何劣势,甚至在128bit指令的执行上有一倍的优势。但是在FMA指令上,只有2*128bit或者1*256bit,因为FMA是由加法和乘法SIMD拼接完成的,并不像Intel的2*256bit是独立的单元,结果就是在各种测试浮点单元理论吞吐率的软件中被Intel大幅领先。另外一点,这里FPU虽然名义上的浮点单元,但整数SIMD指令也是在这里完成的。针对整数的AVX2指令,AMD当时可能考虑应用没那么广泛,所以没有设计太多的执行单元,导致被Intel吊打。在Zen2架构中,AMD应该看到了这些劣势,所以把所有SIMD单元的宽度都直接加倍,现在有4*256bit SIMD,两个浮点加法SIMD和两个浮点乘法SIMD。上面提到对Intel一倍优势的128bit指令,优势保持不变,在256bit的AVX指令上,现在也有了一倍的优势,FMA指令虽然也是拼接完成,但得益于暴力的SIMD宽度翻倍,性能和Intel家的也能持平了,形成了最差我也不会输,一般情况吊打你一倍的优势局面。AVX2方面Zen2同样也基本做了翻倍处理,基本上除开饱和算术指令之外,别的都能达到或者超过intel的水平,可以说互有胜负。这里我是用InstlatX64测了一点点数据,给大家看看(测试中使用的CPU为了得到稳定的结果,都使用定频模式。结果以周期为单位,频率高低并没有影响。数值越低越好):
  • 整数单元(IEU)
乱序窗口加大,队列加深,增加了一个AGU和对应的发射端重排序缓冲区(ROB,Reorder Buffer):它的大小决定了最多能从多少指令中来提取可以并行的部分。物理寄存器堆(PRF,Physical register file):它的大小则决定了这些提取出来的可并行的指令可以使用多少重命名的寄存器。保留站(RS):则是这些指令等待乱序发射的队列。整数单元的性能主要看指令级并行能开发到什么程度。AMD在Zen2中将上面说的每一个部件都进行了扩充,期望获得更高的IPC。 这些部件的提升幅度和Intel这边Haswell到Skylake几乎完全一致。除开这几样,AMD在访存方面也做了加强。增加了一个AGU和它对应的发射端。Zen1中的只有两个AGU,所以Zen1最多只能做到两读或者一读一写,这对于IPC来说是不利的。大部分指令通常需要两个数据来源,然后产生一个结果。两AGU在前一条指令写结果的时候,只能读取一条数据来源,然后额外消费一个周期来读取另一个来源,再下一个周期ALU才能开始执行运算,中间就多了一个空闲的周期。三个AGU就不同了,前一条指令回写结果的同时,可以同时读取下一条指令所需的两个数据,再下一个周期ALU就可以直接进行运算了,节约了一个周期,所以AMD改到3 AGU非常的合理。AIDA64有个测试ROB大小的工具,所以姑且一测下ROB的大小(其实没什么好测的,官方一般这种地方不可能乱说):
可能不太明显,但在190的位置确实有一个小抬升

这就比较明显了,220的位置,升了一个平台

作为Intel处理器的对比,这就很明显了220左右出于好奇心顺带测一下Zen2的乱序核心的峰值吞吐率,因为现在AMD的uProf profile工具还不支持Zen2,所以测试是我现写的,基本就是各种指令跑循环,用循环次数,每次循环的指令数,频率和时间来算IPC。循环中的指令和循环长度需要自己慢慢调整来达到一个最佳值:(结果不考虑Macro fusion的情况,所有满足Macro fusion的指令组合都被视为一条)


因为现在的处理器频率调节技术都很先进,所以即便手工定频结果会有一些误差。基本上Zen1和Zen2没有区别,峰值都能跑到5,算是不折不扣的5发射处理器,按理论来看其实应该有6,考虑到前端和ROB带宽都没有瓶颈的情况下,可能是别的部分有了什么限制。Intel的Skylake,则是因为Retire的带宽最多只能到4,所以IPC也只能到4了。之前网上传言Skylake能5发射,我想是考虑了Macro fusion的情况,当然这个在早年间Intel的处理器上就能做到,不是Skylake独有,并不稀奇,而排除Macro fusion后,第一款真5发射X86处理器的头衔,我想应该给到Zen1的头上。
  • 访存单元(LSU)和缓存结构


访存单元这次的改进主要是为了配合AGU和浮点单元的改进。LSU方面,因为AGU增加到了三个,所以LSU这里也要配合着变成每周期能接受2读1写的设定。浮点单元部分,SIMD的宽度加倍到了256bit,所以同样这里也要从原来的128bit读写变成256bit读写,对应到L1缓存上就是带宽加倍。别的改进:存储队列长度加4。二级数据TLB加到2K entry,重要的是,增加了1G大页面的支持,这对于windows 操作系统来说意义不大,但是对于Linux操作系统来说,很多高性能库,软件和驱动,比如DPDK,Oracle什么的,都依赖于1G的大页面来减少TLB miss,意义不小。然后放上AIDA64的缓存测试图:

实测表明,L2缓存基本上单位频率,单位核心数下的带宽和之前保持一致。而L3应该不和CPU频率相同,实测中,排除核心数量的影响之后,可以看到L3的带宽快了一倍,这是因为3900x总计有4个CXX/4组L3,而1700X只有2个。缓存延迟方面,AIDA64的这个测试太过粗略,所以换MemlatX64来看:

对比1700X和3900X,基本除了L2延迟和L3大小之外没什么不同的,L2延迟在Zen+中其实也已经改善过了,到了和3900X一样的12周期。对比一下3900X和6700K,可以看到各级缓存延迟其实都差不多,容量同样有点差别。但是过了L3缓存容量之后,有一个上升曲线,和AMD直接到顶不同。这是因为Skylake桌面版的L3依然是传统的缓存策略,会从内存预取数据。而AMD的是Victim缓存,L3里面的数据是从L2中最近刷掉的那些,并不直接从内存预取。
  • 新指令
CLWB,这个是针对未来的非易失性内存而设计的,目的是清空所有缓存,避免关电的时候还有数据没有写回闪存中。WBNOINVD,将缓存的数据写回内存,但不更改它为失效状态,失效状态意味着这段数据马上需要被替换掉,通常写回内存就意味着这段缓存不会再频繁使用了。下面举的例子可以说明他的作用,因为DMA只能访问内存,使用这个指令将缓存数据写回内存之后,CPU可以继续使用这段缓存中的数据,而DMA也可以正常的从内存中读取数据传输到别的设备。QOS,就是字面意思,家里路由器的QOS感觉差不多,在高并发的环境中,给与需要的线程足够的资源来提高整体的吞吐率。
  • CPU拓扑结构

这次Ryzen的结构其实应该大家都清楚,八核及以下都是一个CPU die一个IO die,往上则是两个CPU die 一个IO die。所有内存和PCIe链接都是由IO die提供的,IO die没有区别,那么内存通道和PCIe数量就没有区别。带宽上,CCD与cIOD之间的带宽为32Byte/c,工作频率为FCLK频率,一般情况等于内存的实际工作频率(不是DDR频率),但实际可以自己以33Mhz为步进手动调整,在3200MHz的内存频率下带宽为51.2GByte/s。而cIOD内部,DF与内存控制器之间,带宽也是32Byte/c,工作频率为UCLK频率,这部分频率与内存直接挂钩,可以设定为1:1内存工作频率,也可以设为1:2内存工作频率,这种设定减小了内存跑高频时给内存控制器带来的压力,但我们计算一下,3200MHz的内存使用1:1的话,带宽刚好51.2GByte/c,和双通道内存带宽一致,而如果使用1:2的设定则只有实际内存的一半,基本上1:2模式除了可以把内存超高之外,毫无意义。对于这种设计来说,包括我在内的很多人都认为,多了一个IO die内存延迟会差一点,甚至有人放言,Ryzen三代的内存延迟绝对低不过80ns。在之前的LSU介绍部分,我已经放出了3900X的AIDA64延迟测试截图,我们可以看到,延迟甚至比一代的低3ns,并且考虑到两者可以跑的内存频率,实际新一代Ryzen是在这点上是远远领先于1700X的。这里再上一张3900X加CJR的皇家戟3200MHz稳定运行在3800MHz的测试截图,这个频率是通过MSI的主板功能Memory try it直接设定的,非常轻松:
除开内存延迟之外,还有一个担忧,就是双CPU die的Ryzen会不会CCD之间的互联延迟比上一代Threadripper还高,毕竟Threadripper还是两个CPU die直接互联,而新Ryzen还要多经过一个IO die。为此我专门写了个小的乒乓测试程序,原理是两个绑定在不同核心上的线程互相对一个volatile属性的全局变量进行测试并改变,累计一定数量之后除以过程时间,得到延迟数据。为了减少测试量,我只是用了每个物理核心中的第一个SMT核心进行测试:

这里我们可以看到Zen1里面CCX内的核心之间互联延迟在41-49ns之间,而不同CCX中的核心间的延迟则要高的多,在127-129ns之间。Zen2的 CCX内的核心之间延迟基本稳定在31ns,考虑到3900x的频率更高,这个结果也能理解。而不同CCX的核心之间延迟则大幅度下降了近40%,范围在76到80ns,可以确定CCX之间的Data fabric有了重大改进。再看看我最关心的CCD之间的延迟,竟然只有78-80ns,和CCX之间的延迟几乎相当,非常的难以置信,我完全想不到AMD是怎么做到,难道因为CPU die之间还有直接的互联?为了验证这个想法,我想起朋友老六还有一颗1900X,所以让老六帮我测了一下1900X的 ,请看上面1900X的图
老六的热情帮助下得到的数据1900X每个核心只有一个CCX打开,所以就没有CCX之间的延迟这个说法了。CCX内,因为频率也较高的关系,所以看起来不错,但不是特别稳定。我们关心的CCD之间延迟高达230+ns,比1700X的CCX间延迟还几乎高了一倍,所以可以得出结论,即便Die直连也会有巨大的延迟开销,那么3900X的CCD延迟是如何做到的就成了一个迷,期待今年Hotchips中AMD的演讲。既然AMD的HEDT都有了,那么Intel的也搞一个:
脑残念先生热情帮助下得到的数据在Mesh的帮助下,延迟基本随着核心的距离变化而变化,所有延迟在77到90之间,比较稳定,如果和1900X比的话,无疑是相当棒的,不过在Zen2那个神奇的延迟面前还是有点失色了。最后6700K Ringbus嘛,没啥好说的。总之这个测试的收获就是,不用担心多个CCD的处理器带来什么延迟问题了,想买几核买几核,只要钱够。再稍微看下核心互联延迟与内存频率的关系:
在3800的内存频率下,CCX内的延迟基本没有变化,但CCX间和CCD间的延迟下降了大约10ns,这是因为IF频率在内存频率提高时,也同步提高的原因。单CCD问题,先看图:
这是3900X关掉一个CCD之后的内存带宽测试。可以看到内存读写速度都受到了不小的影响,读取速度还行,只低了几个G,但是写入速度跌了几乎一半。目前AMD还没有给出一个合理的解释。目前我猜测有两个原因,一是AIDA64有bug,二是AMD本来设计就是如此,IF上下行带宽不对等,32Byte/c的上行,但只有16Byte/c的下行。最后其实还有一个担心,就是双通道内存,对于3900X的12核心甚至之后3950X的16核心来说到底够不够。这个问题比较难以回答,因为不同程序对于内存带宽的需求都是不一样的,所以建议如果有条件,可以试试自己用AMD(uProf)或者Intel(vTune)的免费profile工具测一下自己的用的软件,是不是性能是内存带宽导向的,如果是的话可以不用买那么多核心的处理器,或者是上更多内存通道的HEDT平台。性能测试平台是3900X+MSI MEG X570 GODLIKE AGESA 1003,全默认,但内存运行在3733 C18双通道下,显卡是我自己手上最强的RTX2080 FE默认(为啥前面照片不用2080?因为长的丑)。然后对比用的是1700X+GIGABYTE AX370 Gaming 5 AGESA 1002,全默认,但内存运行在3200 C16双通道下,显卡还是2080 FE。1700X的成绩有点偏低,但与3900X的差距比起来不算太多,我发现更新到支持Ryzen3000的BIOS之后就有这个问题,这里特别说明一下。一般软件性能这部分就直接看图好了:
  • Cinebench R20
3900X:
ST 515,MT 69551700X:
ST 350,MT 3193
  • PCMark10
3900X:
我直接用的SATA SSD,对分数有点影响,7268分1700X:
5363分
  • PCMark8
3900X:
5067分

6741分

4126分1700X:
4390分

6039分

3696分
  • TimeSpy Extreme CPU test
3900X:
CPU指令集设置为自动时的跑分:6609

设为AVX时的跑分:8918

设为AVX2时的跑分:91001700X:
CPU指令集设置为自动时的跑分:3227

设为AVX时的跑分:3590

设为AVX2时的跑分:3602Zen2的SIMD性能加强得到了很好的体现。
  • X265视频压缩
3900X:
4K分辨率的占用率

4K下,SLOW设定档的速度:7.8fps

4K分辨率,无SMT的占用率

4K下,SLOW设定档,无SMT的速度:7.26fps

1080P分辨率的占用率

1080p下,SLOW设定档的速度:12.6fps1700X:4K下占用率

3.10fps

1080下占用率

5.79fps
  • QAAC音频压缩
3900X:
QAAC 88.6X速度1700X:
62.4X速度
  • 7zip
3900X:
1700X:
  • y-cruncher
3900X:
PI计算时间:95.476 总计算时间:102.8591700X:
PI计算时间:229.92 总计算时间:247.098
  • 总结


游戏性能
游戏都使用1080P分辨率,特效是可能达到的最高特效
  • StarCraft II
测试使用相同录像,测试同一段比较鸡烈的部分1分钟:3900X:
我比较菜只敢打AI
Average framerate  :  163.1 FPS
Minimum framerate  :  111.5 FPS
Maximum framerate  :  214.7 FPS
1% low framerate   :   69.7 FPS
0.1% low framerate :   45.5 FPS1700X:
Average framerate  :   99.1 FPS
Minimum framerate  :   47.4 FPS
Maximum framerate  :  131.6 FPS
1% low framerate   :   16.4 FPS
0.1% low framerate :    4.4 FPS
  • AssettoCorsa
使用官方的测试工具,但自己记录数据:3900X:
Average framerate  :  183.6 FPS
Minimum framerate  :  160.2 FPS
Maximum framerate  :  204.5 FPS
1% low framerate   :  159.2 FPS
0.1% low framerate :  128.1 FPS1700X:
Average framerate  :  129.5 FPS
Minimum framerate  :   82.7 FPS
Maximum framerate  :  158.5 FPS
1% low framerate   :   81.0 FPS
0.1% low framerate :   61.1 FPS
  • Civilization VI
使用官方的新版AI测试:3900X:
回合时间:31.64
Average framerate  :   82.8 FPS
Minimum framerate  :   31.8 FPS
Maximum framerate  :  161.0 FPS
1% low framerate   :    5.4 FPS
0.1% low framerate :    2.6 FPS1700X:
回合时间:43.93
Average framerate  :   57.5 FPS
Minimum framerate  :   15.7 FPS
Maximum framerate  :  134.5 FPS
1% low framerate   :    3.3 FPS
0.1% low framerate :    1.8 FPS
  • World Of Warcraft
3900X:
90fps1700X:
64fpsWOW这种网游不太好测,也得不到完全准确的结果,不过介于3900X领先1700X很多,就算再不准确也能看出巨大的差距,所以就选同样位置截图两张好了。算完成个任务。1700X+X570特别测试开不了机3900X+X370特别测试
  • AIDA64 CacheMem

3200MHz内存默认测试。延迟高了3ns

3800MHz,FCLK&UCLK同步。延迟高了6ns
延迟的差别应该问题在在BIOS的调校上。
  • Cinebench R20

未安装芯片组驱动,MT:6827 ST:489

安装芯片组驱动后,MT6925 ST:504这个我前面写的时候忘了做对比,然后今天新装系统测试的时候发现分不对才想起来。AMD这次在Ryzen 3000系列中引入了一个叫做CPPC2的的BIOS功能,可以将频率调节时间的粒度从30ms级别减少到1ms级别。安装最新的芯片组驱动即可打开,大家用的话千万别忘了。性能和X570上的基本可以说在误差范围。
  • StarCraft II

这里我想补充一下,包括前面的测试在内,截图和性能测试都是分开的,因为系统截图会卡住一下,导致最低帧数暴跌。
Average framerate  :  149.2 FPS
Minimum framerate  :  107.3 FPS
Maximum framerate  :  195.7 FPS
1% low framerate   :   69.6 FPS
0.1% low framerate :   42.5 FPS感觉可能是内存延迟更高的问题吧,导致帧数下降了不少。测试中所遇到的BUG和问题
  • MSI MEG X570 GODLIKE
  • 在所有BIOS中均有几率出现,开机提示CPU Error的问题,在更新BIOS和多次重新安装CPU,散热器和内存之后,依然存在。这个BUG说严重不严重,说轻也不轻。因为什么都不需要动,只需要再重启,基本就能正常启动,遇到的几率也不高,但对于使用远程桌面的人来说可能就很头疼了,毕竟摸不到电源按钮。
  • 在所有BIOS中均有几率出现,风扇被固定在相当低的转速,无法控制,不随CPU温度变动。期间使用过AMD原装的散热器和D15S,均有此BUG出现。解决方法,重启就好。
  • 在AGESA 1003中,SATA RAID失效,可以调整为RAID模式,但BIOS认不出RAID之后的盘,也没有raidxpert可以调整RAID设置,我估计是AMD在AGESA 1003中,压根就忘了放这一块。所以更新到这个BIOS之后,我使用的是单盘SATA SSD装的系统。
  • GIGABYTE AX370 GAMING 5
  • 目前支持Ryzen3000的BIOS只有一个,使用AGESA 1002。这个BIOS中,我的PM981无法被识别出来。本来怀疑是PCIe4的原因,但是手动降级PCIe到3,也没有任何作用,所以最终,我不得不请出来我一块弃用的希捷SSHD来装的系统。干
希望AMD和主板厂商能早日更新BIOS解决上诉问题。总结对Zen2评价,我想说的就是强,相对于Zen1来说,基本是360度全方位的大幅提升。而且CCD间的低延迟设计,如果应用来未来的Threadripper上,可以规避掉它本来的弱点,不再需要进行特别的NUMA优化了,所以不止Ryzen3000,对于未来的Threadripper,我都非常看好。哎,排版完全乱了。。。我在自己私人小站的草稿,大家愿意看可以过去看看,然后回这边来讨论。https://www.lambda-delta.com/2019/07/05/3900x-review/










最新回复 (29) 直到 2019-07-08 02:00
返回