由于核心数和内存通道数的不断增长,用Stream bandwidth benchmark来测试最新的CPU的全部带宽潜力变得更加困难。因此在64位的版本号为17的Linux,GCC 5.4上的英特尔编译器(icc)编译5.10流源代码。下列编译器指令用在icc上。
icc -fast -qopenmp -parallel (-AVX) -DSTREAM_ARRAY_SIZE=800000000
注意,这里特别增加了Array,让数据保持在6GB左右,测试中一次用AVX编译,另一次则没有AVX,结果用每秒GB表示。
同时,下列编译器指令被用在gcc上:
-Ofast -fopenmp -static -DSTREAM_ARRAY_SIZE=800000000
注意一点,在EPYC系统上我们用的DDR4 DRAM运行在2400GT/s(8通道),而英特尔系统的DRAM则是在2666GT/s(6通道)。因此双路AMD系统理论上内存数据为每秒307GB(2.4 GT/s* 8 bytes per channel x 8 channels x 2 sockets),英特尔系统则是每秒256GB(2.66 GT/s* 8 bytes per channel x 6 channels x 2 sockets)。
Stream Triad测试
AMD跟AnandTech说他们不是非常相信使用ICC编译器获得的结果,如果使用他们自己完全定制的编译器可以达到250GB/s。比较有意思的是,英特尔宣称优化过的AVX-512可以达到199GB/s(Xeon E5-2699 v4搭配DDR-2400是128GB/s),但是这样的带宽数只适用于特定的HPC。
所以实际上评测的数据更能反映现实。128线程,8通道 DDR4内存给AMD EPYC处理器大概25%~45%的带宽优势,这可能与大部分的服务器应用没什么关系,但是在很多稀疏矩阵类HPC(超算)应用中却能带来很多好处。
最大带宽是一码事,但带宽必须要尽快投入使用,为了更好的让人理解内存子系统,因此按照不同的核心数来和线程数进行一下梳理。
新的Skylake-SP提供的单线程带宽很一般:虽然测试中用了更快的DDR4-2666内存但是只有12GB/s。而Broadwell-EP用了更慢的DDR4-2400内存却能拥有50%更多的带宽,很显然Skylake SP需要更多的线程来获得尽可能多的可用内存带宽。
再来看AMD这边,如果需要的话,Naple核心的单线程可以达到27.5GB/s。这非常有前途,这意味着在单线程层面,HPC的应用可以获得充沛的带宽从而运行程序足够快,但是一个四核心的CCX可以调用的带宽只有30GB/s。
总体来说,英特尔Skylake-SP Xeon的内存带宽表现相比EPYC更加线性,所有的Xeon核心都可以访问所有的内存通道,因此内存带宽直接根据线程数提升。