当前安卓支持三类处理器:ARMIntel 和 MIPS。ARM 无疑被使用得最为广泛。Intel 因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小。MIPS 在 32 位和 64 位嵌入式领域中历史悠久,获得了不少的成功,可目前 Android 的采用率在三者中最低。

 

 

总之,ARM 现在是赢家而 Intel 是 ARM 的最强对手。那么 ARM 处理器和 Intel 处理器到底有何区别?为什么 ARM 如此受欢迎?你的智能手机或平板电脑用的是什么处理器到底重要不重要?

 

处理器

中央处理器是你智能设备的大脑。它的任务是通过执行一系列指令来驱动你的设备,包括显示屏、触摸屏、调制解调器等,让一坨塑料金属混合物变成闪亮的智能手机或者平板电脑。

 

移动设备非常复杂,其中的处理器需要执行数百万行指令才能完成人们希望这些设备去做的事。速度和功耗对处理器来说至关重要。速度影响用户体验,功耗影响电池寿命。完美的移动设备必须有好性能以及低功耗。

 

这就是为什么选择什么样的处理器很重要。一个超级耗电、反应迟钝的处理器会很快吸干你的电池,而一个考究的、高效的处理器给你带来高性能和长久的电池寿命。

 

总体而言,ARM 和 Intel 处理器的第一个区别是,前者使用精简指令集(RISC),而后者使用复杂指令集(CISC)。

 

通俗而言,精简指令集规模较小,更接近原子操作,而复杂指令集规模较大,更加复杂。所谓原子操作,是指每条指令的工作大都可以由处理器在一个操作内完成,例如对两个寄存器做加法。

 

 

复杂指令集的指令描述某个意图,但是处理器必须执行 3 或 4 个更简单的指令来实现这个意图。例如,可以命令一个复杂指令集处理器对 2 个数求和,并把结果存入主内存中。为了完成这个命令,处理器首先从地址 1 中取得第一个数(操作 1),然后从地址 2 中取得另一个数(操作 2),然后求和(操作 3),等等。

 

所有的现代处理器都使用一种所谓微指令的概念,这是一个处理器内部的指令集合,用来描述处理器可以做的原子操作。

 

复杂指令集处理器实际上执行了 3 条微指令。对精简指令集处理器而言,其指令跟其微指令十分接近,而复杂指令集处理器的指令需要先被转换成一些更精简的微指令。

 

也就是说,精简指令集处理器中的解码器(负责告诉处理器到底要干些什么的东东)要简单得多,而简洁意味着高效和低功耗。

 

制造工艺

ARM 和 Intel 处理器的另外一个主要区别是 ARM 从来只是设计低功耗处理器。其宗旨是设计低功耗处理器,这是他们的强项。Intel 的强项是设计超高性能的台式机和服务器处理器,并且的确做的不错。

 

 

Intel 是台式机的服务器行业的老大。过去的 20 年里我所有的 PC,笔记本和服务器(除了一个外)用的都是 Intel 的处理器。然而进入移动行业时,Intel 依然使用和台式机同样的复杂指令集架构,试图将其硬塞入给移动设备使用的体积较小的处理器中。

 

Intel i7 处理器平均发热率为 45 瓦。基于 ARM 的片上系统(其中包括图形处理器)的发热率最大瞬间峰值大约是 3 瓦,约为 Intel i7 处理器的 1/15。Intel 现如今是个巨头,雇佣了大量的聪明人。

 

其最新的 Atom 系列处理器采用了跟 ARM 处理器类似的温度控制设计,为此 Intel 必须使用最新的 22 纳米制造工艺。一般而言,制造工艺的纳米数越小,能量的使用效率越高。ARM 处理器使用更低的制造工艺,拥有类似的温控效果。比如,高通晓龙 805 处理器使用 28 纳米制造工艺。

 

64 位

对于 64 位计算,ARM 和 Intel 也有一些显著区别。你知不知道,Intel 并没有开发 64 位版本的 x86 指令集。这个 64 位的指令集,名为 x86-64(有时简称为 x64),实际上是 AMD 设计开发的。

 

 

故事是这样的:Intel 想搞 64 位计算,它知道如果从自己的 32 位 x86 架构进化出的 64 位架构的话,新架构效率会很低,于是它搞了一个新 64 位处理器项目名为 IA64。由此制造出了 Itanium 系列处理器。

 

同时 AMD 知道自己造不出能与 IA64 兼容的处理器,于是它把 x86 扩展一下,加入了 64 位寻址和 64 位寄存器。最终出来的架构,人称 AMD64,成为了 64 位版本的 x86 处理器的标准。

 

IA64 项目并不算得上成功,现如今基本被放弃了。Intel 最终采用了 AMD64。Intel 当前给出的移动方案,是采用了 AMD 开发的 64 位指令集(有些许差别)的 64 位处理器。

 

ARM 的故事很不一样:看到移动设备对 64 位计算的需求后,ARM 于 2011 年发布了 ARMv8 64 位架构,这是为了下一代 ARM 指令集架构工作若干年后的结晶。为了基于原有的原则和指令集,开发一个简明的 64 位架构,ARMv8 使用了两种执行模式,AArch32 和 AArch64。

 

顾名思义,一个运行 32 位代码,一个运行 64 位代码。ARM 设计的巧妙之处,是处理器在运行中可以无缝地在两种模式间切换。这意味着 64 位指令的解码器是全新设计的,不用兼顾 32 位指令,而处理器依然可以向后兼容。

异构计算

ARM 的 big.LITTLE 架构是一项 Intel 一时无法复制的创新。在 big.LITTLE 架构里,处理器可以是不同类型的。传统的双核或者四核处理器中包含同样的 2 个核或者 4 个核。一个双核 Atom 处理器中有两个一模一样的核,提供一样的性能,拥有相同的功耗。

 

ARM 通过 big.LITTLE 向移动设备推出了异构计算。这意味着处理器中的核可以有不同的性能和功耗。当设备正常运行时,使用低功耗核,而当你运行一款复杂的游戏是,使用的是高性能的核。

 

这是什么做到的呢?设计处理器的时候,要考虑大量的技术设计的采用与否,这些技术设计决定了处理器的性能以及功耗。

 

 

在一条指令被解码并准备执行时,Intel 和 ARM 的处理器都使用流水线。就是说解码的过程是并行的。

 

第一步从内存中读取指令,第二步检查和解码指令,第三步执行指令,周而复始。流水线的好处在于,当前指令在第二步的时候,下一条指令已经处于第一步。当前指令在第三步中执行的时候,下一条指令正处于第二步,而下下条指令处于第一步中,如此循环。

 

为了更快地执行指令,这些流水线可以被设计成允许指令们不按照程序的顺序被执行(乱序执行)。一些巧妙的逻辑结构可以判断下一条指令是否依赖于当前的指令执行的结果。Intel 和 ARM 都提供乱序执行逻辑结构,可想而知,这种结构十分的复杂。复杂意味着更多的功耗。

 

Intel 处理器由设计者们选择是否加入乱序逻辑结构。异构计算则没有这方便的问题。ARM Cortex-A53 采用顺序执行,因此功耗低一些。而 ARM Cortex-A57 使用乱序执行,所以更快但更耗电。采用 big.LITTLE 架构的处理器可以同时拥有 Cortex-A53 和 Cortex-A57 核,根据具体的需要决定如何使用这些核。在后台同步邮件的时候,不需要高速的乱序执行,仅在玩复杂游戏的时候需要。在合适的时间使用合适的核。

 

原则上,处理器中复杂逻辑结构越多性能越高,越少则效率越高,指令流水线只是其中之一,包括浮点运算单元,单指令多数据逻辑(SIMD)(比如 ARM 的 NEON 和 Intel 的 SSE/MMX),以及一级缓存二级缓存。

 

每种 Atom 片上系统,Intel 仅提供一种方案,而 ARM 以及芯片合作伙伴提供的芯片则有多种方案可以配置。

 

兼容性

ARM 目前是移动处理器的老大。ARM 的合作伙伴们基于 ARM 的设计向移动和嵌入式市场的出货量已经达 500 亿片。对于安卓,ARM 已然成为标准,这对 Intel 和 MIPS 而言是个问题。

 

尽管安卓的主要编程语言是 Java,开发者也可以使用现有的代码(比如 C 或者 C++)去开发应用。这些固定平台的应用通常都编译成 ARM 处理器的程序,不全都会编译成 Intel 或者 MIPS 处理器的程序。

 

 

为了解决这个问题,Intel 和 MIPS 要使用特殊的转换软件把 ARM 的指令转换成他们处理器使用的指令。这当然是会降低性能的。

 

目前 MIPS 和 Intel 声称兼容 Play Store 里大约 90%的应用。对于最受欢迎的 150 个应用,兼容率是 100%。一方面兼容率很高,另一方面表明 ARM 的主导地位,使得其他的处理器设计者需要提供一个兼容层。

 

小结

制造处理器是一项复杂的业务。ARM,Intel 和 MIPS 都在不懈努力地向移动设备提供最好的技术,而很明显 ARM 是老大。拥有着低功耗,简明的 64 位设计,异构计算,以及作为移动计算的标准,看来 ARM 必能保持其老大的地位。