2017 年九月份龙芯俱乐部办了一个龙芯 3A 主板的团购。作为多年关注龙芯的爱好者,我参加了这次团购,购买了一个龙芯 3A3000 的主板。鉴于目前龙芯 3A4000 处理器即将流片,而目前对即将过气的龙芯 3A3000 处理器的性能并没有一个比较详细的评测,我使用 phronix-test-suite 对龙芯 3A3000 处理器做了一个尽可能理性、中立、客观、全面的评测,不吹不黑,不夸大成绩也不回避问题。

 

龙芯 3A3000 主板介绍

首先,还是晒晒图,回顾一下龙芯 3A3000 主板的模样。

 


图 1 龙芯 3A3000 主板照片,风扇下面是龙芯的 CPU。另外两块散热片下面分别是南桥和北桥。

 

 

图 2 拆下风扇后,龙芯 3A3000 CPU 的近照,其中的 LS3A3000D-LP 意思是说这是一个低功耗版本的龙芯 3A3000CPU

 

我拿到的这块龙芯 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 的一半。

 

下面是本测评中的多款处理器的基本情况对比。

 

 

UIntel i5-7200U

Intel J1900

龙芯 3A 3000

测试使用的是 7.8.0 版本的 phronix-test-suite。

 

测试分别在配备了 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 的两倍。

 

因此,我们以将 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 是一个设计上具有可扩展性的开源约束求解器。单线程性能测试。

 

6。 mpcbench

GNU MPC 是复数算术的 C 库。单线程性能测试。

multichase

This is a benchmark of Google‘s multichase pointer chaser program。单线程,多线程性能测试。

 

图 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 是一个开源的物理模拟计算引擎,世界三大物理模拟引擎之一。单线程性能测试。

 

9。 himeno

The Himeno benchmark is a linear solver of pressure Poisson using a point-Jacobi method。单线程性能测试。

 

10。 tscp

这是 TSCP,Tom Kerrigan 的简单国际象棋程序的性能测试,它有一个内置的性能基准。单线程性能测试。

 

图 7 Bullet、Himeno 和 TSCP 测试

 

在这一组测试中,i5-7200U 优势非常明显,除了在国际象棋性能测试 TSCP 上速度是 3A3000 的 3.6 倍,在其他测试中速度基本都是龙芯 3A3000 的 4 倍以上,在 bullet 的 ragdoll 测试中性能甚至达到了龙芯 3A3000 的 30 倍。我们对 bullet 的代码进行了分析,发现其中有大量的 SIMD 相关的代码以及针对 X86 处理器的汇编语言优化。这是 bullet 在 Intel 处理器下运行速度快的重要原因。而针对 Ragdoll 测试,我们发现代码中有大量的三角函数运算,而龙芯目前三角函数的计算是有问题的,没有启用硬件浮点,而是使用的软件模拟,因此速度较慢。

11。 hpcg

高性能共轭梯度算法,由桑地亚国家实验室开发的面向超算的科学基准程序。多线程测试。

 

12。 npb

NPB,NAS 并行基准,是美国国家航空航天局为高端计算机系统开发的基准。此测试配置文件目前使用 MPI 版本的 NPB。多线程测试。

 

13。 n-queens

OpenMP 版本的 N- 皇后问题解法器。问题大小是 18。多核性能测试。

 

14。 mafft

100 个丙酮酸脱羧酶序列的比对。多线程性能测试。

 

15。 primesieve

Primesieve 使用高度优化的 Eratosthenes 筛法实现来产生素数。Primesieve 对 CPU L1/L2 缓存性能进行基准测试。多线程性能测试。

 

图 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++的开源加密库,支持大多数的所有公开的加密算法。(单线程测试)

 

Gnupg

用 GnuPG 加密文件,统计耗时。单线程性能测试。

 

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 文件。单线程性能测试。

 

24。 dcraw

用 DCRAW 转换多个高分辨率 RAW NEF 图像文件到 PPM 图像格式,统计所需要的时间。单线程性能测试。

 

25。 mencoder

这个测试使用 mplayer 的 mencoder 编码器程序和 LIVAVCODEC 系列来测试系统的音频 / 视频编码性。单线程性能测试。

 

26.Vpxenc

这是一个标准的视频编码性能测试,使用谷歌的 libvpx 库和 vpxenc 命令实现 VP8/WebM 格式的编码。单核性能测试。

 

图 10 多媒体相关性能测试

 

在音视频压缩编码的测试中,龙芯再次完败于 Intel 处理器,不管是 J1900 还是 i5-7200U。究其原因,还是在优化上。以上这些多媒体应用,针对 x86 处理器进行了大量的优化,而没有对龙芯处理器进行优化。

压缩算法

27。 Compress-7zip

用 7zip 程序自带的 benchmark 功能测试程序的多线程性能。

 

28。 Compress-gzip

用 tar 程序压缩 Linux 源码包,检验系统自带的 gzip 程序的单线程性能。

优化以后的 gzip 程序

 

29。 Compress-pbzip2

用并行的 bzip2 算法压缩 Linux 内核源码包,统计所需时间。多线程程序。

 

网络应用

30。 Apache

Apache 基准程序,评价标准是发出 100 万的请求,100 个并发,看系统每秒能够处理多少。多线程性能测试。

 

31。 ebizzy

Ebizzy 测试。Ebizzy 可以生成类似 Web 服务器的工作负载。

 

32。 postmark

这是一个测试 NETAPP 的 POSTMARK 基准测试,旨在模拟类似于 Web 和邮件服务器所承受的任务的小文件测试。此测试配置文件将设置 POSTMARK 以同时执行 500 个文件的 25000 个事务,文件大小介于 5 到 512 千字节之间。

 

图 11 压缩算法和网络应用测试

 

从以上的测试结果可以看出,在压缩算法以及网络应用上,龙芯 3A3000 和 J1900 性能接近。和 i5-7200U 处理器相比,差距也在有两倍左右。需要指出的是,除了 gzip 是单线程测试,其余的测试都是多线程测试。

 

内存测试

33。 Cachebench

这是 Calebench 的性能测试,它是 LLCBench 的一部分。Cachebench 是用来测试内存和缓存带宽性能的。

 

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 早日流片成功。

 

以上的评测只是一个非计算机专业的普通爱好者个人所为,不具有权威性,水平有限,时间仓促,数据繁多,有错误和疏漏在所难免,还请批评指正。