新ちゃん 发表于 2020-8-17 14:44:12

如何看待龙芯对外公开的 LoongArch 指令集?

本帖最后由 新ちゃん 于 2020-8-17 14:58 编辑

https://www.zhihu.com/question/414069789


先简单总结一下胡伟武报告中关于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基础指令集的相关说明,这很为难。还有更深层的原因,龙芯大量的扩展指令被用在军方项目中,会有保密的需要,甚至早年开放过的LoongMMI扩展,现在外界也没有了详细的资料。在常规项目中,大量的向量计算只能使用MIPS的MSA指令集,而MSA的详细规范也只能去看MIPS手册,龙芯不能越俎代庖。另外,在当前的国际形势下,使用来自美国的指令集,也会引起客户的疑虑,很难向客户对CPU自主程度进行解释;


  3、虽然开源社区对MIPS的贡献越来越少,但相对于龙芯,开源社区更认可MIPS是不争的事实。尽管各种重要的基础软件项目的MIPS分支,几乎已经是龙芯和其合作伙伴们在维护,但使用到龙芯扩展指令的代码却很少。当然这也这龙芯无法公开自己的扩展指令集有很大关系,不能公开指令集的原因上面有提到。总之龙芯用于提升性能的扩展指令几乎没有用武之地,影响了性能的发挥,这也是民间测试往往达不到的龙芯官方分值的重要原因。而使用自己重新设计的指令集,就不需要再考虑代码是否与MIPS标准兼容,也与某些保密项目没有直接关系,不再有其它的顾忌,只要完成了知识产权风险评估,就可以开放完整的指令集手册,易于社区开发人员的参与,形成合力。对开源项目建立新架构的分支,对任何开源项目都能拥有极高的自主权,可以毫无限制地优化代码性能,减少因为软件优化不够而导致CPU性能发挥不好的问题;


  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 高得多,运行常规办公软件没有压力。何况指令集翻译本身只是过渡的手段,为了增加用户群体,随着龙芯的独立软件生态逐渐强大,指令集翻译就会越来越边缘化,成为锦上添花之举。



新ちゃん 发表于 2020-8-17 14:47:18

单从指令集的角度来谈谈我的看法,我个人其实在很多方面并不是特别喜欢RISC-V指令集。如果单纯凭借现有的信息谈我对LoongArch的看法,我想通过将他和RISCV进行对比。


一、授权方式


RISCV,成于开源,败于开源(现在说败还不准确,但是个人不看好)。


我很庆幸LoongArch把指令集的所有权利都拿在了自己手里,至少这样官方可以对指令集实现完全的控制。现在的RISCV社区,基本上没什么新特性是不需要等官方commit的。本来RISCV是为了“方便大家魔改”的,然而现在的RISCV的状态是“啥事儿都得自己魔改”。
我不得不承认RISCV的指令设计确实高超,尤其是它常规指令的设计堪称业界典范。但是对于外围的一些专用指令,由于缺乏一个强大的中心集团,整合力度非常差。就比如说RISCV的SIMD指令集,到现在也没有一个真正能用的。唯一一个稍微像样的Hwacha向量指令集,本质上还是一个协处理器,连乱序执行流水线都整合不进去,更不用说做编译器层的优化了。相比之下LoongArch一出生就带着128和256位向量指令集。


(我在这还批判过RISCV存在的另一个问题: https://www.zhihu.com/question/368938376/answer/1406936646)
LoongArch选择指令开放但是保留指令集所有权利,这是我个人认为的最完美的指令集“行政”方式。


二、TLB层的“两级虚拟地址映射”,微码级的Binary Translation,面向构架的寄存器重命名(前半部分是引用原文,后面两部分是我猜的)


LoongArch的本质就是一个面向Binary Translation的指令集


有了前面做MIPS吃过的苦,龙芯团队还是非常明白生态的重要性的。可是开发一个新指令集,生态又不可能好,于是必须得通过Binary Translation来实现。


硬件加速Binary Translation技术基本上龙芯团队可以算是目前全世界玩得最溜得了。TLB级的两级虚拟地址映射解决了qemu这类软虚拟机的巨大的内存性能损失。而我个人猜测LoongArch的内核可能会实现微码级的Binary Translation。


其实现在X86的处理器基本上也都是基于微码了。微码执行是在执行的时候动态的讲X86指令集翻译成微码来执行,而LoongArch的内核很可能会可以直接将X86,MIPS,Arm,RISCV等一系列指令集翻译成自己的微码然后一并执行。然后即使对于各个构架不对称的寄存器,也可以通过魔改寄存器重命名单元来实现。如果能做到这两点的话,发布会上宣传的实现70%的原生性能还真不是什么难事儿。
_________________________________________________________
最后,不知道是官方的LoongArch文档还没有发布还是说我没有找到,如果已经发布了是我还没找到的话还请热心网友发我一份,文档外如果有其他消息的话我一定做更细致的分析!
————————————————————————
题外话:LoongArch构架难道是“长征”构架?(顺手黑一下Bing)


新ちゃん 发表于 2020-8-17 14:50:27

先谈一下市场方面:

[*]Intel的10nm+一代的笔记本CPU Tiger Lake据称IPC大幅度提升,而桌面端的Alder Lake会引入大小核,DDR5, PCIE 4.0。而AMD的zen3年内也会发布,和Intel的竞争会更加激烈
[*]Apple放弃AMD64, 加入ARM64阵营
[*]MIPS母公司Wave Computing倒闭
[*]软银出售ARM, Nvidia最有可能接盘
[*]2019年,RISC-V基金会担心美国贸易法律限制,搬到瑞士并于今年改名为RISC-V国际


从民用市场来看,我并不看好龙芯,因为这份名单:
https://riscv.org/membership/members/​riscv.org


这些名单里中国企业和组织可不少。虽然说由于国际形式的原因,国家在扶持半导体行业,但是本质上各个企业之间还是竞争大于合作的。
龙芯本质上是一家芯片设计公司,和其他公司是有竞争关系的,即使成立LoongArch联盟,也很难复制ARM和RISC-V国际的“成功”:



[*]前者ARM只做指令集和微架构的开发和授权,不生产芯片
[*]后者RISC-V以BSD协议开源ISA,允许任何人修改并商业化,只是要打上RISC-V logo的企业才需要掏钱加入RISC-V国际,而且为了内部的中国会员,从诞生地美国搬到了瑞士
[*]而龙芯呢,自己制造并销售CPU,且授权指令集给第三方,这种关系只存在于x86和Power阵营中,并且其主力(Intel, IBM)本身具有较强的芯片设计制造能力,但是龙芯并没有这种能力,在这种情况下追随龙芯的只可能是设计实力比龙芯还差的企业,很难说这个联盟有很强的造血能力,最终还是龙芯单独挑大梁。


再从技术角度说,LoongArch大部分的设计针对了其二进制翻译的功能,二进制翻译在我看来有两个作用:



[*]针对闭源软件。这里的闭源软件可能是第三方商业公司为其他平台开发的商业软件(比如大把的windows软件),或者是由于团队解散、源码丢失、公司倒闭遗留的历史软件,但是由于还在关键领域工作,且由于资金等原因无法重新开发(比如各种无人维护的信息化系统)。
[*]针对开源软件。从龙芯的历史表现看,龙芯没有能力维护一套完整的GNU/Linux软件体系,甚至连跟进CentOS发行版的能力都没有,其表现就在于只能提供非常老旧的Linux内核和GCC版本。且由于不可获知的原因,龙芯甚至不愿意让开源社区维护这些开源软件,产生了卖CPU却不提供指令集手册的场面。虽然龙芯一直以来是唯一的桌面级MIPS处理器的制造商,但是各种GNU/Linux发行版却几乎不提供LoongISA的优化版本。如果龙芯切换到LoongArch,那么是否能跟进Linux, glibc, gcc, llvm, v8, jdk 的最新版,乃至提交到主线代码仓库,是一个很大的问题。


龙芯在体系结构领域实现了当之无愧的自主可控,但是软件领域的未来仍不明朗,而且,这个路是龙芯自己选择走下去的。





新ちゃん 发表于 2020-8-17 14:53:27

正值英伟达谈判收购ARM沸沸扬扬,若ARM成为美国公司,ARM的授权必然会被禁止出售给中国,进一步被卡脖子;即便政府层面放宽禁令,但ARM不再是中立的供应商,英伟达作为芯片巨头,不会轻易把先进技术授权给对手,更不用说来自中国的对手。


龙芯LoongArch指令集厚积薄发,兼容X86.ARM,MIPS​baijiahao.baidu.com

诚如龙芯官方所言,全新的指令集无疑对避免掐脖子有重要作用,更更更黑科技的二进制翻译系统,对LoongArch架构融入到已有生态更是强心针、稳定剂,吸引厂商过渡到完全迁移到LoongArch架构,逐步打造自主的IT基础系统生态,尤其在苹果带一波ARM替换X86进入PC的风潮下,我们也带一波LoongArch替换X86亦非不可能,祝愿龙芯,前景可期!
https://pic1.zhimg.com/v2-546f7941cdfa3f378c573edc79839d86_hd.jpg
龙芯应用开发标准教程 计算机与互联网 书籍


其他相关回答




英国 ARM 公司宣布停止与华为的业务,将造成多大范围的影响?​www.zhihu.com
如果 Microsoft Windows 不给中国使用,我们会怎样?​www.zhihu.com
我们为什么不尽早施行国产 CPU+国产 Linux 系统战略呢?​www.zhihu.com


页: [1]
查看完整版本: 如何看待龙芯对外公开的 LoongArch 指令集?