最近几年来,手机处理器或者说移动处理器的性能已经超乎想象,尤其是苹果推出M系列处理器以后,更是模糊了处理器的分类。不过,你真的知道处理器的差异吗?ARM和X86是什么关系?CISC和RISC是什么区别?MIPS又是什么?长文,但是值得你读下去。
免得你们看不下去:“如果要用一句话来总结,CISC复杂指令集的指令集非常丰富,重点在于“软件硬件化”,对于软件开发者非常友善,但硬件的设计过于复杂;RISC而精简指令集正好相反,属于“硬件软化”,编译器等软件的设计要求较高,编译后的程序体积也比较大,但是处理器的开发难度大为降低,成本自然也要低廉许多(相对于复杂指令集的处理器产品)。”
处理器,其实全称应该是中央处理单元——Central Processing Unit,它是电脑最为核心的部件,功能主要是解释并翻译电脑的指令指令,处理软件运行时产生的数据。在1970年以前,处理器其实是由多个独立单元构成的,比如整数运算单元,浮点运算单元、寄存器。后来随着大规模集成电路制造技术的发展,处理器各单元部件可以合并起来,这种高度收缩后的产物就是微处理器,这也就解释了为什么电脑早期被称作“微型计算机”。
处理器最核心的三个部分是运算器、控制器、寄存器三部分,GPU图形处理器并不算在内。一如其名,运算单元负责计算,控制器则负责发出处理器每条指令所需要的信息,寄存器相当于一个临时中转站,负责将运算的结果或者发出的指令暂存再传递给下一个工序(如内存、硬盘),这样可以保证更高的运算速度。
那么,处理器在计算的时候,又是如何工作的呢?这就要从处理器的构架谈起了。
从(微型)处理器的开端说起,其实并不是像今天这样X86、ARM为主,实际上是百花齐放,例如MIPS和IA64等等,他们之间的差异非常之大。例如我们现在谈论的X86,实际上是X86的衍生构架X86-64,即64bit extended,64位元扩展架构。
我们先将这些构架往后放放,先从最基本的逻辑角度分类。它们统归两大类,分别为“复杂指令集”和“精简指令集”,也就是“CISC”与“RISC”。如果现在就做个总结,X86属于复杂指令集产物,ARM则属于精简指令集产物。
复杂指令集,即Complex Instruction Set Computers,究竟什么是“复杂指令集”呢?我们直白一点来解读:以最简单的乘法计算指令为例,当计算时,复杂指令集会调用内存A和内存B中的两个数据相乘,然后将结果存储至内存A中,当然,这需要多个处理器的时钟周期才可以完成,也就是我们所说的IPC(每周期指令,instructions per cycle)。
精简指令集,即Reduced Instruction Set Computers,和复杂指令集的差异在于,同样的乘法指令,精简指令集在执行计算的时候,需调用四个处理器周期指令完成乘法的计算,即分别将内存A数据加载到寄存器,内存B数据加载到寄存器之中,然后调用两个寄存器中的数据进行乘法计算,寄存结果最终存入内存A。
这两种方式最大的差异是,复杂指令集对单多数指令使用率低却增加了处理器的复杂度,指令是可变长格式,而精简指令集多为单周期指令,指令长度是固定的,操作寄存器时至需要读取、存储的操作即可。一个微程序包含若干条微指令(也称微码),执行复杂指令时实际上相当于运行一个微小的程序。因此,它们的另一个区别在于,同样一个计算指令,复杂指令集一旦开始就必须执行完毕才可以,而精简指令集可以随时“叫停”,打断计算过程。
其实最初只有复杂指令集,但是随着时间推移,处理器的设计越发复杂,更多的运算指令被放入构架里,比如最初的X86处理器构架只有基本的整数运算指令和浮点运算指令,但是经过长期发展,各种扩展指令集应运而生:例如MMX、SSE、AVX等等,这些扩展指令集是为特定的应用而生。但是,越来越多的指令让处理器的功耗节节攀升。
如果说功耗还是可以接受或者可以改善的事情,那么,“无效功能设计”就是一个更令人头疼的问题了——在复杂指令集的处理器中(尤其是现在X86构架处理器),只有20%左右的指令会经常性调用,大部分指令集只不过是“待命状态”,很多硬件资源实际是被闲置的。
而精简指令集的特点就是针对复杂指令集设计的,指令集越少、越精为宜,尤其是常用的计算指令,更多的衍生指令则可以依靠这些基础指令组合来执行,这样的好处就是功耗有效降低,指令执行更为简化。不过随着时间的推移、尤其是现在以ARM为代表的精简指令集处理器功能越发强大,其指令设计也越发复杂,二者的区别与界限也开始有了一定程度的重叠。
如果要用一句话来总结,复杂指令集的指令集非常丰富,重点在于“软件硬件化”,对于软件开发者非常友善,但硬件的设计过于复杂;而精简指令集正好相反,属于“硬件软化”,编译器等软件的设计要求较高,编译后的程序体积也比较大,但是处理器的开发难度大为降低,成本自然也要低廉许多(相对于复杂指令集的处理器产品)。
目前,复杂指令集的处理器代表,主要是X86(X86-64)构架,如Intel和AMD,以及我国的兆芯等处理器;而精简指令集则比较庞杂,包括DEC Alpha、ARC、ARM、AVR、MIPS、PA-RISC、RISC-V、PowerArchitecture(PowerPC)和SPARC等等。
1、复杂指令集代表队
刚刚提到复杂指令集目前的代表主要集中在X86构架上,实际上,早先还有两个类别的复杂指令集构架,只不过他们在竞争的大潮下因为各种各样的原因停止了前进的步伐。比如PDP-11,这个在16位处理器时代的天之骄子没有跟上时代的步伐(当时Intel的X86构架也处于起步阶段);
再如著名的Motorola 68000,它是一款16/32位处理器,明显比PDP-11(当然也吸取了很多PDP-11构架的优点)要先进不少,不过它的诞生要比Intel的8086晚了两年。
X86是Intel、AMD乃至VIA采用的复杂指令集构架,后期Intel为了在64位上先人一步,推出了并不兼容X86的IA-64构架(由Intel和HP共同开发设计),同样也是复杂指令集下的产物。只不过,步伐迈得太大了——IA-64并不兼容X86的32位,只能靠模拟器的方式执行32位程序,因此只在安腾(Itanium处理器)上使用。
现在通常讲的X86,其实准确的称呼应该是X86-64,它是基于X86架构的64位拓展,向后兼容于16位及32位的X86架构。X86-64于1999年由AMD设计,AMD首次公开64位集以扩展X86,称为“AMD64”。其后Intel也开发了自己基于X86、兼容64位的架构——Intel 64。
甚至包括VIA也推出过X86-64构架,实际上他们都大同小异。现如今,我们只是习惯性的把各家的X86-64构架统一简称为X86了,当然,它们依然都是属于复杂指令集下的产物。
2、精简指令集代表队
现在来看看精简指令集的家族,相比于复杂指令集,精简指令集下的各种构架着实让人眼花缭乱,它们各有各的特点,我们不妨一起来看看。
DEC Alpha
DEC Alpha,或者称之为Alpha AXP,这是一种基于精简指令集的64位处理器构架。最初是由大名鼎鼎的DEC公司制造,并且用于自家的工作站和服务器中。一般而言,很少有微软的操作系统支持X86之外的处理器构架,但是这款DEC Alpha可不一般——微软为DEC Alpha提供了支持,从Windows NT 4.0 SP6开始直至Windows 2000 Beta3才放弃。
之所以放弃,是因为DEC Alpha命运多舛,1998年,康柏收购了DEC公司,命运按理应该交由康柏。然而同一年,康柏将DEC Alpha卖给了Intel,而且康柏自身也在这个时期被惠普收购。由此,DEC Alpha想要继续发展显然不现实,虽然一直持续开发,但是支持越来越少,2004年,DEC Alpha被彻底放弃,走入历史。
SPARC
SPARC的全称为可扩展处理器架构(Scalable Processor ARChitecture),它也是归属于精简指令集架构的产品,由SUN公司于1985年设计。SPARC为了能够扩展生态,开放了自己的构架标准,授权了很多企业一同开发,例如德州仪器、Cypress半导体、富士通等等。
SPARC的诞生,归根结底是为了SUN公司的工作站使用(包括服务器),与之配套的系统Solaris也是为SPARC而生。除此之外,包括NeXTSTEP、Linux、FreeBSD、OpenBSD及NetBSD系统也提供有SPARC的专用版本。
但是,因为应用领域过窄,SPARC构架在2017年9月1日被甲骨文公司(SUN被甲骨文收购)停止开发。
MIPS
在精简指令集领域,无疑ARM构架是最成功的,但是还有一个构架也具有一定竞争力,它就是MIPS。1981年,斯坦福大学教授约翰·轩尼诗领导他的团队研发出第一个MIPS架构的处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
不得不说MIPS当时非常先进,而且它的出现极大的影响了其他精简指令集构架,而且,在2010年前后发展提速明显,比如在传统的整数浮点应用指令基础上逐步增加了多线程、 DSP 模块、 SIMD 模块以及虚拟化模块。这也与移动互联网应用的迅速发展时间相吻合,随着应用需求变化, MIPS 指令集以及架构也在迅速发展。只不过,它的竞争力始终差ARM一点,MIPS多数的归属是工控领域、嵌入式领域。
时间来到2021年,MIPS的最终一曲上演,MIPS的构架将不再继续开发,取而代之的是投入到RISC-V的开发中,一代英豪就此落幕。
ARM
ARM全称为高级精简指令集机器(Advanced RISC Machine,最早被称之为艾康精简指令集机器,Acorn RISC Machine),最早的ARM构架处理器广泛应用于嵌入式系统设计,而且由于它具备良好的节能特性,也在其他领域大有作为——比如我们现在的移动通讯领域,已经完全是ARM构架的天下了。毕竟,它兼具低成本、高性能、低耗电的特性,这是其他构架无法提供的。
从2005年开始,全世界98%的智能手机、90%以上的硬盘驱动器,40%以上的数字电视机顶盒,15%的微控制器以及20%的移动电脑,都是基于ARM架构的产物。
大家都知道苹果2020年推出的M1芯片,首次应用到电脑设备上,而且性能极为强大。殊不知这不是苹果第一次尝试ARM架构的产品应用于电脑产品上。在1980年代晚期,苹果电脑就和艾康电脑(ARM构架的拥有者)合作开发新版的ARM核心。甚至由于这个项目的重要性,艾康电脑在1990年将其设计团队单独成立了一个名为安谋国际科技(Advanced RISC Machines Ltd.)的新公司。这也解释了为什么ARM会被解读成Advanced RISC Machine的根本原因。
不止如此,复杂指令集的代表者,X86构架的最重要成员Intel,早年也拥有基于ARM架构的处理器产品:XScale处理器。它是Intel公司始于ARM v5TE处理器发展的产品,前身为StrongARM,在当时,Intel的XScale性能功耗比十分优秀,诸多PDA(掌上电脑)和基于Windows Mobile的手机都是采用XScale处理器的。
只不过,Intel最终犯了战略性错误,固执的认为复杂指令集的X86构架经过改良设计一样可以用于移动端,同时为了减轻开发负担(主要是成本),最终将其出售给了Marvell公司,至此Intel也失去了后来的智能移动设备大爆发。
3、第五代精简指令集
复杂指令集和精简指令集本质上是有专利壁垒的,想要开发一个处理器构架,有些专利是不可能绕开的。这就催生了另一个构架:RISC-V。RISC-V是一个基于精简指令集的开源指令集架构(ISA),简易解释为与开源软件相对应的一种“开源硬件”。与其他指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片、软件,而不必支付给任何公司专利费。注意,RSIC-V基金会中的V并非是英文字母V,而是罗马字母“5”,意为第五代精简指令集。
目前,RISC-V的前景最被看好,而且已经开始逐渐应用化,包括嵌入式系统,移动设备等等,都有RISC-V指令集的身影。而且令人振奋的是,RISC-V的最高级会员中有多达10家是中国厂商,包括阿里巴巴(平头哥)、晶芯科技、成为资本、华为、ICT(中科院计算所)、ISVCAS(中科院软件所)、ZTE(中兴通讯)、赛昉科技、UNISOC(紫光展锐)、希姆计算,阵容十分强大。
PS:高通这个ARM架构的“忠实拥趸”也早就布局了RISC-V,据称有可能未来也要切换到RISC-V上,因为ARM的限制实在太多了。
不得不说,移动时代精简指令集的代表ARM构架处理器和复杂指令集的代表X86构架处理器越发趋同,他们在互相借鉴之中不断进步,这二者的界限已经开始变得模糊起来了。
1、制程工艺
不得不说,ARM构架处理器的制程工艺要领先X86构架处理器至少一代以上,根本原因在于,ARM构架处理器大多的应用场景体积有限,芯片必须采用更为先进的制程工艺才能满足功耗、性能的平衡。目前,ARM构架处理器普遍使用5nm~7nm制程工艺制造,这样才可以装进手机、平板电脑这一类空间极为有限的设备中;而X86构架处理器一般都应用在笔记本电脑、台式机电脑上,功耗和散热的要求相比要“低”不少,一般而言都是7nm~10nm的制程工艺就足够应对了。
2、异构计算
ARM架构处理器的异构计算曾经是一大杀手锏,性能核与功效核这样的big.LITTLE架构设计很好的兼顾了耗电、性能之间的平衡。比如当手机常规运行时,只需要低功耗的小核心运行即可保证,当你运行一款复杂的游戏时,性能核心将全力工作。
但是,异构计算大小核的设计现在已经不是ARM构架处理器的独有技术了,包括Intel在内的X86处理器厂商也开始使用了这种异构设计思路,例如从12代酷睿处理器开始,也同样分为性能核与功耗核,用以应对不同使用场景(AMD也将启用异构设计)。可见,随着技术的发展,二者的界限正在变得模糊。
3、性能和耗电
随着搭载M系列芯片(M1、M2以及即将到来的M3)的苹果笔记本电脑上市,仿佛ARM构架处理器的绝对性能已经和X86构架处理器平起平坐了,实际上并非如此。M系列处理器的独特之处在于片上缓存,这个独特的设计极大的提升了数据的传输速度,另一方面,苹果有针对性的对特定应用方向进行了深度优化设计。用一个不太恰当的直白解释是,M系列处理器的定向优化能力非常优秀,这也让搭载了M系列处理器的苹果笔记本电脑在部分应用上表现甚至可以与X86构架的旗舰处理器一较高低(当然,这也和MAC OS操作系统与Windows操作系统对硬件资源调用的逻辑差异有关系)。但是在没有被“定向优化”到地方,表现自然不可能与X86构架处理器媲美,而且差距甚大。
在更为复杂的应用上,X86构架处理器的优势短时间内是无可取代的。最关键的一点,在于ARM架构处理器的乱序执行能力远不及X86架构处理器。比如电脑在操作的时候多是随机且不可预测的,X86构架处理器在这方面就加强了乱序指令执行的能力,而且,X86构架还有一个特点就是单核心双线程的设计,让其在处理乱序指令的时候效率更高。但是这样的缺点也显而易见,那就是随时都要准备着应对乱序指令的执行,因此它的耗电量也比较大。
而ARM构架处理器在执行确定次序的执行指令时效率很高,而且依靠多核心协同处理而不是依靠单一线程来执行,这样不需要用到的部分就可以进入“待机”模式,耗电自然就更少。比如说手机使用的ARM处理器芯片,一般都是片上系统结构(SOC),也就是一块芯片上集成了多个功能模块。这些模块哪一个功做哪一个不工作?对于移动端设备来说很好判断,通过软件层就可以实现对它们单独控制,由此,时下不需要工作的模块大可以“关闭”让其待命,自然耗电就少了许多。
这是一个老生常谈的问题,短期来看,ARM构架处理器将在移动端继续保持优势地位,而在笔记本电脑和台式机电脑,乃至服务器端,X86构架处理器依旧是不可替代的存在;而从中期来看,ARM构架处理器和X86构架处理器在设计上会进一步趋同,相似的设计会越来越多,某种程度的融合不可避免;长期来看,ARM构架处理器的地位有可能被没有专利壁垒的RISC-V构架处理器替代,并且后者与X86构架处理器的差异进一步融合。但是,两种指令集下的产物,依旧会有一条清晰的界限。
本文由梁桂钊于2023-08-20发表在梁桂钊的博客,如有疑问,请联系我们。
本文链接:https://www.720ui.com/6.html