龙芯3A5000是龙芯中科自主设计的最新型号桌面CPU,比上一代3A4000提升了50%的性能。本人通过真机实测,印证了3A5000无论是单核性能还是多核性能,确实都有50%的提升。上一代3A4000较更早的3A3000性能翻倍时,仿佛都不如现在这50%的提升更令人激动,因为3A5000不但性能终于贴近了主流桌面CPU的性能区间,还使用了完全自主设计的LoongArch指令集,代表着一个全新时代的开端。
龙芯3A5000是一块里程碑
龙芯3A5000的主频为2.5GHz,使用SPEC CPU2006 测试的 int_base(整数计算基本性能)单核成绩为26分以上,int_peak(整数计算峰值性能)单核成绩为30分以上。这样的性能如果与Intel/AMD的产品相比,仅仅是在主流的边缘,但却不应妄自菲薄,因为现在还能制约龙芯CPU性能的,几乎只剩下了CPU运行频率。
不同CPU在相同频率下的性能,代表着CPU的核心设计水平,通常用IPC这个单位来衡量CPU核心的潜力。IPC的本意是指CPU每个时钟周期执行的指令数量,但现在大家把它引申为每GHz的性能,也很合适。通过专业的CPU测试软件对性能加以量化,把测试成绩换算到1GHz,这样CPU单核性能也就约等于 IPC * (频率/Ghz),可以比较准确地估算出相同核心的CPU在不同频率下的性能。
我把Intel i5-4460、i9-10850K都固定于2.5GHz的频率,使用相近的GCC版本和编译优化参数进行SPEC CPU2006 int_base测试,把成绩与3A5000的实测结果作比较,在相同的频率下,它们的单核性能已经非常接近。
龙芯官宣的int_base单核成绩为26分以上,int_peak单核成绩为30分以上。我的int_base测试成绩为26.6,已经超过官宣成绩。我的编译优化配置非常简单,一是所知有限,二是因为我懒。因此我觉得如果细致调整编译参数,int_base的测试成绩还能有一些提升空间。但是测试SPEC CPU2006太耗精力和时间,因此我只求达标,不求最高。int_peak我就觉得不用测试了,就以官方说的30分为准,毕竟为每一个测试子项单独调配优化参数实在太费时间。
Intel的测试成绩就比较奇妙了,从酷睿4代到10代,IPC提升微小,甚至内存从DDR3 1600变成了DDR4 3200也没有让IPC大幅上升。Intel恃着垄断地位不思进取,每代新品几乎只是依靠工艺改进,小幅度提高频率和降低功耗,CPU核心设计进步乏善可陈。挤牙膏收智商税,确信!在Intel挤牙膏这段时间,龙芯已经逐渐把IPC追近,CPU频率也在不断向着主流水平前进,十年前因单核性能低而暂停的众核计划,现在也终于可以继续实行。
然而,由于现在的主流桌面CPU大多有4GHz以上的睿频,一般能够长时间稳定运行的频率也超过3Ghz,3A5000与主流CPU差距仍然很大。其实现在所有的国产CPU运行频率都还不高,即使是使用7nm工艺的鲲鹏CPU离3GHz的运行频率也还有较大的距离,这是国产CPU共有的问题。一般来说,CPU核心设计越复杂,IPC就越高,但也越是难以达到较高的运行频率。要想以较小的代价提高CPU运行频率,那就得使用更先进的工艺,否则就需要大量的投入反复流片,寻找工艺和物理设计的短板,加以改进和规避。当CPU核心设计有较大改变,又需要重复这一烧钱的过程,虽然经验可以积累,但论经验又有谁能与Intel和AMD相比呢?
国产CPU当前最欠缺的是单核性能,提高单核性能既要重视频率提升,更要重视IPC提升,必须双管齐下。提高频率需要与生产工艺大量磨合,需要很高的成本。而且最新的生产工艺目前处于被卡脖子的状态,我们还无法完全掌控。而增强CPU核心设计的能力,提高CPU同等频率下的性能,则不需要依赖太多外部条件,是我们能够自主掌握的最核心的本领。只有钻研,再钻研,积累,再积累,才能三年不鸣而一飞冲天!只有单核性能高了,多核才能有竞争力,否则一百只螳螂也挡不住顽童脚尖的嬉戏。
为何如此强调单核性能呢?经常见到一些游戏用户抱怨,Intel几十个核心的服务器CPU玩有的游戏时还不如4个核心的i5顺畅。这是因为桌面应用的特性决定了“一核有难,多核围观”是常态。Web服务器可以把数千并发访问平均分配给所有核心,但浏览器对网页版面重排却只能从头到尾顺序进行。正因为桌面应用的特性,Intel在酷睿8代之前,就没有超过4核的桌面CPU产品。即使是服务器,也有许多任务无法多核并行处理,如资源争用、等待前置条件、算法无法拆解等等都会使程序被迫串行运行。因此如果一款32核CPU的单核性能是另一款64核CPU的两倍,那么32个核心能发挥的实际效率也就高于64个核心。
龙芯3A4000与飞腾FT-2000/4的生存之争
龙芯3A5000的单核性能和多核性能都要比3A4000高50%,而整机价格相当,那么3A4000似乎就成了明日黄花,很快就会无人问津了。3A4000的命运果真注定了吗?可能并不如此!
当前所有的国产桌面、服务器CPU都还不能与消费市场的主流产品抗衡,无论是性价比,还是单纯的性能,都有很大差距。维持它们生存并加速它们进步的,主要是特别注重安全的信创市场。在这个限定的市场,各家国产CPU企业既要展现产品的先进性,也要体现路线的正确性。只有优秀的产品才能获得顾客的青睐,只有正确的路线才有无穷的潜力,错误的路线终究是涸泽而渔。信创市场的容量有限,国产CPU必须抓紧时机,快速进步,才能在一两年之后彻底进入普通消费市场时,仍有生存和竞争的能力。
也就是说,3A4000其实不需要与3A5000竞争,它只要与其它国产CPU相比有些许优势,就仍然有生存的空间。正好最近我买了一套飞腾D2000的主板,飞腾D2000与上一款FT-2000/4相比,核心数量从4个扩展到了8个,但频率从2.6GHz降到了2.3GHz。它们使用的CPU核心完全相同,其它规格也基本一致。若论CPU的整体性能,D2000的8个核心肯定超过上一款FT-2000/4的4个核心,但论实际体验,有时可能会觉得更慢。D2000与3A4000比较的话,8核对4核,3A4000没有胜算,3A5000尚能一战。因此我是想把D2000的单核性能换算到2.6GHz,让它代替FT-2000/4来与3A4000比较一番。
以前我调试Linux for ARM的程序,用的是树莓派4B,性能低得实在难以忍受,咬咬牙就买了飞腾的最新桌面CPU产品。实际使用感受确实比树莓派4B快多了,但对于CPU性能的量化,只能使用专业的测试工具软件来测试性能。测试CPU性能首选工具SPEC CPU,我暂时使用2006版,新版SPEC CPU2017我还没有很多问题没弄明白,以后有时间再测。
SPEC CPU2006是一种行业标准化的性能测试工具,测试重点是CPU、内存、编译器。通常CPU本身和编译器及编译优化参数对测试结果的影响较大,而内存性能的影响相对较小,因此当内存性能和编译器版本差异不大时,就可以认为SEPC CPU2006的测试成绩代表了CPU性能。实际上由于软件的运行离不开操作系统环境,Linux核心和各种基础库的优化程度对CPU的性能发挥也有很大的影响,也会影响SPEC CPU2006的测试成绩。
龙芯官宣3A4000在2.0GHz时的int_base单核成绩为19.1,实际大量出货的是1.8GHz的版本,把2.0GHz时的19.1换算到1.8GHz,得分应该是17.2。飞腾从来没有在网上的报道中公开过其CPU的单核测试成绩,但一直流传着来源未明的的“官方”说法,称FT-2000/4在2.6GHz时单核int_base成绩17.2,与1.8GHz的3A4000相同。但是这两个成绩都有疑问,曾有一些网友声称实测龙芯3A4000单核int_base仅13.x,也有一些网友声称用FT-2000/4实测出了超过21分的int_base成绩,都与宣方成绩冲突,又都没有能令人信服的证明。真实情况到底如何,我们也来测测看。
Stream内存访问性能测试
在测试SPEC CPU2006之前,先测试一下它们各自的内存访问性能,这也和CPU的性能表现,以及各种软件的运行效率相关。使用Stream开源程序来测试,比较简单,就让3A5000也参与一下吧!
Stream是测试的内存访问性能的一个开源程序,可以在“863高性能计算机评测中心”的网页上找到简要介绍和源码下载地址。内存访问对CPU的计算能力要求不高,主要是考验CPU的内存控制器以及内存本身的性能。测试分为单线程内存访问和多线程内存访问,下图是单线程测试结果:
单线程的内存访问3A4000不敌3A5000可以理解,因为内存频率有差距,且3A5000在访存方面也有改进。但D2000被3A4000完败,速度甚至不到3A5000的一半,就有点匪夷所思,飞腾CPU的访存性能这么弱吗?这么弱的访存性能还做64核心的服务器CPU,不是赶鸭子上架吗?不过这只是单核测试的结果,下面再看看多线程内存访问的情况,D2000有8核,多线程测试是否可以翻盘呢?
从测试结果来看,D2000的内存访问性能比较令人失望,多线程测试仍然垫底。本来是想用D2000代替FT-2000/4来与3A4000进行对比,结果它自己都如此萎靡!如果飞腾的CPU能把内存访问性能增强,相信测试CPU性能成绩能提高一点。但也不能寄予太大希望,看看本文开始处几款CPU在相同频率下的性能对比,i5-4460的内存是DDR3 1600,i9-10850k的内存是DDR4 3200,内存性能差距一倍,但测试成绩并没有提高多少。
内存性能更影响的是实际应用程序的运行效率,而不像SPEC CPU测试这样,主要是测试各种计算能力,并没有很大的数据样本。
龙芯3A4000的 int_base测试(单核和多核)
龙芯3A4000的测试很简单,我前几天尝试在3A5000上测试SPEC CPU2006时,把几个常用的编译优化参数简单拼凑了一下,就得到了26.6的int_base单核成绩,与龙芯官宣的26分(以上)相比,还富裕了不少。那么就继续使用这几个简单的参数来测试3A4000就好了,只是由于3A4000与3A5000架构不同,编译参数有一些适应性的改动。
龙芯3A4000(1.8GHz) SPEC CPU2006 int_base单核实测结果为17.5分,如果折算到2.0GHz就是19.44分,与龙芯官宣的19.1相比仍然超出了不少。因原始测试报告比较冗长,为避免影响阅读,这里只截图其中最重要的部分。
—————————————-
3A4000 (1.8GHz)int_base编译参数:
—————————————-
3A4000 (1.8GHz)int_base单核测试成绩:17.5。
—————————————-
3A4000 (1.8GHz)int_base多核(4线程)测试成绩:55.1。
飞腾D2000的int_base和int_peak测试
测试飞腾D2000更加麻烦一些,我开始时使用与我测试3A5000/4000相似的编译器优化配置参数,但成绩不太理想,在2.3GHz的飞腾D2000上int_base单核得分仅15分。D2000的频率是2.3GHz,如果把成绩折算到FT-2000+/4的2.6GHz才16.96,离网传的17.2分还有差距,和某些网友说的21以上差得更远。然后我单独使用-O2和-Ofast参数进行测试,测试成绩仅分别为13.6和14.4,证明我使用的编译优化参数确实有效,但效果又不明显。
然后我请求声称实测超过21分的几位网友给予帮助,希望他们提供优化参数,但他们要么缄口不言,要么答非所问,要么把我拉黑,于是此事搁浅!后来有网友给我提供了一份疑是“飞腾官方泄露”的测试SPEC CPU2006用的CFG配置文件。我看到这个配置文件的第一眼,就几乎立即相信了这是官方的CFG文件。从下面的局部截图可以看到,这个文件用于64核的FT-2000+,因为FT-2000+和4核的桌面版本FT-2000+/4以及8核的D2000都是相同的CPU核心,因些这个配置肯定是对D2000有效的。
同时我也发现这个配置文件中,对FP(浮点性能测试)可能启用了一些特殊优化的库文件。在base/peak编译配置的共用部分,一些测试浮点性能的子项单独配置了库文件的搜索路径,这些配置也加入了编译参数中。我不知道这些文件夹下有些什么库文件,也没有渠道得到它们,因此如果测试浮点性能,那么我的测试结果可能会比较差。不过本次我只打算测试整数性能,那么无论这些定向优化的库文件是否存在,都不会影响测试。
上面就是存放某些定向优化的库文件的路径(部分),好在从配置文件来看,这此库文件与整数性能测试无关。
这个CFG文件中对peak(峰值)测试的优化配置参数十分复杂,我只能感叹编写者对GCC的熟悉,以及对测试出高分的执着,而不敢对那些参数设置改动半分。不过幸好base(基本)测试的编译配置还在我能理解的范围内,不至于太伤我的自尊。
使用这个CFG文件测试出的飞腾D2000的int_base单核成绩是15.2,比我自己拼凑的优化参数稍高一些。把成绩折算到2.6GHz就是17.2分,也就与传言中的FT-2000/4官方成绩相同,也与知乎上“原来如此”对FT-2000/4的实测成绩相同,只是他测出的龙芯3A4000的成绩和我实测的差距非常大。3A4000仅13.x的单核成绩绝对是负优化的成果,不可能如他文中所说和测试FT-2000/4时使用的优化配置一样。
本文发出之前,有网友在与我测试D2000时相同的环境下,用FT-2000/4实测SPEC CPU2006,分别使用“-O2 -static”和“-O3”参数测试int_base,测试成绩都为16.x,与我测得的D2000成绩换算到2.6GHz后的得分相当。
虽然我测试D2000的单核成绩已经达标,但我并不满意。因为龙芯3A5000/4000官宣成绩都留下了一些冗余,并且是用很简单的优化参数就超过了官宣成绩,那么飞腾D2000的官方优化配置是否也有冗余呢?
经过我的反复尝试,只要对原有参数删、改,测试成绩就一定会降低,哪怕把-O3改成-Ofast也会影响原有参数的平衡性,使总成绩降低。增加参数有的不影响,有的会使成绩降低!对于这种浑然一体、无懈可击的优化配置,我只能感叹自己能力不足,无法测试得到更好的成绩。最后只好聊胜于无地把“-march=arm8……”改成了“-march-arm8.1……”,再换了两根时序更好的内存条,以此表达我最后的倔强!测试结果大概……也许……可能对小数点两位之后的成绩有影响,四舍五入后到十分位还是一样,仍然只有15.2,折算到2.6GHz还是只有17.2。
飞腾D2000 (2.3GHz) int_base编译参数:
—————————————-
飞腾D2000 (2.3GHz) int_peak编译参数:
—————————————-
飞腾D2000 (2.3GHz) int_base和int_peak单核测试成绩:15.2和15.7。
—————————————-
飞腾D2000 (2.3GHz) int_base和int_peak多核(8线程)测试成绩:
虽然飞腾D2000的频率和龙芯3A5000差距很小,但实测单核性能比1.8GHz的3A4000还要低,而FT-2000/4虽然频率比3A5000更高一些,但用D2000测试结果换算得到的FT-2000/4的成绩也仍然低于1.8GHz的3A4000。D2000测得的15.2的测试成绩换算到2.6GHz之后为17.2,与网传的飞腾官方成绩以及知乎网友“原来如此”的测试成绩完全一样。D2000的bese和peak测试成绩非常接近,从编译参数的复杂度就能看得出,已经尽力了,就是这个样子!为了便于比较,下面把它们的成绩放到一起看一看。其中FT-2000/4的多核成绩,如果用D2000的8核int_base成绩除2后再折算就只有48,可能比实际成绩低,因此这里直接用官方公布的55分的成绩。不知道这个55分是base还是peak,我就把它当成base来用吧。另外3A5000的多核成绩也直接使用官方公布的80分成绩,因为我自己测试的int_base多核成绩才79.x,还有一点点差距。按照3A4000的单核与多核性能比例来算,3A5000多核int_base应该有83以上才对,可能龙芯LoongArch的系统优化还没有完全放出来吧!
FT-2000/4与3A4000同样是4个核心,无论单核性能还是多核性能,3A4000都完胜。FT-2000/4的主频是2.6GHz,3A4000的主频仅1.8GHz。飞腾最新的D2000频率不升反降,单核性能更是完败于3A4000。3A5000主频率仅比D2000高了0.2Ghz,单核性能却高了75%。多核性能方面,3A5000的4个核心与D2000的8个核心仅有6%的性能差距。由于单核性能远胜,3A5000在桌面应用中实际表现也会超过D2000。这是龙芯多年致力于提高CPU核心设计水平,增强单核同频性能带来的胜利。
最有意思的还是每GHz的测试成绩,飞腾2015年发布的首款ARM架构的CPU是FT-1500A,这款CPU实测的每GHz的测试成绩也是6.x。现在已经6年了,飞腾的CPU除了工艺和频率不断变化之外,CPU核心几乎没有长进。而龙芯呢,这6年把每GHz的性能翻了一倍,3A5000的CPU核心虽然只是在3A4000的基础上小幅改进,但也有10%的IPC提升。下一代3A6000将会启用新的CPU核心,IPC将会更高,且龙芯的CPU频率也在稳定提升,将会进一步缩小与主流CPU产品的差距。
总之,同样4核的飞腾FT-2000/4和龙芯3A4000相比,2.6GHz的FT-2000/4性能完败于1.8GHz的3A4000。这还不算FT-2000/4是16nm工艺,而3A4000是28nm工艺,工艺水平差了整整十年。而飞腾D2000因为单核性能不升反降,以至于8个核心的整体性能差一点点被4个核心的龙芯3A5000逼平!
龙芯3A4000生存无忧矣!!!
后记
如果说龙芯3A5000的单核性能接近桌面高端CPU产品的一半,那么飞腾D2000就只有1/4的样子,龙芯只要能把CPU频率继续提高,就能与主流产品匹敌。而飞腾要是再不努力提高IPC,CPU频率也不升反降,用64核的CPU战平Intel 2014年的14核产品还沾沾自喜,整天搞飞腾“电竞主机”这类宣传噱头,不知道将来拿什么去面对消费市场挑剔的顾客!
转载请注明:《面对龙芯3A5000的逼迫,3A4000要为生存抗争!》