龙芯的革命——LoongArch指令集

http://player.bilibili.com/player.html?aid=286736964&bvid=BV1if4y19787&cid=223865509&page=1

先简单总结一下胡伟武报告中关于LoongArch的内容:


  1、LoongArch 是全新的指令集,不是在 MIPS 上做的扩展。包含基础指令 337 条、虚拟机扩展 10 条、二进制翻译扩展 176 条、128 位向量扩展 1024 条、256 位向量扩展 1018 条,共计 2565 条原生指令。相对于MIPS,摒弃了部分不适合现代CPU的指令,又做了大量改进和扩展。例如单条指令支持的立即数从MIPS的最大16位扩展到最大24位,分支跳转偏移也从64K扩展到1M字节,以及寻址空间从固定分段改变为单一平面等,都有效减少了编译结果的目标指令条数和访存次数,提高了效能。
  2、LoongArch 仍为RISC指令集,32位定长指令、32个通用寄存器、32个浮点/向量寄存器。MIPS只有3种指令格式,LoongArch重新设计了指令格式 ,使可用的格式多达10种 ,其包含3种无立即数格式和7种有立即数格式。重新设计的指令格式可以包含更多的指令槽,有利于以后的长远发展。LoongArch的指令系统在设计时,以先进性、扩展性、兼容性为目标,其中兼容性是指融合MIPS/x86/ARM指令系统的主要特点,高效支持二进制翻译。
  3、龙芯提供基于 LoongArch 的 Linux 操作系统,在此操作系统中除了运行原生的 LoongArch 程序,还能通过翻译的方式兼容 MIPS、x86、ARM、RISC-V 这几种指令集的 Linux 程序。使用LoongArch翻译任何指令时大致流程都相同,只是随着指令系统的差异而在效率上也会有所差异。其中MIPS尽管二进制编码与LoongArch不同,但大部分LoongArch基础指令仍与MIPS相似,因此翻译开销极小。对ARM和RISC-V的翻译效率也比x86更高。龙芯还会提供以LoongArch为目标架构的编译器,已知编译器已经实现把 MIPS 汇编代码编译为 LoongArch 二进制,内嵌MIPS汇编的C/C++源代码甚至不用修改就能编译。
  4、龙芯的二进制翻译与 qemu 的软件翻译不同,龙芯是软硬件结合方式。例如对x86标志寄存器的支持、RISC-V原子同步指令的支持、内存地址虚实转换的支持等都有专门的硬件实现。qemu 软件跨体系翻译一般只有 5% ~ 20% 的性能,龙芯的翻译相对于 qemu 在整数运算方面有数倍提升,而在浮点运算方面有数十倍的性能提升,这都是CPU中增加专门的硬件处理带来的性能改善。
  5、翻译执行 MIPS 目标为 100% 的原生性能,翻译执行 ARM 目标为 90% 原生性能,翻译执行 x86 目标为 80% 原生性能,并可通过某种方式安装运行 Windows,对 Windows 的整体翻译执行目标为 70% 原生性能。
  6、从当前已有的测试结果来看,把 C/C++ 代码编译为 MIPS 和 LoongArch 分别运行测试,LoongArch 比 MIPS 有近 17% 的性能提升,翻译执行 MIPS 平均性能在 100% 左右。
  7、龙芯 2020 年之后生产的 CPU 都不再原生支持 MIPS,但因为可以 100% 翻译执行 MIPS,所以以前的 MIPS 生态仍然完全兼容,但以后会以发展 LoongArch 原生生态为主。
  8、将会组建自主指令系统联盟,联盟成员免费使用 LoongArch 指令集,联盟成员可以免费获得龙芯的低于 ARM A53 性能的那些CPU核心设计,联盟成员之间不发生指令系统诉讼(防止Intel/ARM等挤进来,它们一旦加入就相当于x86/ARM指令集充公了)。

再说说我的看法:


  龙芯推出LoongArch是有多年准备的,并非仓促而为,二进制翻译部分和向量加速部分,都有10年以上的技术储备。但以前并未下定决心设计自己的指令集,而是想以MIPS为基础发展自己独立生态。但随着时间推移,各种情况发生变化,龙芯的发展路线也必须调整,从而利用多年的积累,推出了独立的指令集LoongArch。不能因为龙芯现在使用LoongArch,就以当下的视角去否定龙芯曾经的MIPS路线,而应该以当时的实际情况去看待当时发生的事情。龙芯并未否定MIPS授权的积极作用,例如MIPS宽松的授权模式促进了龙芯的独立发展,例如不需面对针对MIPS的任何知识产权诉讼。龙芯推出LoongArch也并非完全与MIPS分道扬镳,而是以20年来对MIPS的实现经验做到了平均100%效率的翻译执行MIPS指令,以前及将来的MIPS软件都可以完全兼容,不会因为更换了指令系统就出现生态真空的情况。令龙芯下定决心推出新的指令系统,个人认为有以下的几点原因:
  1、时至今日,MIPS的设计显得有些老迈,不能完全适合现代的CPU设计和操作系统,例如对实现睿频不友好、跳转偏移量范围小、部分老旧指令拉低性能等等。MIPS经过龙芯多年扩展,传闻指令槽已经用完,会影响今后的发展。龙芯想要进一步提高性能,就需要对指令系统进行较大改动,并预留足够今后继续扩展的指令槽。事实证明,龙芯对指令系统的重新设计非常成功,在仿真测试中,只是修改了CPU译码部分,其他部分完全没变,LoongArch就比MIPS平均提高了超过16%的性能;
  2、MIPS再弱小,也会对龙芯造成很大的干扰。在使用原生MIPS指令集的时候,龙芯无法对外授权自己的扩展指令集,因为作为基础的MIPS指令集龙芯没有权利对第三方授权。龙芯甚至不能公开指令集详细规范的手册,因为会侵犯著作权。以MIPS为基础时,大部分内容只能对着MIPS的指令集手册照抄,即使只有扩展指令集的内容,也不可避免地会引用到MIPS基础指令集的相关说明,这很为难。在当前的国际形势下,使用来自美国的指令集,也会引起客户的疑虑,很难向客户对CPU自主程度进行解释;
  3、虽然开源社区对MIPS的贡献越来越少,但开源社区更认可MIPS是不争的事实。各种重要的基础软件项目的MIPS分支,几乎已经是龙芯和其合作伙伴们在维护,但使用到龙芯扩展指令的代码却很少。龙芯用于提升性能的扩展指令几乎没有用武之地,影响了性能的发挥,这也是民间测试往往达不到的龙芯官方分值的重要原因。而使用自己的指令集,就不需要再考虑代码是否与MIPS标准兼容,对任何开源项目都能拥有极高的自主权;
  4、当年美国宁愿把MIPS剥离,也不准卖给中国,在当时可以理解为美国限制中国发展的常规手段。但近年国际情况的变化加剧,中美对抗已经明朗化,MIPS所有权不在中国,就可能随时变成会爆炸的暗雷。尽管龙芯拥有MIPS的永久授权,但以美国现在不要脸的程度,有可能以龙芯参与军用设备研制为理由,单方面宣布授权取消,那么龙芯的合法性在中国之外就会受到质疑。龙芯必须未雨绸缪,消除隐患;
  5、提高独立性,龙芯的核心设计都是自己完成,如果指令集也完全是自己完成的独立系统,加上较老的工艺制程,那么就完全杜绝了被人卡脖子的可能。龙芯长期依赖提高核心设计能力来提高单核性能,能使用老工艺就不使用新工艺 ,这种策略 不但节省了有限的资金,也一定程度上保障了生产制造环节的安全;
  6、自建独立软件生态,龙芯的操作系统还是Linux,基础库虽然和其它的Linux一样来自开源,但龙芯上许多的办公软件都是来自国内企业的开发和移植。龙芯以兼容方式保留现有生态,鼓励合作企业把软件编译为LoongArch,就可以得到更高性能的原生程序。且不会出现ARM桌面生态建设的尴尬——国内企业的努力,都是为ARM添砖加瓦,一旦国产ARM无法生产,那么就容易被国外的ARM产品替代,之前的劳动就都成了资敌的笑话。
  7、更好的为中国信息安全兜底。保障中国信息安全是龙芯的初衷,也是龙芯20年来坚守的底线 。从3A1000开始,龙芯的新款CPU生产工艺,都堪堪压着国内当时生产能力的底线,可能不完全是因为缺钱 。当前美国越来越疯狂,如果因为某些原因,导致很多部门单位不能再使用x86和arm处理器,那么只要换成可以兼容各种指令集的龙芯,就可以做到连软件都不用修改,工作生产继续进行 ;
  8、龙芯开放指令集,并免费提供相当于ARM A53以下性能的IP,既为了助力联盟内企业嵌入式芯片的发展,也能对自己的生态建设起到良好的推动作用。免费IP的举动也会对ARM形成冲击,因为中低端嵌入式CPU用量远远超过手机中用的中高端CPU,ARM的很大一部分收入来源于授权中低端IP。龙芯也是国内唯一一家,能够对外授权指令集和IP的通用CPU企业 ,龙芯的自主可控程度是国产的其它CPU无法企及的 。
  9、龙芯翻译执行其它指令集程序的稳定性及性能即使达不到预定目标,也不需要担心。只要能保证对MIPS的兼容性没有问题,那么龙芯的软件生态就与当前没有任何区别,龙芯仍然能在保持现有生态的同时,慢慢建立独立的软硬件生态。因此怀疑指令集翻译的稳定性和效率根本没有意义,即使不兼容x86/ARM或者翻译效率低下,在最差情况下,也可以把使用LoongArch的新款CPU当作一次常规的性能升级。如果指令集翻译基本有效,只要能在龙芯上正常运行部分x86和ARM软件,哪怕只是两三款,也是对龙芯软件生态的有益补充。就算翻译效率低于50%也没有关系,Intel Atom CPU 的性能要比 i3 还低几个等级,它们之间还有奔腾和赛扬,龙芯新款CPU如果性能接近相同核心数量的 i5,那它的 50% 性能肯定比相同核心数量的 Atom 高得多,运行常规办公软件没有压力。何况指令集翻译本身只是过渡的手段,为了增加用户群体,随着龙芯的独立软件生态逐渐强大,指令集翻译就会越来越边缘化,成为锦上添花之举。

转载请注明:《龙芯的革命——LoongArch指令集

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注