最近这段时间数码圈里最火的莫过于苹果最新推出的三款基于自研芯片 M1 的电脑了,分别是 MacBook Air、13 寸的 MacBook Pro 以及 Mac Mini。其热度也是久居不下,哪怕距离发布会已经过去 10 多天了,却仍然能看见各种评测视频、文章层出不穷。在一些平台搜索 MacBook M1 的相关视频、文章,无一例外都是:Apple 真香、性能起飞、虐杀英特尔等等这类词汇。 最近新出的拆解视频我也有看了一些,可以发现其实新出的 Mac 在模具方面和前几年相比没有什么太大的变化,最大的亮点在于便是其自研的 ARM 芯片 M1 了。

此次的 M1 芯片的出现,带火了另一个名词,ARM 架构。同时也让一个探讨许久的问题又重新浮出水面:ARM 芯片真的会超越 x86 芯片吗?

本文先不探讨 M1 芯片的设计思路,先来认识学习下两个经常听见但有可能并不太清楚的名词:ARM 与 x86。

ARM 与 x86

随着信息技术的普及,在现在,相信你随便找一个人问他知不知道 CPU 是什么,我想他的答案都会是肯定的。但如果你再问他,知道 CPU 的 x86 架构和 ARM 架构吗,我想一些计算机专业的同学可能都不会太清楚,因此在谈此次苹果的 M1 芯片之前,我们先来聊一聊 ARM 与 x86。

时下「打工人」这个名词很火,而 CPU 就是整个计算机中最勤劳且最核心的打工人。x86 和 ARM 便是 CPU 中两种不同类型的打工人,这两种架构很大一个区别就是指令集。

架构?指令集?

看到这里你是不是很疑惑,架构到底是什么?指令集又是什么?别急,我们还是以打工人为例,将 CPU 代入该角色来说明。

事实上,CPU 做的事情很简单也最核心,简单来说就是接收指令+运算。CPU 和千千万打工人一样,首先要有正常的工作能力(即执行能力/运算能力),然后又有足够的逻辑能力(能明白做事的顺序),最后还要有一定的理解能力,能听懂别人的话(即指令集),才能正常工作。而把这些集中在一起就构成了所谓的「架构」。你可以将「架构」理解为一套**“工具”、“方法”和“规范”的集合**。

不同的架构之间,工具可能不同,方法可能不同,规范也可能不同,这也造成了它们之间的互不兼容——毕竟再大的官威也不能拿前朝的剑斩本朝的官。

指令集的种类

指令集说白了是 CPU 所能看懂的语言,从 CPU 发明到现在,出现过非常多种架构,从我们熟悉的 x86,ARM,到不太熟悉的 MIPS,IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即“复杂指令集”与“精简指令集”。因此要想了解 x86 和 ARM,就得先了解精简指令集(RISC)和复杂指令集(CISC) 。

再以打工人为例,有两类打工人,一类是对领导言听计从,上头说一件事,他做一件事,这种就是**「精简指令集」。另一种比较滑头,不需要上头把每件事都说清楚,只要上头简单的发送个指令,他就会自动去完成了,这种就是「复杂指令集」**。

比如,同样是对于领导说了一句「你把这份文件送到王总那」这个操作,第一个打工人可能需要问清楚领导,是哪个王总,什么时候送到,王总的位置在哪。而第二个打工人可能拿了文件就自己去查是哪个王总以及王总的位置了。

这就是“复杂指令集”和“精简指令集”的逻辑区别。简单来说复杂指令集就是将很多个操作集中在一个指令中,这样会显得更加智能些,但同时功耗也会更大(毕竟猜领导心思是需要费脑子的)而精简指令集则相反。因此,这两种指令集之间,最大的区别在于它们的设计者考虑问题方式的不同

而我们所说的 x86 架构就是复杂指令集(CISC)的代表,ARM 架构是精简指令集(RISC)的代表,甚至 ARM 的名字都是直接表明了它的技术:Advanced RISC Machine——高级 RISC 机器。

优劣

看到这可能有人说,明显是复杂指令集好啊,同样数量的指令,复杂指令集包含的操作更多,这样你想完成一件较为复杂的事情是可能只需要发送一个指令就好了,要是精简指令集的话,你还得发送好几个指令才可以。

事实上,任何事物其本质都具有二重性,有利自然就会有弊,这是自然法则。因此我们根本不好去判断它们之间到底谁好谁坏。

而且也正是复杂指令集和精简指令集之间设计思路差异之大,直接导致了二者在应用场景分道扬镳——复杂指令集更加专注于高性能但同时高功耗的实现,比如大型服务器、高性能笔记本等,最常见的就是 Intel 和 AMD 的桌面处理器。

而精简指令集则专注于小尺寸低功耗领域,例如智能手机、手表、平板等,比如高通、三星、联发科、华为、苹果等。

在执行高密度的运算任务的时候复杂指令集就更具备优势,而在执行简单重复劳动的时候精简指令集就能占到上风,所以,抛开使用场景谈优劣就是耍流氓

x86 名称的由来

相比于 1991 年诞生的 ARM 架构,1978 年诞生的 x86 架构更像是一位老者。现在想想,x86 架构会采用复杂指令集也不难理解,在当时计算机资源相对缺乏的年代,当然是要用最少的机器语言指令来完成尽可能多的计算任务,至于功耗什么的?在那种应用场景下真的那么重要吗?显然不是。

那为什么他要叫 x86 架构呢?

事情要从 1978 年 6 月 8 日说起,Intel 发布了一款新型的微处理器“8086”。这款处理器在刚出现时并没有得到什么关注,可后来 IBM 采用了 8086 制造出名噪一时的 IBM PC 机,直接带动了 Intel 成为全球首屈一指的芯片巨头,不仅仅使 Intel 平步青云,更是成为了业界的一种标准。

而后出现的 80286/80386/80486/80586,都是从当初的 80x86 一脉相承下来的架构,只是不断优化、扩充功能、提升性能而已。而其他 x86 处理器厂商,比如 AMD、威盛、全美达(已退出 x86 领域)等,其产品也都兼容 x86 架构。

因此,之所以叫 x86,实在是因为应用得过于广泛才导致 x86 直接成为了其代名词。

x64 又是什么?

除去 x86,还有很多人看见过 x64,而且一度认为 x86 就是 32 位的,x64 就是 64 位的,其实这是一个不怎么正确的理解,但在说这之前,我们先来说一下 32 位、64 位中的**「位」**指的是什么。

我们可以简单的把 CPU 理解为由多个晶体管组合而成的器件,晶体管就是微型电子开关,每个开关有一个操作,每个开关有两种状态:ON(开)和 OFF(关),这一开一关就相等于晶体管的连通与断开,而这两种状态正好与二进制中的基础状态“0”和“1”对应!不同数量、不同位置的 01 可以组合成不同的指令、数据,从而产生无限多的可能性!(这也是我的公众号名称 01 二进制的由来)

再回到 CPU,CPU 中有一块区域叫通用寄存器,是专门用于存放指令的,如果通用寄存器的数据宽度为 64 位(可以简单理解为这个寄存器有 64 个晶体管),也就是说处理器一次可提取 64 位数据(一次提取 8 个字节的数据),比 32 位(一次提取 4 个字节的数据)提高了一倍,理论上性能会相应提升 1 倍。

再回到 x64 和 x86 的问题,x86 的确是 Intel 的开发的一种 32 位指令集,但随着硬件技术的进步,CPU 开始迈向 64 位的时候,Intel 竟然选择不兼容 x86,而是另辟蹊径,选择了推倒重来,重新设计指令集,被称之为 IA-64,。但是 IA-64 并不与 x86 兼容,且市场反应较冷淡,同时受制于多个专利权,使其他厂商不能模仿,规模没有很大。于是就被另一家芯片制造商 AMD 抢先制作出了兼容 X86 架构的 64 位的商用 CPU,AMD 称之为 AMD64,面世之后获得了用户的一致好评。再后来 Intel 只得放弃 IA-64,选择支持 AMD64 的指令集,但是为了自身的面子换了个名字,叫 Intel 64,但其核心与 AMD64 几乎相同。

再后来苹果公司和 RPM 包管理员以“x86-64”或“x86_64”称呼此 64 位架构。甲骨文公司及 Microsoft 称之为“x64”。BSD 家族及其他 Linux 发行版则使用“amd64”,32 位版本则称为“i386”(或 i486/586/686),Arch Linux 用 x86_64 称呼此 64 位架构。 自此 x64 这一名称开始流行起来。

扩展性

说完了这些,我们再来回想一下生活中常见的一个应用场景。我们给电脑新增一个固态硬盘、扩展一下内存是不是很容易,买根内存条自己都能装上去。但如果你想给你的手机扩容到 512G 是不是就很麻烦,不仅要去专门的手机店,还要花大价钱。不知道各位读者有没有想过这背后的原因?

这其实也是和 CPU 的架构设计有关系。

x86 结构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,而且 x86 结构的电脑出现了近 30 年,其配套扩展的设备种类多、价格也比较便宜,所以 x86 结构的电脑能很容易进行性能扩展,如增加内存、硬盘等。

ARM 结构的电脑是通过专用的数据接口使 CPU 与数据存储设备进行连接,所以 ARM 的存储、内存等性能扩展难以进行(一般在产品设计时已经定好其内存及数据存储的容量),所以采用 ARM 结构的系统,一般不考虑扩展,你买来是多大内存的手机就是多大的内存。基本奉行“够用就好”的原则。这一点在下一篇文章对于 M1 芯片的介绍中我会重新提及。

授权

x86 架构芯片的制造商,大家应该只听过 Intel 和 AMD,可为什么 ARM 架构芯片的制造商有那么多公司?

其实道理很简单,简单来说就是:ARM 公司不生产芯片,只提供一个芯片设计的 Idea。

ARM 公司它不制造、不销售任何芯片,只是自己设计 IP,包括指令集架构、微处理器、图形核心、互连架构,然后谁喜欢就把授权卖给谁。大多数生产 ARM 芯片的公司,例如三星、苹果、高通,他们都获得了 ARM 公司的架构级授权,即允许在 ARM 指令集基础上根据需要创建出自己的内核架构。

可以说,作为一家不生产芯片的芯片厂商,ARM 在全球范围内支撑起了各种嵌入式设备、智能手机、平板电脑的运行,正是他的这种机制,让各个企业得以自己定制芯片架构,让 ARM 生态得以大放异彩,甚至一度有超越 x86 的势头。

相比之下,x86 的授权就没有这么灵活了。以 Intel 和 AMD 这两家公司为代表,分为两种:

首先是 Intel 那样的,从头到尾自己大包大揽,架构和芯片的设计、生产一律不依靠任何人。这样做是需要极其雄厚、全方位的实力做保障的,得有钱、有人、有技术。好处当然也是很明显的,不但能完全自己把握自己的命脉,利润也是极其可观,Intel 几乎任何产品都可以享受非常高的利润,想卖多少钱就可以卖多少钱。

另外一种是无工厂模式(Fabless)。NVIDIA 就是这样,AMD 实在耗不过 Intel 就也变成了这样。这类企业只是自己设计芯片,制造则交给代工厂,比如台积电、联电、GlobalFoundries、三星电子。好处很明显了,负担很轻,自己只管设计就行了,不用耗费巨资去兴建晶圆厂、开发新工艺,但坏处同样很突出:你设计出来了,能否造出来、即便造出来又是个什么样子你就无法做主了,得看代工伙伴的能耐

这两年,英特尔始终在 14nm++,甚至被人调侃成牙膏厂。而与此同时,随着台积电 5nm 工艺的提升,AMD 又崛起了。让我们大声说一句:AMD,YES!

最后

以上就是本文的全部内容了,说好的介绍 M1 芯片的,结果竟然花了这么多字来介绍 x86 和 ARM 的事情,不过有了这些前置知识,对于我们理解下一篇文章也是极好的。

下一篇文章我将会根据目前已有的资料讲解一些与苹果 M1 芯片相关的知识,如果你觉得本文对你有所帮助,不妨点个赞、关注支持一波。你们的支持是我更新的最大动力。