龙芯3A6000是龙芯中科自主研发的最新款桌面CPU,基于自主指令集——龙架构(Loongarch)。集成了4个龙芯自主研发的LA664核心,主频2.5GHz,4核8线程,使用境内12nm可控工艺生产。
几天前我申请到了龙芯中科的3A6000测试机,然后进行了一系列的性能测试。经过与多款进口及国产CPU的性能对比之后,我能肯定地说,龙芯3A6000与10代酷睿i3是相同的性能水平。
什么是水平呢?用8个核打4个核的那不叫水平,要是8核打4核还打不赢,那就更没有水平了。要在核心数量相同的条件下,表现出你来我往的实力,才能算是一样的水平。
龙芯3A6000和10代酷睿i3都是4核8线程,龙芯3A6000以低频战高频,打得有声有色,部分性能指标超过了10代酷睿i3-10100F。我还发现了龙芯官方没有提到的秘密——如果只比较每GHz的性能,那么龙芯3A6000已经追平了13代酷睿,并超过了AMD Zen 3代核心。
每GHz的性能不等于CPU产品的性能,但能体现CPU核心的设计水平。有了高超的CPU设计能力,即便使用较为落后的工艺来生产,也能保证CPU产品具有较高的性能水平。而每GHz性能低下的CPU核心,则必须依靠先进工艺全力提高CPU频率,不符合国内现在的实际情况。如果一款CPU每GHz的性能只有龙芯3A6000的三分之一,那么就需要三倍的频率才能与龙芯3A6000抗衡,不但超出了当前的工艺极限,功耗和发热量也会提高到3倍以上。
龙芯3A6000依托境内的可控工艺,主要通过设计能力实现了性能大幅度提升,CPU核心的设计一举达到了世界先进水平。我国在上世纪80年代初由于经济和工业水平无法支撑高端半导体技术发展,被迫放弃了自主设计微处理器。我国与美国在CPU设计能力方面的差距实际已经累积了五十年,龙芯经过二十多年的不懈努力,弥合了这长达半个世纪的差距。
测试环境和性能对照组这次我用来与龙芯3A6000进行性能对比的CPU共有八款,其中五款是国产CPU,两款是Intel的产品,一款是AMD的产品。
国产CPU中,龙芯3A5000是龙芯上一代的桌面产品,海光C86-3250是8核16线程,核心数量是3A6000的两倍。兆芯KX-U6780A和飞腾D2000也是8个核心但没有超线程,鲲鹏920是国内目前唯一使用7nm工艺的桌面和服务器CPU产品。兆芯、飞腾、华为自2019年之后就没有推出性能更强的桌面CPU,所以只能用它们4年前的产品参与对比。
两款Intel的CPU分别是10代酷睿i3-10100F和13代酷睿i3-13100F,它们和3A6000一样是4核8线程,但它们的主频比3A6000高得不是一星半点。i3听起来好像很低端,但10代i3的规格其实和7代酷睿i7一样,更高端的型号主要是集成了更多的核心。10代酷睿CPU因为IPC有小幅度提升,再加上工艺进步,所以它的实际性能比7代i7还高一些。最后一款是AMD R5-5600G,核心是Zen 3代,6核12线程。
两款Intel的CPU我都没有装进机箱,AMD的CPU用的开放式机箱。因为所有CPU都是使用的普通风冷散热器,Intel和AMD的CPU发热量又比较高,装进普通机箱会因为积热而影响性能发挥。
几款CPU支持的内存频率也不一样,凡是使用2666内存的,都是因为CPU或主板只能支持到2666,上不到3200。内存都是双通道,在测试单核性能时内存不是瓶颈,2666和3200的差异几乎不影响测试成绩,不过在测试多核性能的时候,3200的内存要比2666多一些优势。但这一点优势又很容易因为CPU高温降频而损失殆尽,不过龙芯3A6000是固定频率2.5GHz,倒是没有散热器压不住温度的焦虑。
对于尚未正式发布的龙芯3A6000,目前只有龙芯自己的Loongnix系统才能较好地发挥它的性能,因此这次测试3A6000是使用Loongnix系统,其它CPU使用UOS系统,编译器都是系统自带的GCC8.3版本。
UOS系统的龙芯版本实际上是使用的Loongnix的内核和基础组件,只不过UOS的优化更新会落后于Loongnix一段时间,所以3A6000当前在Loongnix上的性能表现,在几个月之后就能在UOS龙芯版系统上重现。
为了能准确地定位龙芯3A6000核心设计的水平,我对i3-10100F、i3-13100F和R5-5600G除了进行通常状态下的测试之外,还把它们锁定到了与3A6000相同的频率再次进行了测试,以便于对比它们在2.5GHz时与3A6000的性能差异。
CPU性能测试——SPEC CPU2006龙芯中科提供的测试机是有归还时限的,因此开始时我本来不打算测试SPEC CPU 2006,而是想测试国内CPU厂商很少提及的SPEC CPU 2017。不过一些网友知道我拿到了龙芯3A6000测试机之后,强烈要求我测试SPEC CPU 2006。因此我中断了对SPEC CPU 2017的测试,先把SPEC CPU 2006跑了一遍。在与其它的国产CPU对比时,SPEC CPU 2006的测试成绩也更有意义。
SPEC CPU 2006是一款比较专业的CPU性能评估工具,它的代码没有针对特定平台优化,由测试者自行编译运行,因此适合用于跨平台对比CPU性能。但ICC和AOCC等编译器为了在SPEC CPU测试中跑出高分,会牺牲计算精度换取运行速度,因此大家一般更加认可使用GCC、LLVM、MSVC等编译器测试得到的成绩。
SPEC CPU 2006测试的是CPU运行常规应用软件时的通用性能,包含了12个整数性能测试项目,和17个浮点性能测试项目,每个子项目都单独评分,然后把各个子项的测试成绩进行几何平均得出总分。
SPEC CPU 2006分为单任务测试和多任务测试,但是单任务测试的时候,有部分测试项目可以通过编译器的自动并行化支持把计算任务自动分配到多个核心上并行执行。因此凡是开启了自动并行化的测试结果,都不能代表CPU的单核性能。对于桌面电脑的CPU,最为重要的是整数通用性能,特别是单核的整数通用性能。因为单核整数性能最能体现桌面应用程序的运行效率。
在3A6000流片之后,龙芯中科公开过两次SPEC CPU 2006测试成绩。第一次单核整数和浮点得分分别是40和55,第二次是在加强了GCC编译器对自主指令集Loongarch的优化之后,由工信部旗下赛西实验室测试的成绩,单核整数和浮点成绩分别是43.1和54.6。
上图中提到了“编译器‘补课’”,学霸从来不会承认自己补课,把补课挂在嘴边的都是差生。龙芯自主设计的LoongArch指令集才诞生两三年,龙芯的工程师虽然已经给GCC等常用编译器添加了对LoongArch指令集的支持,但优化的程度还与x86和ARM相差甚远。因此龙芯要通过“补课”,使GCC编译器对LoongArch指令集的优化追上x86和ARM的水平。
龙芯提供的测试机硬盘中有已经编译好的SPEC CPU 2006测试环境,直接运行就能得到测试成绩。但因为龙芯补课完成的最新版本的GCC编译器还没有到发布阶段,没有提供最新版本的编译器,所以我如果要自己配置编译参数来测试SPEC CPU 2006,就只能使用系统中现有的老版本编译器。因此我暂时只尝试复现龙芯第一次公布的实测成绩,等3A6000正式上市销售了,操作系统和编译器应该也完成了升级更新,那时我再去尝试复现更高的43.1的单核整数成绩。
我用自己的硬盘重新安装了Loongnix系统,并自行配置参数测试了SPEC CPU 2006,单核整数性能测试的结果还不错,达到了40.1分,与龙芯公布的编译器“补课”完成前的40分相符。直接运行测试机中提供的SPEC CPU 2006,得分42.9,与公布的43.1相符。
与编译器“补课”完成后的测试成绩相比,新编译器对12个测试项目的9个项目有提升。这说明龙芯绝不是像ICC和AOCC编译器那样为了跑分而优化,因为编译器如果是针对跑分优化,往往只能把某一个子项目的成绩提到极限,而其它项目的成绩基本不变。
就像下面这款至强CPU的测试成绩,使用了ICC编译器和收费的跑分专用优化库,在测试报告的条形图上,只有一个项目一支独秀,其它项目都被挤压成了薄薄的一片儿。幸好总分是通过几何平均来计算,如果是算术平均的算法,Intel的测试成绩将无人能敌。除了Intel和AMD之外,国产x86厂商也有这样跑分的,在宣传的时候又刻意回避测试环境和子项成绩,让人看不出猫腻。我也是在吃了亏上了当之后,才有了自己测试国产CPU并把结果公之于众的想法,能少几个人上当总是好的。
ICC和AOCC的超强优化原理其实很简单,就是牺牲计算精度提高计算速度。但是这种优化会使编译器出现预料之外的行为,会把不该优化的也优化了,等于是牺牲了全局的计算精度和兼容性。没有任何商业版的操作系统和应用软件使用ICC和AOCC,就是因为很难保证程序运行时的正确性。在必须保持计算精度的时候,ICC和AOCC却又表现不出明显的优势。而龙芯的编译器不可能像ICC和AOCC那样顾头不顾腚,因为龙芯电脑上所有操作系统和应用软件,都是直接或间接地使用龙芯的编译器,所以龙芯的编译器绝对要保证正确性。
龙芯新版编译器测出的成绩中,编号462的子项目看起来很像是使用GCC自动并行化参数结果,但我在测试时观察了CPU的占用情况,确定整个测试过程中只有一个核心满负载,其它核心的占用率都低于1%。说明成绩提升是来自于编译器“补课”,也说明龙芯3A6000的向量指令运行效率很高,只是当前版本的编译器还不能释放它的性能。何况就算把462这一项成绩换成我的测试结果,几何平均后总分也仍然接近42分,完全不影响关于性能水平的结论。后面的Linpack测试也能证明龙芯3A6000的向量计算能力很强,并且当编译器能够完整地支持“龙架构”的向量指令之后,3A6000会更强。
我对龙芯的GCC编译器仍然使用“补课”这个词,是因为在x86版的GCC面前不敢说“优化”。在GCC编译器和Linux中,积累了Intel和AMD以及众多其它开发者对x86指令集几十年的优化成果,龙芯的龙架构在基础软件优化方面,能够在两三年内补上差距就已经很厉害了。等龙芯发布新版操作系统和编译器之后,无论测试成绩还是应用软件的实际体验,都一定会有相应的提升。
为了探索龙芯3A6000的性能水平,我在申请到测试机之前,就已经开始了漫长的测试过程。下面这张图中,三款进口CPU从1.0GHz到4.0GHz的测试成绩不是通过换算得到的,而是我把它们锁定频率后一点一点实测出来的。从1.0GHz到4.0GHz,每隔500MHz就运行一次SPEC CPU 2006,然后得到了它们的单核整数和浮点成绩与CPU频率的对应关系。通过下方的图表可以确定两点规律:
当CPU的频率相同的时候,三款CPU的性能各不相同。早先AMD被Intel打压得濒临崩溃,然后又反过来压了Intel一头,之后Intel掏出压箱底的技术储备又保住了市场地位。导致这一切变化的主要因素,就是它们每GHz的性能交替性地出现了重大提升。总有各种原因使CPU不能运行在较高的频率,但只要每GHz的性能足够强, 那么在低频率下也仍然能保障不错的性能,并且只要满足了达到高频率的条件,就能获得更高的性能,这就是高性能CPU核心设计中强调每GHz性能的原因。当内存性能固定的时候,CPU的性能与频率不是等比例地提升,每GHz的性能总是随着频率升高而降低。CPU频率翻倍时功率也一定翻倍,但性能却不能翻倍。因此在低频率下实现的高性能更有价值,而实现低频高能的唯一途径就是提高每GHz的性能。我在测试这三款CPU性能的过程中,就发现10代i3在设置了固定4.0GHz的频率后,测试过程中会因为温度过高而降频。我为了避免频率波动而临时换成了比CPU还贵的水冷散热器,但除此之外的其它测试都仍然使用原来的散热器。因为我认为在极度优化的条件下测出的成绩,对于占了绝大多数的普通家庭和办公电脑用户没有意义。DIY和超频玩家有另外的性能评价标准,我在常规环境下的测试也不会干扰他们的判断。
所有CPU都是使用SPEC CPU 2006的base模式进行测试,编译器都是系统自带的GCC8.3版本。不使用第三方使用优化库,也没有开启自动并行化,测出的成绩能真实反映CPU在用户的系统和软件环境中能达到的性能水平。
3A5000和3A6000的频率都是固定的2.5GHz,只要把它们的测试成绩标注在2.5GHz的坐标轴上,就既能看到三款进口CPU与它们在相同频率时的性能对比,也能看到它们与这三款进口CPU的性能差距。
13代酷睿i3-13100F在2.5GHz时的成绩刚好40分,我测得3A6000的40.1分比它更高一点,但13代酷睿工艺比10代酷睿先进,单核最高频率可以比较容易地长时间稳定在4.4GHz,因此3A6000与i3-13100F实际的性能差距还比较大。
下图是各款CPU的单核整数成绩对比,3A6000是使用的官方成绩,其它的CPU都是我自己测试的结果。其中Intel和AMD的CPU包括了自动控制频率和固定2.5GHz时的成绩,便于与2.5GHz的龙芯3A6000对比相同频率时的性能。
3A6000使用与3A5000相同的生产工艺,在频率不变的条件下把单核性能提高了60%,这完全是来自于CPU核心设计的提升。提高每GHz的性能和提高CPU频率都能达到提高性能的目的,两种方式各有各的困难。提高频率必须把CPU电路的布局布线与生产工艺紧密结合,需要反复多次流片寻找短板加以改进,一点一点地推高频率,资金消耗非常大。如果更换了工艺或者对CPU核心设计有重大修改,又必须重复提高频率的过程。
提高每GHz的性能更加困难,考验的是核心技术积累和创新的能力,Intel把每GHz的性能提高到现在的程度用了四十多年,AMD曾经因为设计能力进入瓶颈,每GHz性能多年没有提升而几乎倒闭。提高每GHz的性能和提高频率不是二选一,但龙芯目前的路线是优先提高每GHz的性能,暂时不苛求高频率。大概是因为以国内当前的工艺水平很难达到与Intel一样的频率,在每GHz的性能超越Intel之前盲目提高频率就只是浪费资源,把有限的资金用于研发更多的核心技术才更有意义。
龙芯自主研发的核心技术涵盖了CPU和主板必需的各种功能模块,还包括了自主研发的GPU。龙芯GPU LG100已经集成在了龙芯的桥片7A2000中,LG200将会集成到下一款桌面CPU 3B6000中。单看对现代桌面计算机所需的核心功能模块的积累,能在先进性和完备性两个方面同时超过龙芯的可能只有Intel和AMD。
龙芯3A6000无论是43.1还是40.1的得分,都超过了i3-13100F和R5-5600G在2.5GHz时的成绩。假如国内的芯片生产工艺跟得上,并且龙芯也有足够的资金与代工厂反复磨合提高主频,那么3A6000的对手就不止是10代酷睿i3了,至少能再提高一个段位。
10代酷睿i3-10100F在2.5Ghz时的测试成绩仅30.8,比龙芯3A6000低了不少。自动控制频率时成绩是42.5,与龙芯3A6000持平。i3-10100F测试过程中频率有波动,平均频率大约3.6GHz,与它的基础频率一样。10代酷睿i3的最高型号是i3-10105(F),基础频率和睿频都只比i3-10100F高0.1GHz,性能基本没有区别。
测试3A6000整数通用性能的目标已经达成,不过我测试浮点通用性能的成绩暂时没有达到55分,目前只有51.7分。我觉得我现在使用的GCC编译器,版本可能比龙芯第一次公布3A6000实测成绩时用的编译器更老,要不然不会出现这样的差距。因为还要留下时间测试SPEC CPU 2017和其它项目,所以我不会花太多时间来尝试调整编译参数,还是等龙芯更新编译器吧!
无论是51.7还是54.6,都与13代酷睿在2.5GHz时的成绩差距不大,而且要比AMD R5-5600G的Zen 3代核心好一些。因为3A6000的整数通用性能也比相同频率下的R5-5600G更高,所以可以确定3A6000的LA664核心在同频率下的性能超过了AMD的Zen 3代核心,也应该超过了Zen 4代核心。龙芯3A6000的性能虽然只与10代酷睿i3相当,但CPU核心的逻辑设计水平已经是世界一流的水准。
10代酷睿i3-10100F在4.0GHz时,单核浮点通用成绩也才56.1分,而通常情况下i3-10100F保持不了4.0GHz的频率,实测只有51.3分,我测得3A6000的51.7分要比它高一些。因此龙芯3A6000在浮点通用性能方面也已经追平了10代酷睿i3。13代酷睿相对10代酷睿同频率的浮点通用性能提升幅度高达60%,但3A6000相对于3A5000则实现了几乎翻倍的提升,说明龙芯虽然绝对性能与Intel相比还有差距,但进步的速度比Intel更快。
与国内的其它CPU对比的话,3A6000就令所有的国产CPU都望尘莫及了。最差的兆芯和飞腾单核浮点通用性能甚至只有3A6000的四分之一。
通过单核性能测试已经再次证明龙芯官方公布的成绩是靠谱的,因此对于多核并行性能,就直接用官方的测试成绩来与我测试的其它CPU作个对比。
通过下方的条形图,可以明显地看到3A6000的多核并行性能也与i3-10100F是相同水平。测试i3-10100F多核并行性能时与测试单核时的散热条件一致,如果把它装进机箱,测试成绩就会大幅度下降。当然,如果加强散热也可以带来5%左右的性能提升,不过不影响3A6000与i3-10100F性能基本相等的结论。由于Intel和AMD的CPU性能发挥极度依赖于散热,因此对于盖得严严实实的家用和办公电脑,3A6000的多核并行性能甚至能与10代i5拼一拼。
Intel和AMD的CPU非常有趣,因为性能是不确定的,主频和睿频只能决定CPU性能的上限,而管不了CPU性能的下限,所以极大地增强了用户探索CPU性能极限的趣味性。有网友提供了10代i5笔记本的测试成绩,也是4核8线程,但多核并行成绩只有桌面i3的一半,也就是也只有3A6000的一半,甚至低于3A5000的水平。当然如果是游戏笔记本,性能就不会降这么多,但商务笔记本就很难说了。
在多核并行的对比中,国产CPU中只有海光C86 3250的成绩超过了龙芯3A6000,因为海光C86 3250是8核16线程,而龙芯3A6000是4核8线程。等龙芯8核的3B6000推出,那么能接得住就只有Intel和AMD。与海光3250同样有8个物理核心的兆芯KX-U6780A和飞腾D2000,多核性能则只有龙芯3A6000的一半。
因为多核并行时的损耗会随着核心数量增加而增加,所以部分国产CPU厂商在单核性能还很低的时候,不想着提高单核性能,反而毫无节制地碓砌核心数量,就令人难以理解。
比如飞腾64核的S2500,多核并行的测试成绩只有龙芯3A6000的3倍多一点,是64核的性能只有4核的3倍多。还有基于阿里平头哥C910核心的RISC-V架构的某款64核CPU,单核性能比飞腾的CPU更低,64核并行的成绩只有300分,也就是不到3A6000的两倍,这比“i3默秒全”还要夸张啊朋友们。
在实际应用中,一个40分的核心,无论是单任务还是多任务并行,运行效率都远远高于四个10分的核心。连软件工程师都明白的事儿,难道CPU工程师们不明白吗?这些低性能的多核CPU,核心堆得越多就越是耐人寻味。
浮点运算性能测试——Linpack前面说过龙芯3A6000的向量指令运行效率很高,那么现在就来测一下比较考验向量计算性能的Linpack。
Linpack也是一种常用的性能测试程序,它通过计算双精度线性方程组的求解来测试计算机的运算能力,Linpack的测试成绩代表的是计算机最基本的计算性能。基础的Linpack版本只能测试CPU的性能,超级计算机使用Linpack来测试时,会针对异构运算部件修改测试程序,超算500强的排名依据就是Linpack的测试成绩。
现代编译器都会自动使用CPU的向量指令来优化计算速度,因此Linpack对于普通的CPU就特别考验编译器的能力。
想让测试结果接近CPU的理论峰值非常困难,因此我偷个懒,直接使用openbenchmarking网站上的Phoronix Test Suite测试套件来测试,这样所有的CPU都是使用相同的源代码,由测试套件自动配置编译和测试参数,每一款CPU的测试成绩都无法达到最高,也就相对公平了。
Phoronix Test Suite测试套件中的HPL-Linpack是多线程测试,CPU所有核心都会全速运行。因为是使用通用的编译配置,所以就比较考验编译器自动向量优化的能力,在这方面当前版本的龙芯编译器是比较吃亏的。不过龙芯3A6000的测试成绩看起来还是相当不错,远超10代i3,低于13代i3。测试时没有锁定频率,也都是所有核心并行,各款CPU能跑多高就跑多高。
必须再次强调这个成绩是使用的Phoronix Test Suite测试套件自动编译并自动配置测试参数,测试成绩与CPU能达到的最高水平差距很大。i3-13100F在浮点通用性能测试中比i3-10100F只高了60%,但在Linpack测试中提高了80%。龙芯3A6000则与之相反,在浮点通用性能测试中比3A5000高一倍,但在Linpack测试中只高了28%。出现这样的情况,几乎可以肯定是编译器过于陈旧导致的。因为3A5000的测试成绩已经比10代i3更高,那么3A6000就应该比13代i3更高才对,我非常期待龙芯对编译器的后续更新能带来惊喜!
CPU性能测试——SPEC CPU 2017SPEC CPU 2017是比SPEC CPU 2006更新的版本,测试的项目经过调整,既删除了被ICC、AOCC等编译器通过降低计算精度提高测试成绩的项目,又增加了更多的针对现代CPU向量指令的性能考察。在SPEC CPU 2017上,编译器自动使用向量指令优化程序性能的能力会对测试成绩造成更大的影响,而我当前使用的GCC版本对龙芯向量指令的支持还不够完善,龙芯在测试中是会比较吃亏的,不过没关系,反正也不会有很大的差距。
SPEC CPU 2017也分为单任务和多任务测试,单任务测试也仍然支持自动并行化,不过2017版的测试报告中会明确标注自动并行化时的线程数量。只有不开启自动并行化的单任务测试成绩才能代表CPU的单核性能。大家在通过SPEC CPU的测试成绩来对比CPU性能的时候,一定要注意测试报告中注明的编译器类型、是否开启了自动并行化、是否使用了第三方优化库等重要信息。
SPEC CPU 2017的测试项目不但和2006版有区别,而且多任务和单任务的测试项目也有区别,它们的成绩不存在比例关系,能确定的只是综合性能越强的CPU测试成绩就一定越好。
我测试了单任务单线程和多任务的全CPU性能,先来看单任务单线程的整数和浮点测试成绩。在当前的系统和编译器环境下,我测试SPEC CPU 2006时得到的单核整数成绩比10代i3稍低一些,但浮点成绩又稍高一些。SPEC CPU 2017的测试结果也差不多,3A6000整数得分5.02,比10代酷睿i3-10100F低了一点,但差距不到10%。浮点成绩是5.87,非常巧合地与i3-10100F成绩一样。
通过3A6000与i3-10100F以及2.5GHz时的i3-13100F的子项成绩对比,可以发现3A6000有小部分的测试项目与它们有较大的差距,大部分的测试项目水平相当,综合评分比较接近。3A6000单核性能与10代酷睿i3基本一样的结论仍然成立,随着系统和编译器的逐渐完善,3A6000无论测试成绩还是实际性能表现也都会再上一个台阶。
与13代i3-13100F在2.5GHz时的成绩相比,3A6000的整数成绩要低3%,但整数和浮点成绩都超过了R5-5600G在2.5GHz时的得分。这与SPEC CPU 2006的测试情况一样,再次证明3A6000的核心设计水平比AMD Zen 3代还强一些,可能和Zen 4代基本一致。只是可惜因为CPU频率的差距,3A6000的单核性能只是与10代i3是相同水平,跟13代i3相比还有较大的差距。
在多任务测试中,3A6000与3-10100F的成绩差距超过了10%,还在可接受的范围内。因为我使用的是还没有完成“补课”的编译器,所以不能很好地发挥3A6000的向量指令性能。尽管3A6000相对于3A5000的成绩提升幅度也仍然超过60~70%,但我认为它的表现应该能够更好一些,对SPEC CPU 2017的测试结果不是很令人满意。
国产CPU的测试情况和SPEC CPU 2006相同,没有任何一款能接近3A6000的单核性能,龙芯自己的3A5000也不行。海光C86 3250依靠多一倍的核心数量,多核成绩比龙芯3A6000高50%,而兆芯和飞腾的8核CPU,多核成绩仍然远远低于4个核心的龙芯3A6000。
龙芯3A6000确实开启了国产CPU的新时代,使用境内的相对落后的工艺,主要依靠设计能力达到了市场主流CPU的性能水平。龙芯6000系列的下一款桌面CPU是3B6000,预计单核性能再提高20%,并改用8核的设计方案。我估计3B6000无论是单核性能还是多核性能都应该能接近或者追平Intel酷睿11代i7的水平。
整机系统综合性能测试——UnixBenchUnixBench不是CPU测试工具,它测试的是最小整机系统的综合性能。最小整机系统就是由CPU、主板、内存、硬盘、操作系统构成的可以启动的完整系统。
UnixBench主要是测试一台电脑处理日常事务的效率,包括文本处理、浮点函数、文件读写、进程创建、管道通信、脚本执行等等,这些都是应用软件和操作系统常用的功能。虽然这些功能都是由操作系统提供,但因为所有功能的执行都与CPU有关,所以它的测试成绩也与CPU性能有直接关系。
不过操作系统如果对创建进程、管道通信等等功能进行优化,也能提高测试成绩,因此UnixBench是既测试CPU也测试操作系统,内存和硬盘性能也占了一定的比重。在不同的系统中,UnixBench测试成绩的差异会比SPEC CPU的测试的差异大一些。
因为UnixBench不是单纯测试CPU的计算能力,而是体现电脑的综合性能,所以多核并行的效率比较低,单核性能越高的就越有优势,更符合各种应用软件的实际情况。总体上看,UnixBench的测试成绩代表的是电脑执行日常任务的性能表现。
3A6000的UnixBench测试成绩也相当不错,单任务成绩比10代i3-10100F高一些,多任务成绩要低一些。3A6000多任务成绩比i3-10100F低不是CPU的原因,应该是受到了操作系统的影响,x86版本的UOS系统对多任务并行的优化可能要比Loongnix更好一些。但随着龙芯对操作系统的优化和升级,以后UnixBench的测试成绩也自然地会随之提高。
把13代i3-13100F和AMD R5-5600G锁定在2.5GHz后,R5-5600G因为有6个物理核心,所以多任务成绩略高于3A6000,其它的成绩都比龙芯3A6000低。UnixBench的测试成绩又一次说明了龙芯3A6000电脑的综合性能与10代酷睿i3是相同水平,也略微超过了2.5Ghz时的13代酷睿i3和AMD Zen 3代。
国产CPU中只有海光C86-3250凭借8核16线程,以两倍的核心数量规格在多任务测试中胜过了龙芯3A6000。兆芯和飞腾的两款8核CPU单任务成绩很低,3A6000是它们的2.5倍以上,它们8任务并行的成绩只是与4核的龙芯3A5000及鲲鹏920接近,大约是3A6000的一半。
内存访问带宽测试——STREAM内存频率和通道数量并不等价于内存访问速度,访存速度也取决于内存控制器的性能,内存控制器和内存总是快的等慢的,谁慢听谁的。内存控制器是CPU中一个重要的组成部分,对于CPU的各种功能部件龙芯都一直坚持自主设计。
目前似乎还没有哪款CPU的内存访问速率能达到理论带宽,比如DDR4-3200双通道的理论带宽上限超过50GB每秒,但即使13代酷睿的实际访存速率也只能达到43GB每秒左右。
Linux下测试内存访问速率通常是使用Stream测试软件,它也是以源码方式提供,根据编译参数不同而得到支持单线程和多线程测试的两种版本。通过设置运行时的参数,还可以让Stream支持各种线程数量,比如在8个核心的CPU上测试4个线程的内存访问速率。
内存访问速率除了受限于内存控制器和内存的性能之外,还与应用程序有密切关系。没有任何正常的软件会只读写内存而不干点别的事情,像Stream这种内存的带宽测试软件也是如此,Stream是在模拟普通应用软件访问内存的方式——在循环中读写数组。因此Stream测试得到的内存访问速率,就能代表普通应用软件访问内存的速率。
龙芯3A6000重新设计了内存控制器,内存访问效率相对于3A5000有飞跃式的进步。下面的图表展示了在使用Steram软件默认的编译参数时,对3A6000和两款Intel CPU的测试结果。因为10代i3搭配H系列主板时最高只能支持到DDR4-2666内存,所以我借了一块Z490主板测试了它使用DDR4-3200内存时的访问速率。
我分别进行了单线程、4线程、全核心的内存访问速率测试。测试成绩的单位是兆字节每秒,每一个子项的测试细节不必深究,反正是越快越好。从测试结果来看,3A6000的内存控制器水平比10代酷睿高,比13代酷睿差,峰值接近42GB每秒,说明龙芯自主设计的内存控制器也达到了主流水平。
3A6000的内存控制器相对13代酷睿来说还需要继续完善,除了访存速度不如13代酷睿之外,最明显的问题是4线程的访存速度居然比8线程更快。不过因为龙芯是第一次实现超线程的设计,出现这样的现象我觉得可以理解。要是与其它的国产CPU对比,即使龙芯3A6000较差的那一组成绩也是最优秀的,是遥遥领先、一骑绝尘的存在。
通过对各款CPU访存性能的测试,可以发现因为内存控制器的效率不同,即使内存的规格相同,访存速度也会有几倍的差距。当前国产CPU中只有龙芯3A6000能比较完美地发挥DDR4内存的性能,包括3A5000在内的其它国产CPU的内存访问效率都难以令人满意。
能买到的内存控制器IP性能都不高,就像高性能的CPU核心一样属于非卖品。目前国产CPU中只有龙芯通过不断的自主迭代升级,使DDR4内存控制器的效率能与Intel和AMD相提并论。在DDR4的赛道上,龙芯3A6000已经终结了国产CPU之间的比赛。
一些国产CPU厂商已经在准备升级到DDR5内存了,但龙芯要到下一代7000系列才支持DDR5内存。一是因为国内短期内不会有自主的DDR5内存,二是因为龙芯还没有把DDR4内存的性能发挥到极限。如果仅仅为了利于宣传而兼容DDR5的内存规范,但却体现不出DDR5的内存性能,那么除了徒增成本,就没有任何的实际意义。
总结龙芯3A6000在基础性能测试中,部分超过了10代酷睿i3,也有部分还有10%左右的差距。主要是因为最新版本的操作系统和编译器还没有发布,目前版本的优化水平相对于x86还有一些距离。以后随着操作系统和编译器的优化逐渐到位,这一点差距也一定能被补上。
尽管在相同频率的时候,龙芯3A6000的单核性能追平了Intel 酷睿13代,但由于工艺落后,以及资金投入不足,龙芯3A6000的主频较低,实际性能仅相当于酷睿10代i3。
工艺和主频在短期内不会有明显的改善,龙芯的下一代CPU产品仍然以提高每GHz的性能为主,将与Intel长期保持低频打高频的局面。美国对我国的自主CPU不会放松工艺限制,但对我国的引进技术CPU倒有可能网开一面。因此自主CPU只能依靠境内相对落后的工艺制程与进口产品展开竞争,也就必须继续强化CPU设计能力,通过提升每GHz的性能抹平工艺差距引起的性能差距。
完全自主的龙芯3A6000每GHz的性能追平了13代酷睿,也使通过引进技术发展国产CPU的路线遭遇了最严重的危机。因为依赖引进技术的CPU企业普遍缺少改进CPU核心设计的能力和动力,长期以来都是依靠更先进的工艺提升主频以及堆砌更多的核心来提高CPU性能。现在它们即使能获得使用先进工艺的特别许可,但买不到能与13代酷睿匹敌的CPU核心设计也是瞎子点灯。
美国一方面禁止向中国出售高性能的计算产品,禁止中国企业使用先进的芯片生产工艺,另一方面又有限度地向中国企业出售CPU架构授权、IP核授权、专利授权,帮助中国CPU企业在美国可控的程度下成长,事实证明美国的策略没有实现它希望的结果。
因为在技术方面依赖美国的中国CPU企业,成长速度受到了美国限制,所以给国内自主CPU留下了生存空间,无法完美地遏制自主CPU崛起。美国如果想要补救,那么就需要向中国企业出售IPC高于13代酷睿的CPU核心,但这样就与限制中国发展高性能CPU的政策产生了矛盾,实际上美国几年前就已经不再向中国企业提供更先进的CPU核心及架构授权,转而一心一意地以更直接的手段打击和限制中国自主CPU的发展。
但是龙芯未雨绸缪早当先,居安思危谋长远,主动抛弃了与美国有牵连的MIPS指令集,所有CPU产品都已经基于自主指令集龙架构(LoongArch)重新设计。龙芯的CPU生产也使用境内可控的工艺,甚至建立了全面使用国产设备的芯片封装测试厂。龙芯也一直在追求EDA工具的国产化,与国内的EDA软件企业进行了深入合作。
龙芯已经把防御能力点满,美国之前对龙芯实施的制裁,甚至都没有激起一丁点波澜。龙芯仍然按照既定的时间表稳健地发展,3A6000也如期地展现在大家眼前,然后年底量产、发布、销售,节奏一点儿都没乱。
龙芯规划的后续产品中,不止有单核性能更高的且集成了8个核心的3B6000,还有分别集成了16个和32个核心的3C6000和3D6000,这些产品都计划在明年发布。3C6000和3D6000的CPU核心与3A6000相同,并针对服务器CPU核心数量多的特点,改进了多核及多路互联的效率,使CPU并行效率进一步提升。
在新的核心设计通过3B6000得到验证之后,就会推出32个和64个核心的3D7000和3E7000。6000和7000系列的服务器CPU完全具有与Intel高端的同类产品竞争的实力。无论是对比单核性能还是对比多核性能,都是相同的性能水平。
龙芯3A6000的诞生,标志着龙芯已经从被动防御转为了防守反击的阶段。龙芯二十年如一日坚持自主设计,才能有现今的成就。只有脚踏实地、实事求是、自强自立才能真正与国际接轨,成为支撑世界信息技术发展的擎天巨柱。