苹果今年最大的亮点也许不是手机,而是一块小小的芯片。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
-
芯片
+关注
关注
456文章
50967浏览量
424925 -
手机
+关注
关注
35文章
6887浏览量
157768 -
苹果
+关注
关注
61文章
24431浏览量
199223
发布评论请先 登录
相关推荐
评论