计算机体系结构学习指南
用于自己学习计算机体系结构的指南
适用教材:《计算机体系结构:量化研究方法(第6版)》 / Computer Architecture: A Quantitative Approach, 6th Edition
适用对象:已经学过或正在学习《计算机组成原理》《操作系统》《计算机网络》等课程,希望系统掌握现代计算机体系结构的本科生
建议周期:一个完整学期(约 16 周)
学习目标:不仅“知道架构是什么”,还能够解释、计算、比较、实验和设计。
目录
- 这门课到底在学什么
- 学完后应该达到什么水平
- 学习前需要哪些基础
- 整门课的知识地图
- 如何正确使用《量化研究方法》第6版
- 全课程统一的思维方法
- 各章节详细学习路线
- 必须掌握的核心公式体系
- 典型题型与做题方法
- 实验与实践路线
- 16 周详细学习计划
- 笔记、复习与知识管理方法
- 推荐学习资源
- 期中、期末考试复习方法
- 最终能力验收标准
- 与后续课程和科研方向的衔接
- 一份可以长期执行的学习清单
1. 这门课到底在学什么
很多同学第一次接触“计算机体系结构”时,会感觉它与《计算机组成原理》重复:都讲 CPU、流水线、Cache、内存、多核。实际上,两门课的关注点并不相同。
《计算机组成原理》主要回答:
- CPU 由哪些模块组成?
- 一条指令如何执行?
- ALU、寄存器、存储器、控制器分别做什么?
- Cache、主存、虚拟存储器是什么?
- 流水线如何工作?
而《计算机体系结构》更进一步回答:
- 为什么现代处理器要设计成这样?
- 一个设计到底比另一个设计快多少?
- 提高时钟频率、增加 Cache、增加核心、使用 GPU,哪种方式更有效?
- 性能提升的瓶颈在哪里?
- 为获得性能,需要付出多少面积、能耗、复杂度、成本?
- 如何用实验和量化数据证明一个架构设计是有效的?
因此,这门课最核心的一句话是:
在性能、成本、功耗、面积、可靠性和复杂度等约束下,通过量化分析研究计算机系统的设计取舍。
这也是《A Quantitative Approach》书名中“Quantitative”的真正含义。
学习这门课时,不应满足于“背定义”,而应该逐渐形成下面的思维链:
出现性能问题
↓
定位瓶颈
↓
提出体系结构优化方法
↓
分析它改变了哪些性能参数
↓
量化 Speedup
↓
分析代价与副作用
↓
比较不同设计
↓
做出架构选择 2. 学完后应该达到什么水平
建议把学习目标分成 5 个层级。
Level 1:概念识别
你能够看到以下术语时,知道它大致是什么:
- ISA
- CPI / IPC
- Pipeline
- Data Hazard
- Control Hazard
- Cache
- Miss Rate
- Branch Prediction
- Superscalar
- Dynamic Scheduling
- Tomasulo
- Register Renaming
- ROB
- Speculation
- SIMD
- Vector Processor
- GPU / SIMT
- Multicore
- Cache Coherence
- Memory Consistency
这一层只是“知道”。
只达到这一层,不算真正学会计算机体系结构。
Level 2:原理解释
你能够回答:
- 为什么要使用流水线?
- 为什么流水线越深,分支预测越重要?
- 为什么 Cache 能提升性能?
- 为什么大 Cache 不一定更快?
- 为什么需要寄存器重命名?
- Tomasulo 为什么能够实现动态调度?
- 为什么 GPU 适合深度学习?
- 多核为什么会产生 Cache 一致性问题?
如果你可以脱离教材,用自己的语言讲清楚这些问题,说明已经进入第二层。
Level 3:量化分析
能够熟练完成:
- CPU 执行时间计算
- CPI 分解
- Amdahl 定律
- Speedup 计算
- AMAT 计算
- Cache Miss 对 CPI 的影响
- Branch Misprediction 对 CPI 的影响
- Pipeline Stall 分析
- 多种架构方案性能比较
- 并行计算加速比分析
例如看到:
你应该可以立即分析:
某项优化到底改变了:
IC?
CPI?
Clock Cycle Time?
还是同时改变多个因素? 达到这一层,基本可以应对课程考试的大多数计算题。
Level 4:实验验证
能够使用:
- Ripes
- RISC-V 汇编
- Linux
perf - gem5
完成简单体系结构实验,例如:
Cache Size:32 KB → 64 KB → 128 KB
观察:
Miss Rate
IPC
Execution Time 然后解释:
为什么性能发生了这样的变化?
达到这一层,你就不再只是“学教材”,而是在做真正的体系结构分析。
Level 5:设计与研究
你能够面对一个问题,例如:
某程序 Cache Miss 很高,应该如何优化?
提出:
Baseline
↓
瓶颈分析
↓
方案 A
方案 B
方案 C
↓
理论预测
↓
模拟实验
↓
性能比较
↓
Trade-off 分析
↓
结论 这已经接近计算机体系结构课程项目或科研工作的基本模式。
3. 学习前需要哪些基础
《量化研究方法》第 6 版本身是一本偏高阶教材,所以最好先检查以下基础。
3.1 数字逻辑基础
至少理解:
- 与、或、非
- 组合逻辑
- 时序逻辑
- 寄存器
- 时钟
- MUX
- ALU
- 有限状态机
不要求重新学习整本《数字电路》,但必须知道:
CPU 本质上是大量组合逻辑与时序逻辑构成的状态机器。
3.2 计算机组成原理
重点复习:
CPU
- 数据通路
- 控制器
- 单周期 CPU
- 多周期 CPU
- 流水线 CPU
存储系统
- Cache
- 主存
- 虚拟地址
- 页表
- TLB
指令系统
- RISC / CISC
- 指令格式
- 寄存器
- Load / Store
- Branch
如果这些内容比较薄弱,建议先用 Berkeley CS61C 的公开笔记补基础。
3.3 C 与汇编
至少要能理解:
for (int i = 0; i < N; i++) {
sum += a[i];
} 如何大致对应为:
load
add
addi
branch 不要求一开始就熟练写汇编,但必须理解:
高级语言
↓
编译器
↓
汇编指令
↓
机器指令
↓
微体系结构执行 体系结构实际上处于“软件与硬件的交界处”。
3.4 基础概率和数学
通常不需要很高深的数学,但应熟悉:
- 百分比
- 加权平均
- 概率
- 期望
- 对数
- 指数
- 比率
体系结构中的很多公式本质上都是:
加权平均 + 概率 + 性能比例。
4. 整门课的知识地图
建议先建立如下总图:
计算机体系结构
│
┌─────────────────┴─────────────────┐
│ │
如何评价? 如何优化?
│ │
Performance / Cost / Power │
│ │
Chapter 1 │
│
┌───────────────────────┼───────────────────────┐
│ │ │
Memory Processor Parallelism
│ │ │
Chapter 2 Chapter 3 Ch.4 / Ch.5
│ │ │
Cache Pipeline DLP / TLP
│ │ │
Memory Wall ILP SIMD / GPU / Multicore
│ │
AMAT Branch Prediction
│
Dynamic Scheduling
│
Tomasulo / ROB
│
Out-of-Order
更大规模系统 专用架构
│ │
Chapter 6 Chapter 7
│ │
Warehouse-Scale DSA / Accelerator
Computers 另外需要记住现代体系结构实际上一直在寻找不同层次的“并行”:
| 并行形式 | 全称 | 典型技术 |
|---|---|---|
| ILP | Instruction-Level Parallelism | Pipeline、Superscalar、OoO |
| DLP | Data-Level Parallelism | SIMD、Vector、GPU |
| TLP | Thread-Level Parallelism | SMT、Multicore |
| RLP | Request-Level Parallelism | Server、Data Center |
这一张表非常重要。
以后学习任何新架构,都可以先问:
它主要在利用哪一种 Parallelism?
5. 如何正确使用《量化研究方法》第6版
5.1 不要从第一页开始逐字硬啃
这本书信息密度很高,包含大量:
- 工业处理器实例
- 历史数据
- 性能表格
- 研究论文结果
- 架构对比
- 复杂设计细节
本科阶段如果试图“一字不漏全部看完”,投入产出比通常不高。
建议采取三遍阅读法。
第一遍:建立结构
目标不是“看懂所有内容”,而是回答:
- 这一章解决什么问题?
- 核心概念有哪些?
- 有哪些关键图?
- 有哪些关键公式?
只需要 20~40 分钟快速浏览。
第二遍:学习核心机制
重点阅读:
- 核心概念
- 关键流程
- 公式推导
- 教材案例
- 课堂对应内容
此时做自己的笔记。
第三遍:做题后回看
做题时发现:
- 某个公式不会用
- 某种机制理解不清
- 某个参数含义不清
再精准返回教材。
这种方式比从头到尾重复阅读高效得多。
5.2 建议阅读顺序
对于本科生,建议:
Appendix A:ISA
↓
Appendix B:Memory Hierarchy Basics
↓
Appendix C:Pipeline Basics
↓
Chapter 1:Quantitative Design
↓
Chapter 2:Memory Hierarchy
↓
Chapter 3:Instruction-Level Parallelism
↓
Chapter 4:Data-Level Parallelism
↓
Chapter 5:Thread-Level Parallelism
↓
Chapter 6:Warehouse-Scale Computers
↓
Chapter 7:Domain-Specific Architectures 如果你的课程老师有自己的教学顺序,则以课程安排为主,但建议始终保留这条知识主线。
6. 全课程统一的思维方法
以后学习每一种技术,都统一问下面五个问题。
Question 1:Problem
它到底解决什么问题?
例如 Cache:
CPU 速度增长很快
DRAM 延迟相对很高
→ Memory Wall Question 2:Idea
核心思想是什么?
Cache:
利用 Locality
把最近可能再次使用的数据放到更快的存储器 Question 3:Implementation
硬件如何实现?
例如 Cache:
- Tag
- Index
- Offset
- Replacement
- Write Policy
Question 4:Performance
它到底提高了什么?
Cache:
Miss Rate ↓
Miss Penalty ↓
AMAT ↓
Memory Stall ↓
CPI ↓
CPU Time ↓ Question 5:Trade-off
代价是什么?
例如更大的 Cache:
Capacity ↑
Miss Rate 可能 ↓
但:
Area ↑
Power ↑
Hit Time 可能 ↑
Cost ↑ 任何知识点都按这五个问题学习,你会逐渐形成真正的体系结构思维。
7. 各章节详细学习路线
7.1 Appendix A:Instruction Set Architecture
学习目标
理解软件看到的“计算机”是什么。
重点理解:
ISA
=
软件与硬件之间的接口 应掌握:
- 寄存器
- 指令格式
- 操作码
- Load / Store
- Arithmetic
- Branch
- Procedure Call
- Addressing Mode
建议结合 RISC-V 学习。
达标标准
看到:
for (int i = 0; i < n; i++)
sum += a[i]; 能够说明它大概会产生:
Load
Add
Increment
Compare
Branch 即可。
7.2 Appendix B:Memory Hierarchy Basics
先理解:
Register
↓
L1
↓
L2
↓
L3
↓
DRAM
↓
SSD 越靠上:
速度更快
容量更小
单位成本更高 重点掌握:
- Temporal Locality
- Spatial Locality
- Cache Block
- Hit
- Miss
- Direct Mapped
- Set Associative
- Fully Associative
- Write Through
- Write Back
- Write Allocate
必须会地址划分:
Address
│
├─ Tag
├─ Index
└─ Block Offset 达标标准
给你:
Cache Size
Block Size
Associativity
Address Width 能够独立求出:
- Set 数量
- Index bit
- Offset bit
- Tag bit
7.3 Appendix C:Pipelining Basics
这是 Chapter 3 的基础。
经典五级流水线:
IF → ID → EX → MEM → WB 必须掌握三类 Hazard:
Structural Hazard
资源冲突。
Data Hazard
重点:
- RAW
- WAR
- WAW
其中最重要的理解是:
RAW 是真正的数据依赖,而 WAR/WAW 很多时候属于名字依赖,可以通过寄存器重命名消除。
Control Hazard
由 Branch / Jump 等造成。
必须理解:
- Stall
- Forwarding
- Pipeline Flush
- Branch Prediction
达标标准
给 5~10 条指令,能够画出基本 Pipeline Timing Diagram,并指出:
- 哪些地方发生 Data Hazard
- 哪些可以 Forwarding
- 哪些必须 Stall
7.4 Chapter 1:Fundamentals of Quantitative Design and Analysis
这是整门课的总纲。
核心 1:Performance
最重要公式:
因此:
核心 2:CPU Performance Equation
也可以写成:
其中:
- IC:Instruction Count
- CPI:Cycles Per Instruction
- Clock Cycle Time:时钟周期
学习任何优化时,问:
IC 变了吗?
CPI 变了吗?
Clock Rate 变了吗? 核心 3:CPI 分解
如果程序包含多类指令:
例如:
| 指令 | 比例 | CPI |
|---|---|---|
| ALU | 50% | 1 |
| Load | 30% | 2 |
| Store | 10% | 2 |
| Branch | 10% | 3 |
则:
核心 4:Amdahl's Law
必须熟练掌握:
其中:
- :可优化部分占比
- :该部分加速倍数
真正重要的不是公式,而是思想:
应该优先优化占总执行时间最大的部分。
核心 5:Power / Energy
现代体系结构不能只追求性能。
应逐渐建立:
Performance
Power
Energy
Area
Cost
Complexity 之间的权衡意识。
达标标准
完成 Chapter 1 后,应能面对任何优化问题先写:
Baseline
→ 哪个参数变化
→ CPU Time 如何变化
→ Speedup
→ Trade-off 7.5 Chapter 2:Memory Hierarchy Design
这一章非常重要。
核心问题
CPU 很快
Memory 很慢 形成 Memory Wall。
必须掌握的三个 Cache 参数
Hit Time
命中访问时间。
Miss Rate
Miss Penalty
发生 Miss 后额外付出的代价。
所有 Cache 优化几乎都可以归结为修改这三个量。
AMAT
最重要公式:
两级 Cache 可进一步写成:
3C Miss 模型
理解:
- Compulsory Miss
- Capacity Miss
- Conflict Miss
对于分析 Cache 优化非常重要。
常见优化
需要理解而不是死记:
- Larger Block
- Larger Cache
- Higher Associativity
- Multilevel Cache
- Victim Cache
- Prefetching
- Nonblocking Cache
- Critical Word First
- Write Buffer
每种技术都分析:
Hit Time
Miss Rate
Miss Penalty
Bandwidth
Hardware Complexity 与程序优化联系起来
例如二维数组:
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
sum += A[i][j]; 与:
for (j = 0; j < N; j++)
for (i = 0; i < N; i++)
sum += A[i][j]; 虽然计算量相同,但 Cache 性能可能差异巨大。
必须理解:
体系结构性能不仅由硬件决定,软件访问模式同样重要。
达标标准
你应该能:
- 完成 Cache 地址映射题;
- 计算 AMAT;
- 根据 Miss Rate 分析 CPI;
- 比较不同 Cache 参数的 Trade-off;
- 解释 Locality 对程序性能的影响。
7.6 Chapter 3:Instruction-Level Parallelism
这是全课程最难,也是最关键的章节之一。
建议按下面顺序学习:
Pipeline
↓
Hazard
↓
Forwarding / Stall
↓
Branch Prediction
↓
Multiple Issue
↓
Dynamic Scheduling
↓
Tomasulo
↓
Register Renaming
↓
Speculation
↓
ROB
↓
Out-of-Order Execution 7.6.1 ILP 是什么
Instruction-Level Parallelism:
同一个线程内部,多条相互独立的指令可以同时执行。
例如:
ADD R1, R2, R3
MUL R4, R5, R6 如果互不依赖,可以并行。
7.6.2 Data Dependence
重点区分:
RAW
Read After Write。
真正的数据依赖。
WAR
Write After Read。
WAW
Write After Write。
WAR 和 WAW 可以通过:
Register Renaming 消除。
7.6.3 Branch Prediction
必须理解:
Pipeline 越深
↓
Branch Penalty 越大
↓
Branch Prediction 越重要 学习路线:
Static Prediction
↓
1-bit Predictor
↓
2-bit Predictor
↓
Local Predictor
↓
Global Predictor
↓
Tournament Predictor 不要只背状态机。
重点会计算:
7.6.4 Dynamic Scheduling
核心目的:
如果某条前面的指令在等待,不应该让后面所有独立指令一起等待。
于是出现:
In-order Issue
Out-of-order Execute 7.6.5 Tomasulo Algorithm
不要背表格。
真正需要理解的是:
Issue
↓
进入 Reservation Station
↓
等待 Operand
↓
Operand Ready
↓
Functional Unit Execute
↓
Result Broadcast
↓
依赖它的指令被唤醒 重点结构:
- Reservation Station
- Functional Unit
- Register Status
- Common Data Bus
做题时追踪:
谁依赖谁?
谁还在等操作数?
谁可以执行?
谁什么时候完成?
结果会唤醒谁? 7.6.6 Register Renaming
例如:
ADD R1, R2, R3
SUB R4, R1, R5
MUL R1, R6, R7 第三条指令与前面的 R1 存在名字冲突。
硬件可以把逻辑寄存器:
R1 映射到不同物理寄存器:
P12
P18 从而消除 WAW / WAR。
7.6.7 ROB 与 Speculation
现代处理器通常需要:
Out-of-order execution
+
In-order commit ROB(Reorder Buffer)用于保证:
- Precise Exception
- Correct Architectural State
- In-order Retirement
达标标准
完成 Chapter 3 后,应能:
- 分析 RAW/WAR/WAW;
- 画基本流水线图;
- 计算 Branch Penalty;
- 理解动态调度;
- 跟踪 Tomasulo;
- 解释 Register Renaming;
- 解释 ROB 的作用;
- 解释现代 OoO CPU 的基本工作过程。
7.7 Chapter 4:Data-Level Parallelism
这一章重点是:
同一种操作
作用于大量不同数据 典型例子:
for (i = 0; i < N; i++)
C[i] = A[i] + B[i]; 可以一次处理多个元素。
SIMD
Single Instruction Multiple Data。
例如:
普通标量:
ADD 1 对数据
SIMD:
一条 ADD 同时处理 4/8/16 个数据 Vector Architecture
需要理解:
- Vector Register
- Vector Length
- Vector Operation
- Chaining
- Memory Bandwidth
GPU
重点不是记厂商名词,而是理解:
大量线程
+
高吞吐
+
隐藏 Memory Latency 需要理解:
- SIMT
- Thread
- Warp/Wavefront 的基本概念
- Divergence
- Memory Coalescing
- Throughput vs Latency
对于深度学习,应理解:
Matrix / Tensor Operations
↓
大量规则的数据并行
↓
非常适合 GPU / Accelerator 达标标准
你应该能够解释:
为什么一个高频 CPU 核心不一定比 GPU 更适合矩阵乘法?
并且能从 DLP、吞吐量和内存带宽的角度解释。
7.8 Chapter 5:Thread-Level Parallelism
重点进入:
- Multiprocessor
- Multicore
- SMT
- Shared Memory
- Synchronization
- Cache Coherence
- Memory Consistency
Cache Coherence 的由来
例如:
Core 0 Cache:X = 1
Core 1 Cache:X = 1 Core 0 修改:
X = 2 问题:
Core 1 的 X = 1 怎么办?
于是出现 Cache Coherence。
Snooping 与 Directory
理解两种基本思路:
Snooping
→ 大家观察共享总线 Directory
→ 目录记录谁拥有哪份 Cache Line MSI / MESI
学习状态协议时,不要纯背状态图。
例如 MESI:
- Modified
- Exclusive
- Shared
- Invalid
应理解每个状态回答的是:
这份数据是不是最新?
别人有没有副本?
内存是不是最新?
我能不能直接写? Synchronization
理解:
- Lock
- Atomic Instruction
- Compare-and-Swap
- Barrier
并理解性能问题:
- Contention
- Communication
- False Sharing
达标标准
给出一个双核/四核共享数据场景,能够说明:
- 为什么会出现一致性问题;
- 某个 Cache Line 可能发生什么状态变化;
- 为什么 False Sharing 会降低性能。
7.9 Chapter 6:Warehouse-Scale Computers
这一章可以理解为:
当“一台计算机”扩大成数万台服务器时,体系结构问题会发生什么变化?
关注:
- Data Center
- Request-Level Parallelism
- Availability
- Energy Efficiency
- Network
- Storage
- Cost
本科阶段重点建立宏观理解即可。
7.10 Chapter 7:Domain-Specific Architectures
这是现代体系结构非常重要的方向。
核心思想:
通用 CPU
↓
什么都能做
但未必对特定任务效率最高 因此设计:
Domain-Specific Accelerator 典型领域:
- AI
- Image Processing
- Cryptography
- Networking
- Video
理解:
Generality ↓
Efficiency ↑ 同时分析:
- Performance
- Energy
- Programmability
- Flexibility
- Cost
8. 必须掌握的核心公式体系
建议单独建立一页 Architecture_Formula_Sheet.md。
8.1 Performance
8.2 CPU Time
或:
8.3 Average CPI
8.4 Amdahl's Law
8.5 AMAT
8.6 Memory Stall CPI
常见近似形式:
8.7 Branch Penalty
8.8 Actual CPI
这是非常重要的“统一模型”。
9. 典型题型与做题方法
9.1 性能比较题
统一步骤:
Step 1:确定 Baseline
Step 2:写 CPU Time 公式
Step 3:找 IC / CPI / Clock Rate 的变化
Step 4:统一单位
Step 5:分别算执行时间
Step 6:计算 Speedup
Step 7:解释结果 不要凭“频率更高,所以更快”直接判断。
9.2 Amdahl 定律题
先找:
F:被优化部分原来占总时间多少?
S:这一部分加速多少? 然后再代公式。
常见错误:
- 把 20% 写成 20;
- 把整体加速比当作局部加速比;
- 忽略未优化部分。
9.3 Cache 地址题
统一画:
| Tag | Index | Offset | 然后先算:
再算:
最后:
9.4 AMAT 题
先画层次:
CPU
↓
L1
↓ miss
L2
↓ miss
Memory 不要直接套复杂公式。
逐层写:
L1 Hit Time
+
L1 Miss Probability × 后续平均代价 9.5 Pipeline Timing 题
第一步写阶段:
IF ID EX MEM WB 第二步找依赖:
RAW? 第三步判断:
Forwarding 能不能解决? 第四步才插 Stall。
9.6 Tomasulo 题
建议建立表:
| Instruction | Issue | Operand Ready | Execute | Write | Commit |
|---|
然后每个周期问:
谁能 Issue?
谁的操作数准备好了?
哪个 FU 空闲?
谁能 Execute?
谁能 Write Result? 9.7 Cache Coherence 题
不要直接背状态转移。
先写:
当前是谁读?
当前是谁写?
这个 Cache Line 是否被其他 Core 持有?
Memory 是否最新? 再推状态。
10. 实验与实践路线
体系结构如果只有理论,非常容易“感觉听懂了,实际上不会”。
建议至少完成下面三层实验。
10.1 Level A:Ripes 可视化实验
Ripes 是一个基于 RISC-V 的可视化处理器模拟器,很适合本科阶段理解流水线和 Cache。
推荐实验:
实验 1:单周期 CPU
观察:
- PC
- Register File
- ALU
- Memory
- Control Signal
目标:
理解一条指令从进入 CPU 到完成写回经历哪些数据通路。
实验 2:五级流水线
运行简单 RISC-V 程序,观察:
IF
ID
EX
MEM
WB 目标:
真正理解“多条指令同时处在不同阶段”。
实验 3:Data Hazard
构造:
add x5, x1, x2
sub x6, x5, x3 观察:
- 无 Forwarding
- 有 Forwarding
的差异。
实验 4:Load-use Hazard
例如:
lw x5, 0(x1)
add x6, x5, x2 理解为什么即使有 Forwarding 仍可能需要 Stall。
实验 5:Branch
观察 Branch 对流水线的影响。
实验 6:Cache
改变:
Cache Size
Block Size
Associativity 观察:
Hit
Miss 10.2 Level B:Linux perf
在 Linux 上可以用:
perf stat ./program 观察:
- cycles
- instructions
- branches
- branch-misses
- cache-misses
例如:
IPC ≈ instructions / cycles 然后比较两个程序版本。
实验例子:
行优先遍历矩阵
vs
列优先遍历矩阵 观察 Cache Miss 与执行时间差异。
这个实验非常适合把 Chapter 2 与真实程序连接起来。
10.3 Level C:gem5
gem5 是计算机体系结构研究中广泛使用的模拟器之一。
本科阶段不要一上来修改 gem5 源码。
建议路线:
安装 / 编译
↓
运行 Hello World
↓
理解配置脚本
↓
修改 CPU Model
↓
修改 Cache Size
↓
修改 Associativity
↓
观察 stats.txt
↓
比较 IPC / Miss Rate / Runtime 推荐 gem5 小项目 1
题目:
Cache 大小对程序性能的影响。
实验:
L1 DCache
16 KB
32 KB
64 KB
128 KB 记录:
Miss Rate
IPC
Simulated Cycles 画图:
X:Cache Size
Y:IPC 分析:
为什么增加到某个大小以后收益下降?
推荐 gem5 小项目 2
题目:
Cache Associativity 对性能的影响。
1-way
2-way
4-way
8-way 讨论:
Conflict Miss ↓
但 Hit Latency / Hardware Complexity ↑ 推荐 gem5 小项目 3
题目:
不同 CPU 模型对性能的影响。
比较:
Simple CPU
vs
Out-of-Order CPU 联系 Chapter 3。
11. 16 周详细学习计划
下面给出适合一个学期执行的路线。
Week 1:课程地图 + 性能基础
学习
- Architecture vs Organization
- ISA vs Microarchitecture
- Performance
- Latency / Throughput
- CPU Time
必会
任务
- 建立课程知识地图
- 做 5 道 CPU Time 计算题
达标
能够解释:
为什么 CPU 主频高不等于程序一定更快?
Week 2:Amdahl + Benchmark + Power
学习
- Speedup
- Amdahl's Law
- Benchmark
- Power / Energy
任务
- 做 8~10 道 Amdahl 题
达标
看到局部优化可以立即判断它的整体性能上限。
Week 3:Cache 基础
学习
- Locality
- Block
- Hit / Miss
- Mapping
实验
Ripes Cache。
达标
能够完成 Tag / Index / Offset 计算。
Week 4:Cache 性能
学习
- AMAT
- 3C Miss
- Write Policy
- Multilevel Cache
任务
至少做 10 道 AMAT 题。
Week 5:高级 Cache 优化
学习
- Associativity
- Prefetch
- Nonblocking
- Victim Cache
- Critical Word First
实验
矩阵行/列访问对 Cache 的影响。
Week 6:Pipeline 基础
学习
- IF / ID / EX / MEM / WB
- Pipeline Speedup
- Hazard
实验
Ripes Pipeline。
Week 7:Data Hazard + Control Hazard
学习
- RAW / WAR / WAW
- Forwarding
- Stall
- Branch Prediction
达标
能独立画 Pipeline Timing Diagram。
Week 8:期中整合
复习:
Performance
Amdahl
Cache
AMAT
Pipeline
Hazard 做一套综合题。
Week 9:ILP + Dynamic Scheduling
学习
- ILP
- Multiple Issue
- Dynamic Scheduling
重点理解:
为什么 In-order CPU 会浪费可利用的并行?
Week 10:Tomasulo
重点:
- Reservation Station
- Register Renaming
- CDB
任务
至少完整手推 3 个 Tomasulo 例子。
Week 11:Speculation + ROB + OoO
学习:
Branch Prediction
+
Tomasulo
+
ROB
=
现代 OoO CPU 核心思想 达标
能够用一段话讲清现代 CPU 为什么可以乱序执行但仍保证程序结果正确。
Week 12:SIMD / Vector
学习:
- DLP
- SIMD
- Vector Processor
实验:
可以尝试编译器自动向量化观察。
Week 13:GPU
学习:
- Throughput Computing
- SIMT
- Warp
- Divergence
- Memory Bandwidth
联系:
- 深度学习
- 矩阵计算
- CUDA
Week 14:Multicore + Coherence
学习:
- TLP
- Shared Memory
- MSI / MESI
- Snooping / Directory
Week 15:Synchronization + DSA
学习:
- Atomic
- Lock
- False Sharing
- Domain-Specific Architecture
思考:
AI 加速器为什么正在成为重要体系结构方向?
Week 16:总复习
重新画一张完整知识图:
Performance
↓
Memory
↓
Pipeline
↓
ILP
↓
DLP
↓
TLP
↓
DSA 然后制作一页公式表。
12. 笔记、复习与知识管理方法
12.1 不要抄教材
最差的笔记方式:
1. Cache 的定义
2. Cache 的特点
3. Cache 的分类 这种笔记看起来整齐,但复习价值很低。
12.2 推荐统一模板
例如:
# Branch Prediction
## Problem
为什么需要预测?
## Idea
预测下一条 PC。
## Mechanism
1-bit / 2-bit / Local / Global
## Performance
Branch Frequency × Misprediction Rate × Penalty
## Trade-off
Accuracy / Area / Power / Latency
## Example
……
## Related
Pipeline / Speculation / ROB 长期下来,你的笔记会自然形成知识网络。
12.3 一章只留一张“总览图”
例如 Chapter 3:
ILP
│
├─ Static Scheduling
│
└─ Dynamic Scheduling
│
├─ Reservation Station
├─ Register Renaming
├─ Tomasulo
├─ ROB
└─ Speculation 复习时先看总览,再深入细节。
12.4 错题本应该记录“错误原因”
不是只保存答案。
例如:
错误:AMAT 算错
原因:把 Local Miss Rate 和 Global Miss Rate 混淆
改进:以后先画 Memory Hierarchy 这种错题记录才真正有价值。
13. 推荐学习资源
下面按优先级推荐。
13.1 第一优先级:教材官方配套资源
Elsevier 第 6 版官方 Companion Site 提供:
- Reference Appendices
- Historical Perspectives
- Lecture Slides
- 各章配套材料
入口:
https://shop.elsevier.com/books/book-companion/9780128119051
建议用途:
看完老师 PPT 后,用官方 Lecture Slides 对照知识结构。
13.2 Berkeley CS61C
课程笔记:
非常适合补基础,内容包括:
- RISC-V
- Single-Cycle CPU
- Pipeline
- Cache
- Virtual Memory
- Performance
- SIMD
- Parallelism
推荐用途:
《量化研究方法》某部分看不懂时,先去 CS61C 找对应基础内容。
13.3 Berkeley CS152
课程:Computer Architecture and Engineering。
官方课程页:
https://www2.eecs.berkeley.edu/Courses/CS152/
公开课程站点会包含部分 lecture / discussion / homework 资源,例如:
https://www-inst.eecs.berkeley.edu/~cs152/
内容更加接近真正的“体系结构课程”:
- Pipeline
- Memory Hierarchy
- OoO
- Vector
- Multicore
推荐用途:
当你已经掌握基础以后,用于进一步提高。
13.4 CMU 18-447
Introduction to Computer Architecture:
https://courses.ece.cmu.edu/18447
其课程描述非常强调:
- Performance
- Pipeline
- Superscalar
- Memory System
- RTL / Processor Design
适合想进一步理解处理器实现的人。
13.5 MIT 6.1910
MIT Computation Structures。
重点覆盖:
- Digital Systems
- ISA
- Single-Cycle CPU
- Pipeline
- Memory Hierarchy
- Virtual Memory
- Parallel Systems
可作为组成原理与体系结构之间的桥梁。
13.6 Ripes
GitHub:
https://github.com/mortbopet/Ripes
网页版:
Ripes 可以可视化:
- RISC-V 指令执行
- Pipeline
- Forwarding
- Stall
- Cache
- Memory-Mapped I/O
非常适合作为第一套体系结构实验工具。
13.7 RISC-V 官方 ISA 文档
官方规范:
https://docs.riscv.org/reference/isa/
注意:
不建议刚开始就从头阅读完整规范。
把它当作:
权威查询手册。
需要确认某条指令或 ISA 行为时再查。
13.8 gem5
官网:
Getting Started:
https://www.gem5.org/getting_started/
Documentation:
https://www.gem5.org/documentation/
Learning gem5:
https://www.gem5.org/documentation/learning_gem5/introduction/
需要注意:gem5 官方当前文档提示,一些旧版 Learning gem5 内容可能已经过时,较新的 Bootcamp 材料通常更适合作为当前参考。因此实际安装或实验时应优先核对官方最新文档。
推荐定位:
Ripes = 教学理解
gem5 = 架构模拟 / 课程项目 / 科研入门 14. 期中、期末考试复习方法
第一轮:知识结构
不要直接刷题。
先把课程分成:
1. Performance
2. Memory
3. Pipeline
4. ILP
5. DLP
6. TLP 每部分写一张 A4。
第二轮:公式
做到看到公式可以解释每个变量,而不是机械背诵。
特别是:
第三轮:典型题
每种题型至少练:
性能题:5~10
Amdahl:5~10
Cache Mapping:10
AMAT:10
Pipeline:5~10
Branch:5
Tomasulo:3~5
Coherence:3~5 第四轮:错题
只做自己曾经错过的题。
要求能解释:
上一次为什么错?
第五轮:口述
这是非常有效的方式。
不看资料回答:
- 什么是 Amdahl 定律?
- Cache 为什么有效?
- 为什么 Associativity 不能无限增加?
- 为什么 CPU 要 Branch Prediction?
- Tomasulo 解决什么问题?
- Register Renaming 为什么有效?
- 为什么 GPU 适合矩阵计算?
- MESI 为什么需要四种状态?
如果说不清楚,就是还没有真正掌握。
15. 最终能力验收标准
学完整门课程以后,可以用下面清单检查。
A:基础概念
- 能区分 ISA 和 Microarchitecture
- 能解释 Latency 和 Throughput
- 能解释 CPI / IPC
- 能解释 Pipeline
- 能解释 Locality
- 能解释 ILP / DLP / TLP
B:性能分析
- 会计算 CPU Time
- 会计算 Speedup
- 熟练使用 Amdahl
- 会计算平均 CPI
- 能分析优化影响 IC / CPI / Clock Rate 中的哪些因素
C:Memory
- 会 Tag / Index / Offset
- 理解 Direct / Set Associative / Fully Associative
- 理解 Write Through / Write Back
- 会计算 AMAT
- 理解 3C Miss
- 能解释 Cache 优化的 Trade-off
D:Pipeline
- 能画五级流水线
- 能判断 RAW / WAR / WAW
- 理解 Forwarding
- 理解 Stall
- 理解 Control Hazard
- 会计算 Branch Penalty
E:ILP
- 理解 Multiple Issue
- 理解 Dynamic Scheduling
- 理解 Tomasulo
- 理解 Reservation Station
- 理解 Register Renaming
- 理解 ROB
- 理解 Speculation
- 能解释 OoO CPU 基本工作流程
F:Parallelism
- 理解 SIMD
- 理解 Vector
- 理解 GPU / SIMT
- 理解 Multicore
- 理解 Cache Coherence
- 理解基本 MESI
- 理解 Synchronization
- 理解 False Sharing
G:实验
至少完成:
- 1 个 Ripes Pipeline 实验
- 1 个 Ripes Cache 实验
- 1 个 Linux perf 实验
- 1 个 gem5 Cache 参数实验
如果全部完成,你对体系结构的掌握已经明显超过“只为了期末考试”的水平。
16. 与后续课程和科研方向的衔接
计算机体系结构并不是孤立课程。
与操作系统
体系结构提供:
- Privilege
- Exception
- Virtual Memory
- TLB
- Atomic Instruction
操作系统建立在这些硬件机制之上。
与编译原理
编译器优化会影响:
- Instruction Count
- ILP
- Register Allocation
- Vectorization
- Locality
所以高性能编译与体系结构高度相关。
与计算机网络
网络系统性能最终也受到:
- Memory Bandwidth
- DMA
- Cache
- Multicore
- Accelerator
影响。
与人工智能 / 计算机视觉
尤其值得关注:
Matrix Multiplication
↓
SIMD / Vector
↓
GPU
↓
Tensor Accelerator
↓
Domain-Specific Architecture 以后学习:
- CUDA
- GPU Programming
- Tensor Core
- AI Accelerator
- Model Inference Optimization
时会大量用到体系结构知识。
如果未来研究计算机视觉或深度学习,那么 Chapter 4 和 Chapter 7 建议额外深入。
17. 一份可以长期执行的学习清单
每学习一个知识点,都检查:
□ 它解决什么问题?
□ 为什么以前的方法不够?
□ 它的核心思想是什么?
□ 硬件怎么实现?
□ 它影响哪个性能参数?
□ 有没有公式?
□ 能提高多少性能?
□ 有什么代价?
□ 有什么实际处理器案例?
□ 能不能通过实验验证? 每周检查:
□ 本周知识图是否画完?
□ 核心公式是否会推?
□ 是否做过计算题?
□ 是否记录错题?
□ 是否完成一个小实验或例子?
□ 是否能脱离教材讲清本周核心内容? 每章结束检查:
概念 → 能解释
公式 → 会计算
机制 → 能画图
题目 → 会分析
实验 → 能验证
设计 → 能比较 Trade-off 最后:真正学会计算机体系结构的标志
真正掌握这门课,不是能够背出:
Cache 有哪几种映射方式。
也不是能够背出:
Tomasulo 有哪些硬件结构。
而是当你看到一个性能问题时,脑中会自然出现:
性能瓶颈在哪里?
↓
是 IC?CPI?Clock Rate?
↓
是 Memory?Branch?Dependency?Parallelism?
↓
有什么架构优化?
↓
理论能快多少?
↓
实际为什么可能达不到?
↓
需要付出什么 Area / Power / Complexity 代价? 如果你能够这样思考,你就真正从“计算机组成原理的学习者”进入了“计算机体系结构的分析者”。
建议最终形成自己的三份长期资料:
01_计算机体系结构知识地图.md
02_计算机体系结构公式与题型.md
03_计算机体系结构实验记录.md 以后学习操作系统、编译器、CUDA、GPU、AI 加速器、高性能计算甚至做计算机系统科研时,这三份资料都会继续有价值。
参考与资源入口
以下资源入口已按 2026 年公开网页核对:
-
Elsevier,Computer Architecture: A Quantitative Approach, 6th Edition Companion Site
https://shop.elsevier.com/books/book-companion/9780128119051 -
Berkeley CS61C Course Notes
https://notes.cs61c.org/ -
UC Berkeley CS152 Computer Architecture and Engineering
https://www2.eecs.berkeley.edu/Courses/CS152/ -
Berkeley CS152 公开课程站点
https://www-inst.eecs.berkeley.edu/~cs152/ -
Carnegie Mellon 18-447 Introduction to Computer Architecture
https://courses.ece.cmu.edu/18447 -
RISC-V ISA Manuals
https://docs.riscv.org/reference/isa/ -
gem5
https://www.gem5.org/
https://www.gem5.org/getting_started/
https://www.gem5.org/documentation/
推荐执行原则:70% 精力放在“主干知识 + 习题”,20% 放在实验,10% 放在扩展阅读。
对本科阶段而言,先真正掌握 Performance、Memory Hierarchy、Pipeline、ILP、DLP、TLP,再去追逐最新处理器细节,会比一开始就阅读大量复杂架构资料有效得多。
0 次表情反馈 · 0 条评论