严格说来,苹果很可能是计算机工业史上,唯一一间核心元件平台“搬家成功”的公司,且还是骇人听闻的“孟母三迁”(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 的连接埠和蝶式键盘),我们应该还有得等,或许永远等不到也说不定。
(首图来源:苹果)