苹果M1芯片如此之快的技术原因是什么?

导读 苹果今年最大的亮点也许不是手机 而是一块小小的芯片。M1发布会虽然已经过去了一阵子 但围绕着它的讨论依然不见平息。不过 对它的讨论

苹果今年最大的亮点也许不是手机 而是一块小小的芯片。M1发布会虽然已经过去了一阵子 但围绕着它的讨论依然不见平息。不过 对它的讨论很多都不在点子上 在技术方面解释得既不够深入也不够易懂。在这方面 Erik Engheim在Medium上发表的这篇文章也许是最详细最易懂的技术指南了。阅读本文 你将了解以下几点:1)为什么M1会这么快?2)苹果是不是用了什么独门绝招才做到这一点?3)英特尔AMD能不能效仿?原文标题是:Why Is Apple’s M1 Chip So Fast?篇幅关系 我们分两部分刊出 此为第一部分。

划重点:

700美元的新M1 Mac Mini战胜了4000美元的旧iMac

M1不是CPU而是SoC

苹果采取异构计算策略来提高性能:不是增加内核 而是加入更多的专用芯片

CPU与GPU消耗内存之别犹如法国大餐与垃圾食品 苹果的统一内存架构很关键

英特尔和AMD抄不了苹果的作业

在YouTube上 我看到有位Mac用户去年买了一台iMac。它把内存配到了40 GB 花了他大约4000美元。但是 这么一台超贵的iMac 结果却被他用少得可怜的700美元买来的新M1 Mac Mini令人难以置信地给干掉了。

在一次又一次的实测当中 M1 Macs不仅仅只是超过了顶级的Intel Macs 而且还是压倒性的优势。大家一脸的不敢相信 开始问这怎么可能?

如果你是其中之一的话 你算是来对地方了。在本文中 我打算把这个问题拆解成比较容易消化的几个部分 就像苹果对M1所做的一样。具体来说 我认为很多人会有以下一些问题:

这个M1芯片这么之快的技术原因是什么?

苹果是不是做出了一些真正具有独创性的技术选择来实现这一目标?

像英特尔和AMD这样的竞争对手采用相同的技术花招的容易程度如何?

当然 你也可以试着Google一下 但如果你试图了解苹果都干了什么的话 你能找到的除了肤浅的解释以外 就会使一堆技术含量很高的术语 比方说M1用了非常宽泛的指令解码器 庞大的重排序缓冲器(ROB)等。除非你是CPU硬件极客 否则这些东西大多跟没说一样。

为了更好地理解本文 我建议可以先看看我之前的一篇文章:“2020年对于RISC和CISC来说意味着什么?” 在那篇文章里 我解释什么是微处理器(CPU)以及各种重要概念 比方说:

指令集架构(ISA)

流水线

加载/存储架构

微码与微指令

不过 如果你不耐烦的话 我可以简要介绍一下有助于理解我对M1芯片的解释所需要了解的材料。

什么是微处理器(CPU)?

一般来说 当谈到英特尔和AMD的芯片时 我们谈论的是指中央处理器(CPU)或微处理器。CPU会从内存中提取指令。然后 一般会按顺序执行每个一条指令。

就最底层而言 CPU是一种有若干叫做寄存器的命名存储单元 以及若干叫做算术逻辑单元(ALU)的计算单元组成的设备。ALU执行加法、减法及其他基本数学运算之类的操作。不过 这些操作指跟CPU寄存器连接。如果要让两个数相加 你得从内存取出这两个数字 然后放进CPU的两个寄存器里面。

以下是RISC CPU(M1也属于这种)执行的一些典型的指令示例。

load r1 150

load r2 200

add r1 r2

store r1 310

这里的r1和r2就是我所说的寄存器。如果数字不在像这样的寄存器内的话 现代RISC CPU是没法进行操作的。比方说 它没法对位于RAM不同位置的两个数字进行相加。相反 它必须把这两个数字放到一个独立的寄存器里面。我们这里所举的那个简单例子干的就是这个。我们从RAM内存位置150处提取出数字 并将其放入CPU的寄存器r1中。然后 我们把地址200的内容放入寄存器r2中。只有这样 数字才可以用add r1 r2指令进行相加。

寄存器的概念很古老了。比方说 在这个旧的机械计算器上 寄存器是用来保存要相加的数字的。收银机(cash register)也许就源于此。寄存器就是登记输入数字的地方。

M1不是CPU!

不过关于M1 了解这一点非常重要:

M1不是CPU 而是由多个芯片组成的整个系统 全部都封装进放一大块硅里面。CPU只是其中一颗芯片。

基本上 M1算是把整个计算机都集成到了一块芯片上面。M1含有一颗CPU 有图形处理单元(GPU) 内存 输入和输出控制器 以及构成整台计算机的众多其他功能。这就是所谓的片上系统(SoC)。

今天 如果你买芯片的话(不管是从英特尔还是从AMD那里买) 你得到的实际上是封装在一起的多颗微处理器。在过去 计算机的主板上会配置有多颗物理上独立的芯片。

但是 由于今天我们能够往硅晶上面放太多的晶体管了 所以英特尔和AMD等公司开始把多个微处理器集成到一块芯片上。我们把这些芯片叫做CPU内核。一个内核基本上算是一个完全独立的芯片 可以从内存中读取指令并执行计算。

长期以来 就提高性能而言 这一直是问题的实质:就是不断增加更多的通用CPU内核。不过这种做法受到了干扰。在CPU市场里面 有一个玩家开始背道而驰。

苹果没那么神秘的异构计算策略

苹果没有往里面添加更多的通用CPU内核 而是采取了另一种策略:他们开始加入更多的专用芯片来完成一些特殊的任务。这样做的好处是 专用芯片的耗电往往比通用CPU内核少得多 执行特定任务往往又快得多。

其实这不是什么新知识。多年以来来 Nvidia和AMD的图形卡就内置了类似图形处理单元(GPU)之类的专用芯片 它们执行跟图形相关的操作要比通用CPU快得多。

苹果所做的只是朝这个方向做出了更大的转变。M1不仅配置了通用内核和内存 还包含有各种专用芯片:

中央处理器(CPU)——该片上系统的“大脑”。跑操作系统和应用的大部分代码。

图形处理单元(GPU)——处理跟图形相关的任务 比方说可视化应用的用户界面和2D / 3D游戏渲染。

图像处理单元(ISP)——可用于加速图像处理应用完成的常见任务。

数字信号处理器(DSP)——处理CPU所不为的数学密集型功能。包括音乐文件解压缩等。

神经处理单元(NPU)——用于高端智能手机 可加速机器学习AI)任务。其中包括语音识别和相机处理。

视频编码器/解码器——高能效地处理视频文件和格式转换。

Secure Enclave——加密身份验证和安全性。

统一内存——可让CPU、GPU以及其他内核快速交换信息。

这就是为什么很多人用M1 Mac进行图像和视频编辑时看到速度快得飞起的部分原因所在。他们执行的很多任务都可以直接在专用硬件上运行。这样一来 廉价的M1 Mac Mini不费吹灰之力就可以对大型视频文件进行编码 而昂贵的iMac就算让所有的风扇转到飞起也没法跟上前者的原因。

苹果的统一内存架构有何特殊之处?

苹果的“统一内存架构”(UMA)有点费解(我刚开始的时候就搞错了)。

为了解释原因 我们需要退后一步。

长期以来 廉价的计算机系统已经把CPU和GPU集成到同一块芯片(同一块硅片)里面。这种做法的慢是众所周知的。过去所说的“集成显卡”跟 “图形处理慢”基本上是一个意思。

之所以慢 是因为若干的原因:

内存的单独区域要预留给CPU和GPU。如果CPU想要让GPU使用大量数据 它不能够告诉对方说“这是我的部分内存”就了事。不行 CPU必须把数据复制一份到GPU控制的存储区域上。

CPU和GPU对内存的使用期望不一样。不妨用食物做一个愚蠢的类比:CPU希望服务员快点上菜(装数据的碟子) 一点点上也没关系。想象有一家豪华的法国餐厅 里面的服务员都是穿旱冰鞋的 所以可以为你提供快速服务。

相反 GPU可以接受上菜(数据)慢。但是你不能一点点地上 要上就得上大菜。它们需要吞噬大量的数据 因为GPU是规模庞大的并行机器 可以并行读取大量数据。不妨想象有一家垃圾食品店 上菜需要花点时间 因为他们要全部备好食物才一起上。

鉴于需求如此的不一样 把CPU和GPU放在同一块物理芯片上显然不是一个好主意。如果只上一点点的法国菜 GPU就只能坐在那里挨饿。其结果是 把强大的GPU放进SoC毫无意义。那一点点数据都不够GPU塞牙缝。

第二个问题是大型GPU会产生大量热量 所以如果跟CPU集成在一起你没法不遇到发热过大的问题。所以 独立显卡看起来往往像下面这样的:有着大型冷却风扇的大怪兽。这种显卡有专用的内存 旨在为贪婪的显卡提供大量数据。

这就是为什么这些显卡性能高的原因所在。但是它们有一个致命的弱点:当它们必须从CPU使用的内存里面获取数据时 得通过印刷在主板上的一组铜线 也就是所谓的PCIe总线进行。你试试用一根超级细的吸管喝水看看。水倒是一下子就吸上来了 但是水量不够啊。

苹果的统一内存架构试图把所有这些问题都解决掉 但又避免掉过去那种共享内存的缺点。为了实现这一目标 他们采取了以下一些手段:

没有专门给CPU或GPU保留的特殊区域。内存同时分配给两种处理器。它们都可以使用同样的内存。不需要数据复制。

苹果采用的内存既可存储大量数据 又可以快速存储数据。用计算机的术语来说 就是所谓的低延迟和高吞吐量。所以 就不需要将不同类型的内存连接起来了。

苹果降低了GPU的功耗 因此可以集成功能相对强大的GPU 而又不会导致SoC过热。

有人会说统一内存也不是什么新概念。的确 过去就有不同的系统有个这种玩意儿。但那时候对内存需求的差异可能并没有那么大。其次 Nvidia所谓的统一内存并不是一回事。在Nvidea的世界里 统一内存只是意味着有软件和硬件专门负责在独立的CPU和GPU内存之间来回复制数据。因此 从程序员的角度来看 苹果和Nvidia的统一内存也许是一样的 但是从物理意义上来说并不相同。

当然 这种策略需要有权衡取舍。要想实现这种高带宽的内存(份量大) 要求内存要完全集成进来 这意味着客户升级内存的机会被剥夺了。但是 苹果在寻求尽量提高内存与SSD硬盘的通信速度 让它们在本质上相当于旧式内存一样 从而让这个问题最小化。

既然SoC这么智能 英特尔和AMD为什么不抄作业呢?

既然苹果在做的事情这么聪明的话 为什么不是每个人都这么做呢?从某种程度上来说 别人也在抄作业。其他的ARM芯片制造商在专用硬件方面的投入也越来越大。

AMD也开始在自家的某些芯片上部署功能更强大的GPU 并部署加速处理单元(APU 这种处理器基本上算是放在同一块硅片上的CPU内核加GPU内核) 可以说是朝着某种形式的SoC迈进。

不过他们做不到这一点。因为一个重要的原因。SoC本质上是整台计算机都集成在一块芯片上。所以这种做法更适合计算机制造商 比方说HP和Dell。不妨让我再用一个愚蠢的类比来澄清:如果你原来的商业模式是制造和销售汽车发动机的话 那制造和销售整车就会是一次不同寻常的飞跃。

相比之下 对于ARM而言 这倒不是问题。戴尔或惠普等计算机制造商完全可以卖ARM的知识产权许可 并购买其他芯片的IP 就可以把它们认为自己的SoC应该具备的特殊硬件添加进来了。然后 他们再把做好的设计交给格罗方德(GlobalFoundries)或台积电(TSMC 现在在给AMD和苹果代工芯片)等半导体代工厂即可。

英特尔和AMD的商业模式遇到了大问题。他们的商业模式是以卖通用CPU为基础的 大家只需要把CPU插入大型PC主板即可。因此 计算机制造商只需要从不同的供应商处购买主板、内存、CPU和显卡 然后将其集成为一个解决方案即可。

但是我们现在正在迅速远离那个世界。在新的SoC的世界里 你不需要组装来自不同供应商的物理组件 而是组装来自其他供应商的IP(知识产权)。你从不同的供应商处购买显卡、CPU、调制解调器、IO控制器以及其他产品的设计 然后用来设计自己的的SoC 。之后再找一家晶圆代工厂生产即可。

但现在你会遇到一个大问题 因为英特尔、AMD或Nvidia都不会把自己的知识产权许可给戴尔或惠普 让他们给自己的机器制造SoC 。

当然 英特尔和AMD完全可以卖整块完工的SoC 。但是这些SoC会包含些什么呢?PC制造商对SoC应该包含的东西可能会有不同的想法。英特尔、AMD、微软和PC制造商之间的想法可能会因为SoC应包含哪种专用芯片而发生冲突 因为这些芯片需要软件的支持。

对于苹果来说 这件事情很简单。因为他们控制了电子产品的全部。比方说 苹果提供了Core ML库给开发者编写机器学习程序。Core ML究竟是在苹果的CPU上面跑还是在Neural Engine上面跑 开发者并不需要关心。 责任编辑:tzh

免责声明:本文由用户上传,如有侵权请联系删除!