为何苹果M1打败了英特尔?


CISC与RISC有两种截然相反的芯片设计理念:

  • CISC(复杂指令集计算机)
  • RISC(精简指令集计算机)

要理解这一点,我们需要了解指令集的含义。

CPU 每个时钟周期都在运行操作。这些操作包括在寄存器之间移动数据、算术和逻辑运算。

每个 CPU 受其电路实际物理布局的限制,只能执行数量有限的不同操作。这些单独的操作由汇编语言(也称为机器码)表示。这些代码以二进制指令序列的形式输入处理器,并按顺序执行。

这两种思想导致了不同的微处理器制造方法:

CISC 接受复杂的指令集,不断增加 CPU 的功能。最终,CPU 获得了使用单指令执行复杂多步处理的能力,例如著名的多项式求值指令 POLY。虽然这感觉就像变魔术一样,但这也意味着处理器需要保持大量的内部状态,一旦出现任何问题,都会对性能造成毁灭性的打击。

CISC 的最大缺陷在于开发人员的复杂性。为 CISC 架构编写程序的编译工程师必须查阅 500 页的手册,才能找到他们可能需要的指令。

RISC 采用 "保持简单,笨蛋!"的方法。RISC 工程师只需在他们的寄存器中存储 60 条左右的指令,就可以笑傲江湖了。

流水线
要真正了解 RISC 所带来的主要性能提升,需要通过查看取指-解码-执行周期来理解流水线。简而言之,在一个时钟周期(CPU 执行一个操作的时间)内,要完成三件事中的一件:

  1. 获取:CPU 从内存中获取下一条机器码指令。
  2. 解码:中央处理器的控制单元对指令进行解释,以确定指令的实际作用。
  3. 执行:中央处理器执行指令,即在寄存器和内存之间移动数据,或通过逻辑单元推动比特。

当 CPU 使用较简单的 RISC 指令集时,这些步骤各占用一个周期,可以同时进行这些操作。在每个时钟周期内,可以并行运行 3 条指令,3 个阶段各一条。这样,每个时钟周期平均执行一次机器码操作。

在使用 CISC 时,每个步骤可能需要的时间不是一致的 1 个周期。就 POLY 运算而言,对于一个 x² 表达式,仅执行步骤就可能需要 10 个周期。在 CISC 中,很难使操作步调一致,因此复杂指令很难获得良好的性能。

简而言之,流水线就是将这些指令交错并发的概念。

汇编语言
为一种处理器编写的软件不一定能在另一种处理器上运行。不同系列的处理器自然包含不同的指令集,即定义每个 CPU 操作的汇编指令列表。

英特尔CPU
英特尔在CISC CPU 的各个方面都进行了创新,例如

  • CPU 高速缓存(L1、L2 和 L3)
  • 分支预测:高级分支预测器应用最终的 YOLO 方法:推测执行,其中预测分支上的指令在结果确认之前
  • 超标量架构

除了缓存、分支预测和超标量架构之外,英特尔的 x86 芯片还进一步优化了 CPU 的许多功能:
  1. 先进的流水线技术将取指、解码、执行周期分成多达 21 个阶段,在给定的时钟速度下,每秒可运行更多的指令。
  2. 增加了 ALU 的执行单元数量,使超标量架构的并行运算更加容易。
  3. 超线程技术允许单个 CPU 内核在操作系统中显示为 2 个逻辑内核,使一个内核可同时执行 2 个线程。

ARM芯片
ARM 的 RISC 指令集和芯片设计如今占据主导地位。

由于移动设备的外形尺寸——很难将冷却风扇放入口袋中——CISC芯片功耗和热效率是大问题。
RISC 架构是对此问题的明确解决办法,它在移动用例中取代了 x86 巨头。

苹果工程师一直在 iPhone 和 iPad 中的 ARM 芯片上进行设​​计和迭代。2020 年,Apple 宣布了第三次伟大的 Mac CPU 架构转型——M1——预示着 Apple Silicon 时代的到来。

第一次升级到 M1 MacBook 就像变魔术一样。真正的游戏规则改变者。一切都快如闪电,冷却风扇似乎永远不会打开,电池一次充电可持续使用一整天。


苹果M1芯片
M1 是一个The M1 is a 片上系统system-on-a-chip(SoC)。这是一种不同于标准台式电脑的硬件构建方法。SoC 不是在主板上安装可互换的组件(例如 CPU、存储、RAM、显卡),而是将所有组件集成到单个组件中,这就是为什么该方法自然适合空间受限的移动设备。

  • 英特尔的主要性能驱动因素是缩小晶体管并在芯片上安装更多、更快的 CPU 内核。更多、更快的 CPU 内核自然会带来更高的性能。
  • 但就 M1 而言,有一种完全不同的方法使其表现出色:专业化Specialisation

M1芯片采用The M1 chips apply a 异构计算策略heterogeneous computing strategy。这意味着针对特定工作负载的专用组件。PC 游戏玩家对此已经很熟悉了。几十年来,Nvidia 一直在销售显卡(GPU)来处理视频游戏渲染引擎遇到的专门并行工作负载。

苹果将​​这种方法提升到了一个新的水平,在异构工作负载的方向上发生了根本性的转变。

M1 SoC 的组件专门用于许多计算任务:

  • 图像处理电路
  • 数学信号处理器
  • 人工智能加速神经引擎
  • 专用视频编码器和解码器
  • 用于加密存储的安全飞地
  • 8 个 GPU 内核,128 个并行执行单元
  • 4 个高性能 Firestorm CPU 内核
  • 4 个高效、低能耗的 Icestorm CPU 内核

这种利用双组 CPU 的方法被 ARM 称为 big.LITTLE 架构,可优化未分配给专业组件的一般 CPU 工作负载的功耗。

  1. Firestorm CPU 不间断地执行用户要求的时间敏感型工作负载;
  2. 而 Icestorm CPU 则以较慢的速度处理后台工作负载,同时将功耗降低 90%。

除了 Apple Silicon SoC 的核心异构架构外,M1 的惊人性能还有其他一些原因:

  • 统一内存架构
  • 无序执行
  • 物理学终极约束

统一内存架构
M1 芯片采用 GPU 和 CPU 共享的统一内存架构。这是性能方面的一大创举。在将数据发送到外部 GPU 进行处理时,CPU 通常需要将数据复制到 GPU 拥有的内存中,然后才能进行处理。

为了实现这一目标,苹果必须解决在 SoC 上集成 CPU 和 GPU 时出现的两大问题:

CPU 和 GPU 喜欢不同的数据格式:

  • CPU 喜欢少量、频繁地啃噬小字节,而 GPU 则喜欢不频繁地吞吐大量数据,进行大规模并行处理。
  • GPU 会发热。大量发热。这就是为什么显卡集成了散热风扇,以获得 "喷气式飞机 "的美感。

苹果公司的方法是在两个处理器之间分配相同的内存块,包括 RAM 和 L3 高速缓存,其格式可以提供 GPU 喜欢的大块内存,而 CPU 则需要高吞吐量。他们的 ARM 芯片能耗很低,可以集成在同一个芯片上,而不会在你的笔记本电脑上开个洞。

非顺序执行
虽然异构架构允许专业工作负载使用最合适的工具,但 Firestorm CPU 内核本身对于一般工作负载也非常强大。

超标量架构使 CPU 内核能够同时获取、解码和调度多条指令。M1 芯片凭借其 RISC 架构,使苹果公司能够通过无序执行将这一功能提升到更高水平。

ARM RISC 指令长度均为 4 字节(32 位),而 x86 CISC 指令长度为 1-15 字节不等。这意味着 ARM 芯片可以轻松地将连续的指令字节流直接分割给解码器,而无需任何分析开销。

基本的 M1 芯片有 8 个疯狂的解码器,Firestorm CPU 内核在每个时钟周期同时填充这些解码器。这些指令被并行发送到各种专用电路。

Apple Silicon 会同时分析数百条指令之间的依赖关系图,因此它知道哪些指令可以立即发送,哪些指令需要等待结果。再加上先进的分支预测,M1 CPU 基本上就是在燃烧 Atium。

物理学终极约束
这款 SoC 速度如此之快、功耗如此之低,还有一个原因。这与我们在学习 CPU 高速缓存时了解到的概念如出一辙。

简而言之,M1 芯片上的所有部件在物理上都非常靠近。即使电信号以闪电般的速度移动,当移动距离较短时,运行速度也会更快。

在 GHz 时钟速度下,这些纳秒的时间会不断增加。

超高性能
M1 Ultra 芯片的设计目的是提供最大的输出功率,苹果公司从工具包里拿出了一个更钝的工具。蒂姆-库克拿出的不是极紫外光刻机,而是一把大锤。

M1 Ultra 芯片只是两个 M1 Max 芯片粘在一起。

它也许比这更微妙一些--桥接结构使芯片间的吞吐量达到了 2.5TB/s,这让这些组件的表现就像它们是同一个芯片一样。

英特尔之死?
英特尔最大的客户之一中断了与他们的长期合作关系,这对英特尔来说是一个沉重的打击。英特尔在某种程度上否认了现实,并确信他们可以通过进一步投资自己的产品迎头赶上。

在苹果硅和 Nvidia 在人工智能用例方面的主导地位之间,有一点是显而易见的:英特尔已经自满太久了。