CISC 和 RISC 的比较
这一节容易被读成”两张特征表对着背”。它其实有一个统一的判据,而且这个判据就是第 1 章那条 CPU 性能公式——本章第一次真正拿它做定量判断。
CISC 和 RISC 在这三个因子上的方向恰好相反,所以谁快取决于乘积,而不取决于任何单一因子。 这一句是本节的全部方法论,也是几乎所有相关判断题的判据。
机制
三个因子的方向
| 因子 | CISC | RISC | 为什么 |
|---|---|---|---|
| 指令条数 | 少 | 多(约多 20%~40%) | 一条复杂指令 vs 几条简单指令 |
| CPI | 大(2~15,指令间差别也大) | 小(流水满载 ≈ 1~1.5) | RISC 每条指令流水段整齐 |
| 时钟周期 | 长 | 短 | RISC 控制器简单、关键路径短 |
两降一升 vs 一降两升,方向完全相反。 于是:
凡是只给出一个因子就问”哪台机器快”的题,正确答案是”无法判断”。
统考的大题一定会把三个因子都给全;选择题里若只说”A 机指令条数少”就问快慢,“不能确定”往往就是正确选项。
一道定量题的完整算法
例 同一程序在两台机器上运行。 CISC 机:编译出
条指令,平均 CPI ,主频 500 MHz。 RISC 机:编译出 条指令,平均 CPI ,主频 1 GHz。
RISC 快约 5.9 倍。 注意 RISC 的指令条数确实多了 30%,但那 30% 被 CPI 上 3.8 倍的优势和时钟上 2 倍的优势彻底盖过。
这就是 RISC 论证的定量形态:认掉
方向判断题的模板
问 把某 CISC 机的一条复杂指令改由 3 条简单指令实现,程序运行时间会怎样变化?
按三因子逐个过:
| 因子 | 变化 | 说明 |
|---|---|---|
| ↑ | 一条变三条 | |
| CPI | ↓ | 每条更简单,且流水线更好切 |
| ↓ 或不变 | 控制器可能简化 |
一升两降 → 方向不确定 → 必须有具体数字才能算。 这是本节最常见的一类题,答”无法判断,需要给出三个因子的具体值”就是满分答案。
只有一种情况可以不算就答:如果某个因子完全没变,而另外两个同向,方向才确定。
完整特征对照
| 维度 | CISC | RISC |
|---|---|---|
| 指令条数 | 多(数百条) | 常用指令为主 |
| 单条指令功能 | 复杂 | 简单 |
| 指令长度 | 可变 | 定长 |
| 指令格式 | 多种,字段不固定 | 少数几种,字段固定 |
| 寻址方式 | 多(十几种) | 少(3~5 种) |
| 访存 | 任意指令可访存 | 仅 load / store |
| 指令周期 | 不等长、多周期 | 等长,CPI ≈ 1 |
| 通用寄存器 | 少 | 多(≥32) |
| 控制器 | 典型微程序 | 典型硬布线 |
| 流水线 | 难(形状不齐、变长译码) | 易 |
| 优化重心 | 硬件 | 编译器 |
| 代码密度 | 高 ✅ | 低 |
| 指令 Cache 压力 | 小 | 大 |
| 典型 ISA | x86、VAX | MIPS、ARM、RISC-V |
“代码密度”那一行是整张表里唯一 CISC 占优的项,而且它在今天依然成立——只是理由变了:当年是省主存,现在是省指令 Cache(3.5.2)。ARM 之所以搞出变长的 Thumb 指令集,正是反过来向 CISC 学这一条。
控制器搭配:典型,而非定义
| 典型控制器 | 为什么是这个搭配 | 但…… | |
|---|---|---|---|
| CISC | 微程序 | 指令多而杂,加一条指令只需加一段微码 | 现代 x86 对简单指令用硬布线快速译码,只有复杂指令走微码 |
| RISC | 硬布线 | 指令简单、格式统一,组合逻辑做得出来 | —— |
两边的定义都在指令集,不在控制器。 但因果强度不对称:RISC → 硬布线这个方向比较硬(指令不简单就没法硬布线),CISC → 微程序只是历史上的便利选择。
现代处理器为什么看起来在融合
| 现象 | 具体是什么 | 说明了什么 |
|---|---|---|
| CISC 的内部 RISC 化 | x86 把指令译码成定长的微操作 | ISA 层与微架构层可以分属两种风格(4.1.1) |
| RISC 的扩展化 | ARM 的 NEON/SIMD、RISC-V 的 M/A/F/D 扩展、ARM Thumb 的变长压缩指令 | RISC 也在借 CISC 的长处(尤其代码密度) |
| 共同技术 | 流水线、超标量、乱序执行、分支预测、多级 Cache、多核 | 这些全属微体系结构,与 ISA 风格无关 |
所以正确的表述是:CISC 和 RISC 是设计倾向的两端,不是互斥的二元标签。 判断一台机器属于哪边,看的是那张特征表上的几条(尤其”能不能任意指令访存”和”指令是否定长”),不是看它叫什么名字。
答大题的标准比较模板
被问”比较 CISC 与 RISC”时,按这个顺序展开就不会漏:
- 指令集:条数与单条复杂度(先说这一条,它是定义)
- 指令格式:定长/变长、格式种类
- 寻址方式:数量
- 访存:谁能访存(最实质的一条)
- 寄存器:数量
- 指令周期与 CPI
- 控制器:典型实现(注明”典型而非定义”)
- 流水线:难易及原因
- 优化重心:硬件 vs 编译器
- 代码密度:CISC 高
- 性能:用
说明方向相反、需具体数值
第 4 条和第 11 条是拉开分数的两条,前者是本质,后者是方法。
边界
“RISC 比 CISC 快”这个说法不严谨。 严谨的说法是:RISC 用
“RISC 指令条数少”这句话有歧义,两种读法一对一错。
- 指令系统里的指令种类少——大体对(但 RISC-V 加扩展后并不少)
- 同一程序编译出的指令条数少——错,恰恰更多
统考出的就是第二种读法,因为它出现在性能公式里。
CPI ≈ 1 是流水线满载的吞吐口径。 一条 RISC 指令从取指到写回仍要 5 个周期。又一次遇到”延迟 vs 吞吐”这条从 3.1.2 立起来的主线。
微程序 / 硬布线是典型搭配,两边都不是定义。 这一条两页都强调过,因为它是判断题的高频陷阱。
代码密度是 CISC 唯一保住的优势,而且它的收益已经从”省主存”转成了”省指令 Cache”。 若题目问”CISC 在现代仍有何优势”,答这一条。
不要用”x86 是 CISC 所以慢”来解释性能差异。 x86 的微架构是 RISC 式的,它的性能问题(如果有)主要来自变长指令的译码开销和为兼容性常驻的译码器面积/功耗,不是来自”指令复杂”本身。
对照速查
| 因子 | CISC | RISC |
|---|---|---|
| 少 | 多 20%~40% | |
| CPI | 大 | 小(≈1) |
| 长 | 短 | |
| 乘积 | 必须算,不能猜 |
| 判断 | 对错 |
|---|---|
| RISC 一定比 CISC 快 | ❌ |
| RISC 编译出的指令条数更少 | ❌(更多) |
| RISC 的指令种类比 CISC 少 | ⚠️ 大体对,但不是定义 |
| RISC 的 CPI 更小 | ✅ |
| RISC 的时钟周期更短 | ✅ |
| 只知道 A 机指令条数少,就能判断 A 更快 | ❌(三因子方向相反) |
| CISC 必须用微程序控制 | ❌ |
| RISC 必须用硬布线控制 | ❌(因果较强,但仍非定义) |
| CISC 代码密度高 | ✅(唯一占优项) |
| RISC 更适合流水线 | ✅ |
| 现代 x86 已经变成 RISC | ❌(ISA 仍是 CISC) |
| 超标量、乱序、分支预测是 RISC 专有 | ❌(属微架构,与 ISA 风格无关) |
考点
- 判据是性能公式
;CISC 与 RISC 在三因子上方向相反 - 只给一个因子问快慢 → “无法判断”
- RISC 认掉
的损失,换 CPI 与 的两笔收益 - 最实质的两条分界:能否任意指令访存、指令是否定长
- “指令条数少”两种读法:指令种类少(大体对)/ 程序指令条数少(错,更多)
- CPI≈1 是吞吐口径
- 代码密度是 CISC 唯一保住的优势,收益已从省主存转为省指令 Cache
- 微程序 / 硬布线都是典型搭配,不是定义
- 现代 x86:CISC 的 ISA + RISC 式的微架构;流水线/超标量/乱序与 ISA 风格无关
链接
- 🏠 返回总览:计算机组成原理第 4 章:指令系统总览
- ⬅️ 上一节:4.4.2 精简指令系统计算机(RISC)
- 🔗 1.3.1 计算机的主要性能指标(
的出处) - 🔗 4.1.1 指令集体系结构(ISA 与微体系结构分层)
- 🔗 5.5 指令流水线(本地资料)(CPI 收益的兑现处)
- 🔗 3.5.2 Cache 的基本工作原理(代码密度与指令 Cache)
- 📖 名词库:第 4 章名词库