苹果今年最大的亮点也许不是手机,而是一块小小的芯片。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抄不了苹果的作业
为什么苹果 M1 芯片会那么快?请看这份最详细易懂的技术指南(下)
在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会从内存中提取指令。然后,一般会按顺序执行每个一条指令。
一个非常基本的RISC CPU,不是M1那种。指令从内存沿蓝色箭头转到指令寄存器。然后解码器会弄清楚指令是什么,并通过红色控制线启用CPU的不同部分。ALU会对寄存器里面的数字进行加减。
就最底层而言,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指令进行相加。
一台旧式机械计算器,有两个寄存器:分别是累加器和输入寄存器。现代CPU一般有十几个寄存器,而且是电子的而不是机械的。
寄存器的概念很古老了。比方说,在这个旧的机械计算器上,寄存器是用来保存要相加的数字的。收银机(cash register)也许就源于此。寄存器就是登记输入数字的地方。
M1不是CPU!
不过关于M1,了解这一点非常重要:
M1不是CPU,而是由多个芯片组成的整个系统,全部都封装进放一大块硅里面。CPU只是其中一颗芯片。
基本上,M1算是把整个计算机都集成到了一块芯片上面。M1含有一颗CPU,有图形处理单元(GPU),内存,输入和输出控制器,以及构成整台计算机的众多其他功能。这就是所谓的片上系统(SoC)。
M1是片上系统(SoC)。这意味着构成计算机的所有组件都放在一块硅芯片上。
今天,如果你买芯片的话(不管是从英特尔还是从AMD那里买),你得到的实际上是封装在一起的多颗微处理器。在过去,计算机的主板上会配置有多颗物理上独立的芯片。
计算机主板的例子。内存、CPU、图形卡、IO控制器、网卡以及许多其他组件连接到主板上进行相互通信。
但是,由于今天我们能够往硅晶上面放太多的晶体管了,所以英特尔和AMD等公司开始把多个微处理器集成到一块芯片上。我们把这些芯片叫做CPU内核。一个内核基本上算是一个完全独立的芯片,可以从内存中读取指令并执行计算。
有多个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就算让所有的风扇转到飞起也没法跟上前者的原因。
蓝色是多核CPU内核正在访问内存,绿色是大量GPU内核正在访问内存。
苹果的统一内存架构有何特殊之处?
苹果的“统一内存架构”(UMA)有点费解(我刚开始的时候就搞错了)。
为了解释原因,我们需要退后一步。
长期以来,廉价的计算机系统已经把CPU和GPU集成到同一块芯片(同一块硅片)里面。这种做法的慢是众所周知的。过去所说的“集成显卡”跟 “图形处理慢”基本上是一个意思。
之所以慢,是因为若干的原因:
内存的单独区域要预留给CPU和GPU。如果CPU想要让GPU使用大量数据,它不能够告诉对方说“这是我的部分内存”就了事。不行,CPU必须把数据复制一份到GPU控制的存储区域上。
CPU不需要提供大量数据,但希望能快点提供。
CPU和GPU对内存的使用期望不一样。不妨用食物做一个愚蠢的类比:CPU希望服务员快点上菜(装数据的碟子),一点点上也没关系。想象有一家豪华的法国餐厅,里面的服务员都是穿旱冰鞋的,所以可以为你提供快速服务。
GPU对内存的期望:一起上。多多益善。
相反,GPU可以接受上菜(数据)慢。但是你不能一点点地上,要上就得上大菜。它们需要吞噬大量的数据,因为GPU是规模庞大的并行机器,可以并行读取大量数据。不妨想象有一家垃圾食品店,上菜需要花点时间,因为他们要全部备好食物才一起上。
鉴于需求如此的不一样,把CPU和GPU放在同一块物理芯片上显然不是一个好主意。如果只上一点点的法国菜,GPU就只能坐在那里挨饿。其结果是,把强大的GPU放进SoC毫无意义。那一点点数据都不够GPU塞牙缝。
第二个问题是大型GPU会产生大量热量,所以如果跟CPU集成在一起你没法不遇到发热过大的问题。所以,独立显卡看起来往往像下面这样的:有着大型冷却风扇的大怪兽。这种显卡有专用的内存,旨在为贪婪的显卡提供大量数据。
GeForce RTX 3080显卡
这就是为什么这些显卡性能高的原因所在。但是它们有一个致命的弱点:当它们必须从CPU使用的内存里面获取数据时,得通过印刷在主板上的一组铜线,也就是所谓的PCIe总线进行。你试试用一根超级细的吸管喝水看看。水倒是一下子就吸上来了,但是水量不够啊。
苹果的统一内存架构试图把所有这些问题都解决掉,但又避免掉过去那种共享内存的缺点。为了实现这一目标,他们采取了以下一些手段:
没有专门给CPU或GPU保留的特殊区域。内存同时分配给两种处理器。它们都可以使用同样的内存。不需要数据复制。
苹果采用的内存既可存储大量数据,又可以快速存储数据。用计算机的术语来说,就是所谓的低延迟和高吞吐量。所以,就不需要将不同类型的内存连接起来了。
苹果降低了GPU的功耗,因此可以集成功能相对强大的GPU,而又不会导致SoC过热。
有人会说统一内存也不是什么新概念。的确,过去就有不同的系统有个这种玩意儿。但那时候对内存需求的差异可能并没有那么大。其次,Nvidia所谓的统一内存并不是一回事。在Nvidea的世界里,统一内存只是意味着有软件和硬件专门负责在独立的CPU和GPU内存之间来回复制数据。因此,从程序员的角度来看,苹果和Nvidia的统一内存也许是一样的,但是从物理意义上来说并不相同。
当然,这种策略需要有权衡取舍。要想实现这种高带宽的内存(份量大),要求内存要完全集成进来,这意味着客户升级内存的机会被剥夺了。但是,苹果在寻求尽量提高内存与SSD硬盘的通信速度,让它们在本质上相当于旧式内存一样,从而让这个问题最小化。
在统一内存之前Mac是怎么用GPU的?苹果甚至提供了用Thunderbolt 3电缆连接外部图形卡的选项。有人猜测将来仍有这种可能。
既然SoC这么智能,英特尔和AMD为什么不抄作业呢?
既然苹果在做的事情这么聪明的话,为什么不是每个人都这么做呢?从某种程度上来说,别人也在抄作业。其他的ARM芯片制造商在专用硬件方面的投入也越来越大。
AMD也开始在自家的某些芯片上部署功能更强大的GPU,并部署加速处理单元(APU,这种处理器基本上算是放在同一块硅片上的CPU内核加GPU内核),可以说是朝着某种形式的SoC迈进。
AMD Ryzen加速处理单元(APU)在一块硅片上集成了CPU和GPU(Radeon Vega)。但是,其他的协处理器,IO控制器或统一内存并不包含在内。
不过他们做不到这一点。因为一个重要的原因。SoC本质上是整台计算机都集成在一块芯片上。所以这种做法更适合计算机制造商,比方说HP和Dell。不妨让我再用一个愚蠢的类比来澄清:如果你原来的商业模式是制造和销售汽车发动机的话,那制造和销售整车就会是一次不同寻常的飞跃。
相比之下,对于ARM而言,这倒不是问题。戴尔或惠普等计算机制造商完全可以卖ARM的知识产权许可,并购买其他芯片的IP,就可以把它们认为自己的SoC应该具备的特殊硬件添加进来了。然后,他们再把做好的设计交给格罗方德(GlobalFoundries)或台积电(TSMC,现在在给AMD和苹果代工芯片)等半导体代工厂即可。
台积电的半导体代工厂 台积电在为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上面跑,开发者并不需要关心。
划重点:
CPU提高性能的两种策略:要么跑快点,要么跑多点,但跑快点这条路已经走到尽头
跑多点也有两种策略:增加内核,或者乱序执行(OoO),苹果走的是后面这条路
AMD和Intel的乱序执行要比M1逊色
因为体系架构问题,英特尔和AMD没机会赶上苹果的CPU了
任何CPU想要快速运行都要面临的根本挑战
所以说,异构计算是部分原因,而不是唯一的原因。M1上面所谓的快速通用CPU内核Firestorm确实很快。跟过去与英特尔和AMD的内核相比较弱的ARM CPU内核相比,这是一个重大差异。
在对标中,Firestorm击败了大多数的英特尔内核,几乎击败了最快的AMD Ryzen内核。按照传统观点的话,这是不可能的。
在讨论是什么导致Firestorm跑得这么快之前,我们先要了解让CPU跑得快的核心思想是什么。
原则上,你可以结合以下两种策略来实现:
串行更快地执行更多的指令。
并行执行大量指令。
上世纪80年代的时候,做到这一点很容易。只需要增加时钟频率,指令就能加快完成。时钟周期是CPU工作的最小时间单位,是计算机执行某项操作的时候。不过这想操作可以是很微小的操作。所以,一条指令可能由多个较小的任务组成,因此可能需要多个时钟周期才能完成。
但是,现在再想提高时钟频率已经几乎不可能了大家嘴里反复絮叨的“摩尔定律的终结”真的来了。
所以,现在其实就剩下并行执行尽可能多的指令这条路了。
多核还是乱序处理器?
这条路也有两种走法。一种是增加更多的CPU内核。从软件开发者的角度来看,这就好比增加线程。每个CPU内核就像一个硬件的线程。如果你还不知道什么是线程,可以把它看作是执行任务的过程。一个CPU有两个内核的话,就可以同时执行两项单独的任务:两个线程。这些任务可以描述为两个独立的程序存储在内存当中,或者实际上也可以是同一程序执行两次。每个线程都需要做一些记录,比方说本线程目前在一系列程序指令当中的位置。每个线程都可以存储临时结果,而且应该是独立存放的。
原则上,只有一个内核的处理器也能跑多个线程。不过,在这种情况下,它只是把一个线程暂停并保存当前进程,再切换到另一线程运行。稍后再切换回来。这种做法并不能带来太多的性能增强,只是在线程可能经常要停下来等待用户输入,或者网络连接速度慢要等数据的时候使用。这些可以称之为为软件线程。硬件线程意味着拥有真正的额外物理硬件,比方说额外的内核,可以加快处理速度。
问题在于,开发者得会写代码来利用这种优势。其中的部分任务(比方说服务器软件)是很容易写的。你可以想象分别处理每一位连接用户。这些任务互相之间独立性太强了,以至于拥有大量内核是服务器(尤其是基于云的服务)的绝佳选择。
有128个内核的Ampere Altra Max ARM CPU专为云计算而设计,硬件线程多是其好处之一。
这就是为什么你会看到类似Ampere之类的ARM CPU制造商会制造像Altra Max这样的CPU的原因,这款处理器有着疯狂的128核!这种芯片是专门为云计算准备的。你不需要疯狂的单核性能,因为在云端,关键是在尽可能节能的情况下让尽可能多的线程来处理尽可能多的并发用户。
相比之下,苹果则处在另一端。苹果制造的是单用户设备。多线程并不是优势。他们的设备主要用来玩游戏,视频编辑,做开发等。他们希望台式机有漂亮的响应性好的图形和动画。
桌面软件一般不会用很多的内核。比方说,8核也许能让计算机游戏受益,但是像128核之类的东西完全就是浪费。相反,你需要更少但更强大的内核。
乱序执行的机制
有趣的来了,乱序执行。乱序执行可以并行执行更多指令但又不用做成多线程的方式。开发者不必专门写软件就能利用这种能力。从开发者的角度来看,似乎每个内核都跑得更快了。
要想了解其工作原理,你需要先了解一些有关内存的知识。请求访问内存特定位置的数据是很慢的。但是,获取1字节数据的时延跟获取128字节的数据的时延却没有分别。数据要通过我们所谓的数据总线来发送。你可以把数据总线看作是内存与数据通过的CPU不同部分之间的一条通道或管道,数据就是通过这条管道来传输的。实际上,当然那只是一些导电的铜线。如果数据总线足够宽的话,就可以同时存取多个字节。
所以,CPU一次会执行一大块的指令。但是是按照次序一条接一条地执行的。现代的微处理器则会做所谓的乱序操作(OoO )。
这意味着他们能够对指令缓冲区进行快速分析,弄清楚哪些指令依赖于哪个指令。不妨看看下面这个简单的例子:
01: mul r1, r2, r3 // r1 ← r2 × r3
02: add r4, r1, 5 // r4 ← r1 + 5
03: add r6, r2, 1 // r6 ← r2 + 1
乘法往往一般都很慢。可以这么说,乘法需要多个时钟周期来执行。第二条指令只能等,因为它的计算要取决于知道了放进r1寄存器的结果才行。
但是,第3行的第3条指令就不需要依赖于之前的指令的计算。所以,乱序处理器可以并行计算这条指令。
不过在现实当中我们谈论的是数百条指令。CPU能够找出这些指令之间的所有依赖关系。
它会通过查看每条指令的输入来对其进行分析。指令的输入是否取决于一或多条其他指令的输出?所谓的输入和输出,是指包含有之前计算结果的寄存器。
比方说,add r4,r1、5这条指令要依赖mul r1,r2,r3所输出的r1。我们可以把这些关系链接在一起,形成CPU可以处理的详细图谱。其中节点是指令,而边则是连接它们的寄存器。
CPU可以对这样的节点图谱进行分析,然后确定可以并行执行哪些指令,以及哪些指令中继续执行之前需要在什么地方等待多个相关计算的结果。
很多指令会早早就执行完毕,但我们没法对结果进行官宣。我们不能保证结果;否则的话,我们会以错误的顺序提供结果。在外界看来,它得看起来就像是按照发出的指令顺序执行的。
就像堆栈一样,CPU会从顶部弹出已完成的指令,直到找到未完成的指令。
这个解释还不够完善,但应该能提供一些线索了。基本上就是,你既可以实现程序员必须知道的那种并行性,也可以实现那种CPU假装是一切都是单线程执行的样子。不过,你知道,在幕后,它正在执行乱序的黑魔法。
正是出众的乱序执行能力使得M1的Firestorm内核可以狠狠地踢前作的屁股,扬名立万。实际上,它比英特尔或AMD的任何产品都要强大。可能比主流市场上的任何产品都要强大。
为什么AMD和Intel的乱序执行要比M1逊色?
在对乱序执行(OoO )的解释当中,我跳过了一些重要的细节,这里需要谈一下。否则的话,就没法理解为什么苹果能够在这场游戏当中领先,为什么英特尔和AMD可能没法赶上。
我所说的“scratchpad”实际上就是所谓的“重排序缓冲器(ROB)”,里面并不包含常规的机器代码指令。不是那种CPU从内存获取要执行的东西。这些是CPU指令集体系结构(ISA)里面的指令。就是那种我们称之为x86、ARM、PowerPC等的指令。
但是,在内部,CPU会用程序员看不到的完全不同的指令集。我们称之为微指令(micro-ops或μops )。ROB里面都是这些微指令。
对于CPU施展魔法来让东西并行运行来说,这个地方可以做的事情要实际得多。原因是微指令的范围很广(包含有很多的位),并且可以包含各种元信息。你没法把那种信息添加到ARM或x86的指令里面,而很多的元信息只有在当前执行的上下文之中才有意义。
我们可以这么看,就把它看作是你在写程序的时候。你有一个公共API,这个API需要保持稳定并且所有人都能用。ARM、x86、PowerPC、MIPS就是这样的指令集。而微指令基本上是用来实现公共API的专用API。
此外,对于CPU来说,微指令往往更易用。为什么?因为每一个微指令都只完成一项简单的有限任务。常规的ISA指令可能更复杂,导致会发生很多事情发生,最终会变成成多个微指令。
对于CISC CPU来说,往往别无选择只能用微指令,否则大型复杂的CISC指令会导致流水线和OoO几乎没法实现。
但RISC CPU就有得选。比方说,小一点的ARM CPU根本不用微指令。但这也意味着做不了类似OoO之类的事情。
但是这又有什么关系呢?为什么这个细节对于理解为什么苹果能够压倒AMD和英特尔非常重要呢?
那是因为CPU能跑多快要取决于往ROB装填微指令的速度以及数量。填充得越快,能选择出可以并行执行的指令的机会就越大,而并行执行则意味着性能的提高。
机器代码指令被所谓的指令解码器分解成微指令。如果能够有更多的解码器,我们就可以并行分解更多的指令,填充ROB的速度就可以更快。
在这一点上,苹果的M1跟其他的CPU有很大的差别。英特尔和AMD最大微处理器内核有四个解码器,也就意味着可以并行解码四条指令分解出微指令。
但是苹果却有着疯狂的8个解码器。不仅如此,它的ROB大概比别人大3倍。基本上相当于可容纳三倍规模的指令。其他主流芯片制造商的CPU没有一个有这么多解码器的。
为什么英特尔和AMD没法多加点指令解码器?
这就是RISC复仇的机会。而M1 Firestorm内核采用的是ARM RISC架构,这一事实开始变得重要起来。
你看,对于x86来说,一条指令的长度在1到15个字节之间。而在RISC芯片上,指令的长度是固定的。这种情况下固定长度为什么很重要呢?
因为如果每一条指令的长度都一样的话,把一连串字节分解成指令,并行输入给8个不同的解码器这件事就变得微不足道了。
但是,如果是x86 CPU的话,解码器都不知道下一条指令从哪里开始。它得分析每一条指令才能知道指令的长度。
英特尔和AMD采取的是暴力破解法,也就是在每个可能的起点对指令进行解码。这意味着会有很多猜错的时候,要把错误丢弃掉。这会造成解码器阶段十分复杂,绕来绕去,以至于很难再添加更多的解码器。但是对于苹果来说,相比之下增加更多的解码器根本不算事儿。
实际上,添加更多解码器会导致很多的其他问题,以至于对AMD来说,4个解码器基本上就是上限了。
其结果是,在相同的时钟频率下,M1 Firestorm内核能处理的指令数量实际上是AMD和Intel CPU的两倍。
有人则认为,因为CISC指令可转化为更多的微指令,所以密度更大,这样一来,解码一条x86指令就类似于解码两条ARM指令。
只是在现实世界里面,情况并非如此。高度优化的x86代码很少会用复杂的CISC指令。才能够某种程度来说,它已经有点RISC风格了。
但这对英特尔或AMD毫无帮助,因为就算15字节长的指令很少见,造出来的解码器也得处理。而这会导致复杂性,从而阻碍AMD和Intel添加更多的解码器。
可是AMD的Zen3内核还是更快啊,不是吗?
据我所知,最新的AMD CPU内核,也就是所谓的Zen3内核在性能基准测试是要比Firestorm内核快一些。但问题是,这仅仅是因为Zen3内核的时钟频率为5 GHz。而Firestorm内核的时钟频率为3.2 GHz。虽然时钟频率提高了近60%,但Zen3也只是勉强比Firestorm快一点。
那苹果为什么不相应提高时钟频率呢?因为更高的时钟频率会导致芯片发热。但那却是苹果的主要卖点之一。跟英特尔和AMD的产品不同,他们的计算机几乎不需要制冷。
从本质上讲,可以说Firestorm内核确实优于Zen3内核。Zen3只能靠加大电流并变得更热来让自己保持领先。而苹果只是选择不这么做而已。
如果苹果想要提高性能的话,他们只只需要多加些内核就可以了。这样一来,他们既可以降低功耗,又能提供更高性能。
未来
似乎AMD和Intel在两个方面都陷入了困境:
他们没有一个可以轻松从事异构计算和SoC设计的商业模式。
他们传统的x86 CISC指令集反过来又给他们造成困扰,导致难以提高OoO性能。
当然,这并不意味着游戏结束了。他们是可以提高时钟频率,强化散热能力,增加更多内核,扩充CPU缓存等。但这些方面他们也都处于劣势。英特尔的情况最糟,一方面内核似乎已经被Firestorm击败,而且能跟SoC解决方案集成的GPU也很弱。
引入更多内核的问题在于,对于典型的桌面工作负荷来说,内核太多会导致收益递减。当然,大量内核非常适合服务器。
但是在这个领域,像Amazon和Ampere之类的公司正在用128核的怪兽CPU发动攻击。这就像是东线和西线同时开战。
不过对于AMD和Intel来说,幸运的是,苹果并没有直接卖自己的芯片。所以,PC用户只能接受他们提供的任何产品。PC用户可能会投奔曹营,但这会是一个缓慢的过程。用户不会马上离开自己自己投入了大量资金的平台。
但是,那些还没有在任何平台上面烧太多钱的年轻专业人,他们未来可能会慢慢地转向苹果阵营,扩大了后者在高端市场的份额,并因此进一步扩大其在PC市场所占的利润份额。