指令集|龙芯彭飞:LoongArch 的自主与兼容( 二 )


回顾那段历史可以发现,美国制裁他国高端芯片的发展并不新鲜,历史在反复上演。为什么会出现这样的情况?
当时日本犯了一个最大错误,就是只重视 CPU 产品的研发,忽视生态主导权。如果一直做生态里某一款产品,会难以实现超越。因此,掌握生态主导权极其重要。
1982 年,NEC 生产的个人 PC 用的是 Intel 的芯片,1985 年换成了自研芯片,1986 年又换回去了。为什么?因为制裁失去了生态的主导权,这给我们很大的启示。
中国一定要下定决心构建自己的信息化生态体系,前两大生态体系,X86 的生态体系和 ARM 的生态体系是美国主导的信息化生态体系。希望未来基于我们自己的指令系统、国产操作系统形成和这两个生态体系平行的一套生态体系,它是产业的基础,在别人的基础上盖房子总是不牢靠的。
目前基于自主 CPU 的发展情况是怎么样?
指令集|龙芯彭飞:LoongArch 的自主与兼容
文章插图

左图是龙芯 3A5000 芯片结构图,这里每一个方块其实都是一个 IP,这些 IP 都是完全自主设计、自主演进,左下角罗列了芯片里面的 IP 核。
右上角反映了近十年自主 CPU 的发展速度,第一代 3A1000 跑分是 2-3 分,经过近十年的快速迭代,现在能达到 30 分(目前国际主流 CPU 跑分在 20-40 分之间)。右下角图片是芯片产业里性能提升的曲线,可以看到,前几年呈现线性快速增长,越往后增长越缓慢,龙芯CPU也即将达到性能增长的顶端。
指令集是信息产业绕不过去的话题,前面提到,我国不可能基于国外的指令系统构建自己的产业生态体系,就像中国人可以用英语阅读和写作,但是用英语构建我们国家的文化体系、构建民族文化是不可能的。
另一方面,应该如何考虑指令集的自主和兼容性?过去十几年,业界一直在争论这个问题,兼容性和自主性孰优孰劣?兼容有兼容的好处,可以直接利用现有生态里的软件产品,有现成的生态,一开始发展速度可能会快一些,但最大的问题是受制于人。
那么,我们能否做到既自主又兼容的指令系统?从龙芯过去二十年的发展来看,这是可以做到的,重点是要打造“3+3+3”的核心能力。一是三大编译器,GCC、LLVM、GOLANG。二是三个虚拟机,Java、JavaScript、.NET。三是三个翻译器,实现对 MIPS、X86、ARM 的二进制翻译,直接运行其应用软件。
目前,龙芯中科推出了自主指令系统 LoongArch ,包括基础架构部分和向量指令、虚拟化、二进制翻译等扩展部分,近2000条指令,是充分考虑兼容的指令系统。
LoongArch的特点主要表现在两个维度:一是用户态,二是核心态。LoongArch 是一个精简指令系统,32 位长指令、32 个通用寄存器、32 个浮点寄存器。用户态是给编译器、程序设计者使用。核心态在内存管理、控制寄存器的数量、规格都进行了大量的创新性设计,是符合现代操作系统的设计。
我们对 LoongArch 的性能进行了测试,在相同 IP下,一个用 MIPS 指令集,一个用 LoongArch 指令集,可以看到,动态指令数下降了 15% 到 20%,总体性能提升了 12% 左右。
LoongArch 指令系统能够支持二进制翻译,融合了 X86、ARM、MIPS、RISC-V 指令系统的主要功能特性。
自主指令系统的生态是如何构建的。龙芯中科推出了二进制翻译器,又称 LAT 翻译体系。最底层是 LoongArch 架构的芯片,再往上是操作系统,操作系统往上有几个维度:基于 LoongArch 的原生 Linux 应用,比如说本地化的办公、音视频的应用。
同时,龙芯中科推出了三个翻译器 :MIPS 应用往 LoongArch 上翻译,ARM应用 往 LoongArch上翻译,X86应用 往 LoongArch 上翻译,未来希望能够做到:从MIPS 翻译过来百分之百性能不损失,从ARM 翻译过来90% 性能不损失,从X86 翻译过来做到 80%的性能不损失。