一样是 ARM 架构,为何苹果行动装置处理器效能就是压下其他人?

浏览量:716 发布于:2020-06-14
一样是 ARM 架构,为何苹果行动装置处理器效能就是压下其他人?

苹果在 2008 年 4 月 23 日,冒着极大风险硬着头皮发表初代 iPhone 的隔年,耗费 2 亿 7,800 万美元,购併了专注开发高效能 Power 处理器的 P.A Semi,组成其处理器研发团队的骨干,然后在 2012 年 9 月发表的 iPhone 5,其心脏「A6」处理器,终于不再使用来自 ARM 授权的核心,採用自家的「Swift」微架构(Micro Architecture)。

再以世界上首款抢滩登陆智慧型手机与平板的 64 位元 ARM 处理器「A7」(Cyclone 微架构)为起点,苹果自家 SoC 开始逐渐展现压倒 ARM Cortex 家族(与躺着中枪的 Qualcomm 自有核心)效能优势,且随着时间演进,差距越拉越开。

一样是 ARM 架构,为何苹果行动装置处理器效能就是压下其他人?

接着,每代 iPhone 发表后,各大科技媒体网站的报导,与底下的读者回应,只会有两种制式的单细胞生物反应:

笔者不啰唆,直接在这里讲结论:

看起来好像微言大义到接近废话的程度?如果你真的这样想,那你就更有继续读下去的必要。

拨乱反正:做为电脑语言的「指令集架构」vs. 执行语言载具的「处理器核心微架构」

近年来拜 ARM 为首的授权 IP 商业模式之所赐,越来越多人搞不懂这两者的差别,完全混在一起,这些年来笔者已经听过太多让人完全笑不出来的笑话,所以在此特别重述一次。

支配智慧型手机市场的 ARM 又是怎幺一回事呢?以 32 位元 ARMv7-A 指令集为例,在手机上常见的微架构(核心),总计有:

换成 64 位元 ARMv8-A,就变成以下场景:

只要作业系统相同(如同版本 Android 或 iOS),这些核心微架构应当正确执行使用 ARM 指令集撰写或编译出来的软体,讲的更专业或更假掰一点,它们拥有相同的应用程式二进位执行档介面(ABI,Application Binary Interface),如同 Intel 与 AMD 的 x86 处理器都应可正确安装 Windows 作业系统,理所当然执行 Office 等应用软体和 Battlefield 等套装游戏。

至于 Qualcomm、苹果和 nVidia,是否根本自身特殊需求,自行定义「非官方」ARM 指令,那就后头有空再讨论了。

高效能之路:让核心微架构同时间内能够有效处理更多的指令

在执行相同指令集「语言」的前提之上,相容处理器的效能要能够胜出,只有微架构设计能否比竞争对手有效处理更多的指令。方向不外乎:

天底下没有白吃的午餐:两种该死的「相依性」

但「指令管线化」与「指令执行平行化」也带来了新的挑战。

资料相依性:当同时执行多个指令,最忌讳遭遇「撞衫」同时存取相同的资料暂存器与记忆体位址,特别是当指令集定义可操作的资料暂存器越少,软体手段可以尽量排除的空间越少,发生的机率也越高。

然后根据分支预测结果而先斩后奏「预测性执行指令」(Speculative Execution),是分支预测与非循序指令执行的结合体。总之,我们尽其所能的让管线「顺畅」的像生产线不停的运转,实现最高的指令执行效率。

理所当然的,指令管线越深,一旦「筊杯」失败,要复原管线并恢复指令执行的代价,也越像火烧摩天楼一样恐怖,这也是高时脉深管线近年来不太受欢迎的另类主因,因为现实世界的应用程式,其实有很多难以预测的分支行为,越高的「代价」,更意味着更差劲的「效能/功耗」比。

LLVM 开发环境参数透露的神祕讯息

讲了那幺多原理,苹果从来不公开自主微架构的技术细节,那该如何掌握他们追求高效能的设计方向?

2014 年初,当多数世人正「惊呆」A7 的 64 位元与惊人的性能表现时,有人注意到苹果提交的 LLVM 原始代码,不仅透露了微架构代号是「Cyclone」,更包含众多重要的规格参数:

一样是 ARM 架构,为何苹果行动装置处理器效能就是压下其他人?

在当时,这是非常惊人的规格,就算摆在今天也是同样骇人,可同时处理的指令是同时期 ARM 核心足足两倍(即使 64 位元的 Cortex-A57 也只能 3 个指令),非循序指令执行引擎的「深度」则是 Intel Haswell 等级,指令管线深度则中规中矩的维持在 16 阶这一般水準。

相信有些读者早已从其他网站看过相关的报导,但有个「江湖传言」倒是值得注意:部分开发 iOS 应用程式的程式设计者,做了一些指令输出率的实验,察觉到「A7 一旦执行 32 位元程式码,指令输出率就腰斩了」,这个「特性」一路延续到 A10,直到 A11 根本没有 32 位元应用程式可执行为止。

后来苹果当然就没有继续「规格大放送」,Wiki 上苹果处理器的规格表,一路从 A7 到 A11,都是维持这些数字,有没有经过实测考验也不得而知,反正就大家一起无限迴圈继续惊呆,苹果持之以恆的甩开和其他竞争者的差距。

唯一可以确定的是,笔者在自己的 iPad Pro 9.7 吋 A10X 上,透过配对简单指令,测出每个时脉週期可同时输出「4 个整数,2 个浮点,2 个记忆体载入」的可怕性能。此外,A10X 与 A11 放弃第三阶 4MB 快取记忆体,而以大型化第二阶 8MB 取而代之,也暗示了苹果极可能在快取记忆体技术有了重大的突破,可兼顾高容量与低延迟。

A11?笔者没有 iPhone 8 和 iPhone X 可用,有机会再测测看。

让我们重新画出命案现场的人形粉笔圈,归纳出苹果的产品设计取向:

ARM 指令集走向 64 位元带来的重大改革

让 ARM 指令集迈向 64 位元的 ARMv8-A,并非只有「将整数逻辑暂存器宽度延长到 64 位元」和「提供 64 位元记忆体定址空间」这幺简单,抛弃昔日专注于嵌入式应用的遗产,更加的简洁优雅,更利于打造高效能微架构,引领 ARM 荣登高效能的天堂,是这次指令集改版最神圣不可侵犯的绝对使命。

一样是 ARM 架构,为何苹果行动装置处理器效能就是压下其他人?

ARMv8-A 修订项目极多,但就笔者的角度,除了取消「加速重建储存 CPU 状态的 Context Switch 相关机制」(一堆就今日观点实在很小家子气的技术),和简化例外处理与执行特权阶层外,最重大的改革,只有两项:

其中又称为「引述式执行」(Predicated Execution,或 Guarded Exectuion)的后者,目的在于减少程式中的分支,指令集提供简单扼要的条件执行指令,一次做完所有事情。

直接举例比较快。原本一个简单的 If-Then-Else 循序条件判断,会需要等待确认条件结果,或着强行进行分支预测,管线才会继续动作:

就变成这样:

有没有感觉简洁多了?讲的玄一点,条件执行的中心精神在于「将控制相依性转化为资料相依性」。

然后有鉴于过去的应用程式,在这种 If-Then-Else 的条件判断中,有 60% 都是资料搬移指令,这也是为何指令集「事后」扩充条件执行功能,如 DEC Alpha、MIPS、甚至 x86,都以「条件搬移」(Conditional Move)为主。

以 Alpha 为例,其指令格式统一为 cmovxx(xx 代表条件),一个简单的条件搬移:

可以透过新指令,简化如下:

在 ARMv8 之前,整套 ARM 指令集每道指令,都包含了 4 位元的条件码,必须符合「某个条件」才会执行指令。如条件成立,执行此指令并写回运算结果。反之,指令执行结果无效,或不予执行。

回到原点,条件执行的优点很明显:

但为何 ARM 要取消看似完美的条件执行?

提高打造高效能非循序指令执行引擎的複杂度,在管线前端就要「预锁」后面所需要的相关资源,也增加后方需要「更名」的暂存器,更不利提升时脉。A11「极可能」是纯 64 位元的微架构

可确保处理器正确执行所有软体的指令集回溯相容性,是商业上的「资产」,但也是设计处理器微架构的「包袱」。

我们有非常充分的理由相信,苹果急着驱离「32 位元低阶应用程式」,就是为了其处理器全力针对 64 位元最佳化造桥铺路,而 A11 如此惊世骇俗的效能表现,除了它根本是纯 64 位元处理器,所有电晶体预算都砸在提升效能的刀口上,没有其他合理的解释了(新的异质多处理器排程也有影响,但没那幺绝对)。「就算」A11 具备 32 位元相容性,其性能表现恐怕也仅聊胜于无,不足挂齿。

无独有偶,Qualcomm 企图抢攻伺服器市场的 Centriq 2400,也是纯 64 位元的设计,这就是 ARM 制定 64 位元指令集扩充时,最希望看到的结果:雨后春笋般的高效能产品。

同场加映:Mac 改用自家晶片的可能性

关于这个「年经」(每年发表一支新 iPhone)议题,笔者不会赌上爷爷的名誉做不负责任的推论,但只留下两个留待读者思考的问题:

Mac 是否改用苹果自家晶片这档事,并不只是「效能够好」就可以一笔轻鬆带过的大哉问,请各位多多考量商业层面的因素。

苹果同时掌握软硬体的「不公平竞争」

最后,再重新贴出本文标题的答案:

「藉由牢牢把持软硬体平台的『封闭性』先天优势,苹果掌握了 ARM 指令集迈向 64 位元带来的机会,打造出一系列同时间能够有效处理更多指令的先进微架构。」

这「一体成形」的绝对优势,在可见未来的深度学习之路上,会更加的牢不可破,这就是苹果在 iPhone 前景未明之际,就胆敢购併 P.A Semi 投资未来,所得到的丰硕成果,就算你不喜欢「果粉」,你也不能不佩服贾伯斯的远见。

至于 P.A Semi 究竟干过哪些值得苹果冒险的好事,等以后有机会,再好好谈谈,如果真的还有机会。