平台转换难度高?苹果自家 ARM SoC 取代 x86 处理器卡在哪?

严格说来,苹果很可能是计算机工业史上,唯一一家核心元件平台「搬家成功」的公司,且还是骇人听闻的「孟母三迁」(6502→68K,68K→PowerPC,PowerPC→x86),反观历史更多尸横遍野的失败案例。单从这点就足以感觉到这浩大工程一点都不简单,建造困难度甚至直逼世界奇观等级。

高科技产业也有「孟母三迁」

1977 年,「开启个人电脑革命」的 Apple II 使用 8 位 6502 处理器,任天堂红白机 Ricoh 2A03 是「远亲」,超级任天堂 65C816 则是 16 位版的 6502。

1984 年,苹果第一台 Mac 个人电脑采用 32 位 Motorola 68000 处理器,有点年纪的电玩狂热者应该也依稀记得,1980 年代大量家用游戏主机(如俗称「Sega 五代」的 Mega Drive 和贵到爆炸的 SNK NeoGeo)与大型电玩街机的心脏,就是 68K 系列处理器,创造 SPARC 和 Solaris 的商用 Unix 王者 Sun、象征 MIPS 的绘图霸王 SGI、乔布斯被苹果开除后创办的 NeXT,最早也都是选择 68K 当引擎,而不是 IBM PC 看起来超像丑小鸭指令集架构又「毫无道理可寻」的 80×86,更无人预见假以时日 x86 不再是昔日吴下阿蒙的未来。

1994 年,苹果、IBM、摩托罗拉三家结盟,成立看起来很像美军空对空导弹型号的「AIM 联盟」推动 PowerPC,当时陷入市场危机(那时惨到坊间不乏「苹果转型为纯软件公司」呼声)的 Mac 也随之改用 PowerPC 处理器,趁机搭上 IBM 积极发展 Power 的顺风车。

2003 年苹果推出搭载 PowerPC 970(衍生自原生双核的 64 位 IBM Power4)的 PowerMac G5,2004 年 PowerMac G5 / Xserve G5 / iMac G5 升级为 90 纳米制程的 PowerPC 970FX,2005 年再改进为原生双核心的 PowerPC 970MP,但也就止步于此,因为这些来自 IBM 或摩托罗拉的高性能 PowerPC「无法满足笔电需求」,当初许诺 PowerMac G5 上市后 12 个月处理器时脉可达 3GHz 的支票也跳票,就算画大饼的产品时程表,跟着英特尔一起三太子上身狂冲时脉也无济于事,高阶 PowerPC 随着 970GX 腰斩而停摆。

2005 年,因「对 IBM 产品开发进程失望」,乔布斯在 WWDC 正式宣布平台转移计划,从 PowerPC 转进英特尔 x86 处理器,第三次更改旗下产品的处理器架构,2006 年陆续推出「Intel Inside 但机壳从来没有出现这张贴纸」的 Mac 产品线,IBM「Power Everywhere」战略从此失去最大的盟友,寄望苹果成为「分母」分摊高阶处理器研发成本的如意算盘成为空响,而威镇四方的 Power5 核心也无缘帮助苹果缔造 SPEC CPU 效能数据的新高峰。

无独有偶,2005 年正是英特尔以 P6 血统的 Merom 微架构当作攻击发起线,对 AMD 发动帝国大反击的关键时刻。

不起眼的绽放结晶,逐渐茁壮成皇冠上的宝石

2008 年,第一代 iPhone 才刚问世没多久,苹果就以 2.78 亿美元代价,收购半导体设计公司 P.A Semi,但 2007 年 iPhone 销售额仅占不到苹果全年营收 1.4% 的 3.67 亿美元,无论怎么看,这赌注实在有点太大。

2010 年,iPhone 4 与第一代 iPad 的 A4 处理器,总算让苹果的投资没有白白丢到水里,而接着十年,一代又一代苹果 Ax 家族应用处理器,一再一再以惊异的性能表现震惊业界,如果说苹果是手机与平板世界的国王,iPhone 和 iPad 就是皇冠,这些苹果自家打造的 SoC,真不愧「皇冠上的宝石」之誉。

从 2013 年「业界首颗 64 位移动处理器」A7 诞生一路到 2020 年今日,「改用 ARM 处理器的 Mac」就像流感,每隔一段时间就在各大科技媒体「集体发作」,但也一直停留在臆测和谣言,就像传说中的尼斯湖水怪,迟迟没有成为呈现在世人眼前的现实。

「无痛转换」从来就不是容易的事

更换处理器架构看似容易,但资产和包袱往往是硬币的两面,确保现有应用软件依旧可用并逐步移转到新架构,才是真正的大难题。

相信很多人在认识「虚拟化」之前,很可能就因琳琅满目的游戏机模拟器,就听过 Emulator(模拟器)与 Simulator(仿真器)这两个难以理解差别的专有名词。讲简单点,Emulator 主要是完全模拟 CPU 的运作方式,根据程序计数器(Program Counter)的值,从内存中获取指令,进行解码并执行,而 Simulator 则是模拟系统的行为模式,例如模拟飞行中的驾驶舱按钮与仪器。很明显的,要转换「电脑最基础语言」的指令集架构,需要的就是前者。

但随着 CPU 架构越来越复杂,指令数越来越多,要通过程序模拟 CPU 也越来越艰难(当年英特尔在 1990 年代初期开发 Pentium Pro 时,模拟验证一个指令的时间竟然长达「一天」,那时 x86 指令集已经有将近 300 个指令),而反复模拟一个接一个指令的「读取→解码→执行」流程,更不可能带来能接受的执行性能,也因此,将二进位代码「动态翻译」为另一种指令集执行顺序的 Binary Translation(二进位转译),变成最为可行的手段,想的单纯一点,就好比一段不包含分支的基本程序区块(Basic Block),转换编译成新指令集的二进位代码,并「快取」起来以便日后重复使用。

当然,这绝对是极度耗费系统资源的过程,也势必牺牲部分性能,但总好过一个一个指令慢慢跑,苹果早在 68K 转 PowerPC 时就导入这技术,资深果粉耳熟能详的「Rosetta」则是 PowerPC 转 x86 的二进位代码转译器。

同场加映一下其他摄影棚的剧情,x86 指令集支持硬件虚拟化(Intel VT-x,AMD-V)出现之前,「全虚拟化」(Full Virtualization)的 VMware,特技就在VMM(Virtual Machine Monitor)「拦截」能在使用者模式(User Mode)更动底层系统状态的「危险」x86 指令,再用 Binary Translation 替换成「人畜无害」者。

所谓的 x86「硬件辅助虚拟化」(Hardware Assisted)技术基础原理,关键在于新增特权层级(Root Mode Privilege Level),让这些没有完善定义、难以虚拟化的 x86 指令一执行就「触发」处理器的设陷(Trap)机制,再让 VMM 处理,近似近代多工作业系统的例外处理机制,进而简化虚拟机管理者(Hypervisor)的架构与复杂度,也借由原生执行大多数指令以改善整体性能,无需像「半虚拟化」(Paravirtualization)方案,需更新操作系统使之「意识」到下面还有一个虚拟机管理者。

试图消灭 80×86 的努力

1996 年,也是当 Windows NT 操作系统同时支持不同 RISC 指令集时,DEC 发表了 FX!32 转译器,让执行 Windows NT 的 Alpha 系统可执行 x86 平台的 Win32 应用程序,虽然号称「可达到原生 40%~50% 性能,最佳化后 70%,然后同时期 Alpha 享有压倒性的时脉优势,足以抵消转译损耗而有余」,但笔者亲身在 COMPUTEX 会场的某摊位一亲芳泽的使用者体验却不是这么回事,印象大概就是日本人对新世纪福音战士某些「静态」场景的评价——「动画是会动的画面,但好像也有不会动的」,希望那只是偶发当机,不是真实性能。

但回过头,如果时间可以重来,英特尔和 HP 知道日后可掌握「1992 年就以原生 64 位问世,比我们手上曾经拥有的任何东西都还好」的 Alpha 处理器,放弃硬着头皮发展 IA-64 指令集和 Itanium 处理器,顺水推舟延续 DEC 的遗产,x86 指令集会不会就此逐渐消逝于服务器与个人电脑的世界,还真的是个超级大哉问。

说到 Itanium 就不得不提到 IA-32EL(IA-32 Execution Layer),英特尔在初代 Itanium 处理器「Merced」(因近似 Mercedes Benz,常戏称为「英特尔的 64 位豪华房车」)耗费 30% 电晶体总数,只为了「硬干」出性能不彰的 x86 相容性,还牺牲了日后支持新型 x86 指令(像持续膨胀的 SSE)的弹性,变成 Itanium 要「下放」到中低端服务器市场的障碍。2004 年,英特尔被迫转向纯软件的动态二进位转换方案。

如同日后的苹果 Rosetta,IA-32EL 并非一个一个转译单一指令,而是将代码的基本区块(Basic Block)直接转换为对应的 IA-64 指令顺序,这称为「Cold Code Translation」。此外,IA-32EL 会收集所有基本区块的执行频率,针对常用部分,依据 IA-64 指令集的特性及基本区块间的条件关联,再进行一次最佳化转译,并储存于主内存供日后重复使用,称为「Hot Code Translation」。总之,IA-32EL 号称可让 Itanium 2 处理器执行 x86 应用程序时,得到和同时脉 Xeon 相当的效率,而软件手段也确保日后持续支持新增 x86 指令的弹性。

换言之,RISC 的主要精神之一「Make The Common Case Fast」并非只限硬件,软件也一样,而工作和生活又何尝不是如此?所以「可让我们经常碰到的日常工作跑得更快」的 80×86 就活下来了,Alpha 和 Itanium 只能成为历史遗迹。

想偷吃豆腐却偷鸡不成蚀把米的勇者

既然二进位转换「蕴藏」了「捞过指令集边界」的无穷潜力,除了应用在自家进行指令集转移(像苹果的孟母三迁、DEC 从 VAX 转 Alpha、HP 从 PA-RISC 转 IA-64、英特尔从 x86 转 IA-64、SGI 从 MIPS 转 IA-64),自然吸引众多有志之士「吸纳」其他平台应用软件资源,企图「鸠占鹊巢」取而代之。

苹果 Rosetta 技术基于 Transitive 的 QuickTransit,但早在 2004 年,这家公司的技术已应用在 SGI 的 Prism 虚拟化平台,让执行于 Linux 操作系统的 Itanium 2 平台可延续 MIPS 处理器/IRIX 操作系统的应用程序。苹果之后,IBM 也在 2006 年 8 月与 Transitive 结盟,让 x86 / Linux 应用程序搬到 Power 系统(PowerVM Lx86)。

2006 年 9 月秋季 IDF(Intel Developer Forum),英特尔拉着「Itanium 解决方案联盟」发表 ISV Platform Expansion Program,通过 Transitive 的 QuickTransit,推动既有使用 SPARC 处理器/Solaris 操作系统的用户,转移至 Itanium / Linux 平台,狂挖 SPARC 阵营墙角。不过很讽刺的,同年底的「SPARC / Solaris 转移到 x86 / Linux 方桉」似乎比较让人感到兴趣。

洋洋洒洒一大串,以上这些捞过界的「努力」,纯粹以结果论而言,统统没有成功。Transitive 在 2009 年 6 月被 IBM 收购,成为 Power 系统部门的一部分,硕果仅存剩下 PowerVM Lx86,苹果也在 2011 年完成从 PowerPC 到 x86 的转移工程,MacOS X Lion 时取消了 Rosetta。

至于在这段众人一头热于「帮别人搬家到我家」的浪潮中,最骇人听闻的八卦,莫过于 IBM「eCLipz」计划:以超高时脉的 Power6 为起点,将诞生于 1964 年 S/360 的大型主机家族转移到 Power,事后证明还好 IBM 没有想不开进行如此明显的自杀举动,否则很多银行大概会抖很大。

倒是有条线索值得静观其变:Transitive 的旧有团队成员,散布在以下 3 个地方。

BBC(英国广播公司):BBC Micro 电脑是 ARM 第一个客户,ARM 最初就是为 BBC Micro 及后续型号设计的。ARM:这就不需解释了,这家公司不会放过挖 x86 墙角的任何可能。苹果:各位,难道你们没有闻到一股可疑的味道吗?

「天时」「地利」「人和」三者兼备了吗?

「苹果用自己的 SoC 取代英特尔 x86 处理器」越看越像真的,比谣传已久、众人言之凿凿的美军 8 倍音速侦察机「SR-91 极光」更确实,但整件事情有这么单纯吗?

天底下任何奇迹和惨剧,都是天时、地利、人和三者兼备的结果,为什么当年苹果可从 PowerPC 顺利转换到英特尔?

天时:英特尔正集中资源在兼具高性能低功耗 x86 处理器的研发,准备狠狠反击 AMD,这让苹果无需担忧 CPU 效能不足以吸收转换损耗,和 CPU 过热塞不进笔电的老问题。

地利:苹果手握封闭平台的优势,但又可以趁机抢夺 Windows 用户。Xcode 2.1 提供产生通用二进位(通吃 PowerPC 和 x86)执行档案的功能,主流应用程序纷纷采用这种方式发表,也降低了转换门槛。

人和:那时 Mac 用户是弱势族群,冲第一个的白老鼠用户也比较能忍受可能造成的不便,软件开发者规模更远远不如现在,并没有太沉重的历史包袱,Macbook 销售爆发与开发者人数激增,基本上是 2008 年夏天完成平台基本转换、iOS 2.0 登场后的结果。

各位可能很难想像 20 世纪初期苹果有多么「毫不强势」,笔者任职某 IT 周刊期间,借测了不少苹果大产品,从 PowerMac G5 到双核心版到 Xserve G5 甚至 Xserve RAID,每次苹果原厂都是派两三个人来现场支持,这在今天根本想都不用想。

即使万事皆备,巨大的转换工程也是从 2005 年一路到 2011 年才功德圆满。那么,当下苹果是否具备同等的条件?

天时:英特尔正准备脱下裤子跟 AMD 拼了,我们几乎可预期又将再度重演激烈程度回归 1990 年代末期到 21 世纪初期的 x86 处理器性能军备竞赛,苹果自家芯片目前顶多勉强与 PC 处理器「平起平坐」的性能水准,是否足以填补转换的损耗,并确保同样良好的使用者体验?

地利:苹果是否愿意放弃吸收 Windows 用户的机会?别忘了全球个人电脑出货量,苹果占有率只有 7%。

人和:Mac 用户已非弱势族群(尤其年轻学生),开发者规模更是急速膨胀,硬着头皮转换下去,会不会动摇根本?

或着,也许苹果根本就不在意要不要转换,ARM 的 MacBook 锁定完全不同的应用与客户群,可是这样一来,这跟搭配键盘「同为生产力工具」的 iPad 该如何区分?

决定这问题的答案,恐怕只有苹果是否打算让 macOS 和 iOS 合而为一,依照这家公司的谨慎行事风格(除了 MacBook 的连接口和蝶式键盘),我们应该还有的等,或许永远等不到也说不定。