AMDcpu芯片可以分为会像苹果M1cpu芯片可以分为一样内存CPU,GPU集成吗

原标题:为什么苹果 M1 cpu芯片可以分為如此之快

苹果cpu芯片可以分为正在快速崛起。无论是从配置还是从其他方面苹果在超越自己的同时也远远地把同行甩在后面。本文将詳细解答:为什么苹果的 M1 运行速度会如此之快

作者:Erik Engheim,现居挪威热衷于UX、Julia编程、科学与写作。

译者 | 弯月 责编 | 张文

头图 | CSDN 下载自视觉中国

峩通过 YouTube 上的一个视频看到一位 Mac 用户在去年购买了一台 iMac这台 4000 美元的电脑配置了最大的 40GB 内存。然而后来他难以置信地看着自己花斥资购买嘚 iMac 被新型的 M1 Mac Mini 打败,而这台设备仅花了约 700 美元

在现实世界一次又一次的测试中,M1 Macs 不仅超越了顶配的英特尔 Mac而且还彻底击垮了这些电脑。佷多人都觉得不可思议他们开始探究这到底是怎么回事。

如果你也持有这样的疑问那么你来对地方了。在本文中我将深度剖析苹果嘚 M1 cpu芯片可以分为。具体来说我认为很多人都持有以下疑问:

  1. 从技术的角度来看,为什么 M1 cpu芯片可以分为会如此之快

  2. 苹果是否采用了一些非同寻常的技术?

  3. 对于英特尔和 AMD 等竞争对手来说采用相同的技术是否也很容易?

当然你可以在网上搜索这些问题的答案,但如果你想罙入了解苹果所做出的努力那么可能很快就会被高度专业的技术术语淹没。例如 M1 使用了非常宽的指令解码器、巨大的重排序缓冲区(ROB)等等除非你非常了解 CPU 硬件,否则大多数文章对你来说都是天书

为了方便理解,下面我来简要介绍一下有关 M1 cpu芯片可以分为的基础知识

什么是微处理器(CPU)?

通常我们谈论的英特尔与 AMD cpu芯片可以分为指的都是中央处理器(CPU),或称微处理器这些cpu芯片可以分为从内存获取指令,然后按照顺序执行每条指令

图:一个非常基本的 RISC CPU(不是 M1)

指令从存储器(memory)沿蓝色箭头移动到指令寄存器(register),然后由解码器(decoder)解析指令并通过红色控制线启动CPU的不同部分,最后由运算器(ALU)将寄存器中的数字相加或相减

最基本的CPU包含一系列寄存器(register)和若幹运算器(ALU),其中寄存器是命名的存储单元而运算器则是计算单元。ALU 可以执行加法、减法以及其他基本数学运算之类的操作但是,ALU 呮连接到 CPU 寄存器如果要想执行两个数字相加的运算,则必须从内存中获取这两个数字并放入 CPU

以下是 M1 上的 RISC CPU 执行的一些常见的指令示例:

上述 r1 和 r2 就是我们所说的寄存器 现代 RISC CPU 无法针对位于寄存器之外的数字进行这样的操作。例如它不能将内存中两个不同位置的数字相加。相反它必须将这两个数字放入单独的寄存器中。这就是上述示例中的前两条指令我们从内存地址 150 中提取数字,并将其放入 CPU 的寄存器 r1 中接下来,我们将地址 200 中的数字放入寄存器 r2 中只有这样,两个数字才能通过指令 add r1r2 相加。

图:一台旧式机械计算器

拥有两个寄存器、累加器和输入寄存器现代 CPU 通常拥有十几个寄存器,而且是电子的

寄存器的概念很早以前就有了。例如在上图的旧式机械计算器中,寄存器是保存两个加数的地方寄存器就是存放数字的地方。

了解 M1 的时候需要注意一点:

M1 不是 CPU它是一个集成了多个cpu芯片可以分为的整体系統而 CPU 只是其中一个cpu芯片可以分为。

简单来说M1 就是将一台完整的计算机集成到了一个cpu芯片可以分为上。M1 包含 CPU、图形处理单元(GPU)、内存、输入和输出控制器以及构成一台整体计算机的许多其他组件这就是我们所说的单片系统(System on a Chip,即SoC)

如今,购买英特尔或 AMD 的cpu芯片可以分為时实际上你得到的是一个封装了多个微处理器的cpu芯片可以分为。过去计算机的诸多cpu芯片可以分为会分散加载到主板上。

内存、CPU、显鉲、IO 控制器、网卡以及许多其他组件都连接到了主板上可以相互通信。

然而由于如今我们能够在一块硅片上放置非常多的晶体管,因此英特尔和AMD等公司纷纷开始将多个微处理器集成到一个cpu芯片可以分为上我们称这些cpu芯片可以分为为CPU核心。一个核心基本上就是一个完全獨立的cpu芯片可以分为可以从内存中读取指令并执行计算。

图:拥有多个CPU核心的微cpu芯片可以分为

长期以来要想提高性能,只需添加更多通用 CPU 核心即可然而,如今情况发生了变化CPU 市场的一位商家开始偏离这种趋势。

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

苹果并没有选择增加通用 CPU 核心他们采取了另一种策略: 添加越来越多专用cpu芯片可以分为来完成一些专门的任务。这样做的好处是与通用 CPU 核心相比,专用cpu芯片可以分为能够更快地完成任务而且耗电量更少。

这不是一个全新的做法多年来,英伟达和 AMD 的显卡中都搭载了图形处理单元(GPU)等專用cpu芯片可以分为这些cpu芯片可以分为执行与图形相关的操作要比通用 CPU 快许多。

苹果所做的只是更大胆地朝这个方向转变M1 不仅具有通用核心和存储器,而且还包含各种专用cpu芯片可以分为:

  1. 中央处理单元(CPU):单片系统的大脑负责运行操作系统和应用程序的大多数代码。

  2. 圖形处理单元(GPU):处理与图形相关的任务例如显示应用程序的用户界面,以及 2D/3D 游戏等

  3. 图像处理单元(ISP):可用于加速图像处理应用程序的常见任务。

  4. 数字信号处理器(DSP):能够比 CPU 更好地处理需要大量数学运算的任务包括解压缩音乐文件等。

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

  6. 视频编码器/解码器:处理视频文件和格式的转换,且耗能更低

  7. 安铨领域:加密、身份认证以及安全性。

  8. 统一内存:允许 CPU、GPU 和其他核心快速交换信息

这就是为什么许多人在使用 M1 Mac 进行图像和视频编辑时,嘟能看到速度提升的部分原因他们执行的许多任务可以直接在专用硬件上运行。因此价格低廉的 M1 Mac Mini 轻而易举就能够编码大型视频文件,洏昂贵的 iMac 即便所有风扇都全力运转也赶不上

在蓝色区域内,你可以看到多个 CPU 核心可以同时访问内存而在绿色框内,大量 GPU 核心在访问内存

你可能不太理解统一内存。共享内存与统一内存有何不同过去,人们不是不赞成视频内存与主内存共享吗因为这会导致性能降低。的确共享内存确实不好。原因是 CPU 和 GPU 必须轮流访问内存共享意味着二者要争用数据总线。简单来说GPU 和 CPU 必须轮流使用狭窄的管道来存儲或提取数据。

但统一内存的情况不一样在统一内存中,GPU 核心和 CPU 核心可以同时访问内存因此,共享内存没有额外开销另外,CPU 和 GPU 可以互相通知数据在内存中的位置以前,CPU 必须将数据从主内存区域复制到 GPU 使用的区域但在统一内存中,CPU 会告知 GPU:“我从内存地址 2430 开始放置叻30MB 的多边形数据”而 GPU 无需复制就可以使用这段内存。

这意味着由于 M1 上各种特殊的处理器都可以使用相同的内存池,并快速交换信息洇此可以大幅提升性能。

在统一内存出现之前Mac 使用 GPU 的方式。你甚至可以选用计算机外部安装的显卡(通过 Thunderbolt 3 线安装)有人猜测未来这种凊况仍有可能出现。

为什么英特尔和 AMD 不使用相同的战略

既然苹果的做法如此聪明,为何大家不照搬呢从某种程度上来说,有些人确实茬照抄苹果有些 ARM cpu芯片可以分为制造商在专用硬件上的投资越来越多。

AMD还尝试在某些cpu芯片可以分为上安装功能更强大的GPU并逐步采用加速處理单元(APU),向着单片系统迈进这些处理器的CPU核心和GPU核心基本上都位于同一个cpu芯片可以分为之上。

AMD Ryzen 加速处理单元(APU)在一块cpu芯片可以汾为上集成了 CPU 和 GPU(Radeon Vega)但是不包含其他协同处理器、IO 控制器或统一内存。

然而还有一些重要的原因致使他们无法完全贯彻苹果的做法。單片系统本质上是在一块cpu芯片可以分为上构建整个计算机因此,这种做法更适合于真正的计算机制造商比如惠普和戴尔等。我用汽车來做一个简单的类比:如果你的业务模型是制造和销售汽车发动机那么对你来说,制造和销售整车将是一次不寻常的飞跃

相比之下,這对于 ARM 来说并不是大问题戴尔或惠普等计算机制造商只需要购买 ARM 和其他厂商cpu芯片可以分为的授权,就可以利用各种专用硬件制作自己的單片系统接下来,他们将完成的设计移交给 GlobalFoundries 或台积电等半导体代工厂这些工厂如今就在为 AMD 和苹果生产cpu芯片可以分为。

图:台积电半导體代工厂负责为AMD、苹果、英伟达和高通等公司生产cpu芯片可以分为。

在英特尔和 AMD 的商业模式下我们遇到了一个很大的问题。他们的商业模式的基础是销售通用 CPU人们只需将其插入大型 PC 主板即可。因此计算机制造商只需从其他供应商那里购买主板、内存、CPU 和显卡,并将这些cpu芯片可以分为集成到一个解决方案中

但是,如今的发展趋势正在迅速远离这种模式在新的单片系统世界中,你无需组装来自不同供應商的物理组件相反,你需要组装不同供应商的知识产权首先,你需要从各个供应商那里购买显卡、CPU、调制解调器、IO 控制器和其他产品的设计并将其用于内部的单片系统设计。然后再通过某家代工厂来生产。

那么问题来了:因为英特尔、AMD 或英伟达都不会向戴尔或惠普发放知识产权许可,不会给他们机会制造自己的单片系统

当然,英特尔和 AMD 可能也会销售完整的单片系统但是其中包含什么呢?每個 PC 制造商对单片系统所包含的内容可能都有各自的看法英特尔、AMD、微软和 PC 制造商之间可能会出现冲突,因为这些cpu芯片可以分为需要软件支持

对于苹果来说,这并不是什么难事因为他们控制着所有环节。例如他们为开发人员提供了 Core ML 库,方便他们编写机器学习代码至於 Core ML 是在苹果的 CPU 上运行还是在 Neural Engine 上运行,并不是开发人员所关心的实现细节

加快 CPU 运行的根本难题

因此, 异构计算是 M1 cpu芯片可以分为实现高性能嘚部分原因但不是唯一的原因。M1 cpu芯片可以分为上的通用 CPU 核心 Firestorm 确实非常快这是 Firestorm 与过去的ARM CPU 的一个重大差异,过去的 ARM CPU 核心与 AMD 和英特尔的核心楿比非常弱

然而,Firestorm 击败了大多数英特尔核心而且几乎战胜了最快的 AMD Ryzen 核心。按照传统经验来看这种情况并不会发生。

在讨论 Firestorm 运行速度洳此之快的原因之前我们先来了解一下哪些核心理念可以真正加快 CPU 的速度。

原则上你可以结合以下两种策略来加快 CPU 的速度:

在上个世紀 80 年代,快速执行更多指令很容易只要增加时钟频率,指令就会加速完成一个时钟周期是计算机执行某项操作的时间。但是一个时钟周期可能不够用因此,有时一条指令可能需要多个时钟周期才能完成因为它由几个较小的任务组成。

但是如今我们几乎不可能再提高时钟频率了。经过人们十多年坚持不懈的努力如今摩尔定律已经失效了。

因此我们所能做的只能是并行执行尽可能多的指令。

并行執行大量指令的方法有两种一种是添加更多 CPU 核心。从软件开发人员的角度来看这就如同添加线程。每个 CPU 核心就是一个硬件线程如果伱不知道线程是什么,则可以将其视为执行任务的进程一个拥有两个核心的 CPU可以同时执行两个单独的任务,即两个线程而任务可以理解为存储在内存中的两个单独的程序,或者是同一个程序执行两次每个线程都需要一些记录,例如该线程在程序指令序列中的当前位置每个线程可以存储临时的结果,而且应该分开保存

原则上来说,处理器即便只拥有一个核心也可以运行多个线程在这种情况下,处悝器需要暂停一个线程将当前进程保存下来,然后再切换到另一个线程稍后再切换回去。这种做法无法带来太多性能上的提升而且呮能在某个线程需要频繁停下来等待用户输入,或网络连接速度太慢的情况才能使用以上这些可以称为软件线程。硬件线程则意味着需偠使用额外的物理硬件(例如额外的核心)来加快处理速度

然而,问题在于开发人员需要编写代码才能利用这一点。有一些任务(例洳服务器软件)很容易做到这一点例如单独处理每个用户,这些任务之间彼此独立因此拥有大量核心是服务器(尤其是基于云的服务)的绝佳选择。

图:Ampere Altra Max ARM CPU拥有 128 个核心,专为云计算而设计多硬件线程是其优势之一。

这就是为什么 Ampere 等 ARM CPU 制造商生产出的 Altra Max 等 CPU 拥有 128 个核心的原因该cpu芯片可以分为是专门为云计算而设计的。单个核心不需要拥有疯狂的性能因为在云中利用好每一瓦特的功耗,处理尽可能多的并发鼡户才是重中之重

相比之下,苹果的情况则完全不同苹果的产品都是单用户的设备。大量线程并不是他们的优势他们的设备可用于玩游戏、编辑视频、开发等。他们希望台式机拥有精美的、响应速度超快的图像和动画

桌面软件通常不会利用很多核心。例如 8 个核心对電脑游戏来说就足够了128 个核心完全是浪费。相反这些软件需要少量更强大的核心。

接下来我们要讲的内容很有意思 乱序执行是一种能够并行执行更多指令、但不需要多线程的方式。开发人员无需专门编写软件即可享受乱序执行的优势从开发人员的角度来看,似乎每個核心的运行速度都加快了

为了理解其中的工作原理,我们先来了解一些内存方面的知识请求位于某个特定内存位置中的数据会很慢。但是获取 1 个字节的延迟与获取 128 个字节的延迟并没有区别。数据是通过数据总线发送的你可以将数据总线视为连接内存与 CPU 各个部分的┅条通道或管道,数据正是通过这条管道传输的实际上,数据总线就是一些可以导电的铜线如果数据总线足够宽,则可以同时获取多個字节

因此, CPU 一次可以获取整块指令但是这些指令必须逐条执行。现代微处理器采用了乱序执行

这意味着,这些处理器能够快速分析指令缓冲区并检查哪些指令之间有相互依赖关系。我们举一个简单的例子:

乘法是相对较慢的操作假设它需要多个时钟周期才能执荇完成。这时第二条指令就需要等待,因为它需要知道放入 r1 寄存器的结果

然而,第三条指令(03 行)并不依赖于前面的计算结果因此,乱序处理器可以开始并行计算这条指令

但实际情况是, 处理器每时每刻都需要处理成百上千的指令而 CPU 能够找出这些指令之间的所有依赖关系

它会分析指令检查每条指令的输入,看一看这些输入是否依赖于其他一个或多个指令的输出这里的输入和输出指的是包含先前计算结果的寄存器。

例如指令 add r4, r1, 5 的输入 r1 依赖于前一个指令 mul r1, r2, r3 的结果。这些依赖关系链接在一起就可以形成关系图而CPU可以使用这个图进荇处理。图中的节点就是指令而边就是连接这些指令的寄存器。

CPU 可以分析这样的节点图并确定它可以并行执行哪些指令,以及在执行哪个指令之前需要等待多个相关的计算结果

尽管许多指令都可以提前完成,但我们不能将它们作为最终的结果我们不能提交这些指令嘚执行结果,因为它们的执行顺序不正确而在用户看来,这些指令都是按照发行的顺序执行的

就像栈一样,CPU 将从顶部弹出完成的指令直到遇到一条未完成的指令。

虽然上述说明不够充分但希望能让你有大致的了解。基本上你可以选择让程序员实现并行,或者让 CPU 假裝一切都是单线程执行但幕后采用乱序执行。

M1 cpu芯片可以分为上的 Firestorm 核心正是借助了出色的乱序执行功能才变得如此强大事实上,它比英特尔或 AMD 的任何产品都要强大甚至可能超过了主流市场上的任何其他产品。

为什么 AMD 和英特尔的乱序执行不如 M1

前面在解释乱序执行的时候,我略过了一些重要的细节这里需要再说明一下,否则就很难理解为什么苹果能领先而且英特尔和 AMD 很难超越。

前面说的“栈”的真正洺称叫做“重排序缓冲”(Re-Order BufferROB),它并不包括普通的机器代码指令其中的内容并不是 CPU 从内存中获取并执行的指令,后者属于 CPU 指令架构(ISA)是那些我们称为 x86、ARM、PowerPC 等的指令。

但是在内部CPU 执行的是一系列完全不同的指令集,这些指令对于程序员是不可见的我们称之为微指囹(简称 μops)。ROB 中包含的都是微指令

由于 CPU 尽一切努力并行执行指令,所以 ROB 的这种做法更实际一些原因是,微指令非常宽(包含更多比特)可能包含各种元信息。而 ARM 或 x86指令集中无法添加这么多信息因为:

  1. 这样做会导致程序的可执行文件体积膨胀;

  2. 会暴露 CPU 的内部工作原悝,是否有乱序执行单元是否有寄存器重命名等各种细节;

  3. 许多元信息仅在当前执行上下文中有意义。

你可以将这个过程理解成写程序你有一个公开的 API,需要保持稳定供所有人使用。这就是 ARM、x86、PowerPC、MIPS等指令集而微指令是那些用来实现公开 API 的私有 API。

而且微指令通常更嫆易被 CPU 处理。为什么因为每条指令只做一件非常容易的任务。正常的 ISA 指令可以非常复杂可能会引发一系列操作,因此需要翻译成多条微指令

CISCCPU 通常别无选择,只能使用微指令否则复杂的 CISC 指令会让流水线和乱序执行几乎无法实现。

而 RISC CPU 还有别的选择例如,小型的 ARM CPU 完全不使用微指令但这也意味着它们没办法实现乱序执行之类的操作。

但你可能会问你说这些有什么关系吗?为什么需要知道这些细节才能理解为何苹果超越了 AMD 和英特尔呢?

这是因为 cpu芯片可以分为的运行速度取决于填充 ROB 的速度以及使用的微指令数量。填充得越快、越多並行获取指令的可能性就越大,因此能够提高性能

机器指令由指令解码器拆分成微指令。如果有多个解码器就能并行地拆分更多指令,从而更快地填充 ROB

这里就是苹果和其他厂商出现重大差别的地方。最次的英特尔和和 AMD 的微处理器核心只有四个解码器意味着它们可以哃时解码四条指令。

但苹果有 8 个解码器不仅如此,苹果的 ROB 是英特尔和 AMD 的三倍大小可以容纳三倍的指令。没有任何主流cpu芯片可以分为制慥商的 CPU 中有这么多解码器

为什么英特尔和 AMD 不能添加更多的指令解码器?

你知道在 x86 中,指令长度约为 1~15 字节而在 RISC 上指令是固定长度。这囿什么关系

如果每条指令的长度都一样,那么将一个字节流分割并行发送给 8 个不同的解码器就非常容易。

但是在 x86 CPU 上解码器并不知道丅一条指令从什么地方开始。它必须按顺序分析每一条指令才能得知具体的长度

英特尔和 AMD 采取暴力的方式来解决这个问题,即在每个可能的开始位置尝试解码也就是说,许多错误的猜测就只能抛弃这就导致解码器变得非常复杂,因此很难添加更多的解码器但这对于蘋果不是问题,他们可以很容易地添加更多解码器

实际上,添加更多解码器会带来更多问题因此对于 AMD 而言,4 个解码器就是上限了

所鉯,M1 Firestorm 核心能在同一时钟频率下产生比 AMD 和英特尔 CPU 多一倍的指令

有人会说,可以将 CISC 拆分成多条微指令增加指令的密度,这样解码一条x86 指令僦可以达到解码两条 ARM 指令的效果

但实际情况并非如此。高度优化的x86代码很少使用复杂的 CISC 指令甚至看上去更像 RISC。

但这对英特尔和 AMD 并没有什么用因为即使 15 字节的指令非常罕见,解码器也必须处理它们这种复杂性成为了 AMD 和英特尔添加更多解码器的阻碍。

那么为什么苹果不提高时钟频率呢因为更高的时钟频率会增加cpu芯片可以分为发热。这是苹果的主要卖点与英特尔和 AMD 不同,他们的电脑很少需要散热

所鉯本质上可以说,Firestorm 核心实际上超过了 Zen3 核心Zen3 依然能与之一战,只是因为它的能耗更高发热量也更大。苹果并选择这条路

如果苹果需要哽高的性能,那么他们会添加更多的核心这样就能在保持低功率的条件下提高性能。

似乎AMD和英特尔已经陷入了困境:

  • 他们的商业模式很難设计异构计算和单片系统

  • 由于旧的x86 CISC指令集的负担很难提高乱序执行性能

但这并不意味着穷途末路。他们仍然可以通过提高时钟频率、使用更好的散热、添加更多核心、提高CPU缓存等方式但每一项都有缺点。英特尔的处境最糟糕因为他们的核心数已经不及 Firestorm,而且他们的單片系统解决方案中的 GPU 也更弱

添加更多核心的问题在于,对于一般的桌面负载而言过多核心带来的收益很低。当然对于服务器而言核心数多多益善。

但是亚马逊、Ampere 等公司都在研究 128 核心的 CPU。这就意味着英特尔和 AMD 即将面临双重夹击

但对于 AMD 和英特尔来说,幸运的是苹果并没有在市场上销售cpu芯片可以分为。所以PC 用户别无选择PC 用户可能会转而使用苹果,但毕竟这是一个缓慢的过程切换日常使用的平台並不是一蹴而就的事情。

但对于口袋里有钱、没有太多平台依赖的年轻人来说以后会越来越多地选择苹果,从而提高苹果在高端市场的占有率最终会提高苹果在整个PC市场的占有率。

M1 之所以如此之快并不是因为技术好而是因为苹果堆积了很多硬件。

M1 非常宽(8 个解码器)还有很多执行单元。它的重排序缓冲有 630 之深拥有巨大的缓存,还有大量的内存带宽非常强悍的cpu芯片可以分为,设计也非常平衡

另外,这并不是什么新技术苹果的 A 系列cpu芯片可以分为每年都在逐步提升。只不过没人相信手机上用的cpu芯片可以分为能超过笔记本电脑的cpu芯爿可以分为

京东购书, 赠送海量资源:大数据相关视频、数据集、案例等

本书主要介绍大数据可视化的基本概念和相应的技术应用全書内容共10章,分别为大数据可视化概述、大数据可视化原理、大数据可视化方法、数据可视化工具、Excel数据可视化、Tableau数据可视化、ECharts与pyecharts数据可視化、Python数据可视化、大数据可视化行业分析以及大数据可视化综合实训本书将理论与实践操作相结合,通过大量的案例帮助读者快速了解和应用大数据分析的相关技术,并且对于书中重要的、核心的知识点加大练习的比例以使读者达到熟练应用的目的。

}

本文约6300字建议阅读9分钟

英特尔囷 AMD 输给苹果M1了吗?

除了轻度办公以外Arm 架构的苹果电脑还可以打游戏、看视频、跑深度学习,效率都还不错

最近,很多人的 M1 cpu芯片可以分為版苹果 MacBook 和 Mac Mini 到货了在不少测试中,我们看到了令人期待的结果:M1 cpu芯片可以分为跑分比肩高端 X86 处理器对标的 CPU 是 Ryzen 4900HS 和英特尔 Core i9,还能跟英伟达嘚 GPU GTX 1050Ti 打得有来有回5 纳米的cpu芯片可以分为,真就如此神奇

自苹果发布搭载自研 M1 cpu芯片可以分为的 Mac 产品后,人们对 M1 cpu芯片可以分为充满了好奇各种测评层出不穷。最近开发者 Erik Engheim 撰写长文,分析 M1 cpu芯片可以分为速度快背后的技术原因以及英特尔和 AMD 等cpu芯片可以分为厂商的劣势。

关于蘋果的 M1 cpu芯片可以分为这篇文章将围绕以下问题展开讨论:

M1 cpu芯片可以分为速度快背后的技术原因。

苹果是不是采用了什么特殊的技术来实現这一点

如果 Intel 和 AMD 也想这么做,难度有多大

鉴于苹果的官方宣传中存在大量专业术语,我们先从最基础的讲起

在提到英特尔和 AMD 的cpu芯片鈳以分为时,我们通常谈论的是中央处理器(CPU)或者叫微处理器。它们从内存中提取指令然后按顺序执行每条指令。

一个基本的 RISC CPU(不昰 M1)指令沿着蓝色箭头从内存移动到指令寄存器。解码器用来解读指令的内容同时通过红色的控制线来连通 CPU 的各个部分,ALU 对寄存器中嘚数字进行加减运算

CPU 本质上是一个设备,包含许多被称为寄存器的内存单元和被称为算术逻辑单元(ALU)的计算单元ALU 执行加法、减法和其他基础数学运算。然而这些只与 CPU 寄存器相连。如果想把两个数字加起来你必须把这两个数字从内存中取出,放到 CPU 的两个寄存器中

丅面是 RISC CPU(M1 中的 CPU 类型)执行的几个典型指令示例:

此处的 r1 和 r2 是寄存器。当前的 RISC CPU 无法对不在寄存器中的数字执行示例中的运算比如不能将在兩个不同位置的内存中的数字相加,而是要将两个数字各放到一个单独的寄存器里

在上面的示例中,我们必须先将内存位置为 150 的数字放箌寄存器 r1 中然后将位置为 200 的数字放到 r2 中,只有这样这两个数字才能依据 add r1, r2 指令进行加法运算。

这种老式机械计算器有两个寄存器:累加器和输入寄存器现代 CPU 通常有十几个寄存器,而且它们是电子的不是机械的。

寄存器的概念由来已久例如,在上图的机械计算器上寄存器用来存放加起来的数字。

M1 cpu芯片可以分为不是 CPU而是把多个cpu芯片可以分为集成到了一起,CPU 只是其中的一部分

可以说,M1 是把整个计算機放在了一块cpu芯片可以分为上M1 包含 CPU、GPU、内存、输入 / 输出控制器,以及完整计算机所需的其他很多东西这就是我们经常会在手机上看到嘚 SoC(片上系统)概念。

M1 是一个片上系统也就是说,将构成一台计算机的所有部件都放在一块硅cpu芯片可以分为上

如今,如果你从英特尔戓 AMD 购买一块cpu芯片可以分为你拿到的实际上是一个微处理器包,而过去的计算机主板上是多个单独的cpu芯片可以分为

计算机主板示例,上媔包含内存、CPU、显卡、IO 控制器、网卡等部件

然而,现在我们可以在一块硅片上集成大量晶体管因此 AMD、英特尔等公司开始将多个微处理器放在一块cpu芯片可以分为上,我们将这些cpu芯片可以分为称为 CPU 核心一个核心基本上是一个完全独立的cpu芯片可以分为,它可以从内存中读取指令并执行计算

具备多个 CPU 核心的微cpu芯片可以分为。

很长一段时间以来添加更多通用 CPU 核心成为提高cpu芯片可以分为性能的主要方法,但有镓厂商没这么做

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

在提升性能的道路上,苹果并没有选择增加更多通用 CPU 核心而是采取了另一种策略:添加更多专用cpu芯片可以分为来完成一些专门的任务。这样做的好处是:与通用 CPU 核心相比专用cpu芯片可以分为可以使用更少的电流执行任务,洏且速度还更快

这并不是什么全新的技术。多年来图形处理单元(GPU)等专用cpu芯片可以分为已经存在于英伟达和 AMD 的显卡中,执行与图形楿关的操作速度比通用 CPU 快得多。

苹果只是在这个方向上走得更加彻底除了通用核心和内存之外,M1 包含了一系列专用cpu芯片可以分为:

CPU(Φ央处理器):SoC 的「大脑」运行操作系统和 app 的大部分代码。

GPU(图形处理器):处理图形相关的任务如可视化 app 的用户界面和 2D/3D 游戏。

IPU(图潒处理单元):用于加快图像处理应用所承担的常见任务

DSP(数字信号处理器):具备比 CPU 更强的数学密集型功能,包括解压音乐文件

NPU(鉮经网络处理器):用于高端智能手机,加速语音识别等机器学习任务

视频编码器 / 解码器:以高能效的方式处理视频文件和格式的转换。

Secure Enclave:负责加密、身份验证维护安全性。

这就是使用 M1 Mac 进行图像和视频编辑时速度有所提升的一部分原因许多此类任务可以直接在专用硬件上运行,这样一来相对廉价的 M1 Mac Mini 就能够轻松对大型视频文件进行编码。

你或许疑惑统一内存与共享内存有什么区别。将视频内存与主存共享的做法导致了低性能因为 CPU 和 GPU 必须轮流访问内存,共享意味着争用数据总线

统一内存的情况就不同了。在统一内存中CPU 和 GPU 可以同時访问内存,并且 CPU 和 GPU 还可以相互告知一些内存的位置以前 CPU 必须将数据从其主存区域复制到 GPU 使用的区域,而使用统一内存模式无需复制,通过告知内存位置即可令 GPU 使用该内存

也就是说,M1 上各种专有协处理器都可以使用同一内存池彼此快速地交换信息从而显著提升性能。

英特尔和 AMD 为什么不效仿这一策略

其他 ARM cpu芯片可以分为制造商也越来越多地投入专用硬件。AMD 开始在某些cpu芯片可以分为上安装功能更强大的 GPU并通过加速处理器(APU)逐步向某种形式的 SoC 迈进。(APU 将 CPU 核心和 GPU 核心放置在同一cpu芯片可以分为上)

AMD Ryzen 加速处理器在同一块cpu芯片可以分为上结匼 CPU 和 GPU,但不包含其他协处理器、IO 控制器或统一内存

英特尔和 AMD 不这么做是有重要原因的。SoC 本质上是cpu芯片可以分为上的整个计算机这使得咜非常适合实际的计算机制造商,例如惠普、戴尔计算机制造商可以简单地获取 ARM 知识产权许可,并购买其他cpu芯片可以分为的 IP来添加他們认为自己的 SoC 应该具备的任意专用硬件。然后他们将已完成的设计交给半导体代工厂,比如 GlobalFoundries 和台积电(TSMC)台积电现在是 AMD

那么问题来了。英特尔和 AMD 的商业模型都是基于销售通用 CPU(只需将其插入大型 PC 主板)计算机制造商只需从不同的供应商那里购买主板、内存、CPU 和显卡,嘫后将它们集成即可但这种方式已经渐渐淡出。

在 SoC 时代计算机制造商无需组装来自不同供应商的物理组件,而是组装来自不同供应商嘚 IP(知识产权)他们从不同供应商那里购买显卡、CPU、调制解调器、IO 控制器等的设计,并将其用于设计 SoC然后寻找代工厂完成制造过程。

泹是英特尔、AMD、英伟达都不会将其知识产权给戴尔或惠普让他们为自己的计算机制造 SoC。

当然英特尔和 AMD 可能只是开始销售完整的 SoC,但是其中包含什么呢PC 制造商可能对此有不同的想法。英特尔、AMD、微软和 PC 制造商之间可能就 SoC 要包含哪些专用cpu芯片可以分为产生冲突因为这些cpu芯片可以分为需要软件支持。

而对于苹果来说这很简单。苹果控制整个产品比如为机器学习开发者提供如 Core ML 库等。至于 Core ML 是在苹果的 CPU 上运荇还是 Neural Engine这是开发者无需关心的实现细节了。

CPU 快速运行的根本挑战

异构计算只是一部分原因M1 的快速通用 CPU 核心 Firestorm 确实速度非常快,与之前的 ARM CPU 核心相比二者的速度差距非常大。与 AMD 和英特尔核心相比ARM 也非常弱。相比之下Firestorm 击败了大多数英特尔核心,也几乎击败了最快的 AMD Ryzen 核心

茬探讨 Firestorm 的速度成因之前,我们先来了解让 CPU 快速运行的核心意义

原则上可以通过以下两种策略来完成 CPU 加速的任务:

以更快的速度顺序执行哽多指令;

在上世纪 80 年代,这很容易做到只要增加时钟频率,就能更快执行指令每个时钟周期表示计算机执行某项任务的时间,但是這项任务可能非常微小一条指令由多个较小的任务构成,因此可能需要多个时钟周期

但是现在已经几乎不可能增加时钟频率了,所以苐二个策略"并行执行大量指令"是目前研发的重心

这个问题有两种解决方法。一种是引入更多 CPU 核心从软件开发者的角度讲,这类似于添加线程每个 CPU 核心就像一个硬件线程。双核 CPU 可以同时执行两个单独的任务即两个线程。这些任务可以被描述为两个存储在内存中的单独程序或者同一个程序被执行了两次。每个线程需要记录例如该线程当前在程序指令序列中的位置。每个线程都可以存储临时结果(应汾开存储)

原则上,处理器可以在只有一个核心的情况下运行多个线程这时,处理器只能是暂停一个线程并存储当前进程然后再切換到另一个线程,之后再切换回来这并不能带来太多的性能提升,仅在线程经常悬停来等待用户输入或者慢速网络中的数据等时才使用这些可以称为软件线程。硬件线程意味着可以使用实际的附加物理硬件(如附加核心)来加快处理速度

问题在于开发者必须编写代码財能利用这一点,一些任务(例如服务器软件)很容易编写你可以想象分别处理每个连接的用户。这些任务彼此独立因此拥有大量核惢是服务器(尤其是基于云的服务)的绝佳选择。

这就是你会看到 128 核心 Ampere Altra Max ARM CPU 的原因了该cpu芯片可以分为专为云计算制造,不需要疯狂的单核性能因为在云上需要每瓦具有尽可能多的线程来处理尽可能多的并发用户。

而苹果则不同苹果生产单用户设备,大量线程并不是优势蘋果的设备多用于游戏、视频编辑、开发等。苹果希望台式机具有精美的响应图形和动画

桌面软件通常不需要利用很多核心,例如电腦游戏通常需要 8 个核心,在这种情况下 128 个核心就完全是浪费了因此,用户需要的是更少但更强大的核心

乱序执行是一种并行执行更多指令但不以多线程执行的方式。开发者无需专门编码其软件即可利用它从开发者的角度来讲,每个核心的运行速度都更快了

要了解其笁作原理,首先我们需要了解一些内存知识在一个特定的内存位置上请求数据的速度很慢,但是与获得 128 个字节相比延迟获得 1 个字节的影响不大。数据通过数据总线发送你可以将其视为内存与数据经过的 CPU 不同部分之间的一条通道或管道。实际上它只是一些可以导电的铜線如果数据总线足够宽,你就可以同时获取多个字节

因此 CPU 一次执行一整个指令块,但是这些指令被编写为一条接着一条执行现代微處理器会进行“乱序执行”。这意味着它们能够快速分析指令缓冲区查看指令之间的依赖关系。示例如下:

乘法是一个缓慢的运算过程需要多个时钟周期来执行。第二条指令仅需等待因为其计算取决于先知道放入 r1 寄存器的结果。但是第三条指令并不取决于先前指令嘚计算结果,因此乱序处理器可以并行计算此指令

但现实情况往往有数百条指令,CPU 能够找出这些指令之间的所有依赖关系

它通过查看烸个指令的输入来分析指令的输入是否取决于一或多个其他指令的输出,输入和输出指包含之前计算结果的寄存器

我们可以将这些关系鏈接在一起,形成 CPU 可以处理的详细图图的节点表示指令,边表示连接它们的寄存器CPU 可以分析这类节点图,并确定可以并行执行的指令以及在继续执行之前需要在哪一步等待多个相关计算结果。

许多指令可以很早完成但是其结果无法正式化。我们无法提交这些结果否则顺序将出现错误。指令往往是需要按照顺序执行的像堆栈一样,CPU 将从顶部一直弹出已完成的指令直到命中未完成的指令。

乱序执荇功能让 M1 上的 Firestorm 核心发挥了重要作用实际上它比英特尔或 AMD 的产品更加强大。

为什么英特尔和 AMD 的乱序执行不如 M1

“重排序缓冲区”(Re-Order Buffer,ROB)不包含常规的机器码指令即 CPU 从内存中获取的待执行指令。这些是 CPU 指令集架构(ISA)中的指令也就是我们称为 x86、ARM、PowerPC 等的指令。

但是CPU 内部会使用程序员无法看到的完全不同的指令集,即微操作(micro-op 或 μop)ROB 内全是微操作。

微操作非常宽(包含很多位)能够包含各种元信息。而 ARM 戓 x86 指令则无法添加此类信息因为会发生:

程序的二进制文件完全膨胀。

暴露 CPU 的工作原理细节比如是否具备乱序执行单元、寄存器重命洺等详细信息。

很多元信息仅在当前执行情况下才有意义

你可以将其视为,在编写程序时有一个公共 API需要保持稳定并供所有人使用,那就是 ARM、x86、PowerPC、MIPS 等指令集而微操作基本上是用于实现公共 API 的私人 API。

通常微操作对于 CPU 而言更易于使用,因为每条微指令都能完成一项简单嘚有限任务常规的 ISA 指令可能更复杂,会导致大量事情发生进而实际上转化为多个微操作。

CISC CPU 通常只使用微操作否则大型复杂的 CISC 指令会讓 pipeline 和乱序执行几乎无法实现。

RISC CPU 有一个选择所以较小的 ARM CPU 不使用微操作,但这也意味着它们无法执行乱序执行等

对于理解英特尔和 AMD 的乱序執行不如 M1,这很关键

快速运行的能力取决于你可以用微操作填充 ROB 的速度及数量。填充的速度越快这种能力就越大,你就有更多机会选擇可并行执行的指令性能就会进一步提升。

机器码指令被指令解码器分割成多个微操作如果有更多的解码器,我们就可以并行分割更哆的指令从而更快地填充 ROB。

这就是存在巨大差异的地方最糟糕的英特尔和 AMD 微处理器核心具有 4 个解码器,这意味着它可以并行解码 4 条指囹并输出微操作。

但是苹果有 8 个解码器不仅如此,ROB 还大了约 2 倍基本上可以容纳 3 倍的指令。没有其他主流cpu芯片可以分为制造商的 CPU 拥有洳此多的解码器

为什么英特尔和 AMD 不能添加更多的指令解码器?

对于 x86一条指令的长度可能是 1–15 字节不等。而在 RISC cpu芯片可以分为上指令大尛是固定的。如果每个指令具有相同的长度将字节流分割成指令并馈入 8 个不同的并行解码器将易如反掌。但是在 x86 CPU 上解码器不知道下一條指令从哪里开始,它必须实际分析每条指令判断它的长度。

英特尔和 AMD 采用暴力方式处理这一问题它们尝试在每个可能的起点上解码指令。这意味着必须处理大量错误的猜测和错误这让解码器阶段变得非常复杂,也很难再添加更多的解码器相比而言,苹果轻轻松松僦可以添加更多解码器

实际上,添加更多东西会导致许多其他问题以至于 AMD 本身的 4 个解码器基本上已经是其上限了。

而正是这一点让 M1 Firestorm 核惢在相同的时钟频率下处理的指令数量是 AMD 和英特尔 CPU 的两倍

有人可能会反驳说,CISC 指令会变成更多的微操作它们的密度更大,因此解码一條 x86 指令类似于解码两条 ARM 指令

然而实际上,高度优化的 x86 代码很少使用复杂的 CISC 指令在某些方面,它具有 RISC 风格

但这对 Intel 或 AMD 没有帮助,因为即使 15 个字节长的指令很少见也必须制造解码器来处理它们。而这会导致复杂性从而阻止 AMD 和 Intel 添加更多解码器。

}

Mac用户都应该知道 苹果cpu芯片可以分為正在快速崛起无论是从配置还是从其他方面,苹果在超越自己的同时也远远地把同行甩在后面本文将详细解答:为什么苹果的M1 运行速度会如此之快?一起来跟小编了解了解吧~

在现实世界一次又一次的测试中M1 Macs 不仅超越了顶配的英特尔 Mac,而且还彻底击垮了这些电脑佷多人都觉得不可思议,他们开始探究这到底是怎么回事如果你也持有这样的疑问,那么你来对地方了在本文中,我将深度剖析苹果嘚 M1 cpu芯片可以分为具体来说,我认为很多人都持有以下疑问:

  1. 从技术的角度来看为什么 M1 cpu芯片可以分为会如此之快?

  2. 苹果是否采用了一些非同寻常的技术

  3. 对于英特尔和 AMD 等竞争对手来说,采用相同的技术是否也很容易

当然,你可以在网上搜索这些问题的答案但如果你想罙入了解苹果所做出的努力,那么可能很快就会被高度专业的技术术语淹没例如 M1 使用了非常宽的指令解码器、重排序缓冲区(ROB)等等。除非你非常了解 CPU 硬件否则大多数文章对你来说都是天书。为了方便理解下面我来简要介绍一下有关 M1 cpu芯片可以分为的基础知识。

通常峩们谈论的英特尔与 AMD cpu芯片可以分为指的都是中央处理器(CPU),或称微处理器这些cpu芯片可以分为从内存获取指令,然后按照顺序执行每条指令

指令从存储器(memory)沿蓝色箭头移动到指令寄存器(register),然后由解码器(decoder)解析指令并通过红色控制线启动CPU的不同部分,最后由运算器(ALU)将寄存器中的数字相加或相减最基本的CPU包含一系列寄存器(register)和若干运算器(ALU),其中寄存器是命名的存储单元而运算器则昰计算单元。ALU 可以执行加法、减法以及其他基本数学运算之类的操作但是,ALU 只连接到 CPU 寄存器如果要想执行两个数字相加的运算,则必須从内存中获取这两个数字并放入 CPU 的两个寄存器中以下是 M1 上的 RISC CPU 执行的一些常见的指令示例:


上述 r1 和 r2 就是我们所说的寄存器。现代 RISC CPU 无法针對位于寄存器之外的数字进行这样的操作例如,它不能将内存中两个不同位置的数字相加相反,它必须将这两个数字放入单独的寄存器中这就是上述示例中的前两条指令。我们从内存地址 150 中提取数字并将其放入 CPU 的寄存器 r1 中。接下来我们将地址 200 中的数字放入寄存器 r2 Φ。只有这样两个数字才能通过指令 add r1,r2 相加

拥有两个寄存器、累加器和输入寄存器。现代 CPU 通常拥有十几个寄存器而且是电子的。寄存器的概念很早以前就有了例如,在上图的旧式机械计算器中寄存器是保存两个加数的地方。寄存器就是存放数字的地方

了解 M1 的时候,需要注意一点:M1 不是 CPU它是一个集成了多个cpu芯片可以分为的整体系统。而 CPU 只是其中一个cpu芯片可以分为简单来说,M1 就是将一台完整的計算机集成到了一个cpu芯片可以分为上M1 包含 CPU、图形处理单元(GPU)、内存、输入和输出控制器以及构成一台整体计算机的许多其他组件。这僦是我们所说的单片系统(System on a Chip即SoC)。

如今购买英特尔或 AMD 的cpu芯片可以分为时,实际上你得到的是一个封装了多个微处理器的cpu芯片可以分为过去,计算机的诸多cpu芯片可以分为会分散加载到主板上

内存、CPU、显卡、IO 控制器、网卡以及许多其他组件都连接到了主板上,可以相互通信

然而,由于如今我们能够在一块硅片上放置非常多的晶体管因此英特尔和AMD等公司纷纷开始将多个微处理器集成到一个cpu芯片可以分為上。我们称这些cpu芯片可以分为为CPU核心一个核心基本上就是一个完全独立的cpu芯片可以分为,可以从内存中读取指令并执行计算

长期以來,要想提高性能只需添加更多通用 CPU 核心即可。然而如今情况发生了变化,CPU 市场的一位商家开始偏离这种趋势

苹果并没有选择增加通用 CPU 核心,他们采取了另一种策略:添加越来越多专用cpu芯片可以分为来完成一些专门的任务这样做的好处是,与通用 CPU 核心相比专用cpu芯爿可以分为能够更快地完成任务,而且耗电量更少这不是一个全新的做法。多年来英伟达和 AMD 的显卡中都搭载了图形处理单元(GPU)等专鼡cpu芯片可以分为,这些cpu芯片可以分为执行与图形相关的操作要比通用 CPU 快许多苹果所做的只是更大胆地朝这个方向转变。M1 不仅具有通用核惢和存储器而且还包含各种专用cpu芯片可以分为:

  1. 中央处理单元(CPU):单片系统的大脑。负责运行操作系统和应用程序的大多数代码

  2. 图形处理单元(GPU):处理与图形相关的任务。例如显示应用程序的用户界面以及 2D/3D 游戏等。

  3. 图像处理单元(ISP):可用于加速图像处理应用程序的常见任务

  4. 数字信号处理器(DSP):能够比 CPU 更好地处理需要大量数学运算的任务。包括解压缩音乐文件等

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

  6. 视频编码器/解码器:处理视频文件和格式的转换且耗能更低。

  7. 安全領域:加密、身份认证以及安全性

  8. 统一内存:允许 CPU、GPU 和其他核心快速交换信息。

这就是为什么许多人在使用 M1 Mac 进行图像和视频编辑时都能看到速度提升的部分原因。他们执行的许多任务可以直接在专用硬件上运行因此,价格低廉的 M1 Mac Mini 轻而易举就能够编码大型视频文件而昂贵的 iMac 即便所有风扇都全力运转也赶不上。

在蓝色区域内你可以看到多个 CPU 核心可以同时访问内存,而在绿色框内大量 GPU 核心在访问内存。你可能不太理解统一内存共享内存与统一内存有何不同?过去人们不是不赞成视频内存与主内存共享吗?因为这会导致性能降低嘚确,共享内存确实不好原因是 CPU 和 GPU 必须轮流访问内存。共享意味着二者要争用数据总线简单来说,GPU 和 CPU 必须轮流使用狭窄的管道来存储戓提取数据但统一内存的情况不一样。在统一内存中GPU 核心和 CPU 核心可以同时访问内存。因此共享内存没有额外开销。另外CPU 和 GPU 可以互楿通知数据在内存中的位置。以前CPU 必须将数据从主内存区域复制到 GPU 使用的区域。但在统一内存中CPU 会告知 GPU:“我从内存地址 2430 开始放置了30MB 嘚多边形数据。”而 GPU 无需复制就可以使用这段内存这意味着,由于 M1 上各种特殊的处理器都可以使用相同的内存池并快速交换信息,因此可以大幅提升性能

在统一内存出现之前,Mac 使用 GPU 的方式你甚至可以选用计算机外部安装的显卡(通过 Thunderbolt 3 线安装)。有人猜测未来这种情況仍有可能出现

既然苹果的做法如此聪明,为何大家不照搬呢从某种程度上来说,有些人确实在照抄苹果有些 ARM cpu芯片可以分为制造商茬专用硬件上的投资越来越多。AMD还尝试在某些cpu芯片可以分为上安装功能更强大的GPU并逐步采用加速处理单元(APU),向着单片系统迈进这些处理器的CPU核心和GPU核心基本上都位于同一个cpu芯片可以分为之上。

控制器或统一内存然而,还有一些重要的原因致使他们无法完全贯彻苹果的做法单片系统本质上是在一块cpu芯片可以分为上构建整个计算机。因此这种做法更适合于真正的计算机制造商,比如惠普和戴尔等我用汽车来做一个简单的类比:如果你的业务模型是制造和销售汽车发动机,那么对你来说制造和销售整车将是一次不寻常的飞跃。楿比之下这对于 ARM 来说并不是大问题。戴尔或惠普等计算机制造商只需要购买 ARM 和其他厂商cpu芯片可以分为的授权就可以利用各种专用硬件淛作自己的单片系统。接下来他们将完成的设计移交给 GlobalFoundries 或台积电等半导体代工厂,这些工厂如今就在为 AMD 和苹果生产cpu芯片可以分为

在英特尔和 AMD 的商业模式下,我们遇到了一个很大的问题他们的商业模式的基础是销售通用 CPU,人们只需将其插入大型 PC 主板即可因此,计算机淛造商只需从其他供应商那里购买主板、内存、CPU 和显卡并将这些cpu芯片可以分为集成到一个解决方案中。但是如今的发展趋势正在迅速遠离这种模式。在新的单片系统世界中你无需组装来自不同供应商的物理组件。相反你需要组装不同供应商的知识产权。首先你需偠从各个供应商那里购买显卡、CPU、调制解调器、IO 控制器和其他产品的设计,并将其用于内部的单片系统设计然后,再通过某家代工厂来苼产那么,问题来了:因为英特尔、AMD 或英伟达都不会向戴尔或惠普发放知识产权许可不会给他们机会制造自己的单片系统。当然英特尔和 AMD 可能也会销售完整的单片系统。但是其中包含什么呢每个 PC 制造商对单片系统所包含的内容可能都有各自的看法。英特尔、AMD、微软囷 PC 制造商之间可能会出现冲突因为这些cpu芯片可以分为需要软件支持。对于苹果来说这并不是什么难事,因为他们控制着所有环节例洳,他们为开发人员提供了 Core ML 库方便他们编写机器学习代码。至于 Core ML 是在苹果的 CPU 上运行还是在 Neural Engine 上运行并不是开发人员所关心的实现细节。

洇此异构计算是 M1 cpu芯片可以分为实现高性能的部分原因,但不是唯一的原因M1 cpu芯片可以分为上的通用 CPU 核心 Firestorm 确实非常快。这是 Firestorm 与过去的ARM CPU 的一個重大差异过去的 ARM CPU 核心与 AMD 和英特尔的核心相比非常弱。然而Firestorm 击败了大多数英特尔核心,而且几乎战胜了最快的 AMD Ryzen 核心按照传统经验来看,这种情况并不会发生在讨论 Firestorm 运行速度如此之快的原因之前,我们先来了解一下哪些核心理念可以真正加快 CPU 的速度原则上,你可以結合以下两种策略来加快 CPU 的速度:

在上个世纪 80 年代快速执行更多指令很容易。只要增加时钟频率指令就会加速完成。一个时钟周期是計算机执行某项操作的时间但是一个时钟周期可能不够用,因此有时一条指令可能需要多个时钟周期才能完成,因为它由几个较小的任务组成但是,如今我们几乎不可能再提高时钟频率了经过人们十多年坚持不懈的努力,如今摩尔定律已经失效了因此,我们所能莋的只能是并行执行尽可能多的指令

并行执行大量指令的方法有两种。一种是添加更多 CPU 核心从软件开发人员的角度来看,这就如同添加线程每个 CPU 核心就是一个硬件线程。如果你不知道线程是什么则可以将其视为执行任务的进程。一个拥有两个核心的 CPU可以同时执行两個单独的任务即两个线程。而任务可以理解为存储在内存中的两个单独的程序或者是同一个程序执行两次。每个线程都需要一些记录例如该线程在程序指令序列中的当前位置。每个线程可以存储临时的结果而且应该分开保存。原则上来说处理器即便只拥有一个核惢也可以运行多个线程。在这种情况下处理器需要暂停一个线程,将当前进程保存下来然后再切换到另一个线程。稍后再切换回去這种做法无法带来太多性能上的提升,而且只能在某个线程需要频繁停下来等待用户输入或网络连接速度太慢的情况才能使用。以上这些可以称为软件线程硬件线程则意味着需要使用额外的物理硬件(例如额外的核心)来加快处理速度。

然而问题在于,开发人员需要編写代码才能利用这一点有一些任务(例如服务器软件)很容易做到这一点。例如单独处理每个用户这些任务之间彼此独立,因此拥囿大量核心是服务器(尤其是基于云的服务)的绝佳选择

个核心的原因。该cpu芯片可以分为是专门为云计算而设计的单个核心不需要拥囿疯狂的性能,因为在云中利用好每一瓦特的功耗处理尽可能多的并发用户才是重中之重。相比之下苹果的情况则完全不同。苹果的產品都是单用户的设备大量线程并不是他们的优势。他们的设备可用于玩游戏、编辑视频、开发等他们希望台式机拥有精美的、响应速度超快的图像和动画。桌面软件通常不会利用很多核心例如 8 个核心对电脑游戏来说就足够了,128 个核心完全是浪费相反,这些软件需偠少量更强大的核心接下来我们要讲的内容很有意思。乱序执行是一种能够并行执行更多指令、但不需要多线程的方式开发人员无需專门编写软件即可享受乱序执行的优势。从开发人员的角度来看似乎每个核心的运行速度都加快了。为了理解其中的工作原理我们先來了解一些内存方面的知识。请求位于某个特定内存位置中的数据会很慢但是,获取 1 个字节的延迟与获取 128 个字节的延迟并没有区别数據是通过数据总线发送的。你可以将数据总线视为连接内存与 CPU 各个部分的一条通道或管道数据正是通过这条管道传输的。实际上数据總线就是一些可以导电的铜线。如果数据总线足够宽则可以同时获取多个字节。因此CPU 一次可以获取整块指令,但是这些指令必须逐条執行现代微处理器采用了乱序执行。这意味着这些处理器能够快速分析指令缓冲区,并检查哪些指令之间有相互依赖关系我们举一個简单的例子:

乘法是相对较慢的操作,假设它需要多个时钟周期才能执行完成这时,第二条指令就需要等待因为它需要知道放入 r1 寄存器的结果。然而第三条指令(03 行)并不依赖于前面的计算结果。因此乱序处理器可以开始并行计算这条指令。但实际情况是处理器每时每刻都需要处理成百上千的指令,而 CPU 能够找出这些指令之间的所有依赖关系它会分析指令,检查每条指令的输入看一看这些输叺是否依赖于其他一个或多个指令的输出。这里的输入和输出指的是包含先前计算结果的寄存器例如,指令 add r4, r1, 5 的输入 r1 依赖于前一个指令 mul r1, r2, r3 的結果这些依赖关系链接在一起就可以形成关系图,而CPU可以使用这个图进行处理图中的节点就是指令,而边就是连接这些指令的寄存器CPU 可以分析这样的节点图,并确定它可以并行执行哪些指令以及在执行哪个指令之前需要等待多个相关的计算结果。尽管许多指令都可鉯提前完成但我们不能将它们作为最终的结果。我们不能提交这些指令的执行结果因为它们的执行顺序不正确。而在用户看来这些指令都是按照发行的顺序执行的。就像栈一样CPU 将从顶部弹出完成的指令,直到遇到一条未完成的指令虽然上述说明不够充分,但希望能让你有大致的了解基本上,你可以选择让程序员实现并行或者让 CPU 假装一切都是单线程执行,但幕后采用乱序执行M1 cpu芯片可以分为上嘚 Firestorm 核心正是借助了出色的乱序执行功能才变得如此强大。事实上它比英特尔或 AMD 的任何产品都要强大,甚至可能超过了主流市场上的任何其他产品

前面在解释乱序执行的时候,我略过了一些重要的细节这里需要再说明一下,否则就很难理解为什么苹果能领先而且英特爾和 AMD 很难超越。前面说的“栈”的真正名称叫做“重排序缓冲”(Re-Order BufferROB),它并不包括普通的机器代码指令其中的内容并不是 CPU 从内存中获取并执行的指令,后者属于 CPU 指令架构(ISA)是那些我们称为 x86、ARM、PowerPC 等的指令。但是在内部CPU 执行的是一系列完全不同的指令集,这些指令对於程序员是不可见的我们称之为微指令(简称 μops)。ROB 中包含的都是微指令由于 CPU 尽一切努力并行执行指令,所以 ROB 的这种做法更实际一些原因是,微指令非常宽(包含更多比特)可能包含各种元信息。而 ARM 或 x86指令集中无法添加这么多信息因为:

  1. 这样做会导致程序的可执荇文件体积膨胀;

  2. 会暴露 CPU 的内部工作原理,是否有乱序执行单元是否有寄存器重命名等各种细节;

  3. 许多元信息仅在当前执行上下文中有意义。

你可以将这个过程理解成写程序你有一个公开的 API,需要保持稳定供所有人使用。这就是 ARM、x86、PowerPC、MIPS等指令集而微指令是那些用来實现公开 API 的私有 API。而且微指令通常更容易被 CPU 处理。为什么因为每条指令只做一件非常容易的任务。正常的 ISA 指令可以非常复杂可能会引发一系列操作,因此需要翻译成多条微指令CISCCPU 通常别无选择,只能使用微指令否则复杂的 CISC 指令会让流水线和乱序执行几乎无法实现。洏 RISC CPU 还有别的选择例如,小型的 ARM CPU 完全不使用微指令但这也意味着它们没办法实现乱序执行之类的操作。但你可能会问你说这些有什么關系吗?为什么需要知道这些细节才能理解为何苹果超越了 AMD 和英特尔呢?这是因为cpu芯片可以分为的运行速度取决于填充 ROB 的速度以及使鼡的微指令数量。填充得越快、越多并行获取指令的可能性就越大,因此能够提高性能机器指令由指令解码器拆分成微指令。如果有哆个解码器就能并行地拆分更多指令,从而更快地填充 ROB这里就是苹果和其他厂商出现重大差别的地方。最次的英特尔和和 AMD 的微处理器核心只有四个解码器意味着它们可以同时解码四条指令。但苹果有 8 个解码器不仅如此,苹果的 ROB 是英特尔和 AMD 的三倍大小可以容纳三倍嘚指令。没有任何主流cpu芯片可以分为制造商的 CPU 中有这么多解码器

 下面,我们来看一看 RISC 的优势以及 M1 Firestorm 核心采用的 ARM RISC 架构有哪些出色表现。你知道在 x86 中,指令长度约为 1~15 字节而在 RISC 上指令是固定长度。这有什么关系如果每条指令的长度都一样,那么将一个字节流分割并行发送给 8 个不同的解码器就非常容易。但是在 x86 CPU 上解码器并不知道下一条指令从什么地方开始。它必须按顺序分析每一条指令才能得知具体的長度英特尔和 AMD 采取暴力的方式来解决这个问题,即在每个可能的开始位置尝试解码也就是说,许多错误的猜测就只能抛弃这就导致解码器变得非常复杂,因此很难添加更多的解码器但这对于苹果不是问题,他们可以很容易地添加更多解码器实际上,添加更多解码器会带来更多问题因此对于 AMD 而言,4 个解码器就是上限了所以,M1 Firestorm 核心能在同一时钟频率下产生比 AMD 和英特尔 CPU 多一倍的指令有人会说,可鉯将 CISC 拆分成多条微指令增加指令的密度,这样解码一条x86 指令就可以达到解码两条 ARM 指令的效果但实际情况并非如此。高度优化的x86代码很尐使用复杂的 CISC 指令甚至看上去更像 RISC。但这对英特尔和 AMD 并没有什么用因为即使 15 字节的指令非常罕见,解码器也必须处理它们这种复杂性成为了 AMD 和英特尔添加更多解码器的阻碍。

快了一点点那么为什么苹果不提高时钟频率呢?因为更高的时钟频率会增加cpu芯片可以分为发熱这是苹果的主要卖点。与英特尔和 AMD 不同他们的电脑很少需要散热。所以本质上可以说Firestorm 核心实际上超过了 Zen3 核心。Zen3 依然能与之一战呮是因为它的能耗更高,发热量也更大苹果并选择这条路。如果苹果需要更高的性能那么他们会添加更多的核心。这样就能在保持低功率的条件下提高性能

似乎AMD和英特尔已经陷入了困境:

  • 他们的商业模式很难设计异构计算和单片系统

  • 由于旧的x86 CISC指令集的负担,很难提高亂序执行性能

但这并不意味着穷途末路他们仍然可以通过提高时钟频率、使用更好的散热、添加更多核心、提高CPU缓存等方式。但每一项嘟有缺点英特尔的处境最糟糕,因为他们的核心数已经不及 Firestorm而且他们的单片系统解决方案中的 GPU 也更弱。添加更多核心的问题在于对於一般的桌面负载而言,过多核心带来的收益很低当然对于服务器而言,核心数多多益善但是,亚马逊、Ampere 等公司都在研究 128 核心的 CPU这僦意味着英特尔和 AMD 即将面临双重夹击。但对于 AMD 和英特尔来说幸运的是,苹果并没有在市场上销售cpu芯片可以分为所以PC 用户别无选择。PC 用戶可能会转而使用苹果但毕竟这是一个缓慢的过程。切换日常使用的平台并不是一蹴而就的事情但对于口袋里有钱、没有太多平台依賴的年轻人来说,以后会越来越多地选择苹果从而提高苹果在高端市场的占有率,最终会提高苹果在整个PC市场的占有率

M1 之所以如此之赽并不是因为技术好,而是因为苹果堆积了很多硬件M1 非常宽(8 个解码器),还有很多执行单元它的重排序缓冲有 630 之深,拥有的缓存還有大量的内存带宽。非常强悍的cpu芯片可以分为设计也非常平衡。 另外这并不是什么新技术。苹果的 A 系列cpu芯片可以分为每年都在逐步提升只不过没人相信手机上用的cpu芯片可以分为能超过笔记本电脑的cpu芯片可以分为。

}

我要回帖

更多关于 cpu芯片可以分为 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信