指令集架构 —— CISC、RISC、VLIW 与 RISC-V
第一章我们提到 X86 是 CISC、ARM 是 RISC,但只点到为止。这一篇把指令集架构(Instruction Set Architecture, ISA)拆开看:它是什么、为什么重要、各家流派怎么取舍。
什么是指令集架构
ISA 是 CPU 和软件之间的”合同”:
graph TB APP[应用程序] COMPILER[编译器] ISA[指令集架构 ISA
CPU 暴露给软件的接口] CPU[CPU 硬件实现
微架构 µarch] APP --> COMPILER COMPILER -- 编译为 --> ISA ISA -- 由硬件实现 --> CPU
合同里规定的内容包括:
- 指令格式:每条指令多少位、字段怎么布局
- 寄存器:通用寄存器、特殊寄存器、向量寄存器
- 寻址模式:直接寻址、寄存器间接、基址+变址……
- 数据类型:整型大小、浮点格式、向量类型
- 异常和中断:怎么报错、怎么响应
- 特权级别:内核态/用户态、虚拟化扩展
ISA 是稳定的”接口”,微架构(µarch)才是 ISA 的具体硬件实现。同一套 ISA 可以有完全不同的微架构(比如 Intel 的 P-core 和 E-core 都跑 x86-64)。
三大指令集流派
历史上指令集设计哲学分为三大流派:CISC、RISC、VLIW。
CISC:复杂指令集
Complex Instruction Set Computer——70 年代早期 CPU 的主流。
设计哲学:
- 用最少的机器语言指令完成所需任务
- 一条指令可以完成复杂操作(如
MOVS一次搬一串字节,REP循环) - 指令长度可变(x86 指令 1–15 字节)
- 寻址方式多样
- 对编译器友好,但 CPU 硬件复杂
代表:x86、x86-64、IBM System/360、VAX。
CISC 在编译器还很弱的年代是合理选择——人写汇编、用一条复杂指令就能搞定一件事。但当编译器成熟之后,CISC 的复杂度就成了负担。
RISC:精简指令集
Reduced Instruction Set Computer——80 年代由斯坦福(MIPS)和伯克利(RISC)项目带火。
设计哲学:
- 指令少而简单,常用指令优先实现
- 指令定长(多为 32 位),易于流水线和并行
- 大部分指令在一个周期内完成
- Load/Store 模型:只有 LD/ST 指令访问内存,其他指令只在寄存器间运算
- 寄存器多(通常 32 个通用寄存器以上)
- 对编译器要求高,但 CPU 硬件相对简单
代表:
| 架构 | 当前状态 |
|---|---|
| ARM | 服务器市场快速增长(Graviton、Grace、AmpereOne、鲲鹏) |
| POWER | IBM 大型机/小型机,企业级长青树 |
| MIPS | 嵌入式为主,龙芯曾基于 MIPS(已转 LoongArch) |
| SPARC | Oracle/Sun 体系,已边缘化 |
| Alpha | DEC,停产;技术血脉影响了 Itanium、x86-64 |
| RISC-V | 开源,2020 后快速崛起 |
VLIW:超长指令字
Very Long Instruction Word——一种”激进的并行”设计。
设计哲学:
- 一条指令字内显式编排多条并行操作(典型 4–32 个操作槽)
- 把”找出哪些操作能并行”的任务完全交给编译器
- 硬件因此可以做得非常简单
1 | |
代表:
- Intel Itanium(IA-64):押注 VLIW,最终在 2017 年停产
- TI C6000 系列 DSP
- 华为昇腾 NPU 内部架构部分采用 VLIW 思想
VLIW 的致命问题:编译器很难持续做出最优调度——它没法预知运行时的内存延迟和分支结果。这是 Itanium 失败的核心技术原因之一。
CISC vs RISC:还重要吗?
学界有个共识:现代 x86 内部其实是 RISC。
graph LR X86[CISC x86 指令] DEC[译码器
Decoder] UOP[微操作 µops
RISC 风格] EXEC[乱序执行引擎] X86 --> DEC --> UOP --> EXEC
x86 译码器把复杂指令翻译成一系列微操作(micro-operations,µops),后端是 RISC 风格的乱序执行。从 Pentium Pro(1995)就开始了。
所以”CISC vs RISC”在 2026 年更多是生态和兼容性的差异:
| x86 | ARM | RISC-V | |
|---|---|---|---|
| 指令长度 | 可变 1–15 字节 | 多为 32 位(部分 16/64) | 多为 32 位(可扩展) |
| 寄存器数 | 16 通用 | 31 通用 | 32 通用 |
| 译码功耗 | 较高 | 低 | 低 |
| 商业生态 | 最完整 | 移动+服务器+车 | 嵌入式起家,向上拓展 |
| 服务器份额(2026) | 80%+ | 15% 左右 | 极小 |
| 授权 | Intel/AMD(封闭) | ARM 公司(要付费) | 开源(免费) |
一张关键对比表
| 项 | CISC(x86) | RISC(ARM) | VLIW |
|---|---|---|---|
| 指令长度 | 可变 | 定长 | 超长定长 |
| 单周期完成指令数 | 1-3 | 4 | 20+ |
| 硬件复杂度 | 高 | 中 | 低 |
| 编译器复杂度 | 中 | 高 | 极高 |
| 译码功耗 | 高 | 低 | 低 |
| 兼容性 | x86 几十年生态 | ARM 生态完善中 | 已边缘化 |
| 服务器市场份额 | 90%+ | <10% | 几乎为零 |
国内厂商的指令集选择
国内服务器 CPU 厂商在 ISA 选择上各有路径:
| 厂商 | ISA | 来源 |
|---|---|---|
| 海光 | x86-64 | AMD Zen 1 授权,自研演进 |
| 兆芯 | x86-64 | 通过合资公司获得 VIA 授权 |
| 鲲鹏(华为) | ARMv8 | ARM 永久指令集授权(v8.2+ 自定义扩展) |
| 飞腾 | ARMv8 | ARM 永久授权 |
| 龙芯 | LoongArch | 自研指令集(早期基于 MIPS,2021 后独立) |
| 申威 | SW-64 | 自研,源于 DEC Alpha |
待补充:海光在 Zen 1 授权之后的自研演进路径细节、龙芯 LoongArch 与 MIPS 的指令兼容程度。
RISC-V:值得关注的新势力
RISC-V 是 2010 年伯克利发起的开源指令集,最大特点:
- 完全免费、可任意使用和扩展
- 模块化设计:基础 ISA 极简(约 47 条指令),扩展通过 “RV32IM”、”RV64GC” 等组合表达
- 主要扩展:M(乘除)、A(原子)、F/D(浮点)、V(向量)、C(压缩)
应用场景目前主要在:
- 嵌入式 SoC(替代 ARM Cortex-M)
- AI 芯片的控制核(很多 AI 加速器用 RISC-V 做主控核)
- 部分服务器/HPC 探索(阿里平头哥 C910、SiFive HiFive、香山)
RISC-V 服务器化的关键瓶颈是软件生态——主流 Linux 发行版、虚拟化、数据库的 RISC-V 适配仍在追赶。但它的开源属性让它在中美科技博弈背景下成为重要的”备胎”选项。
小结
- ISA 是 CPU 和软件的合约,微架构是它的硬件实现
- CISC、RISC、VLIW 三大流派——VLIW 已边缘化
- x86 内部其实是 RISC,CISC vs RISC 的争论现在更多是生态之争
- 服务器市场:x86 仍 80%+,ARM 上升,RISC-V 起势
- 国内厂商在 ISA 上的路径分裂:海光/兆芯走 x86,鲲鹏/飞腾走 ARM,龙芯/申威自研
下一篇深入 Intel 的 X86 路线图——从 Tick-Tock 到 Intel 4 制程命名,Skylake 到 Granite Rapids 的代次更迭。