计算机组成原理与层次结构
目录
1 概述 {#1}
计算机组成原理(Computer Organization)研究计算机各硬件部件如何组织与协同工作,是操作系统、编译器、体系结构乃至高性能计算的地基。对 AI 工程师而言,理解计算机组成是理解 GPU、CUDA、显存带宽、训练/推理性能优化的前提。
本章的叙事线索:
层次结构 → 冯·诺依曼 → CPU → 存储 → I/O → 从源码到执行
2 计算机层次结构 {#2}
2.1 五层结构
经典的计算机系统层次结构从硬件到应用依次为:
| 层次 | 内容 | 举例 |
|---|---|---|
| 应用层 | 面向用户的程序 | PyTorch、浏览器 |
| 高级语言层 | 抽象编程语言 | Python、C++ |
| 汇编/机器语言层 | 指令集 | x86、ARM |
| 操作系统层 | 资源管理 | Linux、Windows |
| 硬件层 | 物理部件 | CPU、GPU、内存 |
2.2 抽象与封装
每一层都向上层隐藏实现细节:
- 高级语言隐藏寄存器与寻址;
- 操作系统隐藏硬件中断与内存管理;
- 编译器和解释器是层与层之间的”翻译器”。
理解层次结构的意义:性能问题的根源往往跨越多层——例如训练慢可能同时涉及算法层、框架层、CUDA 层和硬件层。
3 冯·诺依曼体系结构 {#3}
冯·诺依曼(Von Neumann)体系结构是现代计算机的基础,核心思想是存储程序:程序和数据都以二进制形式存放在同一存储器中。
五大部件:
┌──────────┐ ┌──────────┐
│ 控制器 │◄─►│ 运算器 │
└────┬─────┘ └────┬─────┘
│ │
┌────▼──────────────▼─────┐
│ 存储器 │
└────▲──────────────▲─────┘
│ │
┌────┴─────┐ ┌────┴─────┐
│ 输入设备 │ │ 输出设备 │
└──────────┘ └──────────┘
- 控制器:取指令、译码、控制各部件;
- 运算器(ALU):算术与逻辑运算;
- 存储器:存放指令与数据;
- 输入/输出设备:与人或外部世界交互。
Von Neumann 瓶颈:指令与数据共享同一总线,顺序取指/取数,成为性能瓶颈。现代 CPU 通过缓存、流水线、指令级并行缓解,GPU 则通过大规模并行绕开部分瓶颈。
4 CPU 与指令流水线 {#4}
4.1 CPU 组成
| 部件 | 作用 |
|---|---|
| 控制单元 (CU) | 取指、译码、生成控制信号 |
| 算术逻辑单元 (ALU) | 加减乘除、逻辑运算 |
| 寄存器堆 | 高速小容量存储,暂存操作数 |
| 程序计数器 (PC) | 指向下一条指令地址 |
| 缓存 (Cache) | 缓解 CPU-内存速度差距 |
4.2 指令周期
一条指令的执行周期(Instruction Cycle):
取指 (Fetch) → 译码 (Decode) → 执行 (Execute) → 写回 (Write-back)
4.3 指令流水线(Pipelining)
将指令周期各阶段重叠执行:
时钟 1 时钟 2 时钟 3 时钟 4 时钟 5
指令1 取指 译码 执行 写回
指令2 取指 译码 执行 写回
指令3 取指 译码 执行
理想情况下,流水线使吞吐率提升 $k$ 倍($k$ 为流水线级数),但存在:
- 结构冒险:硬件资源冲突;
- 数据冒险:指令间数据依赖;
- 控制冒险:分支跳转打断流水线。
现代 CPU 通过乱序执行(Out-of-Order)、分支预测(Branch Prediction)、超标量(Superscalar)等提升指令级并行。
5 存储层次结构 {#5}
5.1 层次与速度
存储器按速度-容量-成本构成金字塔:
┌──────────────┐ 最快/最小/最贵
│ 寄存器 │
├──────────────┤
│ L1/L2 Cache │
├──────────────┤
│ L3 Cache │
├──────────────┤
│ 主存 RAM │
├──────────────┤
│ SSD/磁盘 │
└──────────────┘ 最慢/最大/最便宜
5.2 局部性原理
存储层次的设计依赖局部性原理:
- 时间局部性:刚访问的数据很可能再次访问;
- 空间局部性:刚访问数据附近的地址很可能被访问。
缓存(Cache)利用局部性,把频繁访问的数据放在高速层。对 AI 而言,这个思想直接映射到 GPU 的共享内存(SRAM)与显存(HBM)分层。
5.3 性能计算
平均访问时间:
\[t_{\text{avg}} = t_{\text{hit}} + \text{Miss Rate} \times t_{\text{miss penalty}}\]提高命中率(Hit Rate)是缓存优化的核心。
6 输入输出系统 {#6}
6.1 I/O 方式
| 方式 | 特点 |
|---|---|
| 程序查询 | CPU 轮询设备状态,效率低 |
| 中断 | 设备就绪后通知 CPU,CPU 响应 |
| DMA | 直接内存访问,数据不经 CPU 搬运 |
6.2 总线与设备
- 系统总线:连接 CPU、内存、I/O;
- PCIe:高速外设互连(GPU、NVMe SSD 通常走 PCIe);
- NVMe:基于 PCIe 的 SSD 高速接口,AI 数据读取的关键。
DMA 思想在 GPU 中尤为重要:数据通过 PCIe/DMA 在主机内存与显存间搬运,训练/推理的数据吞吐很大程度上取决于这条通路。
7 从源码到执行 {#7}
一个 C/C++ 程序从源码到运行的过程:
源码 → 预处理 → 编译(到汇编)→ 汇编(到目标文件)→ 链接 → 可执行文件 → 加载运行
hello.c ──► hello.s ──► hello.o ──► a.out ──► 运行
gcc -S as ld
对 Python/深度学习而言,框架(如 PyTorch)通过:
- Python 解释执行高层逻辑;
- C++ 内核(如 ATen)执行底层计算;
- CUDA kernel 在 GPU 上并行执行。
理解这条链路,有助于定位”到底慢在哪一层”。
8 为什么做 AI 要懂体系结构 {#8}
- 性能优化:矩阵乘、注意力、显存搬运都是硬件层面的问题(见
inference-implementation.md); - 算力评估:理解 FLOPS、HBM 带宽、算术强度(Arithmetic Intensity)才能估算训练/推理成本;
- 并行编程:CUDA、多 GPU 并行都建立在理解存储层次与数据搬运之上;
- 容错与可靠性:硬件故障(GPU Xid、内存错误)的排查需要体系结构知识(见
reliability.md)。
9 参考文献 {#9}
[1] D. A. Patterson, J. L. Hennessy, Computer Organization and Design: The Hardware/Software Interface, Morgan Kaufmann.
[2] A. S. Tanenbaum, Structured Computer Organization, Pearson.
[3] J. L. Hennessy, D. A. Patterson, Computer Architecture: A Quantitative Approach, Morgan Kaufmann.
[4] von Neumann, J., First Draft of a Report on the EDVAC, 1945.
[5] W. Stallings, Computer Organization and Architecture, Pearson.
留下评论