[转帖]不同语言的程序在龙芯上的性能表现

不同,语言,程序,龙芯,性能,表现 · 浏览次数 : 0

小编点评

以下是关于龙芯语言程序运行性能的总结: **1. 针对C语言,SPEC CPU 比 i5 性能略高,但仍属于同档性能。** **2. 针对Python语言,i5 的性能明显高于龙芯。** **3. 针对Go语言,i5 的性能略低于龙芯,但仍然可竞争同频。** **4. 针对JS语言,龙芯的性能略高于 i5,但仍然有提升空间。** **5. 针对C语言的perl语言,龙芯的性能与 i5 相似。**

正文

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.5Ghz

2、针对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 V2

4、但需要强调的是,前面龙芯的性能还可以,但宏观上,这两个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的功能,参考这个页面的程序 (),里面有个简单的求和程序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进行同频的对比。当然,各个语言的运行性能需要龙芯团队不断优化,持续建设。

与[转帖]不同语言的程序在龙芯上的性能表现相似的内容:

[转帖]不同语言的程序在龙芯上的性能表现

https://zhuanlan.zhihu.com/p/591198312 当代的计算机软件都是由高级语言编写的。目前最主流的语言有几个: C/C++:Unix/Linux原生语言,系统级程序,驱动,高性能的应用程序 JAVA:企业级开发主流语言,企业应用后台最常用语言 JavaScript:承载

[转帖]啃碎并发(11):内存模型之重排序

https://juejin.cn/post/6844903702327721992 0 前言 在很多情况下,访问一个程序变量(对象实例字段,类静态字段和数组元素)可能会使用不同的顺序执行,而不是程序语义所指定的顺序执行。具体几种情况,如下: 编译器 能够自由的以优化的名义去改变指令顺序; 在特定的

[转帖]【JVM】GC算法与垃圾收集器

引入 java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,可以有效的防止内存泄露,有效的使用空闲的内存; 内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般

[转帖]Bash脚本编程学习笔记02:脚本基础和bash配置文件

脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成机器可运行的二进制程序文件后,方可运行。例如C语言和Java语言。 解释运行:需要一个编程语言的解释

[转帖]并发delete导致oracle死锁问题的解决

项目中有一个批处理任务,用来删除数据库中过期的数据(包括说话人的语音、模型、记录等),当程序被分布式部署后,就会有多个批处理线程同时进行删除,不过不同的线程,会根据元信息表得到不同的说话人信息,从而删除不同的数据,并不存在竞争的问题,但是,当项目使用oracle数据库在线上运行时,却频繁出现了ORA

[转帖]关系型数据库设计三大范式

https://segmentfault.com/a/1190000043103898 范式定义 百度百科:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 人类语言: 范式可以理解为设计一张数据表的表

[转帖]Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]python 性能优化监控工具_Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

【转帖】Linux性能优化(四)——BCC性能监控工具

一、BCC简介 1、BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用。BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现了map创建、代码编译、解析、注入等操作,使开发人员只需聚焦于用C语言开发要注入的内核代码。 BCC

[转帖]lua-book-运算符

http://me.52fhy.com/lua-book/chapter3.html Lua支持下列主要的运算符: 算术运算符 关系运算符 逻辑运算符 赋值运算符 还支持..、#特殊运算符。其中赋值运算符仅支持=,不支持C语言的+=、++等运算符。 算术运算符 + 加法 - 减法或者负号 * 乘法