一直一来,缺芯少魂一直是中国信息产业的心病,中国的CPU市场也一直被Intel、ARM等国外厂商垄断,龙芯、申威、飞腾等国产CPU在社会上也往往遭到别有用心之徒诸如“打磨芯片”、“骗经费”、“政绩工程”等舆论抨击。不久前,采用申威26010的神威太湖之光在TOP500刷榜,飞腾也公布了采用ARM指令集的飞腾1500A和飞腾2000,龙芯的3A3000也顺利完成流片,那么这些国产CPU的性能到底如何呢?
  
  如何评价CPU

  如何评价CPU的性能呢?从体系结构的角度来看,有个指标叫MIPS,即每分钟执行多少条指令,执行指令数量越多,性能就越好,但这存在一个问题,当CPU指令集不同的时候,比较MIPS就意义不大了——比如A一条指令只算一个加法,B一条指令能做一个1024点的FFT。特别是在不同指令集的情况下,如何评价CPU的性能呢?
  评价CPU性能必须考虑应用的多样性,比如科学运算重视双精浮点性能,但是如果数据供不上,运算能力再强也没用;比如PC日常使用更偏重于定点性能;再比如计算中心多任务环境关注的是吞吐率......因此单纯用某一个指标来衡量CPU性能是不科学的,必须综合考量。
  业界也推出了很多基准测试程序,比如针对CPU的SPEC,针对嵌入式应用的EEMBC等。SPEC测试是比较权威的测试程序。和一些黑箱测试程序调整计分方式和计分权重后测试结果就发生变化不同,SPEC测试到底跑了什么程序,以及各项程序跑分和计分方式全部公开透明,而且覆盖范围广——SPEC2000有12个定点程序,14个浮点程序,而且有比较强的代表性,比如gzip、vpr、gcc、mef、eon等。而SPEC2006则把定点程序扩展到14个定点程序和16个浮点程序。
  在计分方法上,SPEC在计分上采用归一化的几何平均方法来进行综合性能评估——将不同CPU的执行时间与参照对象相比较后得到一个相对值。SEPC2000的参照对象是Ultra SPARC 2工作站的主频为300Mhz的CPU。如果运行测试程序1的时间是参照对象的十分之一的话,测试就是1000分,测试程序2的耗时是参照对象的八分之一的话,则为800分.....最后再算几何平均——比如SEPC2000有12个定点测试,就将12个测试成绩相乘再开12次方,SPEC2006相对于SPEC2000而言仅仅是扩展了几项测试程序,使测试更加科学合理。这里,我们以三星猎户座7420和华为麒麟950为例计算SPEC测试成绩。
  
  以上为两款芯片的跑分成绩,由于两款SOC均是购买ARM的IP授权做集成的产物,猎户座7420的成绩其实是ARMCrotex A57的成绩,华为麒麟950则是ARM Crotex A72的成绩,将12个子项相乘再开12次方后,得到ARM Crotex A57在2.1G主频时定点测试成绩为1376分,换算一下就是655/G,ARM Crotex A72的定点成绩则为749/G。
  不过SPEC也非尽善尽美,测试存在容易受编译器影响的问题。举例来说,SUN曾经通过编译器优化提升SPEC跑分50%,龙芯的某一代产品也曾用自主研发的LCC编译器,比使用GCC定点跑分提升了60%。另外,即便同样是GCC编译器,不同版本的GCC编译器下,测试成绩也会有很大差异。笔者认为,出现这种现象的根源并非SPEC测试的缺陷,反而用事实说明了,最后的用户体验是软件+硬件的结果,充分说明了软硬件磨合的重要性。
  可能有的读者对不明白什么是编译器,在此说明一下,程序员在编程的时候写的是编程语言,但是计算机运行的时候是机器语言,编译器就是将程序员的编程语言翻译成机器语言的工具。
  龙芯、飞腾、申威和Intel的比较

  现在,我们先就龙芯和飞腾的桌面芯片与Intel的CPU做比较。由于桌面芯片更加注重单线程性能——单核性能是基础,很多程序都依赖单进程的处理速度,如果单核性能上不去,核心数再多也没用,这也是AMD 六核、八核芯片打不赢Intel四核芯片的原因。另外,对于桌面芯片来说,日常使用中更加倚重定点性能。因此,在这里我们以单线程实际测试的定点成绩做比较。
  在编译器为GCC5.2的情况下,Intel I54460在3.2G主频下SPEC2006的定点成绩为32分;在编译器为GCC4.4.7的情况下,龙芯3A3000在1.5G主频下的定点成绩为11分;在编译器为GCC4.8的情况下,飞腾1500A在1.8G主频的定点成绩为10分。诚然Intel在编译器上占有一定优势,这里为了方便比较就忽略编译器带来的差异了,就定点性能而已,龙芯3A3000和飞腾1500A的单线程性能大约为Intel I5 4460的三分之一。
  差距在哪里呢?主要是在主频上,其次在微结构。龙芯3A3000的主频只有1.5G,飞腾1500A的主频只有1.8G,而Intel I5 4460的主频达3.2G,而且如果需要的话,还能睿频到3.4G,很显然,在主频上龙芯3A3000只有Intel I54460的一半不到,而飞腾1500A也只有Intel I5 4460的一半多一点。
  微结构也就是常说的CPU核,在主频相同的情况下,两款CPU的性能差异取决于微结构的差异,像龙芯GS464E、Intel的Haswell、ARM的Crotex A72都是微结构。龙芯3A3000在1G主频时,SPEC2006测试定点成绩为7.3,飞腾1500A主频为1G时,SPEC2006测试定点成绩为5.5,而I5 4460在1G主频时的定点成绩为10。可以说,龙芯的GS464E大约有Intel的Haswell性能的73%,而飞腾的FTC660大约是Intel的Haswell性能的55%。
  那么如何提升主频和微结构呢?提升微结构需要在指令分支预测,寄存器重命名,多指令通路,乱序发射,功能部件,访存性能等方面做文章,目的是使整个的指令流水的效率尽可能高,因为如果有一个环节设计不好或不匹配的话,整个系统效率就发挥不出来,这是CPU的核心技术。提升主频很大程度上要依赖后端设计能力,也就是要指物理层电路的具体优化,包括单元布局、时序优化等放方面下苦功。
  接下来就国产服务器CPU与Intel的服务器CPU做比较,以国产服务器CPU中多线程性能最强的飞腾2000为例。在编译器为GCC4.8的情况下,飞腾2000在2G主频的单线程SPEC2006测试成绩为定点12.4,浮点11.3,换算一下飞腾2000的CPU核FTC661的定点成绩为6.2/G,和Intel Haswell 10/G的成绩依旧有不小的差距,由于飞腾2000为64核芯片,在单线程性能相对有限的情况下,依靠核心数量的优势,FT2000的多线程SPEC2006测试成绩为定点570,浮点482,全芯片性能与Intel Xeon E5-2695v3相当,这是非常了不起的成绩。
  由于科学计算倚重双精浮点性能,超算芯片的比较中就以双精浮点性能为指标进行,申威26010的双精浮点性能为3T,和Intel目前最好的超算芯片KNL相当,更难人可贵的是这是在制造工艺与Intel相差2代的情况下取得的成绩,这充分体现出申威26010在设计思想上的先进性。
  结语

  在桌面芯片上,龙芯和飞腾目前最好的桌面四核芯片的单线程定点测试成绩大约为Intel I5 4460的三分之一,虽然和Intel的差距依旧比较大,但目前龙芯和飞腾还没有大型游戏等对CPU性能要求较高的软件应用,现在的性能对于绝大多数应用来说都是够用的,特别是对党政军办公电脑和一体机,龙芯3A3000和飞腾1500A的性能已经属于性能过剩了,只要软件跟得上,在党政军领域能替换Intel的CPU。
  在服务器CPU上,飞腾2000虽然在单线程性能上和Intel有一定差距,但其全芯片性能颇为不俗,能与Intel XeonE5-2695v3相当,已经是全球全芯片性能最强的ARM服务器CPU,如果ARM等国外厂商能完善其服务器CPU的软件生态,飞腾则有可能借着ARM的生态一飞冲天。
  在超算芯片上,申威26010完全可以和Intel最好的加速器KNL硬碰硬的较量。
    来源:铁流微信公众号