百科问答小站 logo
百科问答小站 font logo



龙芯发布的LoongArch到底是一套自研全新架构还是一套基于MIPS魔改的指令集? 第1页

  

user avatar   zhangshujia 网友的相关建议: 
      

从起源谈起,过去的龙芯指令都是在MIPS上扩展,包括传统的LoongISA添加了很多扩展,比如为了二进制翻译扩展了157条指令,以及还有额外的向量扩展;还包括很多内核级加解密指令(早期龙芯是用于信息安全可控)。从自主可控的角度,显然其基于MIPS扩展的产业基础不够牢靠,有些细节是积重难返,很难改掉,而且如今Wave Computing也不在了,对MIPS家族的商业化演进也成为问题,以及Wave历来一些核心技术改进都是供应美军方的,并不会付诸商业化;于是,这成为龙芯决定自定义一个LoongArch自主指令系统的起因;

LoongArch相较MIPS和RISC家族的差异和优势;坦率讲,龙芯在大宗商业场景的技术优势并不存在,三者同属于RISC体系,在生态建设和技术扩展方面各有千秋,其中诞生了几个百亿晶体管设计的、纵贯前后道生态的、拥有数个垂直品类的ARM更是笑傲江湖;但倘若抛开大宗商业场景不谈,回到【自主可控、信创】的主题上,龙芯则是短期在PC和IDC侧唯一可商用的产品,LoongArch也是一个【有限借鉴了MIPS架构、进而推翻大量MIPS设计、且不受其授权限制的全新RISC架构】,它的优势可以包括几个方面:

1、基于自主可控/可信指令系统的基础软件:从核高基立项开始,近15年里出现了两个课题方向的争论:自主和兼容。兼容的好处是有生态,比如Wintel和AA;但兼容的弊端,就是受制于人,X86是不授权的,ARM是严格授权,MIPS是授权较宽松的(可以超长期,且可以自主加指令),但追求兼容却是阻碍了以OS为代表的自主基础软件的发展,如果走兼容路线,自主可控/可信的软件必然发展不起来,不可能基于敌国的指令系统建立自主可信生态,基于X86/ARM/MIPS/RISC-V都不行,即使对方的社区即使再小,也会为可信系统以及自主商业化带来干扰。而LoongArch的第一步是从指令层做到的自主可控+可信。

2、基于BT引擎的兼容性:除了做到自主可控/可信,龙芯还在自主指令系统上做到了基于BT翻译的兼容性,包括针对BIOS,内核,编译器和汇编器以及应用程序:避免了自主重要还是兼容重要的争吵。关于二进制翻译:龙芯基于LoongArch的LinuxOS,其中除了运行原生的LoongArch应用程序,还能通过二进制翻译的方式兼容MIPS/RISC-V/ARM/x86这几种指令集的Linux程序;使用LoongArch翻译任何指令时大致流程都是相同,只是随着指令系统的差异而在效率上也会有所差异。

  • 核心态方面:硬件能够支持两级地址翻译,x86到LoongArch+虚地址到物理地址(通过改造内存快表TLB,做到两级虚地址映射以减少映射开销,以及减少指令使用/指令翻译开销,即X86虚地址直接翻译成龙芯物理地址),面积和延迟开销都不大;以及,地址空间、中断处理等方面支持OS跨主板和对升级后的CPU兼容;
  • 用户态方面:功能上针对MIPS、X86、ARM、RISC-V的特征,绝大多数指令可以做到1对1或1对2翻译;还包括对X86的EFLAGS支持、RISC-V的原子同步指令支持;以及,ABI方面支持X86/MIPS系统调用兼容,支持MIPS汇编码直接翻译成LoongArch二进制。

3、生产级的向量指令扩展:LoongArch原生带着128和256位向量指令集(并非基于MIPS的MSA指令),已交付流片的LoongArch处理器均具备向量指令功能(128bit向量扩展1024条 & 256bit向量扩展1018条)。相比RISC-V的向量指令,RVV仅用于研究/教学和社区,还没有生产级应用实例;而SIMD指令,只能使用一个开源的Hwacha指令集,本质上还是一个协处理器,连乱序执行流水线也整合不进去,更不用说做编译器层的优化了。这算是相较于RISC-V的一点微末优势。


【BTW - 1:LoongArch是自定义全新的指令集,并非基于MIPS的扩展】;LoongArch包括基础指令337条、虚拟机扩展10条、二进制翻译扩展176条、128位向量扩展1024条、256位向量扩展1018条,共计2565条原生指令。相对于MIPS,摒弃了部分不适合现代CPU的指令,又做了大量和扩展,例如单条指令支持的立即数从MIPS的最大16位扩展到最大24位,分支跳转偏移也从64K扩展到1M字节,以及寻址空间从固定分段改变为单一平面等,算是有效的减少了编译结果的目标指令条数和访存次数,效能就提高了。此外,虽然仍为RISC指令集,32位定长指令、32个通用寄存器、32个浮点/向量寄存器;但不同的是MIPS只有3种指令格式,而LoongArch重新设计了指令格式 ,可用的格式扩大到了10种 ,包含3种无立即数格式和7种有立即数格式,重新设计的指令格式的优势是,可以包含更多的指令槽,有利于以后的长远发展。【注:有些指令要长立即数,LoongArch最长的立即数扩增有25位,尤其是跳转,相对跳转;另外,还十分节省指令槽,现在定义完2500多条指令,还预留了一半的一级指令槽;要知道所谓一级指令槽就6位,这前6位呢,原来是有64个槽,LoongArch只用了32个,剩下的未来可以继续扩展】。

【BTW - 2:有质疑LoongArch加了许多用于二进制翻译支持的指令,面积和开销会很大】;这里辩证的是,你的基础指令才337条,二进制翻译指令加了176条,这个面积代价并不意味着会增加50%,因为我们知道通用CPU中几乎80%的面积都在为ALU提供足够的数据和指令,还有多级的高速缓存cache、转移猜测表、动态调度的那么多队列,那些微架构的东西和开销是跟指令系统无关的,都是微架构的开销;所以指令系统即使有限度的扩大一些也不会占太多面积和开销。另外在运算器里面,80%的面积都在浮点运算(浮点运算器更占面积),浮点运算方面大家基本都差不多是比较完备的,龙芯的二进制翻译主要是涉及定点运算和访存地址的运算这两个方面;所以从这个角度上,龙芯的二进制翻译支持,它硬件的面积开销应该就是1%-2%,对延迟的开销也会很低。

【BTW - 3:关于BT引擎的知识产权风险】;用胡伟武老师的话讲,二进制翻译是一个向死而生的设计;大都为了新架构铺路而临时使用,IBM/HP/INTC/Apple/Transmeta/Qcom/NV都在推出新架构的时候用过这项技术;70年代迄今一直在发展,出现数十种不同的BT翻译系统和无数研究论文。关于跨指令二进制翻译的知识产权风险,最典型的就是Transmeta与INTC的官司判例【Transmeta CPU特点是可以执行X86指令,也是用一个DBT动态翻译引擎 来编译或模拟X86指令,然后翻译到它私有的VLIW指令集上;因为是依靠软件栈完成,如果INTC/AMD更新X86指令扩展,那全美达更新软件栈就行,就不用重新设计硬件了,有些性能和功率方面的差异会导致访存取指和执行有问题,全美达通过软件栈也能够多少去调节,甚至硬件设计问题和制造瑕疵也可以通过软件栈来应急修正一下,比如制造瑕疵导致个体功耗过大,那么也可以调节一下功耗和核心性能;全美达最初基本专注在低功耗X86市场,这个尤其体现当时的多媒体指令的支持比如X87和SSE,那个年代对于指令效率相关于性能的要求不苛刻】,这在Intel看来,Transmeta并未向Intel购买X86授权,却正在做X86兼容的CPU;但最终Intel败诉,Transmeta的DBT引擎在北美商用不违法。只不过,当时Transmeta是软件虚拟机,而LoongArch是硬件译码。

【总结】:LoongArch当下的设计是指向自主可控、可信的相关行业,并达到核高基设计要求;至少中短期的数年内不会影响大宗PC/IDC商业市场。全新的自主指令系统的初衷,是旨在发展我国自主可控/可信的基础软件生态(含OS内核/编译器/应用软件等),因此所作出的牺牲是,一方面通过BT/LAT二进制翻译引擎实现三方应用兼容,需要跟随友商的版本迭代且不断后进的调整兼容性,消耗指令/面积/开销,就意味着相比竟品总是断代;以及,由于指向信创、可信行业,必然没有竞争力与飞腾/HW等厂商分享大宗PC/IDC市场的增长,两者生态建设方面也不能相提并论;虽然胡老师称龙芯和LoongArch会争取适用更多商业机型和应用场景,但依然是通过BT引擎落实,出了信创/可信行业之外并没有竞争力;因此唯有祝愿龙芯,首先在信创行业笑傲江湖。




  

相关话题

  现代中央处理器(CPU)是怎样进行分支预测的? 
  如何评价龙芯总设计师胡伟武说,14nm芯片已经够用? 
  如何评价龙芯总设计师胡伟武说,14nm芯片已经够用? 
  中国的龙芯处理器现在到什么地步了?换句话说就是相当于几代英特尔。? 
  据称龙芯3A5000流片成功,如何看待龙芯现在的发展以及意义? 
  龙芯真的不如移动芯片吗?美国禁止向中国超算提供英特尔芯片后影响会多大? 
  为什么 ARM 和 MIPS 那么多寄存器,x86 那么少? 
  龙芯和英特尔、AMD的差距在哪里? 
  SIMD指令和SIMT指令有什么区别? 
  龙芯和英特尔、AMD的差距在哪里? 

前一个讨论
2 C 和 2 B 的运营有什么区别?
下一个讨论
海伦斯小酒馆经营模式,为什么酒可以那么便宜?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利