Stanford CS149 并行计算 · 开篇与课程概览
课程基本信息
| 项目 | 内容 |
|---|---|
| 课程 | Stanford CS149: Parallel Computing(并行计算),Fall 2025 |
| 授课时间 | 周二 / 周四 10:30–11:50am |
| 地点 | NVIDIA Auditorium |
| 授课教师 | Kayvon Fatahalian、Kunle Olukotun |
| 先修要求 | 强烈推荐 CS111(操作系统原理);需要熟练的 C/C++ 读写调试能力,并有使用线程(std::thread / pthreads)的基础 |
| 教材 | 无指定教材;架构主题可参考 Hennessy & Patterson《Computer Architecture: A Quantitative Approach》(6th ed.) |
| 视频 | 2025 年视频不对外公开;2023 年版课程视频在 Stanford YouTube 频道 公开可看 |
课程定位
从智能手机、多核 CPU、GPU,到 AI 加速器、全球最大的超级计算机与网站,并行处理在现代计算中无处不在。本课程的目标是让学生深刻理解现代并行计算系统设计中的基本原理与工程权衡,并掌握有效利用这些机器所必需的并行编程技术。由于写出好的并行程序需要理解关键机器性能特征,本课程同时覆盖并行硬件与并行软件设计。
课程的三大主线(Theme)
- 并行思维(Parallel Thinking):如何把一个问题分解为可以安全并行执行的工作(分解 Work),如何把工作分配给处理器(Assign Work),以及如何管理处理器之间的通信与同步,使其不成为加速比的瓶颈——并学习用主流并行编程语言(C++ 线程、ISPC、CUDA、Cilk/OpenMP、事务内存等)实现这些思想。
- 并行硬件实现(Hardware Implementation):现代并行计算机如何工作——多核处理器、SIMD、GPU、缓存一致性、内存一致性、专用加速器;理解实现机制的性能特征与”性能 vs 便利性 vs 成本”的设计权衡。
- 效率思维(Thinking About Efficiency):FAST ≠ EFFICIENT——程序跑得快不代表高效利用硬件。衡量加速比、效率、扩展性,理解 Amdahl 定律、通信开销、负载均衡、局部性与算术强度对性能的根本性影响。
课程结构(按主题分四个阶段)
| 阶段 | 讲座 | 主题 |
|---|---|---|
| I. 并行基础与编程模型(第 1–6 讲) | L1–L6 | 为什么需要并行与效率;现代多核处理器架构(ILP/SIMD/多线程);ISPC 编程抽象;并行化代码的思考过程;工作分配与调度(Cilk 工作窃取);局部性与通信(消息传递、流水线、算术强度) |
| II. GPU 与数据并行(第 7–8 讲) | L7–L8 | GPU 架构与 CUDA 编程;数据并行思维(map / reduce / scan / groupByKey) |
| III. AI 与专用硬件(第 9–13 讲) | L9–L13 | GPU 上的 DNN 高效评估(卷积→GEMM、Transformer、层融合);硬件特化(DNN 加速器、脉动阵列);专用硬件编程系统(TVM / Triton / TileLang / MLIR);AI 应用的数据中心级映射(serving、batching、KV cache);AI 驱动的性能优化 |
| IV. 系统级同步与一致性(第 14–18 讲) | L14–L18 | 缓存一致性(MSI/MESI、伪共享);同步实现与内存一致性(锁、原子操作、放松一致性);细粒度锁与无锁编程(无锁栈/队列、ABA 问题);事务内存(STM/HTM) |
时间线总览(2025 秋季学期)
| 日期 | 讲座 / 事件 |
|---|---|
| Sep 23 | L1: Why Parallelism? Why Efficiency? |
| Sep 25 | L2: A Modern Multi-Core Processor (Part I) |
| Sep 30 | L3: Modern Multi-Core Architecture (Part II) + ISPC |
| Oct 02 | L4: Parallelizing Code: An Example Thought Process |
| Oct 06 | PA1 截止:四核 CPU 并行程序性能分析 |
| Oct 07 | L5: Program Optimization 1: Work Distribution and Scheduling |
| Oct 09 | L6: Program Optimization 2: Locality and Communication;WA1 截止 |
| Oct 14 | L7: GPU Architecture and CUDA Programming |
| Oct 16 | L8: Data-Parallel Thinking;PA2 截止 |
| Oct 21 | L9: Efficiently Evaluating DNNs on GPUs;WA2 截止 |
| Oct 23 | L10: Hardware Specialization |
| Oct 28 | L11: Programming Systems for Specialized Hardware |
| Oct 30 | L12: Mapping AI Applications to the Datacenter Computer;PA3 截止 |
| Nov 04 | 民主日(停课) |
| Nov 06 | L13: Domain-Specific Programming Systems and AI-Driven Performance Optimization;WA3 截止 |
| Nov 11 | L14: Cache Coherence |
| Nov 13 | L15: Implementing Synchronization + Memory Consistency;PA4 截止 |
| Nov 18 | 期中考试(晚间,停课) |
| Nov 20 | L16: Fine-Grained Locking and Lock-Free Programming |
| Dec 02 | L17: Transactional Memory (Part I) |
| Dec 03 | WA4 截止 |
| Dec 04 | L18: Transactional Memory (Part II) + AMA;PA5 截止(不可用晚交天数) |
| Dec 11 | 期末考试 3:30–6:30pm |
作业与评分
| 类别 | 占比 | 说明 |
|---|---|---|
| 编程作业 ×5 | 8% + 12%×4 = 56% | 用 C++ 线程、ISPC、CUDA 等完成;可两人组队 |
| 书面作业 ×4 | 3%×4 = 12% | 三人组队,每次由课程组随机分配队友 |
| 每讲课堂参与 | 4% | 每讲一次随堂小测验(或课后替代测验) |
| 期中考试 | 12% | 11 月 18 日晚间 |
| 期末考试 | 16% | 12 月 11 日 3:30–6:30pm |
- 编程作业(全部公开,见 GitHub):
- Assignment 1: Analyzing Parallel Program Performance on a Quad-Core CPU(10 月 6 日)——在 myth 机器的四核 i7(AVX2、超线程)上分析 SIMD 与多核并行性能;
- Assignment 2: Scheduling Task Graphs on a Multi-Core CPU(10 月 16 日)——从零实现一个任务执行库(线程池、互斥锁/条件变量、任务图调度);
- Assignment 3: A Circle Renderer in CUDA(10 月 30 日)——在 AWS GPU 上用 CUDA 实现并行圆形渲染器;
- Assignment 4: Fused Conv+MaxPool on the Trainium2 Accelerator(11 月 13 日)——在 AWS Trainium2 上编写并优化融合卷积+最大池化 kernel(涉及循环分块与融合);
- Assignment 5: Make the World’s Fastest CUDA Kernels(12 月 4 日,无晚交天数)——开放课题,在 H100 上优化所选 AI kernel(可用 LLM 辅助,有班级排行榜)。
- 书面作业:4 份 PDF 均公开可下载(本笔记配套资料已下载)。
本笔记说明
本笔记基于课程网站所有公开可获取的资料整理而成:
- 课程主页、课程信息页、讲座索引页的全部文本;
- 全部 18 讲幻灯片 PDF(已下载并提取全文);
- 4 份书面作业 PDF(已下载并提取全文);
- 5 个编程作业的公开 GitHub README。
访问受限内容(本笔记未包含):2025 年讲座视频(网站明确说明今年不向公众分发)、Ed Discussion 论坛(需校内账号)、Canvas 内资料。如需学习视频,可使用 2023 年公开版 YouTube 播放列表。
每讲笔记均遵循统一结构:概述 → 核心概念与定义(含现实类比与公式/图示)→ 代码示例与详细解说(含”代码做了什么”与”并行机制解说”)→ 关键要点 → 常见陷阱与注意事项 → 思考题(带答案)。所有代码示例均可独立运行或清晰说明运行方式,并明确标注其对应的讲座概念。
