作者:Zevan
在过年休假前一天,我收到了在宁美国度下单的龙芯3A4000主机。
关于这台主机的来历,我之前的文章已经提过了:中国芯首发宁美国度,龙芯3A4000主机香不香?
和国内大部分的国产处理器厂商不同,龙芯对爱好者群体还是很友好的。爱好者们真的可以买到采用龙芯处理器的产品。宁美国度、龙芯中科以及航天龙梦合作推出了面向开发者的龙芯3A4000主机,原价7800元的主机,卖给开发者的只要3900元。
龙梦主板上的龙芯3A4000实拍(由龙芯爱好者 Windows1809提供)
我关注的重点,依然是龙芯3A4000处理器本身。
在我拿到主机之前,网上已经流传了关于3A4000处理器性能的一些评测。其中,看上去最专业的,是2019年12月28日知乎网友“原来如此”发布的评测,根据他的评测,主频1.8GHz的龙芯3A4000的SPEC CPU 2006性能只有整数13.5分,浮点13.3分。
关于测试环境,知乎网友只是简单的描述了一下:
1、龙芯整机:3A4000四核,1.8GHz,内存8G,SATA机械硬盘
2、飞腾整机:FT2000四核,2.6GHz,内存8G,SATA机械硬盘
对于编译选项,只是简单的说:“用的编译开关是通用的”。知乎网友“原来如此”甚至都没有说这两台整机的操作系统是什么,也没有说内存频率是多少。
两周以后,龙芯中科正式发布了一个澄清声明,对知乎上的评测进行了简短的回应。在此,我截取其中一部分数据。
龙芯中科针对知乎评测的澄清声明
龙芯中科给出了测试环境,虽然比知乎测试给的详细一些,但几个关键的细节问题还是被隐藏了:测试使用的编译器是什么编译器,用了哪些选项,内存的频率是多少?
既然我已经拿到了3A4000的主机,那么我将用我的评测结果一步一步的告诉大家龙芯3A4000的性能究竟如何。
这一次,以我为准。
为了能够获得龙芯3A4000处理器的峰值性能,我尝试了多个Linux操作系统,包括UOS,Loongnix,Debian,龙梦Fedora以及Linux From Scratch。
宁美主机自带的操作系统是UOS。在使用上,UOS我用起来很不习惯,所以我并没有在UOS上进行测试。在UOS之外我安装了Loongnix、龙梦版Fedora 28 、Debian、Linux From Scratch(LFS)这四个操作系统。
在操作系统内核的选择上,我使用了由龙芯内核开发者flygoat提供的最新版的5.4内核。在该内核中,增加了处理器主频调节功能,处理器的主频可以提高到2.2GHz。
事实证明,龙芯3A4000是可以比较稳定工作在2.1GHz甚至2.2GHz的。我的主机曾经在2.2GHz主频下连续运行了11天。 当然,这可能会导致处理器寿命减少,降低系统的稳定性,不推荐普通用户长时间超频使用。龙芯处理器的主频已经稳稳的超过了2.0 GHz。
2.2GHz下运行的龙芯3A4000
宁美主机的内存频率为1600MHz,而且主机上只带有一根内存条。
幸运的是,航天龙梦的工程师谭工提供了主板的新固件,内存频率从1600MHz提高到了2400MHz。为了进一步提高系统的访存性能,我自行购买了一根8GB DDR4 2666 MHz镁光内存条,与原有的紫光内存一同组成双通道。
测试表明,以上这些操作大大提高了主板的访存性能。我使用Loongnix、Debian、龙梦Fedora28以及LFS系统进行了SPEC CPU 2006的测试。
SPEC CPU 20006测试环境
在测试中,为了尽可能提高程序的性能,我对编译器的优化选项进行了详细的测试,摸索了对于每个项目最为合适的选项。
需要指出的是,在所有的这四种操作系统中,编译器都缺少针对龙芯3A4000进行优化。尽管龙芯3A4000在去年12月24日发布,但龙芯官方并没有提供处理器的指令集手册,也没有提供针对3A4000的性能优化手册。
目前,GCC编译器中也没有支持龙芯3A4000的一些黑科技,比如原子内存操作 (AMO),龙芯指令集扩展Loongson-EXT3等。希望龙芯能够加快生态建设,主动向GCC等开源社区提供代码,使爱好者能够早日用上趁手的开发工具。
为了保证测试结果可靠,在每个操作系统上都进行了reportable的基准测试,即每个测试项目都要完整无误的运行三遍,最后对每一项测试,选择三次测试的中位数结果作为最终的测试成绩,最后对所有的测试成绩取几何平均,作为最终的成绩。
评价一个CPU的性能,可以用浮点和整数得分简单评估。
从整数性能来看,Debian、龙梦Fedora,LFS、Loongnix系统下的SPEC CPU 2006成绩分别为19.2,19.9,19.7,16.9。
这表明FC28系统及其工具链能够最好的的发挥出龙芯3A4000的性能。
原生的Loongnix操作系统存在诸多弊端,比如Loongnix 系统基于2014年11月发布的Fedora 21,距今已经有5年多了,而且早已停止维护了。
Loongnix系统中默认的编译器为GCC 4.9,太古老了,无法支持MSA指令。
当然,我相信龙芯中科的工程师手上有更适合龙芯3A4000的编译器,但很遗憾作为普通爱好者我无法获得这样的编译器。据传龙芯中科准备对Loongnix进行升级,也许升级以后的Loongnix会稍微不那么落后了吧!
从浮点性能来看,Debian、龙梦Fedora、LFS、Loongnix下的分数分别为18.0, 17.6,19.3,15.0分。
LFS系统明显优于FC28、Debian等系统。可能有两个原因:第一,LFS系统构建时针对GS464E处理器核进行了优化,使各种库函数速度有所提升;第二,龙芯3A4000的浮点数标准为IEE-754-2008,而Debian和FC28系统的浮点标准是针对IEEE-754-1985。
和Debian操作系统相比,LFS系统可以针对龙芯3A4000做更多的优化。比如,在编译软件的时候,可以默认开启针对GS464E处理核的优化选项,并指定浮点NAN=2008。Loongnix系统下的测试成绩依然是最低的。
以上的基准测试成绩,距离龙芯官方的成绩21分/2GHz还有一些差距。毕竟,作为爱好者,我无法获得针对龙芯处理器的最优的编译器,只能使用操作系统内置的GCC编译器和数学库,大概只能做到这个程度了。
和上一代龙芯3A3000相比,龙芯3A4000确确实实做到了性能翻倍。那么,和Intel的主流处理器相比,龙芯3A4000还有多大差距?
我手上只有一个使用七代i5的Intel主板。
作为对比,我在i5-7200U处理器上运行了SPEC CPU 2006测试。由于时间有限,我没有对i5-7200U处理器上的SPEC CPU 2006测试做过多的优化, 只加了-O3 -march=native两个选项,因为即使这样,i5-7200U可以比龙芯3A4000处理器更强。
和龙芯3A3000处理器相比,龙芯3A4000真正做到了性能翻倍。
不更新工艺,而硬生生靠着对处理器核的优化改进而取得如此巨大的进步,这个成绩非常了不起!
仔细查看每一个测试项目,你会发现在有些测试项目中,龙芯3A4000的速度超过了3A3000的三倍,比如hmmer测试,3A4000的速度是3A3000的3.6倍,这是因为龙芯3A4000的向量指令在发挥作用。
和Intel i5-7200U处理器相比,龙芯3A4000处理器性能还有很大的差距。
从测试结果可以看到,3A4000处理器单核整数性能只有i5-7200U的60%, 浮点性能只有后者的50%。考虑到Intel i5-7200U睿频频率高达3.1GHz,处理器的每GHz性能为整数10.64分,浮点12.6分;GS464V处理器核的同主频性能已经能够达到i5-7200U处理器的80%~90%了。
需要承认的是,这种测试方法并不严谨,因为我在Intel处理器下并没有使用最优的编译器以及最优的编译选项。
经过数年的努力研发,龙芯公司新发布的龙芯3A4000处理器在性能上有了很大的进步。
在继续使用28纳米工艺的前提下,和3A3000处理器相比,龙芯3A4000处理器主频从1.5GHz提升到了2 GHz以上,综合性能提高了一倍,SPEC CPU 2006成绩从10分提高到了20分。龙芯处理器的访存性能从3A3000的10GiB/s提升到了3A4000的18GiB/s。
在此,提前预测下3A5000处理器的性能。
既然3A4000能够稳定运行在2.2GHz主频下,我大胆的推测采用台积电12纳米工艺流片的3A5000能够稳定的运行在2.8GHz以上的主频下。3A5000的SPEC CPU 2006分数将从21分/2GHz,提高到30分/2.8 GHz,与Intel、AMD的差距将会进一步缩小。
同时,我们依然需要看到,龙芯处理器在生态建设上还有很长的路要走。编译器、操作系统、应用软件等基础设施都需要进行建设。
龙芯选择了一条少有人走的路,祝福龙芯能够走通这条路。也许,在不久的将来,我们就能够用着龙芯inside的笔记本、台式机、手机来工作、娱乐、生活了。
在本测评的进行中,得到了很多龙芯爱好者的支持。航天龙梦孙海勇老师提供了LFS系统,航天龙梦谭工提供了实验版的龙梦主板固件,龙芯内核开发者flygoat、陈华才等提供了带有超频功能的5.4版linux内核。龙芯爱好者Windows1809提供了龙芯3A4000实拍照片。特此致谢!