有读者留言希望比较LoongArch和RISC-V,铁流简单分析一下。
loongArch是一套全新指令集
在龙芯推出loongArch后,一些人总是把loongArch和MIPS混淆,认为龙芯盗版或魔改MIPS,搞了个loongArch。
事实上,LoongArch 是全新的指令集,有2000多条指令。从2020年二季度开始,龙芯和第三方将LoongArch与国际上主要指令系统有关资料和几万件专利进行深入对比分析。工信部下属单位评估认为:LoongArch指令系统手册在章节结构、指令说明结构和指令内容表达方面与上述国际上主要指令系统存在明显区别。LoongArch基础架构未发现对上述国际上主要指令系统中国专利的侵权风险。
具体来说,LoongArch摒弃了传统指令系统中部分不适应当前软硬件设计技术发展趋势的陈旧内容,吸纳了近年来指令系统设计领域诸多先进的技术发展成果。比如重新设计的指令格式可以包含更多的指令槽,有利于以后的长远发展。MIPS只有3种指令格式,LoongArch重新设计了指令格式 ,使可用的格式多达10种 ,其包含3种无立即数格式和7种有立即数格式。例如单条指令支持的立即数从MIPS的最大16位扩展到最大24位,分支跳转偏移也从64K扩展到1M字节,以及寻址空间从固定分段改变为单一平面等,都有效减少了编译结果的目标指令条数和访存次数,提高了效能。在Coremark的测试中,程序运行过程中执行的指令总数LoongArch为MIPS的83%,相当于运行效率提高了20%。LoongArch指令集计算CRC32的速度则是MIPS的4倍。
事实上,开发一套指令集并不难,难得是开发一套高效率的指令系统并将其实现,也就是基于该指令集开发CPU,以及基于该指令集开发一整套软件生态。
指令集不是越少越好
最初,CPU的指令系统相对简单,随着面对的应用越来越复杂,CPU的指令系统也随之越来越庞大。半个世纪前,美国学术界提出了一种新的思路,把各种指令功能尽可能的拆解为最小单元,把相同的单元合并为一条指令,所有的复杂功能都可以使用这些简单指令组合实现,分解指令执行的每一个步骤,尽量使每一条指令都只消耗一个时钟周期,实现指令流水线设计,而这是传统指令系统所做不到的。
RISC指令集也就应运而生,斯坦福大学的几名老师带着研究生成立了MIPS项目组,开发的MIPS CPU所用的晶体管只有CISC处理器的几分之一,但性能却更强,在1983年的ISSCC大会上大放异彩。随后,Alpha、Power、PA-RISC、SPARC等诸多RISC指令集百花齐放。Intel虽然坚持CISC指令系统,但也引入了RISC的思路,CPU后端使用类RISC流水线的设计,在CISC指令集解码的阶段转换为RISC类的指令,使自己的CISC处理器在性能上不被RISC处理器超越。
也许是这段历史太过刻骨铭心,使很多人先天就认为指令集越少越好,RISC优于CISC,本能认为loongArch指令数达到2000条,而RISC-V不破白条,因而RISC-V更好。
事实上,随着时代发展,RISC指令集的指令数量越来越多,同时,CISC也借鉴了RISC的优点,两者已经殊途同归了。
RISC-V的思路和半个世纪前开发MIPS时的思路是类似的,指令集尽可能精简,因为指令数量少,CPU微结构中使用的晶体管就少,设计难度、研发成本、生产成本、产品功耗等都可以压制到极低的水平。
不过,现阶段的RISC-V有些过度“精简”了,只有四十多条基础指令,加速扩展指令,指令数量依然没有破百,能够实现的功能相对有限,虽然在嵌入式CPU上,这些指令已经足够,但在桌面和服务器等高性能领域,这点指令是不够用的。
因为桌面和服务器应对的场景更加复杂,就必然需要相应的指令去满足这些应用场景,在嵌入式这种用途单一且性能要求一般的场景,几十条指令够用,这是RISC-V所擅长的。但在桌面和服务器上,RISC-V指令集过于精简反而是其劣势。
举例来说,SG2042搭载64核玄铁C910,主频2.0GHz,每16核为一个numa节点,共4个内存通道。SPEC CPU2006 单核测试,使用社区版GCC10,int_base测试最好成绩为8.97。使用厂家推荐参数调优,int_base测试得分10.6。作为对比,龙芯3A6000 int_base 43+,差距是非常明显的。
事实上,龙芯也有类似RISC-V的指令系统,那就是LoongArch精简版,共有50条指令,基于LoongArch精简版开发的CPU已经向高校开源用于教育。如果RISC-V要开发高性能CPU,必然要对指令集进行扩展,其实,X86、ARM这些成熟指令系统都是上千条指令。
LoongArch精简版是对LoongArch的剪裁,而RISC-V还需要继续添加各种扩展指令,才能成为成熟的指令集,目前的RISC-V还不适合用到复杂多变的桌面和服务器环境中。