https://zhuanlan.zhihu.com/p/591198312
当代的计算机软件都是由高级语言编写的。目前最主流的语言有几个:
C/C++:Unix/Linux原生语言,系统级程序,驱动,高性能的应用程序
JAVA:企业级开发主流语言,企业应用后台最常用语言
JavaScript:承载前端逻辑的主要语言
Python:数据科学,AI,运维常用的语言
Golang: k8s,docker等新一代云平台使用。
这几种语言龙芯当然都支持。我们通过几种评测工具来看龙芯运行几种语言程序的表现。龙芯还是老朋友,3A5000+7A2000/8G*2 DDR4(光威天策)/铨兴m2 256G,找了一台对照机, i5-2400(@3.1Ghz)/8G*2 DDR3/240G SSD。选i5是因为它与龙芯一样,都是四核四线程。为什么是sandybridge,而不是ivyBridge或haswell?主要是因为我刚好有二代的板闲置,i5-2400的价格也比较便宜,其实sandybridge的性能其实还可以,AMD 同频的整数性能一直到ZEN才追上sandybridge。普通应用,Sandybridge与三代(ivyBridge)四代(haswell)的差距在5%-10%以内。分数均为自己手跑,龙芯与x86架构都是渣优化,请见谅。
1、 针对C语言,首选SPEC CPU,里面主要是C与C++的工作负载(除了个别的perl,与fortran),我测试了一下,这块i5-2400在3.1GHz 时候的单核性能。
i5-2400的SPEC CPU 2006跑分SPEC CPU2006是27分左右,与龙芯2.5GHZ类似。在2.5Ghz 时,性能约为22分,这个成绩是低于龙芯的(26分)。
i5-2400@2.5GHz大家2006看的多,测一个SPECCPU 2017,网上有iso,下载后,使用最新的config.guess,config.sub可以编译龙芯的build-tools版本。SPEC CPU2017看的是intrate 在copies=1时的分数,是单线程分数,反映单核性能。我的优化水平低,龙芯跑的分数2.97分(base),勉强算3分(网上肖俊华老师的peak能跑出3.16),i52400在2.5GhZ时,是2.67分,分数比龙芯低10%左右,与CPU2006的表现差不多,说明龙芯并不是针对SPEC CPU2006“有特别优化”,只是CPU2006这个老一点的工具更易于计量,2017的1.2分/GHZ 没有2006的10分/GHZ用起来方便,在3.1 GHZ时,i5-2400可以跑到3.2分,基本上是1.05分/Ghz吧。3A5000比同频i5二代强10%。 SPEC2017的4个copy的intrate,龙芯达到10分,3.1G的i5-2400是10.8分。
据说GCC12跑分的能力比GCC 8.3强很多,等龙芯能跑GCC12时,再试一下。看网上的贴子,在GCC12下,12代的Pcore可以跑到1.8分/GHZ, E核可以跑1.5分/GHZ。
SPEC CPU 2017龙芯单线程跑分 i5-2400 @2.5Ghz2、针对JAVA程序 ,我之前做过一个SPECJVM 2008的评测(军民团结如一人:龙芯处理器应用于服务器的性能初探),论证了龙芯的SPEC JVM相当于2.2-2.3GHZ的i5-4590。这次跑一个SCIMARK看一下。如图所示。六个跑分,有四个项目龙芯比i5-2400(@2.5GHZ)高(composite,mente carlo,FFT,Dense Lu matrix),有两项略低于i5-2400(@2.5GHZ ( 包括sparse matrix mutiply,jacobi susucessive),总的来看综合性能做完几何平均,龙芯会小胜。
龙芯的SCIMARK java scimark i5-2400(@2.5GHZ )3、针对JS程序,其实有很多网友做过测试,这里使用google的octane,老工具,将就着看看,之前GUEE也测过这个,与飞腾与兆芯,i5做过对比(【视频】龙芯、飞腾、兆芯、i5,UOS浏览器,octane测试_龙芯吧_百度贴吧)。JS程序与浏览器关系很大,如果都用FIREFOX,龙芯比i5-2400要高,12778 VS 10989。
firefox @ 龙芯 firefox @i5 2400但CHOME的分数在intel上会高一些,龙芯如果使用自己的LB浏览器,与另一台机器E5 2640V2 (ivybridge,可睿频至2.5GHZ)上用chrome(版本高一些)分数就差不多了,是19629 VS 20651,估计chrome新版本的优化好一些,这一项互有来往。
LBrowser @龙芯 chrome @ E5 2640 V24、但需要强调的是,前面龙芯的性能还可以,但宏观上,这两个CPU依然属于同档性能(其实酷睿二三四代基本是一档,每代提升不到5%,6-10代skylake是一档,相比四代有大约15%的提升,12代是一档,又有10-20%的提升),不同的工作负载特性各有不同,龙芯并不是总能高于前几代intel。
例如,针对Python,openbenchmark 上有一个pybench,这一项龙芯略低于于i5 2400(@2.5GHZ)2645 VS 2398 大约有不到10%的性能差距,其实python也是C语言写的,这就属于优化问题了 。
pybench@龙芯2.5GZ pybenvch@ i5 24000(2.5GHZ)5、再说一个小众点的perl语言,其实SPEC里面就有一个Perl语言的benchmark。perl是早年后台比较有用的工具型语言,比SHELL强,龙芯3A5000的分数是3.06,i5-2400是2.58,这一项龙芯也明显高于i5-2400(@2.5GHZ),与3.1GHZ的i5-2400类似了。具体可以参看上面spec cpu2017的分数。
6、关于Golang: Golang,随手小试了一下,感觉还有优化空间。龙芯与同频Intel相比,其实多数时候略慢点,有时能反超。
go自己有benchmark的功能,参考这个页面的程序 (http://t.zoukankan.com/yahuian-p-go-benchmark.html),里面有个简单的求和程序BenchParallelExam。
龙芯的结果:
~/go-1.19/src$ go test -bench='BenchmarkParallelExam' -cpu=1,4
goos: linux
goarch: loong64
pkg: mybench
BenchmarkParallelExam 1460 824717 ns/op
BenchmarkParallelExam-4 3387 350395 ns/op
PASS
ok mybench 2.522s
i5-2400(@2.5GHZ)的结果
~/go-1.19/src$ go test -bench='BenchmarkParallelExam' -cpu=1,4
goos: linux
goarch: amd64
pkg: mybench
BenchmarkParallelExam 1080 1049202 ns/op
BenchmarkParallelExam-4 3532 337463 ns/op
PASS
ok mybench 2.475s
这一项里,单线程龙芯快(824717 vs 1049202 ),四个线程一块i5快(350395 vs 337463 )
总结:
龙芯3A5000本身的底子是比较好的,总体上可以与六代之前的酷睿i5进行同频的对比。当然,各个语言的运行性能需要龙芯团队不断优化,持续建设。