严格说来,苹果很可能是计算机工业史上,唯一一间核心元件平台「搬家成功」的公司,且还是骇人听闻的「孟母三迁」(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 腰斩而停摆。
- 从 Power Mac G5 回顾 RISC 与 CISC 处理器的战争
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,真不愧「皇冠上的宝石」之誉。
- 一样是 ARM 架构,为何苹果行动装置处理器效能就是压下其他人?
从 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 处理器效能军备竞赛,苹果自家晶片目前顶多勉强与桌机处理器「平起平坐」的性能水準,是否足以填补转换的损耗,并确保同样良好的使用者体验?
- 地利:苹果是否愿意放弃吸收 Windows 用户的机会?别忘了全球个人电脑出货量,苹果占有率只有 7%。
- 人和:Mac 用户已非弱势族群(尤其年轻学生),开发者社群规模更是急速膨胀,硬着头皮转换下去,会不会动摇国本?
或着,也许苹果根本就不在意要不要转换,ARM 的 MacBook 锁定完全不同的应用与客群,可是这样一来,这跟搭配键盘「同为生产力工具」的 iPad 该如何区隔?
- iPad Pro 真的适合当工作机吗?
决定这问题的答案,恐怕只有苹果是否打算让 macOS 和 iOS 合而为一,依照这间公司的谨慎行事风格(除了 MacBook 的连接埠和蝶式键盘),我们应该还有得等,或许永远等不到也说不定。