2017年九月份龙芯俱乐部办了一个龙芯3A主板的团购。作为多年关注龙芯的爱好者,我参加了这次团购,购买了一个龙芯3A3000的主板。鉴于目前而龙芯3A4000处理器即将流片,而目前对即将过气的龙芯3A3000处理器的性能并没有一个比较详细的评测,我使用phronix-test-suite对龙芯3A3000处理器做了一个尽可能理性、中立、客观、全面的评测,不吹不黑,不夸大成绩也不回避问题。
龙芯3A3000主板介绍
首先,还是晒晒图,回顾一下龙芯3A3000主板的模样。
图1龙芯3A3000主板照片,风扇下面是龙芯的CPU。另外两块散热片下面分别是南桥和北桥。
图2拆下风扇后,龙芯3A3000 CPU的近照,其中的LS3A3000D-LP意思是说这是一个低功耗版本的龙芯3A3000CPU
图3开机后BIOS中的信息,可以看到CPU的主频是1400MHZ,一级指令缓存64KB,一级数据缓存64KB,二级缓存4MB。
图4主板上的国产Unilc(西安紫光国芯半导体)内存条
我拿到的这块龙芯3A3000处理器不是性能最高的1.5GHz主频版本,而是性能略低的1.4GHz版本。因此,在估算龙芯3A3000(1.5GHz)的性能时,应该将我的测试结果乘以1.07。此外,需要说明的是龙芯3A3000笔记本里带的龙芯3A3000的主频被限制在了1.2GHZ。
拿到主板后,参照主板手册以及百度贴吧的手册,另外在龙芯俱乐部群和龙芯电脑用户和开发者群网友的帮助下,我装了一台龙芯3A3000的主机,并安装了Debian buster和Loongnix两个操作系统。
作为龙芯的老粉丝,我用过福珑6003的龙芯盒子以及8089D笔记本,两个机器都是用龙芯2F的处理器。从个人的体验上,使用龙芯2F的的图形界面只能说是“能用”,真正使用起来还是太慢。龙芯3A3000的性能和龙芯2F相比有了非常大的进步,不管是Loongnix还是Debian,在使用上都可以称得上是真正的流畅了。使用Firefox进行网页浏览,观看本地高清视频都都十分流畅。从用户体验上,龙芯3A3000已经完全可以满足办公、上网、听音乐、看视频这样的基本需求了。
龙芯3A3000处理器性能评测方案
和主流的x86处理器相比,龙芯3A3000究竟有多大差距呢?从性能上,龙芯3A 3000相当于哪一款CPU,即将流片的3A4000又相当与那个处理器?和其他国产处理器相比,龙芯3A3000的性能究竟是高还是低?
为了回答以上的问题,我使用phoronix test suite中提供的有关CPU性能的benchmark程序,对X270笔记本上的i5-7200U处理器和龙芯3A3000处理器进行了详尽的对比。此外,openbenchmarking网站上提供了很多不同处理器性能测试的结果,可以供人们更客观的评测系统的性能。
我在openbenchmarking网站上发现了飞腾1500A和飞腾2000+处理器的部分评测结果,在本次测试中也将对利用这些数据进行对比。作为参照,我又寻找了部分Intel J1900处理器的性能数据。
最近一段时间,兆芯处理器在性能上进步飞速,已经出了ZX-C、KX-5000以及KX-6000等多个系列的处理器,并且在网络上也有了一些测评,但在Openbenchmarking网站上我没有找到任何兆芯的最新处理器的踪迹,因此在本文中无法对比兆芯和龙芯的性能了。
为了比较两块CPU在相同主频下的性能差距,在测试中将Intel i5-7200U处理器的睿频模式关掉,去掉自动降频的电源管理,将频率锁定在2.5GHz。i5-7200U处理器最高可以睿频到3.1GHz,因此其实际峰值性能比本次测试时的数据的要高。
在测试中,我们同时关注处理器的单核性能和多核性能。最近,兆芯KX6000系列处理器在评测中根据7zip等多线程程序的测试结果,得出KX6000性能相当于i5-7400处理器的结论,但却有意无意的忽略了KX6000是8核8线程的处理器而i5-7400是4核4线程处理器。如果看单核性能,那么KX6000大致相当于i5-7400的一半。
下面是本测评中的多款处理器的基本情况对比。
Intel i5-7200U
https://ark.intel.com/products/95443/Intel-Core-i5-7200U-Processor-3M-Cache-up-to-3_10-GHz
Intel J1900
https://ark.intel.com/zh-cn/products/78867/Intel-Celeron-Processor-J1900-2M-Cache-up-to-2_42-GHz
龙芯3A 3000
http://www.loongson.cn/product/cpu/3/3A3000.html
测试使用的是7.8.0版本的phronix-test-suite。
http://www.phoronix-test-suite.com/?k=downloads
测试分别在配备了Intel i5-7200U处理器的X270笔记本电脑以及自行组装的龙芯3A3000电脑上进行,其中对龙芯3A3000的测试在Debian testing系统上进行。测试环境如表2所示:
在测试过程中,我发现了疑似龙芯实验室使用1.5GHz的龙芯3A 3000处理器在Loognix系统上进行的部分测试结果。因此,我就不再单独使用Loongnix系统对该处理器的性能进行测试了。
对龙芯3A3000所使用的编译器选项,可以参考此链接
对部分应用,在编译时采用了n32的abi,即增加参数-mabi=n32。
由于CPU性能是我最想了解的东西,因此在测试过程中主要关心能反应CPU性能的测试,而不考虑对磁盘、显卡、内存等硬件的性能测试。
测试程序介绍及测试结果分析
科学计算
1. scimark2
这个测试运行了SimiMark 2.0的ANSI C版本,它是由国家标准与技术研究所的程序员开发的科学和数值计算的基准。该测试由快速傅利叶变换、雅可比逐次超松弛、蒙特卡洛、稀疏矩阵乘法和密集LU矩阵分解基准构成。本测试为单核性能测试。
测试结果:
点此访问1
点此访问2
图5 Scimark2性能对比
测试结果如图5所示。在图中以龙芯3A3000(红色)的性能为基准(1.0),i5-7200U(蓝色)和J1900(绿色)的性能都与龙芯3A3000相比,数值越高性能越好。鉴于龙芯3A4000即将流片,根据龙芯方面放出的消息,龙芯3A4000相比3A3000同主频性能提高了30%,同时主频将从1.5GHz提高到2.0GHz。此外,龙芯3A4000还将增加256位SIMD指令,并将L3 cache从8MB增加到12MB,SPEC CPU2006的分值达到20分,达到龙芯3A3000的两倍。
http://www.ict.cas.cn/kycg/cgnb/201709/P020170926639136974767.pdf
因此,我们以将3A4000的性能设为2.0,作为性能预测的参考。
从图5的测试结果可以看出,在Scimark的Monte Carlo测试中,3A3000性能非常糟糕,只有i5-7200U的不到10%,甚至不到J1900的30%。这很不正常,可能有某个浮点运算没有使用硬件浮点,而使用了软件模拟的浮点运算。在其余的测试中,3A3000性能均与J1900相当,部分测试性能优于J1900。J1900和i5-7200U相比,虽然其主频也有1.99GHz,但单核性能只有i5-7200U的30%左右。
2.FFTE
FFTE是Daisuke Takahashi写的计算1、2和3维的序列长度为(2 ^ p)*(3 ^ q)*(5 ^ r)的离散傅立叶变换的一个包。单核性能测试。
测试结果:点此访问
3.fhourstones
解Connect-4游戏,测试处理器的整数性能。单核性能测试。
测试结果:点此访问
4. gmpbench
用GMP 6.1.2数学库进行的性能测试。注意,gmpbench只考虑程序的整数性能,不是浮点性能。单核性能测试。https://gmplib.org/gmpbench.html
测试结果:点此访问
5. minion
Minion是一个设计上具有可扩展性的开源约束求解器。单线程性能测试。
https://constraintmodelling.org/minion/
测试结果:点此访问
6. mpcbench
GNU MPC是复数算术的C库。单线程性能测试。
https://openbenchmarking.org/result/1806164-FO-LOONGSON301
multichase
This is a benchmark of Google's multichase pointer chaser program.单线程,多线程性能测试。
https://openbenchmarking.org/result/1806120-FO-LS3AMULTI28
图6 FFTE、Fhourstone、Minion、Multichase性能测试
在以上的测试中,我们找到了两个关于J1900的测试数据,其中ffte性能仅相当于龙芯3A3000的2/3, fhourstone性能是龙芯的1.1倍。从总体性能上看,i5-7200U在以上的性能测试是龙芯3A3000的2倍到4.5倍不等,集中分布在2.3倍左右,我们预测龙芯3A4000的单核性能在这些测试中能达到i5-7200U的85%左右。i5-7200U在gmpbench和mpcbench中测试中性能是龙芯3A3000的4.5倍左右,优势明显,可能与数学库或者编译器的优化有关。
8 Bullet
Bullet物理引擎. Bullet是一个开源的物理模拟计算引擎,世界三大物理模拟引擎之一。单线程性能测试。
https://openbenchmarking.org/result/1806126-FO-LS3ABULLE82
9. himeno
The Himeno benchmark is a linear solver of pressure Poisson using a point-Jacobi method.单线程性能测试。
https://openbenchmarking.org/result/1806127-FO-LS3A3000H21
10. tscp
这是TSCP,Tom Kerrigan的简单国际象棋程序的性能测试,它有一个内置的性能基准。单线程性能测试。
https://openbenchmarking.org/result/1806104-FO-LS3ATSCPD75
图7 Bullet、Himeno和TSCP测试
在这一组测试中,i5-7200U优势非常明显,除了在国际象棋性能测试TSCP上速度是3A3000的3.6倍,在其他测试中速度基本都是龙芯3A3000的4倍以上,在bullet的ragdoll测试中性能甚至达到了龙芯3A3000的30倍。我们对bullet的代码进行了分析,发现其中有大量的SIMD相关的代码以及针对X86处理器的汇编语言优化。这是bullet在Intel处理器下运行速度快的重要原因。而针对Ragdoll测试,我们发现代码中有大量的三角函数运算,而龙芯目前三角函数的计算是有问题的,没有启用硬件浮点,而是使用的软件模拟,因此速度较慢。
11. hpcg
高性能共轭梯度算法,由桑地亚国家实验室开发的面向超算的科学基准程序。多线程测试。
https://openbenchmarking.org/result/1806094-FO-LS3AHPCGD08
https://openbenchmarking.org/result/1806202-FO-LS3AHPCGO04
12. npb
NPB,NAS并行基准,是美国国家航空航天局为高端计算机系统开发的基准。此测试配置文件目前使用MPI版本的NPB。多线程测试。
https://openbenchmarking.org/result/1806097-FO-LS3ANPBDE97
13. n-queens
OpenMP版本的N-皇后问题解法器。问题大小是18。多核性能测试。
https://openbenchmarking.org/result/1806109-FO-LS3ANQUEE29
14. mafft
100个丙酮酸脱羧酶序列的比对。多线程性能测试。
https://openbenchmarking.org/result/1806108-FO-LS3AMAFFT56
15. primesieve
Primesieve使用高度优化的Eratosthenes筛法实现来产生素数。Primesieve对CPU L1/L2缓存性能进行基准测试。多线程性能测试。
https://openbenchmarking.org/result/1806103-FO-LS3APRIME23
图8 HCCG、NPB、N-Queens、MAFFT和Primesieve测试
以上的测试都是多线程的性能测试,HPCG测试中i5-7200U性能达到了龙芯3A3000的3.76倍。在NPB的测试中,龙芯在其中3项超过了J1900,另外两项不如J1900。在N-皇后问题、MAFFT以及素数筛选的测试中,i5-7200U性能是龙芯3A3000的两倍左右;如果龙芯3A4000性能能够达到3A3000的两倍,在这几个测试中龙芯3A4000将能够达到i5-7200U的性能。再次强调一下,这是多线程测试!
加密算法
16. Botan
Botan是一个跨平台的C++的开源加密库,支持大多数的所有公开的加密算法。(单线程测试)
https://openbenchmarking.org/result/1806093-FO-LS3ABOTAN50
Gnupg
用GnuPG加密文件,统计耗时。单线程性能测试。
https://openbenchmarking.org/result/1806105-FO-LS3AGNUPG86
图9 Botan和Gnupg测试
在Botan测试中,龙芯3A3000在部分项目上与i5-7200U的差距在3倍左右。在AES的加密和解密这两个测试中,和i5-7200U有近80倍的性能差异!原因在于i5-7200U存在AES加密解密硬件实现,效率很高,而龙芯3A3000没有这样的功能,或者暂时无法使用该功能。此外,在Botan中同样存在针对X86的汇编优化,在能使用到这些优化的测试中,x86处理器就非常有优势。
多媒体编码
18~22. encode-flac, encode-mp3, encode-ogg, encode-opus, encode-wavpack?
将音频文件转码为flac,mp3,ogg,opus和wavpack,统计所需时间。
测试结果:点此访问
espeak
这个测试需要花费多长时间的用espeak语音合成引擎读取古腾堡项目的The Outline of Science,并输出到WAV文件。单线程性能测试。
https://openbenchmarking.org/result/1806148-FO-LS3AESPEA06
24. dcraw
用DCRAW转换多个高分辨率RAW NEF图像文件到PPM图像格式,统计所需要的时间。单线程性能测试。
https://openbenchmarking.org/result/1806140-FO-LS3ADCRAW96
25. mencoder
这个测试使用mplayer的mencoder编码器程序和LIVAVCODEC系列来测试系统的音频/视频编码性。单线程性能测试。
https://openbenchmarking.org/result/1806145-FO-LS3AMENCO12
26.Vpxenc
这是一个标准的视频编码性能测试,使用谷歌的libvpx库和vpxenc命令实现VP8/WebM格式的编码。单核性能测试。
https://openbenchmarking.org/result/1806148-FO-LS3AVPXEN59
图10多媒体相关性能测试
在音视频压缩编码的测试中,龙芯再次完败于Intel处理器,不管是J1900还是i5-7200U。究其原因,还是在优化上。以上这些多媒体应用,针对x86处理器进行了大量的优化,而没有对龙芯处理器进行优化。
压缩算法
27. Compress-7zip
用7zip程序自带的benchmark功能测试程序的多线程性能。
https://openbenchmarking.org/result/1806036-FO-LOONGSON337
https://openbenchmarking.org/result/1806230-FO-LS3A7ZIPL48
28. Compress-gzip
用tar程序压缩Linux源码包,检验系统自带的gzip程序的单线程性能。
https://openbenchmarking.org/result/1806039-FO-LS3A3000G15
优化以后的gzip程序
https://openbenchmarking.org/result/1806056-FO-LS3A3000G52
29. Compress-pbzip2
用并行的bzip2算法压缩Linux内核源码包,统计所需时间。多线程程序。
https://openbenchmarking.org/result/1806109-FO-LS3APBZIP29
网络应用
30. Apache
Apache基准程序,评价标准是发出100万的请求,100个并发,看系统每秒能够处理多少。多线程性能测试。
https://openbenchmarking.org/result/1806159-FO-LS3AAPACH45
31. ebizzy
Ebizzy测试。Ebizzy可以生成类似Web服务器的工作负载。
https://openbenchmarking.org/result/1806152-FO-LS3AEBIZZ72
32. postmark
这是一个测试NETAPP的POSTMARK基准测试,旨在模拟类似于Web和邮件服务器所承受的任务的小文件测试。此测试配置文件将设置POSTMARK以同时执行500个文件的25000个事务,文件大小介于5到512千字节之间。
https://openbenchmarking.org/result/1806151-FO-LS3APOSTM75
图11压缩算法和网络应用测试
从以上的测试结果可以看出,在压缩算法以及网络应用上,龙芯3A3000和J1900性能接近。和i5-7200U处理器相比,差距也在有两倍左右。需要指出的是,除了gzip是单线程测试,其余的测试都是多线程测试。
内存测试
33. Cachebench
这是Calebench的性能测试,它是LLCBench的一部分。Cachebench是用来测试内存和缓存带宽性能的。
https://openbenchmarking.org/result/1806034-FO-LS3A3000C27
34. stream
系统内存(RAM)性能基准测试。
测试结果:点此访问
图12访存性能测试
在stream测试和CacheBench测试中,龙芯3A3000终于实现了对J1900的全面优势。另外,除了在Cachebench中有两项数据明显若与i5-7200U,在其他测试内容中龙芯3A3000和i5-7200U性能相当。能有这样好的性能,还是因为龙芯处理器历史上因为访存性能太差深受其害,然后花了很大的力气优化了访存。可以期待龙芯3A4000一样会有较好的访存性能。
最后,根据openbenchmarking网站上找到的部分FT1500A和FT-2000+的数据,和龙芯3A3000进行了对比。
(点此可查看大图)
基本上,龙芯3A3000的性能强于FT1500A,但明显弱于FT-2000+。和FT1500A相比,FT-2000+性能有了很大的提升,部分得益于工艺的改进,从28纳米提升到了16纳米;部分得益于架构的更新。我们预测,龙芯3A4000在继续使用28纳米工艺的前提下,将能够在单核性能上追平甚至超越飞腾2000+处理器。由于飞腾2000+处理器有多达64个核,龙芯要在多核性能追赶飞腾还有很长的路要走。
3A3000在Monte Carlo模拟上性能意外的糟糕,很可能是某关键函数缺少优化。
总结与展望
从纵向上看龙芯的发展,相比龙芯2F,龙芯3A3000的性能有了很大的进步。工艺上,从龙芯2F的90nm,提高到了龙芯3A3000处理器的28nm;主频从龙芯2F的800MHZ提高到了1.5GHz。在用户实际应用上,基本可以达到流畅使用的程度。与Intel处理器相比,龙芯3A3000综合性能相当于Intel J1900处理器,单核性能相当于intel i5-7200U的30%~40%。
通过本文中所进行的34项测试,我们发现龙芯3A3000在性能不好的根源有以下几个:
同主频性能较弱。从同主频性能来看,龙芯3A3000已经超过了J1900,但只有intel i5-7200U的60%~70%。预计2019年流片的龙芯3A4000同主频性能至少有30%的性能提升。
主频太低。这是龙芯处理器让众多爱好者耿耿于怀的的一个难以回避的弱点。诚然,主频不代表所有性能,但主频太低是万万不行的。J1900的同主频性能弱于龙芯3A3000,但由于它的主频可以到1.99GHz,并且还可以睿频到2.4GHz,在多项测试中一样超过了龙芯3A3000。Intel i5-7200U基础主频达到2.5GHz,睿频可以到3.1GHz。飞腾2000+主频可以到2.2GHz,而兆芯的KX-6000主频甚至可以到3.0GHz。飞腾、兆芯处理器可能在同主频性能上弱于龙芯,但还是可以靠着较高的主频击败龙芯3A3000。
龙芯主频较低的原因之一是落后的工艺制程,目前还在使用28nm工艺,而Intel、飞腾、兆芯等已经在使用14nm工艺。根据龙芯的发展规划,到2020年龙芯将使用14nm工艺对了龙芯3C5000进行流片,主频能够达到2.5GHz。
系统软件优化不够。在测试中,我们发现的问题有三角函数等数学函数运算速度过慢,看起来部分硬件浮点运算的没有得到应用,而且龙芯缺少一个优化的数学函数库。在加密解密指令上,缺少AES硬件实现。在测试中,我们发现使用Debian操作系统、GCC 7.3和1.4GHz的龙芯3A3000进行的各项测试基本优于使用Loongnix操作系统、GCC 4.9编译器和1.5GHz龙芯3A3000的组合。我们认为编译器的优化对发挥龙芯的性能非常重要。在测试中,我们也发现使用4.14的Linux内核会比3.10的Linux内核上有相当程度的性能提升,龙芯依然缺少优化的Linux内核。
应用软件优化不够。由于MIPS架构缺少软件生态,各种应用软件缺少针对MIPS架构的优化。具体表现就是在很多软件有针对X86系统的汇编优化。要建立龙芯的生态,发挥龙芯处理器的性能,相同级别的优化不可缺少。
随着龙芯未来架构的优化、主频的提升,影响龙芯发展的瓶颈将不是处理器的性能,而是软件生态的建设,也就是系统软件优化以及应用软件优化。其中,各种应用软件的优化将是提升龙芯用户体验的捷径。实际上,龙芯也已经意识到了这些问题,提出了要学习苹果,”app by app, feature by feature, pixel by pixel”的进行优化。
当下,龙芯3A4000的流片工作正在开展,预计到2019年初就能看到芯片了。在3A4000出现之前,我们对3A4000的性能进行一下预测。基于我们的评测,我们认为,3A4000的同主频性能将从i5-7200U的60%~70%,提升到80%~90%,2.0GHz下单核性能达到i5-7200U的2/3,多线程性能超过i5-7200U。和国内其他CPU相比,龙芯3A4000的同主频性能将超过飞腾以及兆芯,单核性能也将超过飞腾2000+,但由于3A4000落后的28 nm工艺、依旧较低的主频(2.0 GHz),龙芯3A4000的综合性能将可能依旧无法超过主频3.0GHz的兆芯KX-6000。如果2019年兆芯KX-6000不能大规模量产上市,龙芯3A4000还是有可能成为2019年国内可以买到的单核性能最强的国产自主处理器。
龙芯处理器和Intel、AMD的高性能处理器差距还是非常巨大,龙芯要走的路还很长。期待龙芯在未来采用更好的工艺,更优化的微架构,也期待龙芯能够在编译器、数学库、操作系统等系统软件支持上有更好的表现,构建更好的应用软件生态系统,期待着龙芯3A4000、3B 4000、龙芯3C 5000早日流片成功。
以上的评测只是一个非计算机专业的普通爱好者个人所为,不具有权威性,水平有限,时间仓促,数据繁多,有错误和疏漏在所难免,还请批评指正。
以毛主席的话,结束我的测评:
“我们正在前进。我们正在做我们的前人从来没有做过的极其光荣伟大的事业。我们的目的一定要达到。我们的目的一定能够达到。”
附录
各种测试结果汇总
龙芯3A 3000(Loongnix):
https://openbenchmarking.org/result/1806113-TR-LSLABSLS380
https://openbenchmarking.org/result/1709288-TR-LOONGSON390
FT1500A :
https://openbenchmarking.org/result/1705187-KH-CPUSCIMAR08
I5-7200u
https://openbenchmarking.org/result/1806175-FO-I57200UDE18
https://openbenchmarking.org/result/1806174-FO-I57200UMU24
https://openbenchmarking.org/result/1806175-FO-I57200URA38
https://openbenchmarking.org/result/1806176-FO-I57200UCO93
https://openbenchmarking.org/result/1806179-FO-I57200UCR30
J1900
https://openbenchmarking.org/result/1404256-PL-1404206PL73
https://openbenchmarking.org/result/1404250-PL-1404206SO61
https://openbenchmarking.org/result/1404268-PL-J1900MULT15
https://openbenchmarking.org/result/1404272-PL-J1900SPEE11
https://openbenchmarking.org/result/1404275-PL-J1900PROC21