https://zhuanlan.zhihu.com/p/365210753

  现代信息技术的应用都是以计算机为基础,CPU是计算机中的信息处理中枢。CPU指令集是CPU逻辑电路与操作系统和应用程序交流信息时,对词汇和语义的精确约定,决定了操作系统和应用软件能否与CPU兼容,CPU的硬件接口规范又决定了各种核心硬件能否匹配。因此CPU与其它硬件的根本区别,不仅在于技术难度,更在于它是一切软硬件和应用生根的土壤。能够在某种指令集的CPU上运行的软件的集合,称为这种指令集的软件生态,能够与某种CPU配套的各种硬件,则是这种CPU的硬件生态。

  当前最流行的几种CPU指令集,都被半导体技术领先的美国直接和间接掌控。经过数十年的发展,在其强大的半导体工业基础,和深厚的人才及技术储备的支撑下,美国的通用CPU不但性能超群绝伦,更是通过与同样在它掌控下的操作系统结合,积累了完善的软硬件生态。目前在桌面电脑和服务器上使用得最多的CPU产品都来自Intel和AMD,在移动设备中使用最多的则是来自ARM。X86/AMD64指令集与Windows系统的组合,为计算机在各个行业中的应用普及做出了巨大的贡献,ARM指令集与Android的组合,也加速了智能手机的推广和应用。同时,它们也为了攫取了整个行业中最大的利润,而一直在争取并已经成功实现了对行业的霸权,因此有能力掌控世界任何国家信息技术产业的兴衰,决断产业链中任何下游企业的生死。

  1985年时,Intel挟着它推动通过的《半导体保护法》割起了韭菜,收回了对日本企业的x86指令集授权,使日本企业对x86 CPU进行的一切推广和改进都付诸东流,对x86生态的贡献反而成为了打击日本自主CPU的武器。同时美国政府也对日本半导体行业实施打压,使日本的半导体行业一落千丈。因为日本企业并没有对x86指令集的主导权,包括配套的硬件也只能按照Intel的标准设计和生产,一旦失去了与x86兼容的许可,就只能任由美国政府和Intel宰割。不只是对国外,Intel对美国国内的企业也一视同仁,同样在1985年,Intel尝试收回对AMD的x86指令集授权,然后打了许多年官司,AMD才保住了授权。但拥有x86授权的其它企业没有这么幸运,即使扛过了官司,也没能抵挡住Intel的其它手段。即便是AMD也仍然时不时地被Intel借着各种专利问题敲打,直到它抓住了CPU从32位发展到64位的时机,自主设计了兼容x86的AMD64指令集并得到市场认可,才获得了主动权。AMD通过与Intel完成各种交叉授权,拥有了平起平坐的地位,从此与Intel的竞争只是CPU性能上的竞争,摆脱了被狭制的命运。

  2000年左右,我国台湾的VIA意气风发,它的主板芯片组全球市场占有率超过了50%,于是通过收购奄奄一息的Cyrix和Centaur获得了x86指令集授权,开始进军CPU市场。兼容x86指令集可以依附现成的x86生态,不存在市场壁垒,但它的美国子公司Centaur设计的CPU性能一直不高,VIA只能依靠管脚兼容与Intel中低端CPU竞争。Intel也没有忘记时不时地敲打VIA一番,在2010年时VIA使出浑身解数,才争取到Intel把x86指令集和相关专利授权延期到了2018年。然而Intel也给VIA作出了两条要命的限制,一是不再授权VIA设计和生产与Intel CPU兼容的主板芯片组,二是不允许VIA的CPU与Intel的CPU管脚兼容,也就是不再可以与Intel的CPU原位替换。因此VIA失去了最核心的主板芯片组和集成GPU业务,CPU也迅速从市场消失,经营陷入困境,连带整个台湾的半导体行业都遭受巨大损失。

  2008年Google发布了Android 1.0系统,只支持ARM指令集。短短几年时间,ARM和Android的组合就占据了智能手机市场的绝对份额,而Intel和微软都无力阻止这一切的发生,究其原因,只是因为ARM和Android是自己创造了一个体系,能够完全自主。ARM和Android不依附x86和Windows的原有生态,Intel和微软也因此没有能力控制这个新兴产业。当ARM和Android主导了整个移动通信行业后,它们也同样不会放弃对整个行业的霸权。凡是想要背离它们的,以及对美国利益造成影响的,都会受到它们致命的打击。如果没有国家的斡旋,近几年已有多家知名半导体企业惨遭毒手。

  自1949年开始,发达国家就持续对我国境内禁运高等级的技术和产品,但仍然不能阻止我国在各个领域都取得巨大成就。近几年我国各方面的国际竞争力都迅速提升,以美国为首的部分国家也就不再维持表面的友好。信息技术产业作为现代化的基础,也一直在承受着充满敌意的各种试探。为了应对可能出现的危机,我国也一直在探索信息技术产业自主的方法。CPU以及配套的软硬件生态自主是信息技术产业自主的基础,从20年前开始,龙芯和申威等陆续开始了自主通用CPU的设计。

  龙芯在2001年起步时,主要目标是在CPU核心技术禁运的条件下,解决通用CPU从无到有的问题,同时兼顾自主发展软硬件生态的权力,于是选择了兼容MIPS指令集。MIPS公司自己不生产和销售CPU,就不会像Intel那样既当裁判长又当运动员。MIPS还允许自行扩展指令集,这样就可以在保障获得基础生态的同时,还能建立具有自我保护能力的自主生态,避免被国外的MIPS兼容CPU轻易取代。申威选择的路线更加极端,它在吸收了Alpha指令集的优点后,自主设计了SW64指令集用于超算CPU,暂时避开了缺少软硬件生态的难题,但从超算回归桌面也仍然需要把自主生态之路重走一遍。国内也有一些公司选择了与x86或ARM兼容的路线,比如与VIA合资得到Intel截至2018的指令集使用权,比如购买ARMv8指令集的授权。它们依附于主流生态,降低了开发和布署成本,合作者也可以随时换成国外同类的CPU产品降低项目风险。这样的策略降低了CPU产品销售难度,同时也被套上了沉重的锁链。因为产品的性能难以达到主流水平,指令集的主导者又从不放松管控,它们更难发展出自主并且可控的生态。又因为它们可以随时被进口的同类产品取代,所以在产业链上的所有努力和成果,都可能会重复当年日本的x86 CPU和Intel的故事。何况主流指令集在不断发展,除非能够一直跟进x86和ARM的最新版本,否则若干年后就必然会失去对生态的兼容性,然后被主流市场拒绝,如果不改变思路,那就没有未来。

  龙芯在自主设计的CPU达到可实用的水平后,十多年来围绕自主生态建设开展了大量卓有成效的工作。比如积极参与CPU配套的产业链建设,协助设计和推广各种成套的软硬件方案。比如在与整机商的合作中尽可能使用国产硬件,与其它自主硬件都有良好的合作。比如推动在中小学的计算机教育中使用Linux系统和自主CPU,与高校合作培养和挖掘在CPU设计方面的人才。为了建设软件生态,龙芯完成了系统软件和大量基础库的开发和移植,例如为了使大量JAVA应用能在龙芯CPU上正常运行,而开发了龙芯平台上的JAVA虚拟机,因此对OpenJDK的贡献在2019和2020都居世界前列。对.net core和浏览器的移植和优化,也同样解决了大量应用软件环境依赖的问题。对ffmpeg和UE4的移植和优化,也为龙芯CPU在影视和娱乐方面的应用做好了准备。

  十几年间龙芯在CPU和应用结合的实践工作中,对永久授权的MIPS指令集进行了大量扩展,形成了自主的LoongISA指令集。LoongISA补充了MIPS自身的不足,使它更能适应现代的CPU技术和理论,延长了这一指令集的生命周期。但在长期的实践中,也逐渐发现了一些问题,这些问题与更高层次的自主和可控产生了矛盾。最严重的冲突是龙芯自主发展的LoongISA指令集不能授权给其它企业,因为龙芯对MIPS指令集只能使用和扩展,像AMD/VIA那样只能对第三方授权IP(设计好的CPU核心),而无权授权指令集。建设自主软件生态不是龙芯一家公司可以独立完成的任务,无论x86还是MIPS以及ARM的扩张方式,都是授权给其它IC企业一起开发产品,共同建设软硬件生态,龙芯如果继续使用MIPS,这条路就走不通。其次就是技术冲突,CPU技术一直在发展,指令集也必须与时俱进,MIPS在设计时的历史局限性,造成了许多历史负担,但MIPS的授权不允许对基础指令大刀阔斧地修剪,龙芯对指令集的许多研究成果无法在MIPS上实现。尽管MIPS在与x86的战争中衰败流亡,但美国仍然一直阻止中资收购MIPS,尽管龙芯已经成为MIPS桌面和服务器生态的实际领导者,MIPS也仍然能干扰和限制龙芯在技术和商业上的发展。另外近几年国际上的一些情况,也使龙芯认识到指令集的永久授权也有不可控的风险,美国随时制造一个借口就可能单方取消授权,任何商业合同都会把“国家政策”写进“不可抗力”的条款。于是在约两年前,龙芯决定设计完全自主的指令集LoongArch,在LoongArch相关消息透露并确认之后不过几个月,拥有MIPS版权的WaveComputing就宣布了破产重组。

  龙芯为了实践和推广自己十多年的研究成果,实现更高层次的自主和可控,放弃了以MIPS为基础的发展路线,于今年4月15日正式发布了完全自主的LoongArch指令集。龙芯的研究人员把他们对CPU指令集的研究和理解,具现成了可以应用和传播的“知识”,创新设计了既适合现代CPU技术和理论,又能兼顾以后继续扩展的自主指令集,还能通过与系统软件结合,以二进制翻译的方式兼容其它指令集的软件生态。Intel也曾经为了摆脱x86指令集设计上的历史包袱,重新设计了更先进的Itanium指令集,但它自己也无法取代自己的x86,龙芯又怎样保证一定能够成功呢?因为x86的生态体系十分庞大,指令集的过渡需要漫长的时间,所以在AMD等还在一旁虎视眈眈的时候,Intel无法做到为了推广Itanium而停止销售自己的x86产品。龙芯却没有同样的负担,龙芯CPU的生态足够独立,无论软件还是硬件产业链都自成一体。首款使用LoongArch指令集的CPU产品3A5000与新款3A4000管脚兼容,合作企业在硬件方面的改换成本也可以降至最低。在软件方面,龙芯使用的Linux内核是由龙芯自己维护,各种基础库也都由龙芯自己负责,生态系统中主要的软件开发商都与龙芯有深度的合作关系,可以迅速地完成对指令集的改换。LoongArch还实现了对原MIPS应用程序高效的二进制翻译,即使部分应用软件不能及时跟进,也仍然能高效地正常运行,不会因指令集改变而产生困扰。龙芯与Apple进行过的两次改变指令集的方式相似,都是在软硬件可控的前提下,辅以二进制翻译避免软件生态真空。Apple的产品向来以整机方式发售,为了防止软件生态被对手侵蚀和利用,牢牢地把持了自己的操作系统,第二次改变指令集时CPU也自主设计,加强了CPU与应用的结合,更加自主和可控。Apple模式一直是龙芯研究和学习的对象,但因产品和目标与Apple不同,龙芯的方略和Apple有显著的区别。龙芯的主要产品是CPU,目标是促进整个信息技术产业的自主和可控,因此它需要在自主的前提下尽可能开放,必须与数量庞大的合作者共同建立自主产业链,推动自主的信息技术产业健康发展。

  龙芯为了推广LoongArch指令集,加速LoongArch生态的建设,而计划建立自主指令集联盟,联盟成员都可以免费获得自主指令集的使用权。今年将与10所高校合作,围绕自主指令集进行教学和研究,以及基于精简版本的指令集开展CPU设计实验。龙芯还计划向联盟成员开源部分CPU核心设计,这些核心的最高性能达到ARM A53的水平,这比只开放指令集的RISC-V更有魄力。这些举动将有助于增强国内整体的CPU设计水平,降低芯片行业的产品研发成本,提高生存和参与国际竞争的能力。龙芯自己维护了Linux内核的龙芯分支,以及大量基础库和开源软件,并欢迎任何开发者参与开发和优化。龙芯给各种Linux发行版提供一致的内核,以保证各种发行版与龙芯的CPU有最佳的兼容性,并在使用龙芯CPU的电脑上有几乎同等的性能表现,但龙芯本身并不参与国产操作系统的竞争。龙芯为软件开发人员编写了大量教材,以及开展各种专题讲座,降低了在龙芯电脑上开发和移植软件的成本,保持和提高软件行业自主创新的主动性。龙芯向各个硬件合作企业提供CPU和芯片组产品,以及主板设计方案,但本身并不生产和销售主板,更加不会像Apple那样成为整机商,以保证产业链中各级企业的利益不会被侵犯。对于各种嵌入式应用,龙芯还提供了大量成套的设计方案,和丰富的技术支持,既有利于推广龙芯产品,也能缩减合作企业的研发成本。龙芯在重点地区兴建了不少产业园,有利于产业链企业区域化集中,降低物流及各企业协作成本,缩短新品研发的周期。龙芯为了信息技术产业的自主已经做了许多工作和准备,相信在众多企业的共同努力下一定能有所作为。

  目前龙芯的自主生态正在循序渐进地发展,最大的困难仍然是如何切入主流市场。不只是龙芯,我国信息技术产业的各种基础软硬件都面对同样的难题。没有足够的市场,各种技术产品都难以迭代更新,产品性能不足,成熟度不够,用户不选择,就无法代替国外的同类产品,也就谈不上信息技术自主和可控。

  近几年美国对我国信息技术产业的干涉越来越严重,国家也迫切需要使用国产的软硬件保障信息安全,为了催化国产软硬件发展,缩短自主信息技术产业成熟的时间,而在关系到国计民生的行业中大力推广应用国产的软硬件,生生地创造了一个市场。在这个市场中各种自主软硬件初期的价格会比较偏高,因为各个企业都需要在产品单价上均摊研发成本。不过对于国家来说,只要资金是在国内的单位和企业间流动,就只是把钱从左兜放到右兜,始终还在自己身上。国家不但没有损失,还能催生出各种技术创新,培养一批优秀企业,有利于人民。当然这个特殊市场也不会长期存在,也就保持一两年的时间快速增长,只有优秀的软硬件产品才能获得足够的机会,用出货量摊薄成本,用更易被接受的性价比加速推广。在这个市场出现之前,龙芯就一直致力于产业链的培养,与众多企业有深入的合作。与其它依附于x86和ARM生态的国产CPU相比,在使用国产Linux系统的条件下,龙芯在办公和行业应用方面的软件生态反而更加丰富,以至于有企业把从龙芯平台移植软件到其它平台的技术作为“重大成果”,委实可笑。

  随着用户规模扩大,应用领域不断扩展,基于LoongArch指令集的自主生态也能得到快速完善,将能满足大多数普通用户的需求。随着出货量增加,龙芯产业链中各个企业的生产和研发成本也能摊薄,促使整机价格降低到普通消费者可接受的水平。龙芯CPU的性能现在已迈入主流的门槛,一两年后的3A6000应能接近市场中高端桌面CPU产品的水准。综合这些条件之后,龙芯才能保证进入大众消费市场后具有较高水平的竞争力,在争夺Intel/AMD桌面CPU固有市场的战争才能更加顺利。

  龙芯一直保持技术自主、生态自主,就是为了进入大众消费市场后,避免被国外企业牵制。LoongArch指令集是龙芯自主设计,已经通过了严谨的知识产权调查证实不存在侵权的成分。龙芯的CPU是自主设计,不依赖其它企业的技术授权。LoongArch的软硬件生态体系是自主建设,具有很高的可控性。龙芯不属于x86/ARM生态的一部分,Intel/ARM等也就无法在它们的绝对领域内操控龙芯,相反LoongArch既独立自主又有包容并蓄的特性,可以通过二进制翻译对x86/ARM的软件生态进行吞并。

  LoongArch中包含的二进制翻译技术与众不同,它的目标是消除指令集壁垒,完成生态融合。龙芯的二进制翻译无论是技术路线还是商业路线,在历史上都没有出现过相同的考量。例如全美达的二进制翻译,为了兼容x86而完全放弃了自立的能力,只能寄生于x86生态是它败亡的重要原因。APPLE和微软的二进制翻译都只为转移自有软件,是一种消极的方案。龙芯的二进制翻译则具有进攻的能力,它是一种软硬件协同的翻译技术。基本原理是在CPU中以硬件实现各种指令集的共性,同时也对各流行指令集差异化特征进行针对性的硬件支持,然后通过系统软件的控制,实现同时运行多种指令集的应用程序。LoongArch指令集在功能上可以说是各种流行指令集的并集,软硬协同的二进制翻译在理论上能接近纯硬件翻译的效率,同时又具有软件翻译的灵活性和扩展能力,既能运行各种主流指令集的应用程序,又保证了以自己的软件生态为主体。LoongArch具有收割其它指令集软件生态的能力,虽然在诞生之初还不能完全做到这一点,但随着软硬件协同中的软件部分逐渐完善,达成这个目标只是时间上的问题。

  当龙芯的二进制翻译技术成熟时,不只是在消费市场大有可为,在云服务器方面也能表现出很大的优点。在一台服务器上可以同时运行各种指令集甚至各种操作系统的应用程序,而性能又没有明显的降低,用户可以在服务器的软件环境搭建方面有更加灵活的组合。有些公司的业务服务器存在多种系统和架构的组合,往后可能就只需要龙芯服务器这一种架构,甚至把原本多个服务器上的应用都放在龙芯服务器上,可以大幅降低使用成本和管理维护的难度。对于软件开发者而言,特别是跨平台的软件项目,在基于龙芯LoongArch的CPU上进行开发和测试,也可以减少许多负担。利益于国产系统的广泛使用,龙芯的软件生态也将在LoongArch发布后得到爆发式的增长。

  龙芯对产业链和自主生态建设已经有了丰硕的成果,对未来的发展也有成熟的思路及计划,用自主的LoongArch指令集奠定了坚实的基础。只要与众多合作企业携手并进,向着信息技术产业自主和可控的目标坚定前进,目标就一定能够达成。

[转帖]从CPU指令集自主到信息技术产业自主的更多相关文章

  1. CPU指令集

    cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...

  2. 编译TensorFlow CPU指令集优化版

    编译TensorFlow CPU指令集优化版 如题,CPU指令集优化版,说的是针对某种特定的CPU型号进行过优化的版本.通常官方给的版本是没有针对特定CPU进行过优化的,有网友称,优化过的版本相比优化 ...

  3. CPU 指令集(Instruction Set Architecture, ISA)

    本文摘自网络 概念 指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序,用来引导CPU进行加减运算和控制计算机操作系统的一系列指令集合.拥有这些指令集,CPU就可以更高效地运行.系统所下达的 ...

  4. [转帖]国产CPU性能最全盘点 宜良性竞争优胜劣汰

    国产CPU性能最全盘点 宜良性竞争优胜劣汰 电子工程专辑的网站内容 其实里面说的不尽全面 比如龙芯和申威就放到一块了 一个是 MIPS 一个是Alpha 明显不一样的东西 x86的应该都不行 而且. ...

  5. CPU指令集不同导致的core分析

    最近程序需要支持CGSL系统运行,测试中发现相同操作系统的两台机器,编译机运行正常,测试机coredump.core信息汇总如下,可以看出是由于测试机不支持编译后的指令导致的问题: Program t ...

  6. 常见的CPU指令集介绍

    本文摘自网络   一.X86 是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,属于CISC. 1.1.简介 X86指令集是美国Intel ...

  7. Dlib支持CPU指令集编译问题(SSE4.2或者AVX)

    The compile script is: mkdir build cd build cmake ../../tools/python -DUSE_SSE2_INSTRUCTIONS=ON cmak ...

  8. 【基础知识】CPU指令集

    计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程.指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计 ...

  9. [转帖]关于CPU Cache -- 程序猿需要知道的那些事

    关于CPU Cache -- 程序猿需要知道的那些事 很早之前读过作者的blog 记得作者在facebook 工作.. 还写过mysql相关的内容 大拿 本文将介绍一些作为程序猿或者IT从业者应该知道 ...

  10. [转帖]8086 CPU 寄存器简介

    8086 CPU 寄存器简介 https://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 哎 没看完 感觉好复杂. 引子 打算写几篇 ...

随机推荐

  1. spring-cloud-alibaba项目打包

    在父依赖中加入 <build> <plugins> <plugin> <groupId>org.springframework.boot</gro ...

  2. MySQL篇:bug2_ Navicate无法添加或更新子行-外键约束失败

    问题产生原因 Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构. 解决办法 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 再添加值, 然 ...

  3. JDK1.6在生产环境引起的坑

    本文分享自华为云社区<[高并发]记一次JDK1.6在生产环境引起的坑!>,作者: 冰 河 . 最近有朋友遇到一个困惑:他写的程序在测试环境一点问题没有,但是发到生产环境却会频繁出现内存溢出 ...

  4. 如何做好分支管理,保证高效CI/CD?

    摘要:一文讲述git分支管理策略. 本文分享自华为云社区<如何做好分支管理,保证高效CICD?>,作者:华为云PaaS服务小智. 引言 CI/CD是DevOps 的基础核心,做好CI/CD ...

  5. Axure 变量、属性、函数

    局部变量 使用场景非常多; 需要先创建; 只能作用于当前事件; 命名需要注意,只能英文+数字; 全局变量 需要先创建; 可以作用于整个文档,在任意页面调用或使用 中继器的 Item 属性 item:获 ...

  6. Intellij idea getter setter 模板设置

    通过getter setter 模板设置 在实体类中 自动添加 @XmlTransient  按 [Alt+Insert],弹出的提示中选择 Getter and Setter Xml Entity ...

  7. SpringBoot Jar 包太大 瘦身 【终极版】

    思路,将依赖的第三方jar包,移到启动jar包个面外部加载 jar 包 SpringBoot Jar 包太大 瘦身 [初试]简单应用 SpringBoot Jar 包太大 瘦身 [终极版],建议使用这 ...

  8. 备忘 springboot 整合ehcache,注入CacheManager时提示 required a bean of type 'org.springframework.cache.CacheManager' that could not be found

    问题因人而异,此处仅做备忘 整合过程: 1.添加maven依赖 <dependency> <groupId>net.sf.ehcache</groupId> < ...

  9. HDU - 1711:Number Sequence (KMP模板)

    原题链接 KMP模板:AC,858ms,13112KB内存 消耗太大了 #include<bits/stdc++.h> using namespace std; using namespa ...

  10. <vue 路由 3、路由代码跳转>

    说明:在上一节的工程下继续讲解 一.     知识点说明 业务开发中更多的是使用代码方式进行页面的跳转会用到this.$router.push('/') 和this.$router.replace(' ...