本文主旨为以下三点:
一是回溯龙芯 20 年前为何选择 MIPS。
二是介绍龙芯已经成为 MIPS 生态的维护者和破坏者。
三是分析为何龙芯能够符合自主标准,而鹏鲲、FT 购买 ARM 授权受制于人。
龙芯当年为何选择 MIPS
在 20 年前,龙芯最初只是中科院计算所的一个课题组,只有十几个人和一间 40 平方的办公室,研究目标是设计一款能用的 CPU。当时如果自己设计一套指令集,将会面对没有编译器、没有操作系统、没有软件可用的局面,全部都需要自己开发。
由于资金和人员等条件有限,小小的课题组无法支撑这么大的工程量,当年,胡老师曾经想借鉴 Alpha 定义一套指令集,但唐老师从现实考虑选择了 MIPS——因为 x86 无法获得授权,而当时的 ARM 还局限于嵌入式,混的还不如 MIPS,架构授权昂贵且禁止其他厂商修改添加指令集,MIPS 架构授权容易获得,且 MIPS 非常学院派,允许自主添加指令集,唐老师当年选择 MIPS 是理所当然的。
根据《龙芯的足迹》一书披露,龙芯从 MIPS 获得的是永久授权。若 MIPS 主体不复存在则龙芯不需继续付费,可以一直兼容 MIPS。相对于 ARM 动辄上亿的架构授权费用,MIPS 的授权费用堪称白菜价。
龙芯能够以如此低的标的获得 MIPS 授权,一方面与 MIPS 行业地位不够强势,且非常学院派,架构授权便宜,IP 授权昂贵的授权策略有关。另一方面,也是因为龙芯剥离了 MIPS 的技术支持服务和各种工具软件,购买的是“纯净版”指令集授权,才能把价格压至最低。
龙芯的发展过程中,起初是打算借用 MIPS 已有的软硬件生态,这与使用 ARM 授权的国内同行们一样。但没有想到 MIPS 会逐渐淡出主流市场,然而这种出乎意料的发展,反而给了龙芯留下了更大的舞台。
龙芯之所以坚持 MIPS,而没有像 FT 那样从 SPARC 转投 ARM,主要有以下两点:
一是龙芯以 MIPS 架构为基础构建了自己的扩展指令体系,这些成果无法转移到封闭的 ARM 指令集体系中;
二是因为龙芯很穷,付不起 ARM 的架构授权费。
目前,龙芯成为了 MIPS 生态的坚定的守卫者,许多开源项目的 MIPS 分支都逐渐把龙芯作为编译平台,龙芯也为 MIPS 的生态贡献了大量成果。比如前段时间报道的龙芯对 JAVA 虚拟机的贡献度排名全球第五,而它前面的几家公司都是甲骨文、谷歌这样的巨无霸。
龙芯是 MIPS 生态的破坏者
最初,龙芯从只注重 CPU 研发,然而光有芯片没有生态显然是无法在市场立足的,在吃了不少苦头之后,龙芯逐渐步入重视软硬件生态建设的路线。
由于 MIPS 生态本身的衰落,龙芯多年来已经成为了兼容 MIPS 的唯一的桌面和服务器 CPU 设计者,在设计兼容 MIPS 的 CPU 的公司中,是唯一的桌面和服务器软硬件生态的建设者。这种尴尬的“领导者”身份使龙芯可以心无旁骛地发展自己的生态,向 CPU 中添加各种新的指令来提升性能和扩展功能,而不必操心与其它 MIPS CPU 的兼容性问题。
龙世 3A4000 龙芯以 MIPS R5 为基础,对 MIPS 基础指令精选替换,以及自行扩展了 1000 多条指令,发展出了自己的指令集体系——LoongsonISA。LoongsonISA 要比 MIPS(216 条基础指令+311 条 DSP 指令)庞大得多,MIPS 只它的一个子集。上一代龙芯 CPU 只兼容 MIPS R3,如今兼容 R5 大概是准备收割 MIPS 最后的遗产。
龙芯与 MIPS 的关系,更像是 AMD 与英特尔的关系。在龙芯对很多软件进行移植优化的时候,也不忘同时带上其他 MIPS 处理器的支持,在 v8,OpenJDK 等 JIT 虚拟机中,龙芯都已经成为了整个 MIPS 架构的代码维护者。最近 UOS 也把 Loongson 内核与 x86 内核、ARM 内核并列,其中一项亮眼的更新是增加了对龙芯 3A4000 的支持。
龙芯在 MIPS 的软件生态方面已经获得了一定的主导地位。龙芯成为了 Java 运行环境 OpenJDK 13 的一大贡献者,现在维护着上游 MIPS 架构和龙芯扩展的代码。诸多多媒体库,例如 FFmpeg,libvpx,OpenH264,libyuv 等,都已经由龙芯针对自己的 MMI 以及 MIPS 的 MSA 等向量指令进行优化并提交给上游。有些库支持龙芯扩展指令甚至比支持 MIPS 的扩展指令还早。Linux 内核的上游也一样被龙芯生态链成员维护着。龙芯在开源软件方面已经获得了一定的发言与控制权。
MIPS 原本的生态绝大部分已经是历史,龙芯如今的软件生态主要是来自龙芯自己维护的各种开源项目,以及国内各家软件开发商对产品的移植,本质上已经不能再称为 MIPS 软件生态,而应当称为龙芯生态。事实上,在移植一些软件的时候,已经要区分龙芯版本和 MIPS 版本了。
在过去这些年,无论是 Imagination,还是 Wave Computing 都没有在 MIPS 投入多少资源,都只是在拿 MIPS 的 IP 赚钱,尽可能榨取 MIPS 的剩余价值,主要精力分别放在各自的主营业务——GPU 和 AI 芯片上。直接的结果就是 MIPS 的 CPU 发展非常慢,如今,龙芯 3A4000 的性能已经大幅超越了 MIPS CPU,随着时间的流逝和龙芯的发展,MIPS 的专利会逐步过期,LoongsonISA 中的 MIPS 基础指令会被龙芯逐步替换,LoongsonISA 中龙芯扩展的指令比重会越来越高,当龙芯生态逐步成型,常用软件普遍支持 LoongsonISA 后,LoongsonISA 则会与 MIPS 分道扬镳,从这个角度看,龙芯是 MIPS 生态的破坏者。
龙芯和 MIPS 关系类似于 AMD 和 Intel 鹏鲲 FT 则是 ARM 阵营打工者
为何龙芯兼容 MIPS 可以称为自主路线,而鹏鲲、FT 则购买 ARM 架构授权则会受制于人,铁流认为,有以下三个原因。
一是能否掌握指令系统发展权。之前介绍过,MIPS 本身就是学院派的产物,是第一种商用的精简指令集,这使得 MIPS 指令比较“古老”,很多专利已经过期或快过期了。加上 MIPS 非常学院派,允许其他厂商自主修改或添加指令,这一方面导致 MIPS 生态破碎化,另一方面也给其他厂商更多自主发展的空间。
经过这些年,龙芯对 MIPS 的扩展也越来越深入,从最开始的扩展运算访存以及二进制翻译指令,到后来的硬件页表索引以及虚拟化指令,再到现在对基础指令进行更加高效的替换。3A4000 引入的 AMO 原子操作系列指令代替了 MIPS 原先的 LLSC 系列指令,使得应用多线程操作的效率大大提高。PC 相对寻址指令则可以解决 MIPS 当前在 PIC/PIE 实现方面依赖特殊的“abicall”机制,效率较低的瓶颈。Cpucfg 则解决了 MIPS 平台下应用无法识别 CPU 对扩展指令支持的弊病。龙芯在兼容 MIPS 的同时也在一点点甩掉来自 MIPS 的历史包袱,从底层创新。这是其他 ARM 的附庸想都不敢想的。
相比之下,Arm 指令集本身一般不允许客户随意扩展,而其官方对指令集的演进扩充流程需要复杂的投票决议,有很长的决策周期,对各种需求无法作出快速响应。即便国内 ARM 阵营厂商私自添加指令,也存在被解读为非法指令的风险,不仅无助于性能提升,反而会带来稳定性问题。不仅仅是指令集,在 GIC 中断控制器,PSCI 电源管理接口方面 Arm 也有严格的标准限制,厂商的自由度很小。
二是 ARM 非常强势,而 MIPS 非常弱势。ARM 在其建立的产业生态非常强势,当 ARM 推出新版本的指令集时,就必须再次购买授权。如果不继续购买授权,那么当同类 CPU 的其它公司都升级之后,各家软件开发商也不会死守在老版本的指令集上不动摇,即使软件有兼容机制可以在老版指令集的 CPU 上运行,但新版的指令集肯定有加速某些计算的新指令,这样即使 CPU 核心设计水平相当,也无法抵消巨大的性能差距,继续使用老版本指令集就必然会落后于市场。ARM 的阵营唯一特例是苹果,因为它牢牢掌控了自己的操作系统。假如苹果把 IOS 授权给其它厂商,或者苹果手机也用安卓系统,那么它就会立即失去生态独立的优势,泯然于众人。
造成这种困境的原因就是,ARM 指令集的主导权始终在 ARM 手里,其主流生态基本无可撼动,整个产业链都是跟着 ARM 的步伐走,不可能放弃 ARM 主流生态。在同类产品中,绝大多数用户选择的原则,永远都是“更新型更先进”。
国内的 ARM CPU 的一种生存模式,就是建设出国外同行暂时放弃或无力插手的 ARM 桌面和服务器生态,发展使用 ARM 指令集的桌面及服务器 CPU。付出巨大的努力之后,也许能够在特定市场上部分替代 Intel 和 AMD,然而由于使用 ARM 指令集,那么国外同行也能很快设计出用于桌面和服务器的 ARM CPU,然后以性能和价格的优势把国产 ARM CPU 从公开市场中彻底驱逐出去,窃取胜利的果实,只留下一些受政策保护的小众市场。驱虎吞狼,又或兔死狗烹。
相比之下,MIPS 则非常弱势,公司已经两度转卖,新东家 Wave Computing 申请破产保护,MIPS 已经穷途末路,在可以预见的未来不可能再干涉到龙芯的发展。龙芯当前架构同频性能已经与 AMD 2017 年的 Zen 架构相当,明后年持续改进内核并更换工艺提升频率就能进一步接近 AMD 水平,已经不存在性能超越龙芯的 MIPS CPU,具有很强的不可替换性,ARM 阵营中可能存在的驱虎吞狼、兔死狗烹的问题,对于龙芯而言,完全不存在。
由于 MIPS 允许其他厂商自主扩展修改指令集,龙芯已经发展出了自己的 LoongsonISA,而且在很多方面已经主导了 MIPS 生态建设。运行于龙芯的系统和软件一旦使用了龙芯的扩展指令集,就不能在其它的 MIPS 兼容 CPU 上直接运行,这也是对自己生态的保护措施。一旦龙芯的自主扩展和修改的指令被产业生态广泛支持,那么,龙芯与 MIPS 变成 AMD 和英特尔的关系将不可避免。
当年,AMD 就是趁着英特尔推广安腾的时候,率先推出了 64 位指令集,并获得 X86 生态的广泛支持,并最终实现在 X86 阵营内与英特尔分庭抗礼。AMD 成功范例在前,国内很多从业者却对此视而不见,并强行把龙芯与 MIPS 关系等同于鹏鲲、FT 与 ARM 的关系,则显然是非常值得商榷的。
MIPS 如果继续衰败下去,同时龙芯在硬件和软件上继续发展,那么,龙芯和 MIPS 的关系变成 AMD 与英特尔的关系只是时间问题。对于那些使用 ARM 授权的 CPU,无论是 IP 授权,还是架构授权,都无法做到这一点,因为 ARM 把生态统一性守得太紧,生态碎片化是不被允许的,鹏鲲、FT 根本就没有自主发展的机会。
打个通俗易懂的比方,ARM 地位就像汉武帝,哪怕麾下大将再能打,也不可能翻天,只能给汉武帝打工一辈子。运气差的,被巫蛊之祸(川普制裁)牵连,没准还要重蹈赵破奴的命运。诚然,现在 ARM 主要还是英国资本和日本资本,但这两个都不是中国的好朋友,反而是美国的盟友和小弟。MIPS 作为最早商用的 RISC 指令集,影响力还是有的,地位有点像汉献帝,但比较弱势,在这种情况下,龙芯有机会去当董卓或曹操的。
三是 MIPS 授权成本很低,而 ARM 授权成本很高。目前,龙芯 MIPS 授权的费用几乎就是白菜价,而且随着 Wave Computing 申请破产保护,MIPS 甚至有成为公共知识(public domain)的可能性,因为如果没有“白衣骑士”拯救 Wave Computing,或收购 MIPS,或者因为没钱赚不去主动交纳维护 MIPS 那些古董专利的专利费,那么,MIPS 就成为公共知识,这样一来,MIPS 将成为比 RISC-V 更加自由开放的体系,龙芯连白菜价的授权费都不用支付了。即便出现新买家,MIPS 公司继续走下坡路的大势已经是定局,不能对龙芯形成掣肘。
作为对比,ARM 授权成本很高,按照授权等级的差异,动辄上数千万美元,甚至几亿美元,而且还只是一定期限的,到期了要重新谈判。ARM 的指令集在不断发展,必须一直买,就构建产业链来说,国产 ARM 厂商只能成为产业链的一个打工者,类似于联想、华为在 Wintel 体系和 AA 体系中被剥削,只能赚血汗钱,洋人赚取高额利润。正是因为众多厂商无法忍受 ARM 的贪婪,才有 RISC-V 在全球兴起。可以说,购买 ARM 昂贵授权这种模式不利于一个产业的长远发展。而龙芯、申威构建的红色产业链,则不存在这方面的问题。
指令集和操作系统必须牢牢掌握
文末,铁流引用一位网友的话。要想实现商业上完全的自主可控,必须要牢牢掌握指令集和操作系统,如果一家厂商无法兼顾,那么,退而求其次必须掌握一种。否则就很容易受制于人,当年,Intel 通过指令集升级、知识产权诉讼、技术路线改变等手段消灭了除 AMD 之外的历史遗留的所有对手,AMD 通过反垄断苟延残喘的时候,又凭借自己设计出的 AMD64 架构在微软支持下复兴,成功倒逼 Intel 交叉授权。
微软、谷歌凭借对操作系统的把持而分别统治了桌面和移动生态。苹果通过对操作系统的封闭,依靠差异化竞争牢牢地在桌面和移动设备中占据了一席之地。
国家要想实现信息化建设的自主可控,那么指令集和操作系统都必须掌握在自己手中。
龙芯如 AMD 那般发展出了自己的指令集,且在国内软硬件厂商支持下,成功构筑了基本满足办公和日常使用的生态,MIPS 的影响力却已经可以忽略不计。尽管由于资源不足,龙芯发展很艰难,但我认为只要路线是正确的,坚持下去就有希望。
世事变迁造就了龙芯的现状,从研究 CPU 设计的课题组,转变为在市场上艰难求存且默默无闻的小公司,再发展成了自建生态并带动大批配套企业共同发展的核心企业。龙芯随着政策的变化而自立,随着 MIPS 的衰退而崛起,随着中美摩擦明朗化而更加重要,随着 20 年技术积累而无所畏惧,也是时势造英雄吧。尽管龙芯体量还很小,但对自己的命运却能自主可控。