我们在开始分享今天的内容之前,先思考一下,为什么 Intel 会做行业第一?

因为它有 掌握成本结构的 IDM 模式,有 符合摩尔定律的 Tick-Tock 策略,这些都对。但除此之外,还有一个非常重要的因素,那就是 Intel 掌握了 x86 指令集。
想想为什么 AMD 能与 Intel 常年竞争?AMD 甚至在濒临破产的边缘,连总部大楼都卖了还能起死回生,重新来个 AMD YES?就是因为 AMD 和 Intel 分享了 x86 的指令集。
Intel 的 IDM 模式与 Tick-Tock
可能有的同学不了解什么是 IDM 模式。简单来说,它是指从设计、制造、封装测试到销售自有品牌 IC 都一手包办的半导体垂直整合型公司。

图:集成电路产业链
其模式特点是集芯片设计、芯片制造、芯片封装和测试等多个产业链环节于一身;早期多数集成电路企业采用的模式;目前仅有极少数企业能够维持,如三星、德州仪器。

图:Fabless、Foundry、OSAT、IDM 模式公司典型代表
上图中的 OSAT,全称为 Outsourced Semiconductor Assembly and Testing,就是「外包半导体(产品)封装和测试」,是为一些 Foundry 公司做 IC 产品封装和测试的产业链环节。
Foundry:在集成电路领域是指专门负责生产、制造芯片的厂家。Foundry 原意为铸造工厂、翻砂车间、玻璃熔铸车间,从字面意思也能看出它与集成电路的联系:硅集成电路的制造也跟“玻璃”和“砂”有关。
Fabless:是 Fabrication(制造)和 less(无、没有)的组合,指「没有制造业务、只专注于设计」的集成电路设计运作模式,也用来指代未拥有芯片制造工厂的 IC 设计公司,经常被简称为“无晶圆厂”。通常说的 IC design house(IC 设计公司)即为 Fabless。

图:2019 年全球头部 IC 公司市场份额占比
而 Tick-Tock 策略,指 Intel 从 2008 年引入的一套 CPU 研发和生产节奏:每一代 CPU 都会对应 Tick 或者 Tock。
- 如果这代 CPU 对应 Tick,那么这一代 CPU 相比前一代将会采用升级的制造工艺,例如从 22nm 到 14nm 的制造工艺提升;
- 如果这代 CPU 对应 Tock,那么这一代 CPU 将会进行处理器微架构升级,例如支持新功能。

图:Tick-Tock 策略
今天,我们就聊聊指令集。简单聊聊 ARM 和 RISC-V 这两个在业内比较有话题性的指令集吧。
先来说说定义,什么叫指令集呢?
业界泰斗、ACM 和 IEEE 两院院士、2017 年图灵奖得主、RISC-V 基金会的董事会副主席 David Patterson 给了一个非常通俗的定义:软件通过一个专业词汇上称为指令集的东西和硬件讲话。换句话说,指令集是软硬件之间沟通的桥梁。
如果在晶体管、集成电路和摩尔定律之外,再给一个必须反复强调的重点概念,那就是指令集。
你可能平时看新闻时,会看到 ISA、架构、指令集这些词混着用,容易产生疑惑。这里先把概念放到同一张桌面上:ISA = 指令集 = 架构,基本指的是同一个层面的东西。而实现了一个指令集的 CPU,叫微架构。
举个例子:ARMv 这是一个指令集,也是一个架构版本。ARM 的 Cortex-A72 处理器,就是一个实现了 ARMv8 指令集的具体 CPU,是一个微架构。ARM 的 Cortex-A72 是一个支持 ARMv8 指令集的 CPU IP,本质是一堆 RTL 代码。瑞芯微的 RK3399 芯片,就是一个集成了 2 个 Cortex-A72 之后的芯片,是一个物理体,这个芯片支持 ARMv8 指令集。凡是支持 ARMv8 的软件,都可以在 RK3399 上运行。
复杂的还是精简的?
指令集诞生后,CPU 厂商开始整理、规范这些指令集,其中就包括英特尔。英特尔在它非常成功的一款处理器 8086 中,开始加入大量指令,以提高计算效率、增强 CPU 性能。与此同时,另外一种思想也在悄悄萌芽。
CPU 的指令集是一系列功能的集合。指令集诞生的原因,一方面是人们希望软件编写更有效率,另一方面也符合事物发展中规范化、模块化的需求。但是,在所有指令集中,经过分析和统计,有一个很经典的现象:只有 20% 的指令会在 80% 的场合都用到,而绝大部分 80% 的指令只有 20% 的场合需要出现。因此便有了后来的 RISC-V。
从指令集到硬件、软件生态
当我们说 ARM 的时候,我们不太关注这家拥有 6000 员工、总部在英国但被软银收购后已成为一家日本公司的企业故事,也不太会盯着网上公开可见的那本 5000 多页的 ARMv8 指令集手册。我们更常提到的是硬件侧:高通骁龙、联发科天玑、华为麒麟、三星 Galaxy、AWS Graviton、苹果全家桶;以及软件侧:Android、iOS、Red Hat、Ubuntu、SUSE、麒麟 OS,等等——它们都在 ARM 的生态系统里。我们真正关注的,是整个 ARM 生态。
类似地,我们在说 x86 的时候,也不仅仅指 Intel 和 AMD,还会把微软、Linux、Oracle、SAP 等生态参与者算进来。但 x86 并不是一个公开授权的指令集。虽然并不仅仅只有 Intel 和 AMD 两家在做,但对于新入局者来说,做 x86 指令集的机会几乎微乎其微。
相对来说,ARM 和 RISC-V 都是开放授权的指令集:ARM 是商业授权指令集,RISC-V 是开源的指令集。至于 CPU 核(也就是微架构),两家都可以是商业授权模式——都要付费。
在这里如果你还想继续延伸阅读类似“体系结构/生态/工程落地”的话题,可以去 计算机基础 板块顺着 ISA、微架构、编译器与操作系统这条线系统梳理一下。
2017 年,以微处理器分析闻名的行业分析公司 Linley Group 在一次 RISC-V 会议上做开场主题演讲时,展示过一页最受欢迎的指令集。如果按支持不同指令集的 CPU 个数来看,ARM 是最多的,而且是压倒性优势;但如果按营收来算,x86 因为高单价(ASP,平均销售价格)是最赚钱的指令集。也就是说,目前这两个最流行的指令集,一个赚了钱场,一个赚了人场。

图:2017 年统计最受欢迎的指令集
当年 Intel 推出 x86 指令集的时候,已是万人大厂,还拿下了 PC 这个关键市场;而彼时微软才刚刚创立,不足 10 人。因此,这是一个先建硬件再建软件的历程。
ARM 则靠着灵活的授权模式,搭着当年德州仪器的大船切入手机市场,并在功能机年代拿下手机这个关键市场。然后是先有诺基亚的手机操作系统塞班,再有 Android。
移动互联网时代,ARM 也算踩准了节奏。Intel 没有答应苹果的定制要求,因此苹果就选了 ARM 这个现成的 CPU IP,使用既有的指令集,再搭建 iOS 系统。于是,ARM 赶上的是硬件统一、软件分裂,然后对齐到硬件上的过程。
那么开始于 2010 年的 RISC-V 呢?我推荐你读一下中国科学院计算技术研究所包云岗老师的解读和介绍。

图:RISC-V-Reader-Chinese-v2p1 Reference Card
包老师团队翻译了 RISC-V 手册,副标题是《一本开源指令集的指南》( http://staff.ustc.edu.cn/~xhzhou/reference/RISC-V-Reader-Chinese-v2p1.pdf )。
在这里我就简单从我的角度聊聊 RISC-V
RISC-V 诞生于美国 UC Berkeley 大学,最初是个开放为教学服务的指令集。但 RISC-V 因为有着精简、高效、低能耗、模块化、可拓展、免费开放、无历史负累低效指令等优势,很快就出圈了。因此 RISC-V 团队在认识到它的价值之后,决定将之推向市场,进行商业化探索。
RISC-V 架构秉承简单的设计哲学,完全抛弃历史包袱,从轻上路。借助计算机体系结构学界多年的积累,它已经发展为比较成熟的技术体系。
RISC-V 基础指令集只有 40 多条;加上其他模块化扩展指令,总共也就是几十条指令。RISC-V 的规范文档仅有 145 页,而“特权架构文档”这样重要的内容,篇幅也仅为 91 页。
如果说 ARM 借助 IP 授权的商业模式,降低了 CPU 设计难度,让信息技术世界进入泛处理器时代;那么 RISC-V 则以免费开放的开源指令集模式,进一步降低了 CPU IP 的设计门槛,让芯片行业进入到一个满是 CPU IP 的时代。RISC-V 目前已经有 200 多家成员,你可以看这张大厂 logo 云集图片(来自 RISC-V 基金会)。

图:RISC-V 基金会成员
不过技术优势和商业模式优势,最终还得落到“能不能赚到钱、能不能规模化”上。目前所有参与 RISC-V 的企业,其实还是小公司居多,或者是大公司的小项目有所涉及——还没有特别赚钱的。
今天的精简与复杂
早期,ARM 是 RISC 的代表,而 x86 是 CISC 的代表。传统观念里,RISC 指令更精简、效率更高,但今天的 CPU 世界里,这个观念已经不够准确了。
从 RISC 概念提出之初,相比于 CISC 的区别大致在三个方面:
- 指令数量更少而且功能更简单。实现指令消耗的晶体管更少;单一指令的执行时间更短,更容易提高 CPU 工作频率;
- 没有内存操作数。相同功能的单一 CISC 指令实现的功能,需要更多的 RISC 指令组合实现,最起码要分拆为“从内存加载数据”和“执行相同计算”的两条 RISC 指令;
- 定长指令,从指令数据流中截取、提取指令更简单。
RISC 的第 1、3 个优势,是建立在半导体集成电路普及、晶体管工作频率不断提升、存储器成本不断下降的基础上的。
在半导体集成电路尚未流行,电路基础元件是各种电子管、CPU 每秒只能处理不到 100 万条指令、不到 1MB 容量内存的计算机采购成本还需要上百万美金的年代,显然 CISC 是性能更高且成本更低的方案。
但到了今天,x86 CPU 内部都已经把传统的 x86 指令分解为类 RISC 的微操作(Micro Operation,uOP)。这些 uOP 都不支持内存操作数(LOAD/STORE 这样的内存操作指令,地址其实是即时操作数),因此第二点区别已经没有了。
今天的 x86,对很多使用频率低且功能复杂的指令,从某个角度看其实已经被“放弃”了。为了兼容性,采用一种叫微码序列器(microcode sequencer)的机制来对这些指令解码。不同于把内存操作指令分解为 load 微操作、同功能微操作、store 微操作,这类复杂指令并没有对应的同功能微操作,而是用多条简单功能的 uOP 组合去实现单条指令的功能。
所以,今天 CISC 和 RISC 在第一点上的差别也几乎可以忽略了。
而第三点:定长指令带来的解码简单,才成为今天 RISC 区别于 CISC 的最大优势。CISC 的变长指令,导致 CPU 解码器在分析完一条指令之前,无法确定下一条指令的起始地址。因此在一个时钟周期内能解码完毕的指令数量很难提升。
目前 x86 两家 CPU 厂商,最高解码数量分别是 Intel 的 5 条指令和 AMD 的 4 条指令(不是说 Intel 的解码性能一定更好,因为 Intel 是 1+4,5 条指令只能有一条复杂指令,其它 4 条必须是有对应 uOP 的简单指令;而 AMD 的可以 4 条全部是复杂指令)。
RISC 因为是定长指令,因此理论上可以有任意多个解码器对任意多条指令进行解码。当然,这要付出其他代价:
- 更多解码器需要更多晶体管;
- 解码出来的大量 uOP 需要更宽的超流水线、更多执行单元处理,都会耗费更多晶体管;
- 指令间一旦出现数据依赖,需要更多条目的乱序缓冲区(Re-Order Buffer,ROB)来临时存放堵塞的 uOP;
- 最后还需要更复杂的乱序执行算法,对更大量的 uOP 分析,决定哪些指令可以提前执行。
因此,RISC 可以做出架构很宽的 CPU,例如 Apple Silicon 的 A 系列以及从 A 系列衍生的 M1,IBM 4/8 SMT 的 POWER,这些 CPU 单个核心的 IPC 都比 CISC 的 x86 强很多。
CISC 借鉴 RISC 的思想,让自己获得了新生。RISC 指令简单且相对固定,处理快速,设计上甚至可以用更长的流水线来达到高频率,并获得更优秀的效能。
但 RISC 的主要问题在于:指令集简单意味着在处理一些复杂应用时,需要读入的指令总数更多,耗费时间也更多——部分场合下性能不理想,这是 RISC 的硬伤。因此在 RISC 的发展中,RISC 也在逐渐注入 CISC 的思想,比如紧跟时代加入一些新的指令集,更进一步优化内部架构等。
RISC 发展到现在,指令也逐渐增多,浮点计算等重要性能也日益强大。不但逐渐增强浮点计算性能、新增专门的浮点指令,还在现有基础上推动高性能 ARM 处理器的发展,以增强应对市场变化、特别是对 x86 处理器竞争的能力。
未来的处理器:功耗更低,效能更高
从目前 CPU 的发展来看,无论是 ARM、x86,还是 RISC-V,除了努力巩固自己的性能优势、加强产品性能外,也都在积极吸取对方产品的特色,取长补短,期望有所突破。不过无论如何,未来肯定在朝着高性能、低功耗的方向发展。
移动计算大潮已经来临,竞争也愈发激烈。但归根到底,这是性能功耗比的竞争:谁能在低功耗下提供高性能,谁就更有机会获得成功。未来的处理器,功耗会更低,效能会更高。
那什么算是商业成功呢?
依据我的经验,以及总结 ARM 成功的历史,我列了三条 RISC-V 作为指令集的成功标志:
- 最新工艺的 SoC 量产
- 有软件支持的里程碑
- 支持杀手级应用,或者说核心市场的 25% 市场份额
我觉得达到任意一条即可,当然最终可能都会有。但更关键的是,成功的起点往往是先拿下其中之一。
看到这里,如果你对 RISC-V 仍然感兴趣,我建议你去读一下 John Hennessy 和 David Patterson 这两位图灵奖获得者在 2019 年发表的文章《计算机架构的新黄金时代》(中文版:吴进《2018 年图灵讲座:计算机体系结构的黄金时代》)。你可能会对 RISC-V 有一个新的视角:如果把它当通用 CPU,它生得晚了;可如果把它当作领域专用架构 DSA(Domain Specific Architecture),这种模块化设计非常有价值,而且它是先立标准、开源开放——碎片化的生态累积起来更灵活更高效,反而更有机会做大。
但我想说,生态始终还是要统一的:要有人掌握“灵活”和“标准”之间的平衡,否则软件投资无法得到保障,最终还是一盘散沙。
最后,我用一张 1992 年微处理器论坛的老照片作为结尾。指令集并不算一个特别有技术难度的项目。1960 年代,IBM 的每台计算机都有自己的指令集和工具;1992 年,那张图上也是满满的指令集。都说芯片这行做公司容易死,但图里的公司还剩下了大半,而指令集就剩下两个了。

图:1992 年的指令集
计算机指令集的发展,是“长坡滚雪球”:要有核心,不能碎,或者说生态不能分裂,还要持续稳定地不停滚动——保持演进、与时俱进。当然还要这个“坡”够长够大,才能在后期形成“如雪山压顶”之势,拿到容量足够大的核心市场。
参考