摘要:看到Guee测试的3C6000 Sepc2017的两份测试报告(测试报告里面有IP地址,符合Guee常住地特征),但是两份分数偏差较大,尤其是548子项,是什么原因导致这种差异?
是什么原因导致guee测试3C6000同编译参数同编译器下会有两份差异较大的Spec2017测试报告?
看到Guee测试的3C6000 Sepc2017的两份测试报告(测试报告里面有IP地址,符合Guee常住地特征),但是两份分数偏差较大,尤其是548子项,是什么原因导致这种差异?
测试报告1:4.47分
测试报告2:4.77分
两份测试报告的cfg文件唯一的差异就是gcc路径不一致:
GCC15的子版本号略有差异,20241124和20241208,检查了下,两个GCC子版本并没有做特别大的性能调整。是什么原因导致这种差异?
手上有完整的测试报告,如果有需要可以提供。
被浏览
2,124查看全部 2 个回答
Matterhorn
30 人赞同了该回答
目录
收起
一、基于3C6000验证此问题
二、这是龙芯粉丝第一次这样干吗?
2.1、3A6000多个编译器多份不同成绩
2.2、3A6000超频Spec2006性能默频性能
2.3、3A6000超频Spec2017性能
三、3C6000 IPC提升了吗?
先说结论:本质上就是4.77分的那个测试报告使用的GCC源码是被Guee修改过的,修改的这个代码可以大幅提升Spec2017 548子项的成绩。
修改的内容主要是:[14/15 regression] 548.exchange2_r 14%-28% regressions on Loongarch64 after gcc 14 snapshot 20240317
当然,这个问题实际上x86也存在类似的问题,但是没龙芯严重:
[15 regression] 548.exchange_r regressed by ~11% with -O2 -march=x86-64-v3 on EMR after r15-4225-g70c3db511ba14f
具体现象为:
after snapshot 20240317 score 14.3-19.3% lower with parameters "-g -Ofast -march=native": 13.2.0: 11.7 (223s) [gcc 13.2.0, system default] 20240317: 11.0 (237s) [gcc 14 snapshot 20240317] 20240324: 8.88 (295s) [gcc 14 snapshot 20240324] 20240430: 9.03 (290s) [gcc 14 snapshot 20240430, 14.1.0-RC] 14.1.0: 9.43 (278s) [gcc 14.1.0 release]
这个事情抽象的地方在于龙芯粉丝,比如Guee这些人,自己测试3A6000性能的时候,用了修改版本的GCC14或GCC15甚至超频(本文后面会详细讲超频的问题),然后测试了一个成绩,比如GCC14测试出3A6000成绩是4.9x,而我用开源版本的GCC14测试出4.69(Glibc 2.35,参考:Matterhorn/Matter-CPU),基于guee的成绩龙芯吧部分人在贴吧反复引导人“网暴”我劣化3A6000性能。
注:我没说不能做这个修改,你做了修改,出成绩的时候主动加以说明,我认为是可以被接受的;如果是不加说明,并纵容他人网暴正常开源成绩是劣化龙芯性能这个就非常恶劣。
当然你要超频,我觉得也是可以,但是你不能自己超频后误导其他人说这个是默频的性能。
从上面Guee的两个测试中,我们可以看到Guee显然非常清楚这个细节,否则他不会做两次测试(龙芯几个经常做Spec性能测试的基本都清楚这个问题)。同样的事情也发生在GCC15的3A6000的测试中,我个人测试3A6000用GCC15开源版本的跑分是4.9左右,而Guee测试出5.12(一模一样的参数),甚至他用这个分数去嘲讽外网的“chipsandcheese”劣化龙芯3A6000的成绩。非常非常典型的贼喊捉贼,参考:guee:开源软件环境下龙芯3A6000的性能
实际上用开源版本GCC 14.2哪怕优化Flag加满了,不修改上面的那个GCC问题,跑分是4.7左右Spec2017测试是很容易受GCC编译参数、Glibc版本影响的,比如本人都用GCC14情况下,3A6000 DDR4 3200双通道内存、Glibc 2.35,Ofast情况下(不开微架构Flag)开启lasx向量优化可以跑4.49,把lasx关了就只有4.17分,所以chipsandcheese用GCC测试出4.27是很正常的,参考:Matterhorn/Matter-CPU
一、基于3C6000验证此问题
为了更进一步验证这个问题,我分别编译了GCC15的20241124、20241208两个小版本,硬件和Guee保持一致,均为为3C6000四通道DDR4 3200+Glibc 2.40,成绩分别是4.53、4.57(有个报告备打InvalidRun标记是因为只跑了一次,Spec正常是跑多次取中间成绩,在设备没其他负载的情况下,跑1次和跑2-3次实际上基本没区别):
GCC15 20241124、20241208下的3C6000单核成绩接下去,我们看一下四份测试报告的子项对比:
子项对比可以看到,测试结果除了548子项,其他成绩非常接近,符合前面说的Guee修改了4.77分GCC15源码的结论。然后我们来看Guee测试的3A6000 5.12的成绩的子项数据:
(数据参考:guee/国产CPU的一些性能测试结果)
子项
3A6000分数(guee)
3C6000(本人测试)
百分比
500.perlbench_r
4.33
3.9
90.1%
502.gcc_r
4.85
4.38
90.3%
505.mcf_r
5.89
5.16
87.6%
520.omnetpp_r
4.05
4.93
121.7%
523.xalancbmk_r
4.49
4.03
89.8%
525.x264_r
8.51
7.54
88.6%
531.deepsjeng_r
4.41
3.83
86.8%
541.leela_r
3.9
3.4
87.2%
548.exchange2_r
13
8.74
67.2%
557.xz_r
2.91
2.62
90%
5.12
4.57
89.3%
子项在86.8%-90.3%之间的基本符合频率变化引起的性能变化(2.2/2.5=0.88)。剩下的520子项比较好理解,3C6000的内存带宽增加、三级缓存从16M提升到32M,提升是可以理解的。然后就是一样抽象的548项,成绩大幅好于3C6000,再次验证Guee跑3A6000的5.12分也是使用了这个特殊修改,但是他依然选择贼喊捉贼,写文章引导无知路人xxx劣化龙芯3A6000性能。
二、这是龙芯粉丝第一次这样干吗?
2.1、3A6000多个编译器多份不同成绩
显然这不是,因为在很早之前的Spec2006测试中,龙芯粉丝就经常干这样的事情,我之前也测试过3A6000的Spec2006在旧世界GCC8.3下的跑分,用guee同样的编译参数跑了多次,基本都徘徊在37.7-37.8附近。
而熟悉龙芯和Guee的都知道,在旧世界下他们跑出来的成绩比我的高不少,以下是Guee的两份跑分,分别是40.1和42.9(参考文章:guee:详测龙芯3A6000——性能强到没有朋友):
Guee跑的3A6000成绩同样,我们来对比子项:
子项对比可以很清楚的发现,比如401、403、473项目几乎没差异,而400、429、456、458、464子项差异不是很大,略高一点。但是462、471、483提升非常明显,这种部分子项大幅提升性能的行为基本就可以评定这个GCC或Glibc存在部分优化,四项成绩不可能来自同一个GCC
我的测试基本比guee等人的测试晚了快一年,所以我很好奇的问一句,请问下guee你们用的gcc8.3准备什么时候正式发布?还是这个gcc只是用来跑分,没法日常使用?
Guee部分承认了用不同编译器的问题,但是隐瞒了40.1的成绩的问题(Loongnix系统+GCC8.3我测试多次,均为38差一点点,硬件已经为DDR4 3200双通道)2.2、3A6000超频Spec2006性能默频性能
甚至部分粉丝,测试出接近46分的成绩,参考(龙芯3A6000 龙芯系统 SPEC2006):
45.6分的子项可以非常明显的看出45.6成绩是42.9的超频,基本可以确定是2.7GH在下的成绩我们来看那个跑出45.6分成绩的子项,非常明显,子项提升幅度大分部都在6-8%之间,这显然是一个超频后的跑分,而且根据提升百分比我们可以大致算出这是一个2.7GHz下的成绩(所以如果你看到有47或48左右也正常,3A6000可以超频到2.8,这个分数显然还有提升空间)。但这些粉丝还会在评论区故意引导这是在2.5G下的成绩,实现吊打其他厂商的目的。
然后评论区引导,这是2.5G下的成绩2.3、3A6000超频Spec2017性能
同样3A6000的Spec2017也存在类似行为,比如Guee测试出5.61,更甚至B站有测试出5.81分,老规矩,来看一下子项成绩(数据:龙芯3A6000 Openkylin系统 Spec2017单核整数性能_哔哩哔哩_bilibili):
可以非常明显的看出5.81成绩是5.12的超频,基本可以确定是2.8GH在下的成绩我们可以非常清楚的看到,除了520、523子项外,其他子项提升成绩几乎都落在7-12%之间,很明显,这是一个超频成绩,目标频率基本可以确定为2.8GHz。而520、523子项也可以猜测,内部还存在一些其他优化或内存超频(520、523子项受内存带宽、缓存容量大小影响比较大),来提升520、523子项成绩。
三、3C6000 IPC提升了吗?
一个常识:Spec的跑分会受编译器版本、编译参数、Glibc库版本、内存库、频率等多重因素影响。因此大家在算3C6000 IPC的时候,需要使用正确的对比数据:
可以是都未修改过的GCC15版本:(4.57/2.2 - 4.9/2.5)/(4.9/2.5)=5.9%
也可以是都开启优化的GCC15版本:(4.77/2.2 - 5.12/2.5)/(5.12/2.5)=5.5%
会发现,未优化版本对未优化版本提升5.9,都是优化版本提升5.5,基本是接近的,所以我们可以认为3C6000的IPC性能比3A6000提升5-6%左右(得益于双倍的三级缓存和四通道内存)。
最后,我们应该干什么,谴责这种自己用修改过的GCC版本来跑分,然后别人用开源版本跑个人,来诬陷对方劣化龙芯性能。
这个也就是为什么龙芯圈总能出现,我用GCC14测出4.69的时候,他们测试4.9x。我用GCC15测出3C6000 4.57的时候,他们测出4.77(然后再超个频,再换个优化过的Glibc库或GCC版本,成绩可以更高,反正无知小白多,发出来能骗一个是一个)。完了还可以反咬一口,你劣化龙芯成绩(得了便宜就低调点,自己跑分作弊还天天贴吧挂别人正常的跑分,多少有点过分了)。
编辑于 2025-01-20 16:54・IP 属地浙江
理性发言,友善互动
5 条评论
默认
最新
大智若愚
调过specint的同学应该都很熟悉,哪个子项的哪个循环,稍微改一下代码,性能就提升个10%。例如exchange,libquantumn
01-21 · 广东
求知者
你完了!你摊上事了,小胖子,百熊前世即将出动
01-17 · 上海
Denial
说实话,自己backport一堆没办法推到上游的patch做跑分优化真的很没意思…
11 小时前 · 浙江
XX晓
这个很科学,建议多分享一些。同时也呼吁多用这种态度测试一下海思的芯片。不能厚此薄彼。特别是显卡和手机芯片
01-20 · 云南
Matterhorn
作者这,我要真按这个标准测了,很多人估计又要不开心了,目前手机端的Spec2006大部分都是采用llvm编译器的,分数没GCC高。其次比如James这些大佬,一般测试的时候开的Flag、编译器版本、Glibc版本都比较保守,我一般选择常见Flag全开、GCC15、Glibc2.40,所以我用我的方法测,分数必然会涨,到时候又是一群龙芯粉丝跳出来说我抬高海思CPU成绩。
典型的比如我用GCC14测试鲲鹏920B的时候,结果是6.04分,龙芯粉丝各种场合说我分数造假,结果Guee在贴吧半直播想打我脸,结果他用GCC15搞出了个6.24...
01-20 · 浙江
来源:失传技术研究所