计算机体系结构综述
计算机体系结构研究的是:抽象的计算任务如何在真实机器上被执行,以及硬件系统如何在性能、能耗、成本与正确性之间做权衡。它关心的对象包括指令集架构(ISA)、微架构(microarchitecture)、存储层次(memory hierarchy)以及并行结构。
它之所以归在“计算科学”中,是因为这里研究的不只是硬件器件本身,而是计算如何被机器表达、组织与加速。换句话说,体系结构站在软件与电路之间,研究的是 computation 如何落地为可执行系统,因此它既与计算机工程高度相连,也属于计算科学的核心组成部分。
为什么归类在计算科学中
| 视角 | 体系结构关注什么 | 为什么是计算科学问题 |
|---|---|---|
| 抽象 | ISA、内存模型、层次接口 | 研究程序如何被机器理解与执行 |
| 性能 | 流水线、缓存、并行性、带宽 | 研究如何让同样的计算更快完成 |
| 正确性 | 一致性、异常、中断、特权级 | 研究系统行为是否符合计算语义 |
1. 抽象层次模型
计算机系统的核心设计哲学是抽象分层——每一层隐藏下层复杂性,向上层提供简洁接口。
graph TB
A[应用程序 Application] --> B[操作系统 OS]
B --> C[指令集架构 ISA]
C --> D[微架构 Microarchitecture]
D --> E[功能单元 Functional Units]
E --> F[逻辑门 Logic Gates]
F --> G[晶体管 Transistors]
G --> H[物理层 Physics]
style A fill:#e1f5fe
style C fill:#fff9c4
style D fill:#f3e5f5
style H fill:#ffccbc
ISA(指令集架构)是硬件与软件之间的关键契约层:
- 软件工程师面向 ISA 编程(或通过编译器生成 ISA 指令)
- 硬件工程师在 ISA 约束下自由优化微架构实现
- 同一 ISA 可以有多种微架构实现(如 x86 下的 Intel P6、Zen 系列)
2. 冯·诺依曼架构 vs 哈佛架构
2.1 冯·诺依曼架构(Von Neumann Architecture)
核心思想:存储程序(Stored Program)——指令和数据存放在同一存储器中。
五大组件:
| 组件 | 功能 |
|---|---|
| 运算器(ALU) | 执行算术和逻辑运算 |
| 控制器(Control Unit) | 取指令、译码、产生控制信号 |
| 存储器(Memory) | 统一存储指令与数据 |
| 输入设备 | 接收外部数据 |
| 输出设备 | 输出计算结果 |
冯·诺依曼瓶颈:CPU 与存储器之间的总线带宽成为系统性能瓶颈(CPU-Memory bandwidth bottleneck)。
2.2 哈佛架构(Harvard Architecture)
- 指令存储器和数据存储器物理分离
- 可同时取指令和取数据——更高带宽
- 常见于 DSP(数字信号处理器)、微控制器
- 现代处理器在 L1 Cache 层采用修正哈佛架构(分离的 I-Cache 和 D-Cache,但共享主存)
graph LR
subgraph "冯·诺依曼"
CPU1[CPU] <-->|统一总线| MEM1[统一存储器]
end
subgraph "哈佛"
CPU2[CPU] <-->|指令总线| IMEM[指令存储器]
CPU2 <-->|数据总线| DMEM[数据存储器]
end
3. 关键性能指标
3.1 CPU 性能方程
其中:
- Instructions:程序的指令数(Instruction Count, IC),由程序、编译器、ISA 决定
- CPI(Cycles Per Instruction):平均每条指令的时钟周期数,由微架构决定
- Clock Rate(时钟频率):每秒时钟周期数,由工艺和微架构决定
IPC 与 CPI
IPC(Instructions Per Cycle)\(= 1/\text{CPI}\),衡量每个时钟周期执行的指令数。现代超标量处理器 IPC 通常 > 1。
3.2 MIPS 与 FLOPS
| 指标 | 定义 | 局限性 |
|---|---|---|
| MIPS | 每秒百万条指令 | 不同 ISA 的指令功能不同,不可直接比较 |
| FLOPS | 每秒浮点运算次数 | 科学计算常用;忽略整数和访存性能 |
3.3 基准测试
- SPEC CPU:业界标准,分整数(SPECint)和浮点(SPECfp)
- Geekbench:跨平台单核/多核
- MLPerf:机器学习工作负载
4. Amdahl 定律
核心思想:系统加速比受不可并行部分限制。
其中:
- \(f\):可加速部分占比
- \(N\):该部分的加速倍数
- \(S\):整体加速比
数值示例
若程序 80% 可并行化(\(f=0.8\)),使用 4 核(\(N=4\)):
即使无穷多核(\(N \to \infty\)),加速比上限为 \(1/(1-f) = 5\times\)。
推论:
- 优化瓶颈部分的收益最大(Make the common case fast)
- 纯粹增加核心数的收益递减
- Gustafson 定律提供了互补视角——随着核心数增加,问题规模也可以增大
5. 功耗与设计约束
5.1 动态功耗
- \(\alpha\):活动因子(switching activity)
- \(C\):负载电容
- \(V_{dd}\):供电电压
- \(f\):时钟频率
降低电压是降低功耗最有效的手段(平方关系),但过低电压导致晶体管无法正确切换。
5.2 功耗墙(Power Wall)
Dennard Scaling 约在 2006 年失效:
- 晶体管缩小但漏电流不再等比减小
- 芯片功耗密度无法持续降低
- 促使架构转向多核和异构计算
5.3 暗硅(Dark Silicon)
由于散热限制,芯片上大量晶体管不能同时全速工作。应对策略:
- 异构架构(CPU + GPU + NPU + DSP)
- 动态电压频率调节(DVFS)
- 专用加速器(ASIC)
6. 体系结构演进趋势
timeline
title 计算机体系结构演进
1940s-1950s : 真空管 : 冯·诺依曼原型机
1960s-1970s : 集成电路 : IBM System/360 : 流水线
1980s : RISC 革命 : MIPS, SPARC, ARM
1990s : 超标量 + 乱序执行 : Pentium Pro
2000s : 多核时代 : 功耗墙倒逼
2010s : 异构计算 : GPU通用计算 : 移动SoC
2020s : 领域专用架构 : Chiplet : RISC-V开源
| 时代 | 核心驱动力 | 关键创新 |
|---|---|---|
| 单核频率提升 | Dennard Scaling | 流水线、乱序执行、分支预测 |
| 多核并行 | 功耗墙 | 多核、SMT、SIMD |
| 异构专用 | 暗硅、领域需求 | GPU、TPU、NPU、FPGA |
| 开放生态 | 成本与灵活性 | RISC-V、Chiplet |
7. 设计哲学
- Make the common case fast:优化最频繁的操作路径
- Simplicity favors regularity:简洁规整的设计降低复杂度
- Good design demands good compromises:在性能、功耗、面积、成本之间权衡
- Locality, locality, locality:时间局部性和空间局部性是存储层次设计的基石
延伸阅读
与其他主题的关系
- 指令集架构 继续展开 ISA 作为软件与硬件接口的定义方式。
- 处理器微架构 进一步解释流水线、乱序执行、缓存与分支预测这些性能来源。
- 操作系统 说明异常、中断、虚拟内存与特权级如何在软件层被管理。
- 并行计算 把多核、SIMD、GPU 等硬件能力上升到编程模型与系统实现层面。
参考文献
- John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach. Morgan Kaufmann.
- David A. Patterson and John L. Hennessy. Computer Organization and Design. Morgan Kaufmann.
- John L. Hennessy and David A. Patterson. Computer Organization and Design RISC-V Edition. Morgan Kaufmann.