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