CPU整体概况
Zen架构的处理器在第一代上市后,就引发了相当高的关注,其表现令众多DIY爱好者惊叹,但Zen1的架构受制于制程和设计不足,有明显短板,比如较低的256位AVX矢量指令执行性能,较低的频率,架构规模也低于Intel Skylake微架构产品,但好在Intel大度的没能在2年时间里大规模量产自己的新架构产品,这使得Zen2采用7nm工艺后,能继续担负起挑战Skylake的重任。Matisse即为Zen2系列产品的微架构代号。
Zen2 CPU正式上市后,我立即购买了一颗R7 3700X CPU,这是一颗8核心16线程的芯片,我们得以对比同为8核16线程,Intel与AMD谁的性能更强?今天我们将重点放在了解Zen2 CPU部分微架构的改进和CPU处理性能上,看看这些改进为AMD新产品带来了何种提升,Zen2 CPU在内核的布局上依旧与上代类似,首先, AMD将每四个核心作为一个CCX,每8个核心为一个die,但原本内存控制器和PCIe控制器等功能由一个I/O Die来控制,这部分芯片通过IF总线与CPU内核相连。
Zen2在主流端有双die和单die两个版本,大致布局如上图
而在单个CCX内,每四个核心为一个CCX,这里的好处是4核心之间的访问是非常快的,类似相互点对点的访问,坏处是当多个线程跨越CCX访问时相互间的延迟会比较高。这在Zen1上有所体现,但如果程序的多线程扩展性强,往往不会遇到这类瓶颈。
在睿频调整上,AMD允许以0.025Ghz为幅度进行调节,而intel往往是0.1Ghz(1个倍频),这意味着AMD的频率阶梯更为细致,同时AMD引入了一个类似Intel Speedshift的技术,使得睿频响应时间仅需要1-2毫秒,而Intel的数字则是约1毫秒完成状态切换,总延迟不超过5毫秒,在这个数据上,AMD的提升是明显的。
不过无论具体情况如何,这样一来,AMD将有效的改善突发短时负载的性能,比如类似PCmark的应用程序启动类型的工作负载,这将有效改善整体日常体验。
而说到频率,实际上要获得良好的性能,可以开启PBO技术(在BIOS里开启),即Precision boost Overdrive,可以根据散热表现和实际该处理器设定的睿频值,在散热,电压,电流和不超过最大睿频的情况下,尽可能提升运行频率,而在实际运行中的频率大致会有所不同,但3700X基本集中在4.175-4.325Ghz之间。但需要注意,关闭PBO全核为3.8Ghz,R20得分大约4500多CB
因为Zen2的CPU采用了7nm工艺,但为了控制成本,将速度较CPU核心低的北桥部分不使用7nm工艺,采用14nm工艺制造(服务器端为14nm,台式机桌面平台为TSMC 12nm),这导致PCIe控制器与内存控制器与CPU部分分离,这显然带来了新的问题,CPU访问内存的延迟提高,虽然称AMD采用了片上硅基板连接,在硅基板的互连部分加入了一定的逻辑单元晶体管,将片上互连总线部署到加入了晶体管的部分便可起到连接作用,但现实是这样的延迟可能不可避免的增加,通过更大的缓存或许可以进一步缓解问题,具体细节需要实际测试确认,但毫无疑问,得益于SRAM逻辑部分更简单和高重复性,更容易吃到7nm带来的更高密度的红利,AMD Zen2的每个8核的die里,拥有高达32MB的共享式三级缓存。
而在芯片面积上,得益于7nm工艺,CPU核心die的面积为74平方毫米,共约39亿晶体管,而12nm I/O die 125平方毫米共20.9亿晶体管。
外围设计之X570平台
X570是首款消费级市场支持PCI-E4.0的主板芯片组,PCH可以拆分16条PCI-E 4.0通道,并提供12个SATA 6Gbps,还有8个USB 3.1 Gen 2接口,4个USB 2.0接口,X570芯片组是AMD自行设计的PCH(此前均为祥硕设计和代工),扩展能力大幅提高,不过PCI-E 4.0控制器的发热量也很可观,根据主板厂商表示这芯片的TDP有12W,所以现在的X570主板全部都在南桥上加了个小风扇强化散热。本次测试使用的是MSI MPG X570 Gaming EDGE WIFI。
Zen2新增指令
AMD新增了三条指令给予Zen2架构,这些指令并不是如今Intel所钟爱但市场宣传压根不关心的SIMD或数据类型加速指令,而是三个更多为新的核心结构所服务的新指令,分别是CLWB、RDPID及WBNOINVD。
CLWB大家应该不陌生了,在Skylake-Server处理器中被支持,这是与TLB特性相关的指令,缓存行写回内存而不会失效*,而后两条指令也是Icelake将会支持的。其中RDPID位于Gemini Lake的Goldmont Plus架构处理器上也被支持。
本次测试平台将采用以Z390+9900KF,与X570+3700X为核心的平台进行对比,其他方面的配置尽可能一样。而值得注意的是本次测评开启了PBO,主板将自动进行尽可能高的睿频(但不超过最大标称值),实际根据负载程度实际在4.15-4.325Ghz的全核睿频上,相对来说,AVX2 FMA的负载频率会较低,而与之相反的则相对频率更高。而最终来说,9900KF需要超出3700X 10%的性能的项目,才能证明其IPC与Zen2的表现相当,而需要战胜3700X 30%的性能,可能才能证明自己的确值这个价格。
微架构设计
我们在了解Zen2架构或其他架构的基本设计框图前,我们先要说到,如今的现代处理器都采用超标量流水线设计,在阅读微架构框图前我们要在基本层面上理解指令流程,处理每个指令和数据都不是即时完成的,无论什么类型的流水线处理器,都要经过几个大步骤才能完成执行,而这些步骤都会对应一定的硬件部分,允许各个硬件部分同时处理不同的指令对应的不同步骤,一般来说有这么几个大步骤
1,获取指令
2,译码指令
3,进入执行端口执行指令(乱序执行部分)
4,访存获取操作数(L/S Buffer和AGU)
5,写回结果
而流水线的整个部分我们可以分成两类:
前端,CPU的一部分,用于获取和译码指令
后端则是执行指令和退出指令,写回数据的部分
流水线技术最适用于RISC设计的芯片,那些具有少量简单指令的RISC设计可以快速运行。现代处理器每个核心实质上有多个流水线,因为它拥有多个诸如算术逻辑单元(ALU)之类的功能单元,并且前端可以一次取出多个指令以保持额外单元繁忙。可用的路径通道数称为发射宽度。下图 表示一个两发射宽度的设计,它在第一个周期取指令A和B,在第二个周期取指令C和D. 理论上发射宽度是根据每个循环可以发出多少指令来定义的,但是通过CISC设计(如常用的x86)进行流水线操作的方式有些复杂。
对于像x86中拥有更复杂的指令,指令中不同的复杂性和不同的指令需要不同的运行时间可能会导致难以进行流水线操作,简单说便是缓慢的单个指令步骤会使流水线陷入困境,复杂的指令可能更容易在数据依赖性上停滞。
这个问题的解决方案是将这些复杂的操作分解为更小的微操作或μops。为方便起见,μops经常也被叫做u-uop。因此,x86指令被提取和译码,转换为uop,然后从缓冲区调度以执行,并最终退出(Retried)。在获取x86指令和调度uops之间的这种差异使得现在我们很难定义处理器的发射宽度,并且这种困难由于有时可以将uop指令对融合在一起而更加明显。而将一些简单微指令融合,也是为了更好的利用有限的流水线带宽宽度
在这种情况下精确定义处理器宽度的较难,语义的歧义表达也很多,很多处理器以自己拥有的执行端口数量来宣传自己达到的发射数。无论语义或底层硬件如何,但我们可以知道现在的高性能处理器每个周期最终都可以从前端发出固定数量的微指令,并且每个周期可以从后端退出固定数量的微指令。
架构的改进都会让源自于五级流水线设计的处理器在各个阶段变得更宽,更深,和更多,什么是更宽?更宽的流水线带宽,能容纳更多指令或微指令通过,让更多指令能同时进入一下步执行,什么是更深?更大的buffer缓冲区队列,在乱序执行的设计中,一旦有前序指令挂起,后续指令继续执行时,能让更多指令能进入相关缓冲区等待,什么是更多?更多更强的执行单元,让处理器吞吐更高更快,由于现代处理器采用深流水线设计,有超过10级的流水线步骤和一些特定指令的额外延迟,这导致在每一个流水线步骤下都要做到更宽,更深,以保证整个流水线将一定数量的指令功能输送到后端执行并退出,而微架构设计往往又是一个取舍的过程,将全部部分提高固然能有效提高性能,但这样代价过高,所以往往是根据相应指令集功能设计和当时的应用程序特性,同时预测一定时间之后的程序特点来找到对应的瓶颈点,将处理器更适应当代和一定时间段的负载,那问题来了,Zen2改进了什么?
“更多”的执行性能
我们可以很轻松的发现,Zen2在后端执行端新增了一个AGU,这使得访存执行更为精细化,能分别执行2个Load和1个Store的执行而不会互相冲突,但执行单元的更多还不止于此,AMD将4个Mul和ADD(乘法与加法器)可以直接执行单独的256位微操作,而不是过去的需要拆分为2个128位数据微指令来执行。
不过执行FMA指令,依旧需要将其拆分为2个微操作放入乘法器与加法器分别执行,这使得浮点峰值由原本的2*128FMA吞吐,提升到2*256FMA,而整数资源也随之增加,这使得AMD能完全执行256位AVX/AVX2指令。也让其在这个部分相对Intel理论上毫无劣势,但不排除直接执行FMA指令,Intel的单片的FMA单元会比AMD将一个256位加法器与256位乘法器拼接执行效率更高,但如果使用256位矢量,乘加混合计算,没有FMA指令的情况下,AMD Zen2可以实现2个256位加法浮点和2个256位乘法浮点的计算,Intel的2个256位FMA单元将不得不只能输出2个256位加法,2个256位乘法或者1个256位加法与1个256位乘法,这会显示其处于劣势。而总体AVX SIMD吞吐如下表。
这里还是简单补充一下zen2 SIMD的吞吐的来源:
四个FP部分在CPU框图上是两个乘法器两个加法器,没有明说其他类型的,所以我在此将余下部分进行补充,这是处理浮点SIMD的,所以是两个浮点256乘法和两个256加法,而FMA需要乘法器加法器分别执行才能完成,最终在图中所示的port0和port1输出结果,而int型SIMD加法则可以在port0和port1发射,所以两条256int加法,但port3的不能执行复杂指令的int SIMD加法。
Int型乘法则在port0上发射,只有一条指令的吞吐,而逻辑指令则可以在四个端口执行,以此得到表格中表示出的吞吐值。实际上AES单元也位于FP单元的0和1端口,这里也要说明AMD的功能指令执行后端端口较多,这意味着通过SMT挖掘的ILP潜力更高,这有利于得到更高的SMT效率。
虽然除法单元的移位规模不确定,但通过AIDA64的instruction dump可以测量出大致的指令延迟,Matisse在除法指令延迟上与Intel目前基于Skylake微架构产品差异并不大。(throughput吞吐延迟指的是重复执行操作中可以执行下一条指令所需要等待的时间)
数值为latency/throughput(Cycles)
“更深”的架构
而微指令缓存(uop cahce)达到了4K条指令,这使得在分支预测错误和指令循环的情况下提高效率,这个在数目上超越了Intel Skylake,在数值上也超过了IceLake,配合新设计的分支预测器,也被命名为TAGE分支预测器,而上代AMD Zen是基于感知器的分支预测原理,而实际上这两种分支预测原理都不是新鲜事物,上代AMD将基于感知器的分支预测器与当时火热的人工智能联系起来宣传,有蹭热点误导宣传的嫌疑。
而TAGE是标记几何历史长度分支预测器,是最有存储效率的全局历史信息分支预测器,由一个base 预测和M个tagged预测表Ti(1<i<M)构成,(base是PC索引的2位计数器双峰预测)
TAGE在预测关联度的branch时很有效。但是,TAGE在预测统计偏好的branch时效果较差,例如一些branch的相关性较差,但都偏好一个方向。这种情况下,TAGE性能比简单PC-index索引计数器性能还差。所以AMD 在 Zen 2 上采用了两级分支预测机制,原来的神经网络感知预测器依然保留作为一级分支预测器,而 TAGE 则被引入作为二级分支预测器。这将有效提高分支预测类型负载的效率。这可以被称为“更深”。
当然分支处理的性能不仅仅在于预测,更在于投机的执行效率和误预测情况下更低的流水线清空重置的惩罚,在AIDA64的基准测试中,有一项CPU Queen的测试,是一个经典的10皇后问题,即每行放置一个国际象棋的皇后,使其互相不能攻击,而在10*10的棋盘上有多少中摆法,在某种程度上,不断判定是否处在被攻击位置上的棋盘皇后测试侧重于分支预测性能,但更在于较短流水线和较小的误预测惩罚的处理器才能获得更高的分数。
结果有些令人吃惊,在单线程+未使用超线程的情况下,Intel有比较明显的优势,即使在8核心的情况下,依旧有超过频率差异的领先优势,但当16线程全开的情况下,3700X一举追平了9900KF,而3700X的频率要低9900KF大约10%,这意味着多核+超线程的情况下,AMD实际在同等多线程的同频状态下分支处理能力有超越Intel的能力。且实际不同程序的分支预测发挥的性能也有差异。
在Zen2各产品基本规格上和CPUZ截图缓存部分我们可以注意到L1指令缓存被从64KB改为32KB,但从4路组相联变为8路组相联,这一增一减一方面提高利用率和能效,但另一个方面则会降低命中率,这使得增加的uop-cache是一个重要的补充。L1数据缓存和L2缓存都没有改变,每核心32KB与512KB,但L3扩大到每核心4MB,这是一个非常有诱惑力的数字,将有效改善密集计算类型负载的效率,比如更大的矩阵可以被缓存于L3而不是内存中。
前端依旧为4个指令译码宽度,从uop cache和Uop队列dispatch的微指令数实际上是与上代一样,这意味着在“更宽这一点上”,AMD似乎并没有进一步推进,理论上的宽度是与Zen1一致的,但得益于uop Cache的增加,有利于实际程序执行中保持更高的指令队列。
整数部分正如上文提到,新增了一个AGU,而AGU部分是与整数寄存器重命名部分共用,在将指令从乱序执行部分发射到执行单元的调度器包括四个16条目ALU队列和一个28条目AGU队列,AMD也将整数的实际物理寄存器从168个增加到180个(最终微指令将需要通过寄存器重命名使用实际寄存器来执行指令,我们使用汇编操作的寄存器名往往只是一个指代),浮点依旧为160个,而在乱序重排缓冲区上,这部分是指令执行完成后,提交之前的等待区域,由于现代处理器采用了乱序执行的方法来执行指令,往往一个指令在执行完成后不能马上提交,需要等待前序指令完成并提交后才能提交,这使得重排缓冲区是现代处理器的重要性能指标,AMD从192个提升到224个条目,这与Skylake微架构完全一致,这也同样达成了“更深”的目标。
访存部分,将访存操作的Store的队列缓冲区从44个提升到48个,上代Zen为Load/Store分别 44个队列,这相比Skylake的72+56与Icelake 128+72的MOB(Load/Store Buffer)相比还有较大差距,但L2 TLB条目同样增加,达到2K个条目,当然,AMD Zen2实现了直接执行256位矢量数据指令,前端L1的数据带宽也达到了2*256(64B)bit Load+1*256bit (32B)Store。这与Skylake一致。当然我们依旧可以将其归类为“更深”,我们可以把一些要点与SKL/ICL进行对比,我们发现Zen2完全达到了SKL的标准,且在保持后端执行单元高度分离的情况下,能获得更可观的超线程提升,而Intel Skylake微架构在单个单元的吞吐,尤其是SIMD吞吐上失去了峰值优势,微结构的深度也相比Zen2没什么太大优势,这使得Skylake难以在常理上卖出比AMD更高的价格。而IceLake看上去更加优秀,但是没有桌面版本让人捉急。
缓存带宽方面,Zen2的L2与L1带宽均为32B(256bit)Load和Store,L3到L2为L/S均为16B,这与Skylake主流端的速率依旧是相同的。
当然更多人会关心分离的内存控制器会不会明显增加延迟,AMD也有自己的数据,得益于新的架构能带来更高的内存频率,延迟问题得以缓解,至少不会比上代高。
但在为了更高的内存超频上,需要将IF总线频率放宽到内存频率一半的模式,当内存频率高于3600MHz,那Fabric总线的速度和内存控制器就自动固定在1800MHz。默认如果手动设置则Fabric总线最高可以运行在1866MHz,如果内存频率高于1866X2,那IF总线和内存控制器就必然只能是异步模式,内存控制器的速度减半,如4000或者4266,内存控制器频率就是理论上2000Mhz/2133Mhz的半速,1000/1066Mhz,那IF总线就会是异步模式,保持1800的频率,这样整体内存延迟反而更高(IF频率难以跟随内存频率到达太高位置),即使是3866C18这样的高频内存,依旧有高达80ns的内存延迟,这种频率和时序在Intel平台上往往只有40多ns,而由于IF北桥频率的限制,这使得总体带宽被限制在IF频率1800Mhz-1866Mhz的水平上,带宽值为57.6GB/S-59.7GB/S,这使得更高频率内存的带宽加成失去了意义,但Zen2可以达到更高的内存频率无疑是对超频玩家的一个重大利好。在使用4条8GB=32GB DDR4 3600Mhz(时序17-18-18-38)的内存下,内存与缓存带宽如下:
由于安装有四条内存,内存延迟比预估的要高些,但在更新最新发布的Bios后,延迟降低至70ns
而在此处可以发现,单die的Zen2产品,内存写入带宽被大幅降低,被预设为理论值的一半,这对有大量数据写回的密集计算有一定负面影响(也为后续部分项目3700X性能较低埋下伏笔),而在双die的3900X/3950X上则没有这个问题。
而核间互连的延迟在跨越CCX的情况下的确要大些,但实际并不是高出很多,相比Intel Ring的核间延迟也不算高(8核Ring大约在40-60纳秒之间),而且CCX内的访问延迟很低,Zen2需要尽可能访问较近/本核心所在CCX的内存和缓存资源才能最大程度保证高并发项目的效率,但跨域CCX也并不是一件非常尴尬的事情了。
最终,AMD声称通过这些改进,获得了在SPEC2006 intSpeed/Base上取得了15%的IPC提升,这与Skylake相比Haswell,Haswell相比Sandy Bridge在该项目的提升类似。
SPEC2006基准测试(8.17更新)
SPEC CPU测试是由标准绩效评估公司也就是SPEC开发的CPU密集型基准测试套件,强调一个计算机系统的处理器,内存子系统和编译器性能。测试内容小到解压缩,编译程序,视频编码,分支与寻路算法,小型游戏的AI逻辑到模拟量子计算机,流体力学,天气预报,电磁学,生物科学仿真,语音识别等科学计算负载SPEC CPU 2006分为Int和FP两个大类,其中Int项目有12项,项目如下:
400项目因编译报错,并没有完成测试,这与新的在Windows环境的VS IDE环境和新编译器对旧代码标准的支持变化有关,当然我一直没有找到修复的办法,不过其实在Linux平台实际可以全部运行完成。FP项目数量更多,一共17项,项目如下:
仍然有2个项目无法编译运行,这是C++项目,显然新的C++编译器似乎在抛弃旧有的一些标准,导致较老的代码无法运行。目前Intel公司使用Intel Compiler 16.0在Windows上运行SPEC06,并且也将停止SPEC06的测试。
完成该测试对系统环境有一定需求,Windows系统并不带有C/C++和Fortran编译器,所以我们需要安装编译器,同时SPEC CPU测试的代码本身为跨平台代码,但在Windows平台不需专门选择平台构建,但在安装完成后运行shrc.bat,将存在的编译器路径或者环境变量加入,以便运行测试时可以找到编译器编译相应的测试。本次测试使用的是X86平台上的高性能编译器Intel C/C++&Fortran Compiler 19.0 Update4(AOCC暂无windows版),由于Intel编译器安装的前提是需要有一个已有的IDE,所以测试平台还安装了Visual Studio IDE和C/C++环境。
由于使用了Intel编译器,自然可以有Intel处理器专用优化选项,但这种选项AMD处理器是无法运行的,这种情况下AMD没有获得最佳优化,所以实际对比应该是双方还都会运行均可用的编译器选项进行测试
Intel处理器int项目专用优化选项:
int=base=default=default:
OPTIMIZE=/QxCORE-AVX2 -Qipo -O3 -Qprec-div- -Qopt-prefetchCOPTIMIZE=-Qparallel* -Qauto-ilp32
CXXOPTIMIZE=-Qcxx-features -Qauto-ilp32
在462项目中,使用Intel专属优化选项+Qparallel会实现高度并行优化,导致该项为多核运行,为确保Int项目为全单线程运行,得出正确IPC,在462项目将不开启Qparallel
通用编译选项如下:
int=base=default=default:
OPTIMIZE= /arch:AVX2 -Qipo -O3 -Qprec-div- -Qopt-prefetch
COPTIMIZE=-Qparallel -Qauto-ilp32CXXOPTIMIZE=-Qcxx-features -Qauto-ilp32
实际上差异主要在AVX2代码路径上,使用通用编译器选项的成绩被标注为Arch-AVX2。Intel专属优化成绩为QxCORE
int项目得分情况:
总分是采用几何平均分计算,即对应数量的得分相乘再开运行的项目的数量的得分,Geometric mean为计算得出的总分结果。
最终9900KF在Arch-AVX2选项上总分取得了15%的优势(69.92vs60.71),这与单核频率的差距依旧是类似的。
FP测试通用编译器选项
fp=base=default=default:
OPTIMIZE=/arch:AVX2 -Qipo -O3 -Qprec-div- -Qansi-alias -Qopt-prefetch
CXXOPTIMIZE=-Qcxx-features
浮点部分因部分代码开启Qparallel会导致部分实现一定程度多线程运行,所以将运行的配置文件中取消-Qparallel选项,不再命令编译器进行安全的并行代码生成,使得运行将以完全单核单线程的方式运行
在单线程运行的情况下,9900KF最终在多个项目上取胜,总分依然是采用几何平均分计算,即对应数量的得分相乘再开运行的项目的数量的得分,Geometric mean为计算得出的总分结果。总分算起来高出10.7%(102.23对92.34),但由于考虑频率的关系,实际上9900KF同频性能落后3%。
接下来我将进行SPEED单实例下最快速度的测试,也就是开启-Qparallel,同时在416,433,454,465,481这五个项目中不开启parallel优化(因为这五个项目在Arch-AVX2定义下开启Qparallel实际会下降),进而得出了最佳的Arch-AVX2选项的成绩。
实际上最终成绩依旧是3700X直接打平了9900KF,两者相当,成绩有了明显提升,双方来到总分118分的水平。也就是当实现多线程后,这时超线程也得以介入到运行中,AMD更加分离的后端使得SMT/超线程更好的利用闲置后端,进一步挖掘了ILP潜力,这使得此时Zen2的同频表现看上去已经好了很多。这种情况在之后很多测试中都将出现。
加密解密性能测试
加密解密性能在日常中更多时候我们感觉自己用不上,但实际在网页浏览,即时通讯过程中经常会有加密和对发送的消息解密和校验的操作,AMD在架构上对AES配置了双倍的处理单元,并支持SHA指令集,AES和SHA均为基于XMM寄存器的专用计算指令,AES指令支持AES-128/192/256,SHA指令支持SHA1,SHA2-256,但不支持SHA3-512,此类计算需依托通用计算单元处理,使用AVX/AVX2/AVX512来获得更高速度,Intel支持AES指令集,但目前主流产品均不支持SHA指令集,而是使用AVX2指令集来支持,加密解密计算同样有时会对内存性能敏感,这让3700X与9900KF的表现变得非常有趣。
在AES性能上,均使用AES指令集,在AIDA64上,AMD发挥出了双倍AES单元的威力,但在内存负载更高的sisoftware的AES测试中,双方最终相当,但3700X依旧小胜9900KF。
在SHA性能上,AMD可以使用SHA指令集,而intel使用AVX2指令集进行计算,SHA3-512由于不被SHA指令支持,所以均使用AVX2指令集计算,Intel在SHA3这个必须使用通用计算单元计算的项目上无论是sisoftware还是AIDA64的算法都取得了明显胜利,而在SHA指令集可以发挥作用的项目上,使用AVX2进行处理的Intel处理器在SHA2-256上明显慢于SHA1,这导致其明显负于3700X。
理论科学计算性能
GEMM一般矩阵乘法,FFT快速傅里叶变换以及其他相关的矩阵变换是科学计算性能的重要理论指标,随着计算数据集的大小不同,对CPU的AVX+FMA性能,内存容量和内存带宽,CPU频率都有一定的需求,根据不同的数据集和优化等级,选用MKL Benchmark中的经典高斯消元法计算线性方程解的Linpack,SIMD优化的圆周率计算软件y-cruncher,sisoftware的GEMM,FFT与N体模拟以及基于曼德勃罗集合的SIMD计算负载来进行测试,
相对来说,GEMM与Linpack的计算更适合使用FMA指令(相对而言,不是绝对),正如前文所说,FMA的计算,Intel的设计会更优一些,而反之则AMD会有一定优势。
Linpack,或者说现在经过高度向量化和多线程并行处理的HighPerformance,可以很好利用向量计算单元而非标量计算单元,高性能计算要想达到足够的并行度,密集的数值计算必不可少,HPL使用高斯法求解线性方程,这种方法通过线性方程组的初等变换,即
(1)用一非零的数乘以某一方程
(2)把一个方程的倍数加到另一个方程
(3)互换两个方程的位置
最终使得每一个方程都至少比上一个方程少一个未知量,这种方程称为阶梯型方程。在阶梯型方程组中,每一行的第一个未知量称为主元,其余的未知量称为自由变量。阶梯型方程组的解是比较容易求得的。将线性方程组通过初等行变换化为同解的阶梯型方程组的过程就称之为高斯消元法。,这类计算将大量使用乘加或者乘减计算,将大幅提高FMA指令的利用机会,本次测试采用的HPL基于目前最强大的线性代数数学库MKL编译,测试从1000未知数到45000未知数的求解速率,基于双精度浮点数格式,由于基本使用FMA单元进行计算,超线程/SMT介入机会极低,而在实际测试中,尽管均为AVX2 FMA 2*256FMA性能,但3700X最高达到372Gflops,9900KF以最高503Gflops取得了较大优势。
而在Sisoftware中的GEMM,FFT,Nboy测试项目中,GEMM矩阵乘法上intel的确存在较大优势,FFT则基本符合频率差带来的差异,而N体模拟则相对来说9900KF处于一定下风。同频性能不敌3700X,FP64情况下甚至不敌3700X,从FP32到FP64的表现也可以看出9900KF对3700X的优势在缩小,这不得不说Zen2的大缓存起到了一定作用。
而在基于曼德勃罗分形图集合算法的SIMD多媒体计算测试中,3700X也非常接近了9900KF,其表现可圈可点,综合来看基本上可看做是频率差带来的差异,两者同频性能上没有明显差异。
Y-cruncher圆周率计算
这款圆周率测试软件采用SIMD优化的楚德诺夫斯基Chudnovsky算法来计算极高位数的圆周率,并在今年使用该软件计算出了31.4万亿的有记录的圆周率最长位数,我们使用2.5亿和25亿位的计算规模来对比,2.5亿位实际上对于现在的高频多核处理器来说已经遇到了并行加速比下滑的瓶颈,而25亿则更适合更多核心处理器的发挥,不过对比的处理器均为一样的内存配置和核心数,所以对比起来非常直接,由于AMD的AVX执行效率已经改进,在8核心上也不会因为双通道而遭遇相比9900KF更高的内存瓶颈(9900KF同样是双通道内存),3700X性能直逼9900K,这使得Intel正在失去一个优势项目。当然3900/3950X这样更多核心的产品受制于双通道的内存带宽,表现就会显示出内存瓶颈,性能就会差很多
Dhrystone与whetstone是一个很古老的基准测试代码,曾被用于衡量MIPS(每秒百万指令数)和Flops,但随着代码过于简单,已经被现代编译器和现代处理器缓存实现了超越常理的优化,如dhrystone测试中,处理器通过微指令融合(多个简单的微指令可以被融合为一个真正被CPU硬件执行的微指令)与微指令缓存的机制将实际每周期指令数达到了10指令/每周期/每核心以上,而我们前文说了,往往Intel实际只有4个功能端口发射指令,这显然是微融合的功劳。而浮点型whetstone则无法发挥AVX SIMD的优势,明显低估现代处理器性能,但在同样情况下进行对比,能反映双方处理器在此类型计算(数据能在L1全部命中,SIMD程度较低)下的优劣,而AMD与intel在换算成同频下基本没有太大差距(实际同频应该还略高),9900KF的优势基本来自于频率优势。
财务与数理统计分析计算性能
在财务期权分析中,二项式期权分析算法和衍生的经典布莱克斯科尔斯期权分析法,蒙地卡罗期权分析法被广泛使用,有兴趣的可以查阅链接的内容,了解布莱克斯科尔斯期权定价方法,和Intel针对其向量化处理的文章
https://software.intel.com/en-us/articles/case-study-computing-black-scholes-with-intel-advanced-vector-extensions
实际表现看3700X非常优秀,两项成绩不仅同频更高,在最终成绩上也超越9900KF的成绩
工作站负载综合基准测试
这是SPEC组织于去年推出的工作站负载基准测试套件,工作负载包含了多个第三方或相应开发的测试场景,可以测试CPU,图形,I/O和内存带宽等方面的性能。工作负载按应用类别划分,包括媒体和娱乐(3D动画,渲染),产品开发(CAD / CAM / CAE),生命科学(医学,分子),金融服务,能源(石油和天然气)的一般操作和GPU计算。测试会为每个测试生成单独的分数,并且基于一部参考机器计算每个类别的综合分数,产生“更大更好”的结果,考虑内存硬盘和显卡配置的不同,对比数据以CPU计算项目为准,存储和GPU性能项目省去,下表简单介绍一下测试项目的基本概况
实际结果来看,9900KF在8项测试中取胜,7项测试3700X取胜,2项打平,而octane这项3700X出现报错,无法给出成绩,从结果来看3700X无疑是令人惊叹的表现,与9900KF有来有回,如果不是有项目出错,表现就更加完美了。
应用之视频与图像处理
在使用3.1 RC+3版本的X265编码器转码1080P H265视频的测试中,使用AVX2进行转码,3700X表现也是不错的,仅以微弱劣势负于9900KF
而在图像处理算法负载中,使用AVX2与FMA指令进行的图像处理算法,Intel拥有非常出色的表现,9900KF在大多数项目上取得了较大优势。
应用性能—渲染
渲染是非常常见的一种良好支持多线程,且为一般人熟知的高性能计算应用,我们首先使用的是基于Embree API打造的标杆渲染器Ospray的表现,该渲染器由于是Intel开发,且可以直接调用Intel Embree最新的版本进行渲染,对此我也可以将Embree进行了两种形式的编译,一种为使用AVX但不使用FMA的形式(针对类似SandyBridge架构的执行方式,其不支持FMA但支持AVX),一种则没有限制,使用AVX2,在条件允许的情况下也可使用FMA指令,运行ospbenchmark.exe,使用一个场景进行渲染测试,结果数值为渲染每帧时间(1000除以该数值即为帧数),而实际结果也的确一定程度印证了之前的推测
在使用AVX的文件中,9900KF相比3700X快8.3%,考虑大约10%的频率差距,Intel在考虑了多核与SMT/HT的同频性能上依旧落败,但在使用AVX2并开启FMA的测试中,取得了15.4%的优势,这也成功夺回了同频性能优势的地位,接下来的渲染测试则虽然都使用Embree作为其光线追踪和毛发处理的渲染库,但实际表现对Intel来说不容乐观。
Cinema4D R20
作为AMD发布会重点演示项目,该项目自然是十拿九稳,3700X在PBO模式睿频下自然不差于9900KF,甚至略微超出。
Blender渲染
选用两个场景即splash和Gooseberry进行测试,采用2019年5月23日编译的2.79.7版本,3700X的表现基本与9900KF相当,当然考虑到频率的差异,Intel在多核与SMT/HT的同频性能上则很显然落败。
Vray4 基准测试
9900KF在Vray4的最新基准测试中击败了3700X,但优势极小,换算同频依旧会小幅落后
日常体验与常用家用负载基准测试
采用PCMark10作为日常程序,网页,视频,办公和基本图像视频处理负载的benchmark,最终单核频率更高的9900KF依旧取得了一定的优势,但也在视频会议,照片编辑这两个子项上9900KF落败于3700X。
3DMark基准测试
3Dmark TimeSpy extreme和nightraid是较新推出的基准测试场景,其与CPU内存性能相关联的物理测试项目可使用基于AVX2 AVX FMA和SSE3三种代码路径(AVX2版本同样会使用FMA指令),在Timespy测试中,FMA指令实际上使用少于Nightraid,而且Nightraid相对是一个内存延迟敏感项目,这使得Intel在Nightraid上取得的优势更为显著
快速综合测试-GeekBench4
该项目子项很多,测试项目比较能测量到微架构的理论规模性能(高发射宽度的处理器分数就会很高),所以只对比单线程和多线程总分
单线程可以看出在5Ghz对比4.4Ghz的情况下,同频性能双方相当,intel凭借高频有一定优势,但在多线程+超线程后,反而Intel被弥补回了频率差,而这正是很多测试项目上一次次发生的事情。
娱乐测试之CPUZ新版基准
CPUZ自带的跑分,最新版支持最新的AVX2/AVX512指令集,包含FMA指令,但实际负载代表性不强,仅供参考,AMD在AVX2项目上相比2700X提升不少,但明显低于9900KF。但SSE项目则再度超越了9900KF。
SSD随机性能测试
将三星970EVO Plus安装于9900KF平台与3700X平台测试在不同队列深度和访问线程数下的表现进行对比,测试其磁盘I/O性能,使用crystaldiskmark设置为单线程多队列深度和单队列深度多线程以及多线程多队列深度的情况进行测试
在单线程多队列深度下,AMD平台在队列深度提高到QD4或QD8后能到达相比Z390平台更高的峰值
在多队列多线程的随机写入中,在数值提高到一定程度后Intel和AMD平台均有大幅下降,但读取的性能则十分接近。
而在单队列多线程测试中,Intel平台夺回了一定的优势。但总体来说,AMD平台在NVMe SSD性能上已经没有什么劣势,更重要的是AMD还支持PCIe4.0的SSD。
额外性能之事务内存扩展
其实这一项测试相当于Intel可以使用独有技术,测试使用不同的锁和更新算法测量内存子系统的事务吞吐量。它显示了新的事务同步扩展(TSX中的HLE和RTM模式)对现代多线程操作系统和应用程序中使用的锁定机制的改进。
测试基于B-tree性能测试,并测量主要操作的性能(搜索/读取、插入/修改、更新/修改)。将修改概率(插入+更新)从0.0(0%,始终读取)修改为1.0(100%,始终修改),可以使用各种锁(同步机构)并测量其开销。锁的设计越好,发生的串行化就越少,因此表现出的多线程性能越好。硬件锁可以动态地确定何时序列化,而基于软件的锁通常只使用静态信息,因此会出现不必要的序列化。
但是,TSX主要解决的是粗粒度锁下的“假”数据冲突问题,如果原本不需要细粒度的锁,或者产生冲突的条目少,“真”冲突概率高,那么使用TSX的收益不大。
测试结果并没有悬念,支持TSX的处理器会有绝对优势,此时平均内存事务吞吐大幅领先。但TSX的应用并不常见。
温度与功耗?
此项使用AIDA64 FPU拷机为例,在基础频率,安装4条内存的情况下,录得77瓦的总CPU功耗,CPU温度在50多度。
但同为3.6Ghz情况下,Intel 9900KF功耗69瓦,这有些令人震惊了,有点疑问。
而在开启PBO的情况下,CPU运行在4.15Ghz 1.35V电压上,功耗136瓦,温度会不断提升接近80度。
7月17日:而这个功耗值在得到之后我有些不太确定,因为有些偏高,在更新Bios后,3.6Ghz基频下CPU功耗应当为62瓦,4.15Ghz下122瓦。
总结
3700X的优势非常明显,那便是性价比极高,但换到Zen2架构来说呢?可以总结如下几点特点:
1,单线程性能得益于不亚于Skylake微架构的buffer和流水线宽度与深度,访存性能的提升,在同频单线程性能下,大部分应用都能持平Intel主流采用Skylake client架构的产品。
2,得益于分离式后端和四个AVX执行单元的设计,在SMT(同步多线程)配合下,即使单线程性能略低或没有优势,也能因在SMT中获得更高收益而取得超越Intel的多核+超线程同频性能。
3,使用FMA的密集计算,会相对有些吃亏,SMT(同步多线程)的提升也相比Intel没有优势
4,更大的缓存在游戏和科学计算中都有巨大的潜力,可能可以弥补FMA性能的负面影响.
5,频率提升空间有限,制约部分产品的吸引力,高频内存因分频的内存控制器,实际更像是仅仅一个高频数字而已,带宽和延迟反而在超过3733后有负面影响。
6,不受目前漏洞修复的影响,磁盘随机性能有可能比Intel表现更好。
7,单die产品内存写入带宽被减半,影响部分需要大量回写数据的计算负载,双die产品核心较多但内存带宽依旧有限,所以需要更谨慎考虑自身任务是否适用Zen2产品。
8,7nm加成下,不等于同频下一定功耗更低,而由于密度更高,发热密度也更高,这对散热的需求并不低。
谁的产品能代表最强的8核芯片呢?综合来看,9900K/9900KF依旧在多数情况下强于3700X乃至3800X(3800X性能在比3700X高0.1Ghz的水平上,差距极小),但这更多是频率更高的原因,而且3700X性价比明显,在便宜1000元的情况下,提供PCIe4.0支持,在多数情况下你可以把它当做一颗4.2-4.5Ghz情况下的9900KF,而在9900K的价位上,拥有核心更多的R9 3900X,当然,如果你的应用恰好是Zen2缺陷的部分,那当然需要谨慎,但对于仅需要跑点主流跑分,开心就好的普通用户,花更低的钱获得不亚于更高价格产品的理论性能,在配合现在已经良性的AMD市场宣传,这无疑是一个引爆市场的好产品,包括R5 3600,R7 3700X, R9 3900X,都很可能引领他们各自价位的市场。
而在未来如果有机会,还将测试双die版本的Zen2产品的表现。以及Zen2的游戏表现,但游戏往往不是CPU占决定因素的项目,特效高低,GPU的性能都可能得到不同的结果,所以存在难以复现和结果不一的特点,所以一直也不是我的重点测试对象。