即使在服务器市场也是高核心数的CPU称雄。单线程高性能表现依然值得拥有。它确保在任何情况下都能保证一定的性能发挥,而不是仅仅为了"embarrassingly parallel(易并行计算)"软件的"throughput situations"(吞吐情况)
SPEC CPU2006以HPC和工作站为主,它包括了针对整数运算的各种工作负载测试。为了尽可能贴近一些关键软件的编译性能,而不是试图去达到更高的分数。因此在测试时:
使用64位的GCC:目前为止Linux使用最多的针对整数工作负载的编译器。好且全面的编译器是不会试图破坏测试(libquantum…)或者偏向某一架构。
使用版本号为5.4的GCC:Ubuntu 16.04 LTS标配编译器(注意一点,在早期的文章中使用的是4.8.4)
使用-Ofast -fno-strict-aliasing优化:在性能和保持测试简单之间达成一种平衡。
增加"-std=gnu89"可移植性指令来解决在一些测试中GCC5.x编译器中无法编译的问题。
运行一次测试。
这个测试的终极目标是在"非积极优化"的应用测试中测试性能,因为一些原因,"对多线程不太友好的"测试一直让我们拭目以待。首先是单线程测试结果,很重要的一点是感谢现在的Turbo技术,所有的CPU相对基础频率来说都运行在更高的频率上。
The Xeon E5-2690 ("Sandy Bridge")能够加速到3.8GHz
The Xeon E5-2690 v3 ("Haswell")能够加速到3.5GHz
The Xeon E5-2699 v4 ("Broadwell")能够加速到3.6GHz
The Xeon 8176 ("Skylake-SP") 能够加速到3.8GHz
The EPYC 7601 ("Naples") 能够加速到3.2GHz
首先让我们单纯看一下数字。
测试结果
原始的SPEC数据在密密麻麻的数据表中处理起来很费劲,因此用百分比的方式来对比基础数据看起来更直观。Sandy Bridge EP(Xeon E5 v1)已经有五年历史了,由于定位为将要被取代的服务器芯片,因此用它的数据作为100%的的基准,然后去对比其他架构的单线程性能。
首先是评估不同架构的IPC(Inter-Process Communication,进程间通信)效率。考虑到EPYC的核心运行频率相比英特尔低12-16%的情况下取得了90%左右的性能,因此可以理解为Zen架构的IPC性能很强。
作为英特尔最新的CPU,需要注意到Sky-lake SP核心拥有相对上一代"Broadwell"更大的二级缓存所带来的影响,特别是在perlbench,gobmk,hmmer和h264ref项目上取得的优势。
同时,由于新的GCC 5.4编译器,英特尔在"403.gcc benchmark"的表现可视为新架构的一种退步。虽然Xeon E5-2699 v4的表现相对"Sandy Bridge"架构的Xeon E5-2690只有83-95%,但这一次进一步倒退到70%。另一方面,AMD的Zen核心在运行GCC时表现的非常出色。在混合指令占据高百分比((比较容易预测)的分支指令中,比如,在占用的空间更小,并且对低延迟(大多数是L1/L2/8MB L3)依赖较高的指令表现很好,在对分支指令预测影响更高的工作负载中(某种程度上更高比例的分支指令丢失)-gobmk,sjeng,hmmer-在"Zen"上运行的也很好,相比上一代AMD架构,分支指令预测错误惩罚要明显更低,这些都要感谢uop缓存。
另外在指针追逐测试中-XML处理和路径查找需要更大的三级缓存,这是EPYC表现最差的项目。
还需要注意的是事实上在低IPC omnetapp(可理解为互联网的sim卡)项目上,Skylake-SP要比Broadwell慢,不过依然比AMD的EPYC要快。Omnetapp受益于Broadwell巨大的三级缓存,这就是为什么在Skylake-SP上会出现性能下降的情况。当然,这也意味着AMD EPYC处理器那种拆分式的8*8MB 三级缓存表现的要比英特尔最新的CPU慢很多。这个结论同样在视频编码基准测试"h264ref"项目上同样符合。但是编码测试更看中DRAM带宽。事实上因为EPYC拥有更高的DRAM带宽确保其不会落后英特尔太多。
总而言之,Zen架构在单线程的表现是出色的,但是对于较低的Turbo频率和"更小"的8*8三级缓存上还是感到有点失望。