跳转至

Ch13 计算与操作系统 · 闪卡 (Anki 导出)

100 张卡,涵盖 5 节核心。Anki Deck: Ch13 计算与操作系统


Section A: 离散数学基础

Card 1

Front: 集合 \(S\) 的幂集 \(|\mathcal{P}(S)|\) 大小? Back: \(|\mathcal{P}(S)| = 2^{|S|}\)。每个元素可选在或不在子集中。

Card 2

Front: 排列 \(P(n, k)\) 公式? Back: \(P(n, k) = \frac{n!}{(n-k)!}\)。\(P(5, 3) = 60\)。有序。

Card 3

Front: 组合 \(C(n, k)\) 公式? Back: \(C(n, k) = \binom{n}{k} = \frac{n!}{k!(n-k)!}\)。\(C(5, 3) = 10\)。无序。

Card 4

Front: 大 O 记号定义? Back: \(T(n) = O(f(n))\) 当 \(\exists c > 0, n_0: T(n) \leq c f(n), \forall n \geq n_0\)。上界。

Card 5

Front: 大 Ω 记号? Back: \(T(n) = \Omega(f(n))\) 下界。\(T(n) = \Theta(f(n))\) 紧界。

Card 6

Front: 鸽巢原理? Back: \(n\) 个鸽巢, \(n+1\) 只鸽子, 至少一巢有 ≥ 2 只。

Card 7

Front: 命题逻辑符号? Back: \(\land\) 与, \(\lor\) 或, \(\neg\) 非, \(\to\) 蕴含, \(\leftrightarrow\) 等价。

Card 8

Front: 数学归纳法两步? Back: (1) 基础: \(P(1)\) 成立; (2) 归纳: \(P(k) \to P(k+1)\)。

Card 9

Front: P 类问题定义? Back: 多项式时间内可解。\(P \subseteq NP\)。

Card 10

Front: NP 完整问题举例? Back: SAT, 旅行商 (TSP), 团问题 (Clique), 子集和。互为多项式归约。


Section B: 计算机架构

Card 11

Front: 默写 CPU 时间公式。 Back: \(T_{\text{CPU}} = IC \times CPI \times T_{\text{cycle}}\)。IC 指令数, CPI 每指令周期, \(T_{\text{cycle}}\) 周期时间。

Card 12

Front: 冯诺依曼架构组件? Back: CPU (ALU + CU) + 内存 + 总线 + 输入/输出。存储程序 (stored-program)。

Card 13

Front: 内存层级 (从快到慢)? Back: 寄存器 (~1 ns) → L1 (~1 ns) → L2 (~10 ns) → L3 (~30 ns) → DRAM (~100 ns) → SSD (~100 μs) → HDD (~10 ms)。

Card 14

Front: 缓存命中率公式? Back: \(h = N_{\text{hit}} / N_{\text{total}}\)。L1 95% 命中 → 平均访问 ~1.45 ns。

Card 15

Front: 流水线 CPI 公式? Back: \(\text{CPI}_{\text{pipeline}} = \text{CPI}_{\text{ideal}} + N_{\text{stall}}/N_{\text{inst}}\)。

Card 16

Front: DRAM 与 SRAM 区别? Back: SRAM 快但贵 (寄存器缓存), DRAM 慢但密 (主存)。SRAM 用触发器, DRAM 用电容刷新。

Card 17

Front: CPU vs GPU 核心差异? Back: CPU 少核 (8-64) 高频率, 控制逻辑复杂; GPU 多核 (数千) 低频率, SIMT 适合并行。

Card 18

Front: GPU FLOPS 公式? Back: \(\text{FLOPs} = N_{\text{SM}} \times \text{cores/SM} \times F \times 2\)。H100 ~1000 TFLOPS (FP16)。

Card 19

Front: 内存墙 (Memory Wall)? Back: CPU 算力增长 >> 内存带宽增长, 性能被内存带宽限制。

Card 20

Front: SIMT 是什么? Back: Single Instruction Multiple Threads — GPU 同一指令, 多数据流 (NVIDIA 术语)。


Section C: 操作系统

Card 21

Front: 进程 vs 线程差别? Back: 进程独立地址空间, 线程共享。线程轻量 (~1 MB stack), 进程重 (~10 MB)。

Card 22

Front: 进程地址空间布局? Back: 从低到高: 代码段 → 数据段 → 堆 (向上长) → 栈 (向下长)。共享库, 内核区。

Card 23

Front: 虚拟内存如何工作? Back: MMU 翻译虚拟地址 → 物理地址; 页表 VA → PA; TLB 缓存页表项。

Card 24

Front: Page fault 是什么? Back: 访问不在内存的页, OS 从磁盘换入 (ms 级)。

Card 25

Front: 死锁四条件? Back: (1) 互斥, (2) 占有并等待, (3) 不剥夺, (4) 循环等待。

Card 26

Front: 调度算法? Back: FCFS (先来先服务), SJF, RR (时间片), CFS (Linux 完全公平)。

Card 27

Front: 文件系统 inode 是什么? Back: 索引节点, 存储文件元数据 (权限/时间戳/数据块指针)。ext4 inode = 256 B。

Card 28

Front: 中断与异常区别? Back: 中断异步 (外设), 异常同步 (除 0 / 缺页)。

Card 29

Front: 系统调用是什么? Back: 用户态 → 内核态的入口。fork, exec, read, write 等。

Card 30

Front: fork vs exec? Back: fork 复制当前进程, exec 替换为新程序。fork+exec 是经典组合。


Section D: 并发并行

Card 31

Front: 默写 Amdahl 公式。 Back: \(S(n) = \frac{1}{(1-p) + p/n}\)。\(p\) 可并行比例。

Card 32

Front: 互斥锁 (mutex) 与信号量 (semaphore)? Back: mutex 二值 (一个线程进入), semaphore 计数 (N 个线程)。

Card 33

Front: 死锁 vs 活锁 vs 饥饿? Back: 死锁 = 互相等待 (永久); 活锁 = 不断让步 (忙等); 饥饿 = 某些线程长期得不到资源。

Card 34

Front: MapReduce 两阶段? Back: map: \((k, v) \to \text{list}(k', v')\); reduce: \((k', \text{list}(v')) \to \text{list}(v'')\)。

Card 35

Front: CUDA warp 大小? Back: 32 threads。1 block = 多 warp, 1 SM 调度多 block。

Card 36

Front: CUDA 内存类型? Back: Global (大, 慢), Shared (小, 快), Local (per-thread), Constant, Texture。

Card 37

Front: AllReduce vs Reduce-Scatter? Back: AllReduce 同步到所有节点; Reduce-Scatter 各节点拿不同分片。

Card 38

Front: CAP 定理三选二? Back: 一致性 (C), 可用性 (A), 分区容忍 (P)。分布式系统最多三选二。

Card 39

Front: 一致性哈希? Back: 节点 / 数据映射到 0-2^32 环, 顺时针找最近节点。增删节点只影响邻居。

Card 40

Front: NCCL 是什么? Back: NVIDIA Collective Communications Library, GPU 集合通信 (AllReduce 等)。


Section E: 编程语言

Card 41

Front: Lambda 演算基本元素? Back: 变量 \(x\), 抽象 \(\lambda x. e\), 应用 \(e_1 e_2\)。Church 数: \(c_n = \lambda f. \lambda x. f^n(x)\)。

Card 42

Front: 静态类型 vs 动态类型? Back: 静态: 编译期检查 (Java, C++); 动态: 运行期检查 (Python, JS)。

Card 43

Front: 强类型 vs 弱类型? Back: 强: 严格类型转换 (Python); 弱: 隐式转换 (JS, "1" + 2 = "12")。

Card 44

Front: Hindley-Milner 类型推导? Back: ML 语言风格, 无需显式类型即可推导。let polymorphism。

Card 45

Front: 编译流程 5 阶段? Back: 词法 → 语法 → 语义 → 中间代码 (IR) → 目标代码。每阶段用不同数据结构。

Card 46

Front: JIT 编译? Back: Just-In-Time, 运行时编译热点代码 (HotSpot, V8 TurboFan)。

Card 47

Front: GC 三大算法? Back: 引用计数, 标记-清除 (mark-sweep), 复制 (copying)。

Card 48

Front: Curry-Howard 对应? Back: 程序 ≡ 证明, 类型 ≡ 命题。Haskell 类型系统是逻辑证明系统。

Card 49

Front: 命令式 vs 函数式? Back: 命令式: 状态 + 赋值 (C, Java); 函数式: 表达式 + 不可变 (Haskell, Lisp)。

Card 50

Front: Rust 所有权 (Ownership)? Back: 每个值一个所有者, 离开作用域 drop; 借用检查 (borrow checker) 防止 use-after-free。


Section F: 现实应用

Card 51

Front: PyTorch 后端是什么? Back: C++ + CUDA + ATen (tensor library) + autograd。C++ 调度, CUDA 计算。

Card 52

Front: CUDA 加速 PyTorch 训练原理? Back: GPU kernel 处理 element-wise / matmul / conv, CPU 处理数据加载。

Card 53

Front: PyTorch DDP 通信原语? Back: AllReduce 同步梯度, 每次 backward 后。NCCL 后端。

Card 54

Front: vLLM PagedAttention? Back: 把 KV cache 像 OS 虚拟内存一样分页, 减少显存碎片。

Card 55

Front: Triton 是什么? Back: OpenAI 推出的 Python-like GPU kernel DSL, 自动调优, 易写 CUDA。

Card 56

Front: Flash Attention 核心优化? Back: 把 attention 计算分块, 不存中间结果到 HBM, 减少 IO。

Card 57

Front: LLM 推理 latency 瓶颈? Back: Memory bound — 加载模型权重 (~70 GB for 70B) 主导时间。

Card 58

Front: 量化 (Quantization) 如何工作? Back: FP16 → INT8 / INT4, 减少显存 ~2-4×, 轻微精度损失。

Card 59

Front: Docker 容器与虚拟机区别? Back: 容器共享 OS 内核 (轻量), VM 自带内核 (重)。cgroups + namespaces。

Card 60

Front: 为什么需要 GPU 集群? Back: 单卡显存有限 (~80 GB H100), 大模型需要多卡 / 多机并行。


Section G: 历史

Card 61

Front: 图灵机起源? Back: Turing, 1936, "On Computable Numbers"。

Card 62

Front: 冯诺依曼架构起源? Back: 1945 年 EDVAC 报告, 存储程序概念。

Card 63

Front: Unix 起源? Back: Ken Thompson, Dennis Ritchie, 1969-1971, Bell Labs。

Card 64

Front: C 语言起源? Back: Dennis Ritchie, 1972, 写 Unix 用。

Card 65

Front: LISP 起源? Back: John McCarthy, 1958, 第一个函数式语言。

Card 66

Front: Amdahl 定律起源? Back: Gene Amdahl, 1967, AFIPS 会议论文。

Card 67

Front: CUDA 起源? Back: NVIDIA, 2007, 让 GPU 通用计算。

Card 68

Front: MapReduce 起源? Back: Google, Jeffrey Dean & Sanjay Ghemawat, OSDI 2004。

Card 69

Front: Spark 起源? Back: Matei Zaharia, 2014, 加州大学伯克利分校。

Card 70

Front: Transformer 起源? Back: Vaswani et al., NeurIPS 2017, "Attention is All You Need"。


Section H: 工程

Card 71

Front: 优化 Python 程序常用手段? Back: 矢量化 (NumPy), Cython, JIT (Numba), 并行 (multiprocessing)。

Card 72

Front: PyTorch 加速方法? Back: torch.compile (Triton), mixed precision, DDP, FSDP。

Card 73

Front: CUDA stream 是什么? Back: GPU 命令队列, 不同 stream 可并行执行。

Card 74

Front: pin memory 在 PyTorch 的作用? Back: 把 CPU tensor 锁页, 加速 CPU→GPU 传输。

Card 75

Front: NCCL vs Gloo? Back: NCCL GPU 优化 (NVIDIA), Gloo CPU 通用 (Meta)。

Card 76

Front: ZeRO 三阶段优化? Back: - ZeRO-1: 优化器状态分片 - ZeRO-2: 加梯度分片 - ZeRO-3: 加参数分片

Card 77

Front: Tensor Parallel vs Pipeline Parallel? Back: TP 切单层 (Megatron), PP 切深度 (层间流水线)。

Card 78

Front: Mixed precision 训练? Back: FP16 前向 + 反向, FP32 累积, ~2× 加速, ~50% 显存。

Card 79

Front: Gradient checkpointing? Back: 不保存中间 activation, 反向时重计算。节省显存 ~5×, 时间 +30%。

Card 80

Front: torch.compile vs TorchScript? Back: torch.compile 基于 Triton (Python 风格), TorchScript 静态图。


Section I: 跨章

Card 81

Front: Ch01 集合与 Ch13 离散数学的关系? Back: Ch01 是初等, Ch13 §01 加入组合 + 复杂度 + 证明。

Card 82

Front: Ch03 梯度下降与 Ch13 GPU 的关系? Back: GPU 让矩阵运算并行, 训练从 CPU 几天变 GPU 几小时。

Card 83

Front: Ch07 Transformer 与 Ch13 分布式? Back: GPT-3 训练 1024 A100 用 1 个月, Megatron-LM 处理 tensor parallelism。

Card 84

Front: Ch12 GNN 与 Ch13 内存墙? Back: GNN 邻居加载是 memory bound, Ch13 §02 内存层级给出优化方向。

Card 85

Front: Ch11 SLAM 与 Ch13 GPU? Back: SLAM 实时要求高, GPU 并行加速特征提取 / 光流。

Card 86

Front: Ch05 概率与 Ch13 调度? Back: 操作系统随机调度是 Markov 过程, Ch05 概率给出分析工具。

Card 87

Front: Ch06 RL 与 Ch13 分布式? Back: IMPALA / R2D3 用分布式 actor, Ch13 §04 给出基础设施。

Card 88

Front: Ch08 CNN 与 Ch13 CUDA? Back: cuDNN 是 NVIDIA 的 CNN 库, 高度优化的 CUDA kernel。

Card 89

Front: Ch10 多模态与 Ch13 异构计算? Back: 多模态需要 CPU (数据预处理) + GPU (模型) 协同, 异构调度是热点。

Card 90

Front: Ch14 数据结构与 Ch13 离散数学? Back: 数据结构的正确性证明用数学归纳法, Ch13 §01 教基础。


Section J: 错误避免

Card 91

Front: 常见的并发错误? Back: 竞态条件, 死锁, 活锁, 优先级反转, ABA 问题。

Card 92

Front: GPU 内存泄漏常见原因? Back: tensor 不释放 (del 缺), 循环引用, 大 batch。

Card 93

Front: PyTorch DDP 常见 bug? Back: 端口冲突, 初始化顺序错, 不同步 batch_norm, world_size 不一致。

Card 94

Front: CUDA 内存访问对齐? Back: 32 字节对齐效率最高, 否则多次访问。

Card 95

Front: 分布式训练死锁? Back: NCCL bucket 满 / hang, 用 NCCL_DEBUG=INFO 调试。


Section K: 进阶

Card 96

Front: 定理证明助手 Coq / Lean? Back: 基于 Curry-Howard, 证明即程序。Lean 4 用于数学形式化。

Card 97

Front: 量子计算与经典计算? Back: 量子用 qubit 叠加, 经典用 bit。Shor 算法破解 RSA。

Card 98

Front: 神经架构搜索 (NAS) 的计算成本? Back: 一次 NAS 训练 1000 GPU-days (NASNet), 用 Ch13 集群优化。

Card 99

Front: LLM 训练能源消耗? Back: GPT-3 训练 ~1287 MWh, 训练单个模型碳排放 ~500 吨 CO₂。

Card 100

Front: 一句话总结 Ch13。 Back: 计算与操作系统 = AI 的基础设施。覆盖 5 节 — §01 离散数学 (集合/逻辑/复杂度), §02 计算机架构 (CPU/GPU/内存墙), §03 操作系统 (进程/虚拟内存/死锁), §04 并发并行 (Amdahl/CUDA/分布式), §05 编程语言 (类型/范式/编译)。是 AI 工程师的"系统栈"课。