兆芯KX-U6780A的单核性能略低于Intel T7500,UOS比Ubuntu更优化
之前我用GCC编译器、SPEC_CPU 2006测试过兆芯KX-U6780A的性能,在UOS得到的int_base和int_peak成绩分别为15.6和17.5,这个成绩和兆芯官方公布的使用ICC编译器测得的成绩差距很大。
兆芯官方只公布了3.0GHz的KX-U6880A的使用ICC编译器测得的int_peak测试成绩,然而市面上能买到的只有2.7GHz的KX-U6780A,从未见过KX-U6880A。兆芯官方公布的成绩是29.2@3.0GHz,如果折算到2.7GHz的频率,就应该是26.26。对于SPEC CPU测试,使用GCC编译器的成绩一般是ICC的70~90%左右,我当时强行按低位估算,认为兆芯官方公布的成绩是合理的,我使用GCC测试得到的成绩也是合理的。
但是,我自己明白这样的解释并不十分合理,兆芯官方公布的ICC编译器测试成绩比我用GCC测试的高出太多,这个成绩差距一直如鲠在喉, 因此我这几天使用ICC编译器再次测试KX-U6780A,探究它的真实性能水平。
为了令测试成绩更加可靠,减少误差影响,我使用最新版本的ICC编译器,分别在UOS专业版(1050)和Ubuntu 22.04 LTS上进行测试。并使用完全相同的软件环境对2007年的Intel Core2 Duo T7500进行测试,还在SPEC官网上找到Intel Core2 Duo T7700的测试成绩共同作为参考。
测试使用ICC 20211109版本编译器,int_base是常规测试,没有开自动并行,也没有使用第三方库。int_peak测试除了针对每个项目单独配置优化参数之外,还启用了二次编译优化、对462项开启自动并行,对471、473、483这三项使用了jemalloc库。
编译优化参数基本上在UOS/KX-U6780A上进行调整,然后仅把-msse4.2修改为-msse3就给T7500使用,因此编译优化参数对T7500不算很友好。下图是基本编译参数,int_peak测试时对各项单独优化的参数可以在文末的测试报告中看到。

在Ubuntu上测试时,使用与UOS上相同的编译参数,但测试成绩要比在UOS上低一些。

KX-U6780A的主频比T7500高,DDR4-2666内存的速度更是DDR2-667的8倍,但从测试成绩来说,KX-U6780A并不占优。兆芯官网上3.0GHz的KX-6880的int_peak成绩为29.2,折算到2.7GHz应该有26.28。但我竭尽全力只测试出了21.1的成绩,说明兆芯官方的测试可能使用了一些秘密的技巧,不是普通的技术人员能够知道和掌握的。
至于我测试出来的成绩,自认为没有疑问。看看作为参考的T7700的SPEC CPU 2006测试成绩就知道,它的主频比T7500要高0.2GHz,但SPEC官网上的最好成绩却比我测试的T7500更差。我配置的编译参数应该不会比SPEC官网上的更适应T7500,但是我用的系统和编译器等都是很新的版本,成绩提高主要是软件环境优化带来的红利。以及在测试int_peak时使用了jemalloc库,也进一步提高了测试成绩。
既然T7500与T7700的成绩可以相互印证,那么在相同软件环境下,使用相同编译参数测试得到的KX-U6780A的成绩自然也是真实可靠的。
而GeekBench和p7zip的测试成绩,我认为主要是8倍的内存性能给KX-U6780A带来了正向增益。即使如此,考虑到KX-U6780A的主频为2.7GHz,而T7500仅为2.2GHz,计算为每GHz的性能后,比较单个核心KX-U6780A仍然低于T7500。
VIA的CPU当年是与Intel ATOM系列对标,以VIA为商标的最后桌面CPU产品在2011年发布,沿用了VIA旗下Centaur设计的“Isaiah” 核心,设计水平弱于2007年的Intel Core2 Duo合情合理。兆芯ZX-C系列于2016年发布,仍然是使用的“Isaiah” 核心。但是兆芯KX-U6780A是2019年发布,核心设计水平却仍然弱于2007的Intel Core2 Duo。如果假设KX-U6780A仍然是沿用的VIA/Centaur“Isaiah”核心,那么这样的性能表现就合理了。
就像以一款解放前的汽车发动机为核心设计汽车,为它配套较新的底盘(变速、传动)、车身(外观、风阻)、电气设备(控制、安全)等,这样的汽车在低速(低负载)行驶时,驾驶体验不会比常规的新车差多少,只有“速度上不去、油耗下不来”这样的缺点。例中的这辆汽车,所有的性能及体验提升都来自于外围组件,是工艺革新、技术进步带来的红利,而非发动机本身有改进。如果KX-U6780A相对于10年前的VIA/Centaur产品只是升级了DDR内存控制器、PCI-E控制器、增大了缓存、堆多了核心、更新了工艺、提高了主频……那也是吃了大环境的技术及工程水平提升的红利,而不是CPU核心设计水平有提升。
下面再来详细对比一下SPEC CPU 2006 INT的单核测试成绩:
首先是int_base成绩,base测试要求所有测试项目的编译参数一致,不能针对每个项目单独优化。这里是进行的单任务测试,在不开启“自动并行化”的时候,测试的就是单核心的性能。总成绩的计算方式是把各个子项成绩求几何平均。


Ubuntu的优化水平不如UOS,同款CPU总成绩低于UOS, 且对于462子项极不友好,没能发挥出CPU应有的向量计算性能。
下面的int_peak测试可以展现使用ICC编译器时,自动并行化的可怕威力。UOS下KX-U6780A的462子项成绩从70提到了到200,因为KX-U6780A有8个核心。Ubuntu对自动并行化看起来不太友好,相同的编译器、相同的编译参数、相同的CPU,自动并行化对性能的提升幅度远低于UOS。


因为KX-U6780A有8个核心,而T7500只有2个核心,在UOS下的int_peak测试中,462子项的多核加速比很低,因此T7500的总成绩略逊于KX-U6780A。这不能说明KX-U6780A的单核性能更高,只能说明核心数量越多,开启自动并行化后得到的成绩提升越大。
462这一项测试在Ubuntu上的成绩低于UOS,且自动并行化的运行效率远比UOS差。UOS下KX-U6780A单核运行462这一项时成绩超70, 8核自动并行462这项成绩超过200,而在Ubuntu下仅分别为66和82。说明ICC编译器的自动并行化也没有那么无敌,操作系统就能轻松抹平差距。可能Ubuntu的服务器版本没有这样的问题?纯属猜测。
再贴一张KX-U6780A在Ubuntu下测试p7zip的图,与上面表格中在UOS下的相同测试相比,Ubuntu的成绩同样要差一些。

注意上图中最右边窗口中显示的CPU信息,“厂商ID”这一栏与VIA/Centaur的其它CPU相同,都是“CentaurHauls”,可谓一脉相承。有人解释说因为Windows和一些软件中有一些对Centaur的优化,兆芯才“伪装”成“Centaur”,要不然就什么软件优化都没有。这种说法纯粹是哄骗外行,看到CPU信息下的“标记”那一栏了吗?标记下面列出了各种扩展指令和特性支持,这些才是是否启用相关优化的判断标志。Intel CPU的“厂商ID”历来都是“GenuineIntel”,如果依靠“厂商ID”来判断是否启动特定的汇编指令优化,那么应用软件就会在奔腾4上使用avx-512了。
按照惯例,本人测试SPEC CPU是一定要贴出测试报告截图的,测试报告中包含了详细的软硬件环境及以编译参数信息,有条件的网友都可以验证测试成绩是否可靠。而不像某些个人或企业,在PPT或表格上只写上数字就表示成绩真实无误,也不像某些人自称实测却怎么也不给出测试条件的相关信息。
测试报告 KX-U6780A / UOS:

测试报告 KX-U6780A / Ubuntu:

测试报告 Intel Core2Duo T7500 / UOS:

测试报告 Intel Core2Duo T7500 On Ubuntu:
