【引】enjoy 地铁上的阅读时光,偶遇一篇好文“through-the-ages-apple-cpu-architecture”,遂编译成文,与大家分享。
苹果公司是第一家市值达到 1T美元的企业。通过像 iPod/iPhone/iPad 这样的热门产品,无与伦比的品牌,以及史蒂夫・乔布斯的现实扭曲场,成功地让科技变得很酷。
在这令人印象深刻的执行力背后,是近乎痴迷的硬件优化: 自 1984 年 Mac 发布以来,苹果已经三次CPU 架构的迁移。这不是一件容易的事。每当一家计算机公司宣布 CPU 体系结构迁移时,人们普遍怀疑该公司是否能够在整个软件生态系统一次性遭到弃用的情况下生存下来。在软件还是装在纸板箱里的日子里,这种怀疑几乎到了难以置信的地步。
苹果是无可争议的 CPU 架构迁移之王。在短期内对痛苦的容忍让他们掌握了处理器的游戏。每一个新的 CPU 架构都使得苹果能够在生存威胁面前保持竞争力,或者将自己置于竞争对手之上。
本文将着重介绍苹果公司的业务背景,为什么每次迁移都是必要的,并展示苹果如何在每次迁移中幸存下来,最终变得比以前更加强大。
1. 摩托罗拉 68k:1984 年那时候,苹果公司正步履蹒跚。它早期突破性的成功和摇钱树,1977 年苹果 II 的沃兹尼亚克魔法,在它的年龄下摇摇欲坠。
IBM 个人电脑刚刚进入大众市场,促使前所未有的个人电脑采购订单大量涌入。24 岁的天才比尔・盖茨受邀为 IBM 公司提供操作系统。5 年来,史蒂夫・乔布斯被董事会降级,负责低端的Macintosh电脑项目。
1.1 选择 CPU乔布斯领导下的Macintosh电脑最初是廉价的大众市场消费产品,后来转而专注于一件事: 抢走 LISA 团队的风头。乔布斯为Macintosh电脑引入了一种尖端的完全不是偷来的图形用户界面,并要求他的团队找到当时可用的最先进的硬件。
如果想在个人电脑领域有所作为,对 CPU 的选择是至关重要的。这是操作系统赖以生存的硬件,也是培育软件生态系统的平台。
非常早期的个人电脑(像沃兹尼亚克这样的业余爱好者在他们的车库里组装的那种)使用的是 8 位 CPU。但是如果在 1980 年代早期设计一个强大的大众市场计算机,要使用现代的 16 位处理器架构。实际上有三个主要的选择: 英特尔 8088,Zilog Z8000,或摩托罗拉 68k。这里,8 位和 16 位是指 CPU 使用的寄存器和数据总线的大小,或者以比特位为单位的 “宽度”。
1.2 中央处理器和寄存器CPU 是一种将数据从计算机内存 (RAM) 转移到寄存器中的设备,对这些数据执行操作,然后将输出转移回内存中。
寄存器是电子存储器中最小的单元,每个寄存器在中央处理器的核心只容纳几个比特位。CPU 按照指令 (计算机程序) 对这些数据执行操作ーー处理比特位 (1 和 0)。
这些操作由算术逻辑单元 (ALU) 执行。这基本上是执行简单、专业工作的电路集合,例如:
把二进制数相加,例如 0010 + 0101 = 0111执行逻辑运算,例如 NOT 0000 = 1111移位,例如左移 0011 一个位就变成了 0110CPU 的控制单元一次解码一条指令,以决定哪些数据应该移动到哪个寄存器,哪个寄存器的数据应该通过哪个 ALU 电路。
多次、非常迅速地执行这些操作,最终得到的输出结果包括矩阵乘法、视频游戏中的碰撞物理,或将图像数据栅格化为屏幕上的像素。
1.3 8位和16位那么为什么比特位宽很重要呢?
一个 8 位的 CPU 可以在一个时钟周期内对 0010110 位执行 NOT 操作,将其位数反转为 1101001 位。一个 16 位的 CPU 可以在同样的时间内将 10100100010110 转换成 01011001101001。
此外,一个 8 位寄存器可以指向 RAM 中的 28 个不同字节的 “地址” ーー只有区区 256 个地址,我们可以在其中查找数据。由于这个限制,大多数 8 位计算机需要两个寄存器来存储内存地址。16 位寄存器,或者两个 8 位寄存器相互堆叠,可以指向 216 个内存地址,这意味着可以访问 64kb 的内存。
当从 8 位 (1 字节) 升级到 16 位 CPU (2 字节) 时,Endian-ness 成为主要的兼容性考虑因素。系统要么是big-endian,要么是little-endian,后者定义了它们存储字节的顺序ーー例如,数字 41,394 以十六进制的方式存储在寄存器中,在big-endian系统中是 A1 B2,在little-endian系统中是 B2 A1。
最后,“数据总线” 指的是连接 CPU 和主存的电路, 16 位总线在读写内存数据方面的速度基本上是 8 位总线的两倍。
1.4 选择哪种芯片架构?在1980年代初的微处理器市场中,Intel 8088 是最具影响力的一款芯片之一。它是一款 8/16 位处理器,拥有 8 位寄存器和 16 位数据总线,支持 20 位内存寻址,最大可访问 640KB 内存。由于 IBM PC 采用了这一架构,使得它拥有了一个强大且成熟的软件生态系统。此外,英特尔凭借其巨大的生产规模,使这款芯片在1983年的价格低至约 35 美元,极具成本优势。该芯片采用 little-endian 字节序,进一步影响了后续 PC 兼容平台的设计方向。
与此同时,Zilog 推出了 Z8000,这是一款纯 16 位的微处理器,配备了 16 位寄存器和 16 位数据总线,支持 23 位地址空间,最多可使用 8MB 内存。然而,尽管 Z8000 在技术上表现不俗,却未能获得广泛采用。它的架构缺乏主流厂商的支持,软件生态也非常有限。在1983年,Z8000 的价格约为 55 美元,处于中等价位区间,Zilog 希望通过这一价格策略来扩大市场份额。该芯片采用 big-endian 字节序,在系统设计上具有一定优势,但最终并未形成广泛的行业影响力。
相比之下,Motorola 68000(简称 68k)则代表了当时更高性能的选择。它是一款 16/32 位混合架构处理器,拥有 32 位寄存器和 16 位数据总线,支持 24 位内存寻址,理论上可访问高达 16MB 的内存。这一特性在后来 Macintosh 的设计中变得尤为重要——Mac 系统将最大的 12MB 内存预留给操作系统,而仅用 4MB 来运行应用程序。Motorola 68k 的架构也得到了一定数量的开发支持,尤其是在苹果早期产品如 Apple I 和 Apple II 中已建立了合作关系。1983 年时,68k 的价格约为 70 美元,属于中高端市场定位,同样采用 big-endian 字节序。
尽管 Motorola 68k 的软件生态系统相比 IBM PC 所使用的 Intel 架构较弱,但这种牺牲被认为是实现品牌差异化所必须的。更重要的是,68k 拥有一个几乎完全正交的指令集——这意味着几乎每条指令都可以作用于几乎所有寄存器,而不像其他许多 CPU 那样对某些寄存器有特定限制。这种正交性大大简化了编程难度,非常适合培育初期的软件生态。从长远来看,这也成为了它吸引开发者的一个关键优势。
2.PowerPC: 1994年那是 1994 年, 史蒂夫・乔布斯 8 年前被苹果公司解雇,现在正忙于发明皮克斯和 NeXT。苹果正在变得无足轻重。原来的 PC 竞争对手 IBM 正在经历一个漫长而痛苦的过程,他们的午餐被微软吃掉了。
上世纪 90 年代,英特尔和比尔・盖茨缔结了一桩被称为 Wintel 的邪恶婚姻,在两家公司都获得了近乎垄断的地位。除了不断改进他们强大的 x86 芯片架构,英特尔给他们的芯片起了一个很酷的名字。奔腾处理器为微软的市场份额提供了动力。这并不是要贬低 x86 芯片架构的威力,英特尔凭借 100mhz 的时钟速度和无与伦比的电源效率赢得了统治地位。上世纪 90 年代,使用 68000 芯片的摩托罗拉公司没能跟上苹果电脑的步伐。
在计算机世界面临垄断威胁的情况下,苹果与其长期合作伙伴摩托罗拉以及一个不太可能的盟友 IBM 联手。计划是: 用友谊的力量对抗资本的力量。
AIM (苹果,IBM,摩托罗拉) 联盟诞生了。他们意识到 x86 架构有一个关键的弱点: 它使用了 CISC 架构。作为回应,AIM 采用了一种 RISC策略: PowerPC。
2.1 CISC 与 RISC有两种相反的芯片设计理念:
CISC (复杂指令集)RISC (精简指令集)每个 CPU,受到其电路的实际物理布局的限制,可以执行有限数量的不同操作。这些单独的操作由汇编语言 (也称为机器码) 表示。该代码作为二进制指令序列输入处理器,并按顺序执行。
这两个思想流派导致了制造微处理器的不同方法:
CISC 接受一个复杂的指令集来继续向您的 CPU 添加功能。最终,我们获得了用单个指令执行复杂的多步处理的能力,例如著名的求值多项式指令 POLY。虽然这听起来很神奇,但这也意味着许多内部状态由处理器控制ーー如果发生任何错误,性能将受到毁灭性的打击。RISC 采用 “KISS”方案。CISC 的最大陷阱是开发人员的复杂性。为 CISC 架构编写程序的编译器工程师必须查阅 500 页的手册,才能找到他们可能需要的指令,而 RISC 工程师则对大脑中的 60 多条指令高兴不已。2.2 Pipeline传输要真正了解 RISC 带来的主要性能提升,需要通过查看获取-解码-执行周期来理解流水线。简而言之,在一个时钟周期内 (一个操作在 CPU 上执行的时间) 要完成以下三件事之一:
Fetch: CPU 从内存中获取下一个机器代码指令。解码: 中央处理器的控制单元解释的指令,以工作,它实际上做什么。执行: CPU 执行指令,即在寄存器和内存之间移动数据,或通过逻辑单元推送位。当 CPU 使用更简单的 RISC 指令集时,这些步骤各占用一个周期,可以并发地排列这些操作。在每个时钟周期,可以得到 3 个指令运行,并行导致 (平均) 每个时钟周期执行一个机器码操作。
当使用 CISC 时,每个步骤可能不会采用一致的指令周期。对于 POLY 操作,对于 x2 表达式,单独的执行步骤可能需要 10 个周期。在 CISC 中,很难让操作很好地排列起来,因此很难在复杂的指令上获得良好的性能。
简而言之,流水线是并发地交织这些指令的概念。
2.3 为什么 CPU 体系结构迁移很困难?苹果和 AIM 联盟策划了他们的计划。PowerPC 是一种现代的精简指令集微处理器架构,旨在与占主导地位的 Intel x86 架构直接竞争。
PowerPC 承诺提高效率,也就是说,每瓦特电能可以产生更多的 CPU 操作。而且由于苹果同时控制软件和硬件,可以针对这种处理器架构优化 Mac OS。现在只需要迁移他们的生态系统。
为一个处理器编写的软件不一定在另一个处理器上运行。不同的处理器系列自然包含不同的指令集,即定义每个 CPU 操作的汇编指令列表。
下面是一段摩托罗拉 68k 的汇编代码:
代码语言:javascript代码运行次数:0运行复制MOVE.L $1000, D0 ; Load longword from address $1000 into data register D0
MOVE.L $1004, D1 ; Load longword from address $1004 into data register D1
ADD.L D1, D0 ; Add the values in D0 and D1, result stored in D0
MOVE.L $1000, D0 ; Load longword from address $1000 into data register D1
NOT.L D1 ; Invert all bits in D1现在,下面是 PowerPC 汇编代码的样子:
代码语言:javascript代码运行次数:0运行复制lwz r3, 0x1000 ; Load word from address 0x1000 into register r3
lwz r4, 0x1004 ; Load word from address 0x1004 into register r4
add r5, r3, r4 ; Add the values in r3 and r4, result stored in r5
lwz r3, 0x1000 ; Load word from address 0x1000 into register r3
not r4, r3 ; Invert all bits in r3 and store the result in r4由于机器指令本身是不同的,苹果生态系统中的所有现有软件都需要重新编译,在某些情况下还需要重新编写,以便在 PowerPC 机器上运行。
2.4 PowerPC 的过渡苹果公司制定了两项策略来应对这种转变:
开发了一个模拟器,PowerPC 可以在其中模拟 motorola CPU。这可以实时地将指令从一个指令集架构转换到另一个。毫不奇怪,这会带来巨大的性能成本。幸运的是,由于 PowerPC CPU 非常强大,对于正在升级硬件的用户来说,模拟通常不是一个大问题。苹果采用的另一个策略是在过渡期间对软件使用 “胖二进制文件”。这允许软件包含为 68k 和 PowerPC 架构编译的代码。因此,工程师可以通过包含两个独立的二进制文件来发布一个可以在两个 Mac CPU 平台上运行的应用程序。在那个时代,80mb 是一个相当不错的硬盘驱动器,这是相当恼人的,所以一个二进制剥离工具产生了,最终用户只需要保存在在自己设备上工作的那一个。
总的来说,苹果的迁移是成功的。从 68k 升级到 PowerPC 极大地提高了性能。模拟和胖二进制文件允许软件生态系统顺利过渡。
不幸的是,Wintel 联盟几乎没有受到影响。随着奔腾和 windows95 的发布,它们的市场主导地位达到了前所未有的水平。Windows 成为默认的计算平台,悲剧性地将世界各地的学校资讯及科技课程转变为 “如何使用微软 Office”。
现在他们有了坚实的硬件平台,苹果陈旧的 System 7 Mac OS 成为了主要的阻力。打造 Windows 现代竞争对手的内部项目已经失败,这意味着收购是摆脱困境的唯一途径,需要购买一款新操作系统。
这为苹果收购 NeXT 和史蒂夫・乔布斯的回归奠定了基础。
3.英特尔 x86: 2006 年到了 21 世纪初,乔布斯再次成为 CEO,iPod 将一家市场份额仅为个位数的苦苦挣扎的电脑公司变成了一家消费电子巨头。
在 80 年代、90 年代和世纪之交,桌面电脑占据了主导地位。但随着摩尔定律不可阻挡地向前推进,电子产品正在小型化,笔记本电脑正在成为大生意。当硬件没有连接到电源,电池就成了瓶颈。随着对性能每瓦特的关注,有一件事情在 2000 年代初期变得清晰: PowerPC 架构无法跟上 Intel x86 巨兽的步伐。
英特尔只是在执行、制造和研发方面超过了竞争对手。他们庞大的 Windows 硬件安装基础为兼容软件提供了一个无与伦比的生态系统,并印制钞票进一步投资于深化英特尔处理器技术的护城河。
2000 年代早期的 PowerPC CPU 消耗了太多的电能,产生了太多的热量,以至于无法制造出乔布斯所设想的超薄 MacBook Air。由于超过 50% 的收入来自笔记本电脑,苹果的决定很明确: 为了竞争,苹果不得不转向英特尔。
3.1 WWDC 2005史蒂夫・乔布斯在 WWDC 2005 上宣布从 PowerPC 转向英特尔,全球开发者大会上做了最好的解释:
“两年前,我站在你们面前,向你们承诺一台 3 Ghz 的 Mac 电脑,但我们至今还没能交付给你们。...当我们展望未来时,可以预见到一些我们想为您打造的令人惊叹的产品,但我们不知道如何在未来的 PowerPC 路线图中打造它们。
... 所以现在就登录 Xcode 2.1 获得你的拷贝吧。演讲结束后,登记处的每个人都会立即得到一份。”
作为一个在 2010 年代成为开发者的人,在一个会议上拿起一张 CD 来更新你的最新 Xcode 看起来是如此古怪。
3.2 什么让英特尔 x86 CPU 如此出色?英特尔 x86 处理器是 1978 年英特尔 8086 开创的指令集架构家族的后裔。未来的处理器,例如 1982 年的 Intel 80186 或 2000 年的 Pentium 4,保持了与原始指令集的向后兼容性。没错。 70 年代在 8086 上编译的程序在 2000 年代可以正常运行,不需要任何修改。
但是软件生态系统只是故事的一部分,到 2006 年,高端 Intel x86 处理器的效能功耗比将达到 PowerPC 的 5 倍,时钟速度达到 PowerPC 的 1.5 倍。
英特尔在其 CPU 的各个方面都进行了创新,例如:
CPU 缓存 (L1、 l2 和 L3)分支预测超频架构这些概念在现代 CPU 性能中非常重要。英特尔的 x86 并非单枪匹马成为赢家ーー CPU 的互联特性意味着所有这些组件的优化使 x86 保持领先地位。
3.2.1 CPU 缓存如前所述,CPU 从RAM中获取数据,将其放置在处理器芯片上的超高速寄存器中,并对该数据执行操作。但是在千兆赫兹的时钟速度 (每秒 1,000,000,000 次操作) 下,从 RAM 获取指令和数据太慢了。
因此,CPU 发展了片上缓存来存储中等数量的数据。这些作为中间的微型 RAM 块,存储在物理上靠近芯片本身,并允许更快地访问必要的数据。
这些缓存本身是分层的:
L1 缓存是最小、最快的一层,直接与 CPU 内核集成以存储少量数据 (几 kB) 以便快速检索。由于这些都集成在处理器电路本身附近,所以每个 CPU 核心都有一个 l1 缓存。L2缓存是中间层,平衡速度和容量,通常集成在 CPU 芯片本身的某个地方,通常放在一边。这个缓存可以为每个 CPU 核心分区,也可以在它们之间共享。L3 缓存是最后一个缓冲区ーー在主板和后台之间往返的代价极大的缓冲区。这一层存储是所有 CPU 核心之间的一个大量字节的共享内存池。每当 CPU 需要获取不存储在最近的缓存中的指令或数据时,就称为缓存丢失。它需要从下一层缓存、下下层缓存、 RAM 或磁盘获取数据!这会严重影响速度和效率。作为一个宏观尺度的类比,考虑当程序必须通过网络而不是本地存储查找数据时,应用程序的加载速度有多慢。
到 2000 年代中期,Intel 的 x86 CPU 缓存使 PowerPC 上的缓存相形见绌,这意味着更低的延迟和更好的性能。如果辅以改进的预取和预测算法,代价高昂的缓存缺失在 x86 上就不会成为问题。这反过来又提高了每瓦性能,因为当数据靠近处理器时,通过 CPU 电路移动内存字节的物理电流就会减少。
3.2.2 分支预测分支预测听起来像神秘的魔法。分支指令是条件语句的汇编代码版本,比如 if/else ー在处理器上表现为跳转、调用和返回。CPU 使用统计学来猜测代码的去向,并尽量保持指令流水线以获得最大的利用率。
这种机制涉及直接内置在 CPU 电路中的硬件算法。名为 “分支历史表” 的缓冲区暂存了最近的分支结果,通过分析模式得出预测。
高级分支预测器应用最终的 YOLO 方法: Speculative_execution,在确认结果之前执行预测分支上的指令。英特尔的硅芯片技术帮助 x86 处理器的速度远远胜出。
3.2.3 超频架构超频架构是多任务处理的终极形式。超频 CPU 可以在一个时钟周期内同时执行多条指令:
在获取阶段,CPU 从操作流水线收集多条指令。解码阶段利用多个解码器单元来计算每条指令。这些指令可能被分配到 CPU 的不同执行单元。这种架构之所以有效,是因为诸如算术、寄存器之间的移动存储器和浮点运算等操作需要在 ALU 上使用不同的电路。因此,如果CPU足够聪明,可以并行执行多条指令。这是一个艰难的过程。如果多个同时进行的操作需要使用相同的资源,例如相同的寄存器或相同的 ALU 加法器电路,就会出现瓶颈。依赖性问题也可能导致停顿,特别是当一条指令被卡住等待另一个运行时间较长的操作结果时。
英特尔有意愿更有资金,让超频架构有效地工作在他们的 CPU 核心。除了缓存、分支预测和超频架构,英特尔的 x86 芯片还进一步优化了 CPU 的许多特性:
高级流水线将获取、解码、执行周期分割为多达 21 个阶段,允许在给定的时钟速度下每秒运行更多的指令。ALU中执行单元的数量增加,从而使得超频架构的操作更容易并行化。超线程,允许一个 CPU 核心作为 2 个逻辑核心呈现给操作系统,使一个核心可以同时执行 2 个线程。3.3 苹果的迁移战略苹果再次采用了他们历史悠久的过渡技术,以平稳地进行 CPU 架构迁移。
苹果引入了为这两种 CPU 架构构建的通用二进制文件,可以通过一个简单的 Xcode 构建配置进行设置。苹果还推出了动态二进制翻译器 Rosetta,苹果称其为 “你永远不会见到的最令人惊叹的软件”。它嵌入在 Mac OS x Tiger (第一个在 x86 Mac 上发布的操作系统) 中,并允许 PowerPC 应用程序自动在 x86 上运行。
苹果不厌其烦地解释 Rosetta 不是一个模拟器,Rosetta 会在程序运行时动态地翻译代码。实际上,这意味着来自应用程序二进制文件的 PowerPC CPU 指令和 OS 系统调用被转换为等效的 x86 汇编和系统调用。
苹果在长达一年的过渡时间内没有兑现承诺,却提前完成了任务,实现了乔布斯的梦想,将苹果带入了新时代。
4. Apple Silicon: 2020年苹果的终极竞争优势是硬件和软件的紧密结合,以生产出令人疯狂的伟大产品。对英特尔 x86 CPU 的依赖意味着对英特尔供应限制和发布延迟的痛苦依赖,这有时会影响苹果的路线图。
几十年来,中央处理器一直是远离我们的东西。从苹果 i 的现成 MOS 6502 微处理器到 2019 年 Mac Pro 的高端英特尔至强 CPU,苹果从未真正拥有价值链的这一部分。
但是现在,他们可以了。
iPhone 于 2007 年发布,搭载三星提供的 ARM 处理器。然而,在十年之交,从 iPhone 4 开始,苹果开始设计自己的芯片,从 A4 开始迭代,持续迭代。2020年,iPhone 是所有摇钱树中的神。
苹果公司那时是世界上市值最高的上市公司,正在将 200 亿美元的现金流投入到研发领域,就像什么都不是一样。
4.1 回顾过去容易被忽略的事情2008 年,苹果以 2.78 亿美元收购了P.A.半导体公司,这是一家以高端低功耗处理器著称的 CPU 设计公司。P.A.的 CPU 最初基于 IBM 的 Power架构ーー与 PowerPC Mac 中 AIM 联盟使用的指令集完全相同。
当时,Android 操作系统正在进入智能手机市场。拥有自己的芯片设计将使 iPhone 在新近拥挤的市场上与竞争对手进一步区别开来。此次收购还使得以保密著称的苹果公司能够将其最好的专有芯片设计保密在公司内部。这笔收购在 10 年后的 2018 年得到增强,当时苹果公司以 3 亿美元部分收购了欧洲芯片设计公司 Dialog。
ARM 成立于 1990 年,是苹果公司和 Acorn 电脑公司的合资企业。有传言说,史蒂夫・乔布斯说服 Acorn 放弃他们的硬件产品,转而专注于低功耗处理器的设计。这一点后续体现了苹果公司长期以来的思维方式。
4.2 Apple Silicon的黎明苹果的工程师们多年来一直在设计和迭代 iPhone 和 iPad 中的 ARM 芯片。由于移动设备的形状因素,很难把散热风扇装在口袋里,电力消耗和热效率成为最大的问题。RISC 架构是这个问题的明确答案,在移动场景中取代了 x86 巨人。
到 2020 年,这些 ARM 处理器已经得到了快速的发展,比英特尔的 x86 芯片快得多。
苹果定制的 ARM 处理器已经改进到了毋庸置疑的地步,性能已经足够强大,可以用在苹果笔记本电脑上。
2020 年,苹果宣布了第三次 Mac CPU 架构的伟大转变,推出了 M1,标志着Apple Silicon时代的到来。
4.3 M1 到底是什么?M1 是苹果硅芯片 “m 系列” 的第一代产品,这是他们为 Mac 笔记本电脑和台式机定制的硬件,有同代系产品如 M1 Pro,M1 Max,和 M1 Ultra。今天,甚至可以买到M2,M3甚至M4。
M1 是一个SoC。这是一种构建不同于标准桌面 pc 的硬件方法。与在主板上安装可互换组件 (如 CPU、存储器、 RAM、显卡) 不同,SoC将所有组件集成到一个单独的组件中,这就是为什么这种方法适用于空间受限的移动设备。
第一次升级到 M1 MacBook 就像变魔术一样,真正的游戏规则改变者。一切都是闪电般的快速,冷却风扇似乎从来没有打开,电池持续一整天一次充电。
正如在 Intel 部分中提到的,CPU 的互连特性通常使得很难评估芯片架构之间的优异性能。
英特尔的主要性能驱动因素是缩小晶体管大小,并在芯片上安装更多、更快的 CPU 内核,从而带来更高的性能。
但在 m1 的情况下,有一个完全不同的方法,导致其出色的表现: 专业化。
4.3.1 异构计算M 1 芯片采用的是异构计算策略,这意味着针对特定工作负载的专用组件。电脑游戏玩家对此已经很熟悉了。几十年来,Nvidia 一直在销售GPU ,以处理视频游戏渲染引擎遇到的特殊并行工作负载。
Apple 将这种方法提升到了一个新的水平,在异构工作负载的方向上进行了根本性的转变。M1 SoC 的组件专门用于许多计算任务:
图像处理电路数学信号处理器人工智能加速神经引擎专用视频编解码器用于加密存储的安全区域8 个 GPU 核,128 个并行执行单元4 个高性能 Firestorm CPU 内核4 个高效、低能耗的 Icestorm CPU 核心这种利用双 CPU 集的方法被 ARM 称为 big.LITTLE 架构,它优化了那些没有分配给专用组件的通用 CPU 工作负载的功耗。
Firestorm CPU 执行用户请求的时间敏感型工作负载;而 Icestorm CPU 处理后台工作负载的速度更慢,但功耗却减少了 90% 。
除了 Apple Silicon SoC 的核心异构架构之外,m1 令人惊叹的性能还有其他一些原因。
4.3.2 统一内存架构M1 芯片具有 GPU 和 CPU 之间共享的统一内存架构。这是性能方面的一大亮点。当将数据发送到外部 GPU 进行处理时,CPU 通常需要将数据复制到 GPU 所拥有的内存中,然后才能提取数据进行处理。图形驱动程序的中间转换利用了 CPU,当真正希望将图形指令传递给 GPU 时,这会引入严重的性能瓶颈。
为什么不是所有的处理器都集成了显卡?为了解决这个问题,苹果不得不解决两个主要的问题,当把 CPU 和 GPU 集成到 SoC 上时:
CPU 和 GPU 喜欢不同的数据格式。CPU 喜欢蚕食小字节,GPU 喜欢吞噬大量的数据,偶尔为了大规模并行处理机处理。GPU产生很多热量,这就是为什么显卡集成称为冷却风扇的 “大型喷气式客机” 。苹果的方法是在两个处理器之间分配相同的内存块 (RAM 和 l3 缓存) ,这种方式可以在 CPU 需要的高吞吐量下提供 GPU 喜欢的大块内存。 ARM 芯片能耗很低,可以集成在同一个芯片上。
4.3.3 乱序执行虽然异构架构允许专门的工作负载使用最好的工具,但 Firestorm CPU 核心本身对于一般工作负载来说是非常强大的。
超频架构使 CPU 核能够同时获取、解码和分派多条指令。凭借其 RISC,m1 芯片使苹果能够在乱序执行上将其提升到一个新的水平。
ARM RISC 指令都是 4 字节长 (32 位) ,而 x86 CISC 指令从 1-15 字节不等。这意味着 ARM 芯片可以很容易地将连续的指令字节流直接分解到解码器,而不需要任何解析开销。
基本的 m1 芯片有8个 解码器,其中Firestorm CPU 核心同时填补每个时钟周期。这些指令与它的各种专用电路并行发送。
Apple Silicon 同时分析数百条指令之间的依赖关系图,因此它知道哪些指令现在可以发送,哪些指令需要等待结果。将其与高级分支预测结合起来,M1 CPU 实际上是在烧 Atium。
4.3.5 物理上的约束m1 芯片上的所有东西在物理上都非常接近,即使电子信号以闪电般的速度移动,当传输距离较短时,操作速度也会更快。在 GHz 的时钟速度下,这些纳秒会累加起来。
4.4 超高性能对于 M1 Ultra 芯片,旨在提供最大的输出,M1 Ultra 芯片只是两个 m1 max 芯片粘在一起。或许还有更微妙的原因ーー桥接结构可以实现 2.5 TB/s 的芯片间吞吐量,这使得各个组件的行为完全像是同一个芯片。
在从 Intel x86 到 Apple Silicon 的转变过程中,苹果继续应用其久经考验的方法。开发者可以构建包含 Intel 和 Apple Silicon 二进制文件的通用应用程序。此外,Rosetta已经升级到二代,无形中解释英特尔指令到 ARM上 的运行。苹果公司一如既往地宣称,一些英特尔应用程序和游戏在使用 Rosetta II 的 ARM 处理器上的表现将会比在原始版本上更好。
作为英特尔最大的客户之一,苹果终止了与英特尔长期以来的合作关系,这对英特尔是一个沉重的打击。英特尔在某种程度上否认了现实,并且相当肯定他们可以通过进一步投资自己的产品来迎头赶上。在 Apple Silicon 和 Nvidia 在人工智能领域的统治地位之间,有一件事是清楚的: 英特尔已经自满太久了。
成功滋生自满,自满滋生失败,只有偏执狂才能生存
小结本文是一个有点自以为是的回顾,苹果著名的 CPU 架构迁移——
为什么Macintosh团队选择了摩托罗拉 68k?
为什么迁移到 PowerPC 这样的新 CPU 架构变得如此困难?
是什么导致英特尔的 x86 架构在竞争中遥遥领先?
为什么 m1 芯片是如此的高效?
很少有人去碰汇编程序了,可以在CPU上编程又有什么用呢?可能只关乎乐趣。
如果您对AI 应用开发有兴趣的话, 就会关注到MCP——
如果希望了解MCP 的价值,可以参考《拆解OpenAI最大对手的杀手锏:为什么会是MCP?》和《什么可能会定义人工智能的下一个十年?》;
如果想全面而有深度地了解MCP, 可以阅读《大模型应用系列:两万字解读MCP》;
如果想了解MCP 规范的原文, 可以参考我的译稿《MCP规范完整中译稿:2025-3-26版》;
如果想通过工具快速入手,可以使用《让你的服务变成MCP Server?FastAPI MCP 指南》;
如果选择使用 MCP 的开发框架, 可以参考《万字解读:8种常见框架,选择哪一种来开发MCP呢?》;
如果在现有的Agent 开发框架中使用MCP, 可以参考《当Semantic Kernel 遇上MCP......》和《Pydantic AI与MCP相逢》;
如果希望在大模型应用的中使用MCP,可以借鉴《在大模型应用中使用长短记忆: OpenMemory MCP》;
如果希望集成多个MCP服务,可以利用《采用LangGraph集成多个MCP服务器的应用》
如果希望了解基于MCP的架构模式,有全网首发的文字《全网首发:MCP 的10种架构模式》;
如果希望解决MCP应用的安全性问题,有全网首发的文字《全网首发:安全性问题,使MCP成为AI应用的双刃剑,如何化险为夷呢?》;
如果想对比 MCP 与其他智能体协议的区别, 🉑参考《智能体间协作的"巴别塔困境"如何破解?解读Agent通信4大协议:MCP/ACP/A2A/ANP》;
如果希望快速入门MCP,请阅读老码农的作品——
【关联阅读】
温故知新:从计算机体系结构看操作系统温故知新之GPU计算温故知新:数据科学札记浏览器架构的温故知新DevOps 温故知新温故知新:静态分析服务器性能监控的温故知新有向无环图(DAG)的温故知新温故知新,HTTP/2隐私计算之TEE的双操作系统支撑操作系统的可扩展访问控制操作系统性能提升之内核锁优化关于操作系统调度器的三篇论文异想天开!没有CPU的操作系统操作系统中的系统抽象从操作系统看Docker感知人工智能操作系统