CMU 15-418/15-618 并行计算机体系结构与编程 · 开篇与课程概览

目录 · l1 →

课程全称:15-418/15-618 Parallel Computer Architecture and Programming 学期:Fall 2026(课程主页 https://www.cs.cmu.edu/~418/,日程表 https://www.cs.cmu.edu/~418/schedule.html授课:Brian Railing、Dimitrios Skarlatos(课程由 Kayvon Fatahalian 创建) 上课时间/地点:MWF 09:30–10:50am, Baker Hall (BH) A51 学分/考核:12 units;两次当堂闭卷考试(Exam 1 = 9/25,覆盖 Lecture 1–13;Exam 2 = 11/2,覆盖 Lecture 14–24,不含 guest lecture)+ 4 次编程作业(权重不同)+ 4 次书面作业(同伴互评)+ 期末项目 先修:15-213(严格先修);需要扎实的 C/C++ 能力;18-447 有帮助但非必需

本笔记基于该课程网站上公开可访问的讲义 PDF、日程表、作业与项目页面整理而成,并为每一讲补充了硬件架构分析、可运行代码示例与定量性能模型。


目录

第一部分:课程概览

第二部分:逐讲学习笔记(26 讲)

第三部分:速查表与附录


第一部分:课程概览

1. 课程定位与知识地图

1.1 这门课要解决什么问题

CMU 15-418/618 的课程自述写得非常直白:

“From smart phones, to multi-core CPUs and GPUs, to the world’s largest supercomputers, parallel processing is ubiquitous in modern computing. The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems as well as to teach parallel programming techniques necessary to effectively utilize these machines. Because writing good parallel programs requires an understanding of key machine performance characteristics, this course will cover hardware design and how that affects software design.”

翻译过来,这门课有三个不可分割的目标:

  1. 理解并行硬件:CPU 流水线与乱序执行、多核、SIMD 向量单元、GPU 的 SM/warp 结构、互连网络、缓存一致性与内存一致性模型、虚拟内存与 TLB、专用加速器。
  2. 掌握并行编程:fork-join、SPMD、数据并行、共享地址空间 + 锁、消息传递(MPI)、CUDA、OpenMP、ISPC、pthreads、Cilk 风格工作窃取运行时。
  3. 建立性能工程方法论:work-span 模型、Amdahl 定律、算术强度与 Roofline、延迟与带宽分解、负载均衡、通信-计算重叠、伪共享与竞争诊断。

1.2 知识地图

                     ┌──────────────────────────────────────────────┐
                     │          为什么需要并行?为什么效率重要?        │
                     │   Lecture 1:功率墙 + 免费午餐结束              │
                     └───────────────────┬──────────────────────────┘
                                         │
        ┌────────────────────────────────┼────────────────────────────────┐
        ▼                                ▼                                ▼
┌──────────────────┐          ┌──────────────────┐          ┌──────────────────┐
│  硬件执行层面      │          │  编程抽象层面      │          │  性能工程层面      │
├──────────────────┤          ├──────────────────┤          ├──────────────────┤
│ L2  ILP/流水线/OoO│          │ L4  编程模型       │          │ L7  并行编程基础    │
│ L3  多核+SIMD     │          │ L5-6 CUDA/GPU      │          │ L8  工作分配/调度   │
│ L10 互连网络      │          │ L15 同步实现       │          │ L9  局部性/通信/竞争│
│ L11 监听一致性    │          │ L16 细粒度/无锁    │          │ L14 剖析与测量      │
│ L12 目录一致性    │          │ L17 事务内存       │          │ L22-23 并行深度学习 │
│ L13 监听实现      │          │ L19 虚拟内存       │          │ L24 AI in System   │
│ L18 异构/专用化   │          │ L21 内存一致性     │          │ L25-27 运行时/加速器│
└────────┬─────────┘          └────────┬─────────┘          └────────┬─────────┘
         │                             │                             │
         └─────────────────────────────┼─────────────────────────────┘
                                       ▼
                    ┌──────────────────────────────────────┐
                    │   统一的分析语言(贯穿全课的"三把尺子")  │
                    │  ① Work / Span / 并行度  → 可扩展性    │
                    │  ② Amdahl 定律           → 加速比上限  │
                    │  ③ 算术强度 + Roofline   → 瓶颈类型    │
                    └──────────────────────────────────────┘

1.3 三条学习主线

主线一:从硬件到软件的单向约束链。 硬件的物理约束(功耗、延迟、带宽)决定了抽象的形状。例如:

  • 光子传输速度 + 功耗墙 ⇒ 多核而非单核更宽 ⇒ 需要并行软件 ⇒ 需要同步 ⇒ 需要一致性协议。
  • DRAM 延迟(约 200+ 周期)远高于计算 ⇒ 必须用 cache 隐藏 ⇒ cache 私有化破坏共享内存语义 ⇒ 必须有缓存一致性(Lecture 11–13)。
  • 带宽增长远慢于算力增长 ⇒ 几乎所有有趣的程序都是带宽受限 ⇒ 必须讲算术强度与 Roofline(Lecture 3、8、9、14)。

主线二:抽象的代价。 每一层抽象(共享地址空间、虚拟内存、事务内存、垃圾回收、DSL)都在换取可编程性的同时引入性能不确定性。课程的反复主题是”抽象距离(abstraction distance)”——离硬件太远则性能不可预测,太近则不可移植。

主线三:一切都是权衡。 静态 vs 动态分配、粗粒度 vs 细粒度同步、失效 vs 更新协议、SMP vs NUMA、带宽换延迟、空间换时间。笔记中每一讲都会显式标出”关键权衡”。

1.4 与其他系统课程的关系

前置/相关课程与本课的关系
15-213 计算机系统导论严格先修。存储层次、cache、汇编、进程/线程、链接、虚拟内存的基础都在 213 建立;418 直接在其上讨论一致性、TLB shootdown、内存序
18-447 计算机体系结构导论有帮助但非必需。418 的 L2/L3/L10-13/L19 会更”系统级”地讨论微架构与互连
15-410 操作系统有助于理解线程调度、TLB 管理、页表与 shootdown(L19)、同步原语(L15)
15-440 分布式系统消息传递(L7、L25)、复制与一致性(L11-13 的分布式版本)在概念上同源
15-411 编译器ISPC 的 SPMD→SIMD 编译(L4)、OpenMP/Cilk 运行时(L26)涉及编译技术
10-601 / 11-785 机器学习L22-24 的前置背景(SGD、Transformer、算子)

1.5 一门课的”核心 10 个问题”

如果只能记住 10 件事,应该是这 10 个问题及其答案:

  1. 为什么 2004 年之后”换新机器就变快”结束了?—— ILP 与频率双双撞墙(L1、L2)。
  2. 现代多核 CPU 靠什么提高吞吐?—— 多核 + SIMD + 硬件多线程 + 大 cache(L3)。
  3. GPU 和 CPU 有什么本质不同?—— 弱核心 + 大量硬件多线程换吞吐,SIMT/warp 执行(L5、L6)。
  4. 如何判断一个并行程序的加速比上限?—— Amdahl(串行比例)+ work-span(并行度 T₁/T∞)(L7、L8)。
  5. 工作该怎样分配到执行资源上?—— 静态(blocked/interleaved)、半静态、动态队列、工作窃取(L8)。
  6. 通信为什么贵?怎样减少?—— α-β 模型;改变分配、blocking、fusion、sharing、消息粒度(L9)。
  7. 多核的 cache 为什么不破坏共享内存语义?—— 缓存一致性协议(MSI/MESI/MOESI)与目录协议(L11–13)。
  8. 怎样才能写对自己的同步代码?—— 内存一致性模型 + 原子操作 + 正确放置 fence(L15、L16、L21)。
  9. 程序为什么慢、慢在哪里?—— 测量方法论 + PMU 计数器 + Roofline + 高水位实验(L14)。
  10. 未来的性能来自哪里?—— 专用化/异构(10–1000× perf/W)+ 更聪明的调度与算法(L18、L22–24、L27)。

2. 课程材料获取情况(公开性说明)

本节如实记录 2026-09 抓取时该网站材料的公开状态,便于读者了解笔记中哪些部分有官方讲义原文支撑。

2.1 公开可访问(已下载)

类别内容位置
主页 / 日程 / 作业 / 考试 / 项目 / 资源 / 教职员全部公开 HTML 页面cmu15418_data/*.html
课程大纲syllabus/syllabus.pdfcmu15418_data/syllabus.pdf
Lecture 1–24 讲义 PDF(21 份,覆盖 24 讲)01_whyparallelism02_ilp03_basicarch04_progmodels05-CUDA-programming06_progbasics07_progperf108_progperf210_cachecoherence11_directorycoherence12_snoopimpl13_virtualmemory14_interconnects15_consistency16_synchronization17_lockfree20_heterogeneity20_specialization_csd24-parallel_deep_learning_data_parallel25-parallel_deep_learning_model_pipeline_parallelcmu15418_data/lectures/
Exam 1 复习讲义revision_exam1.pdf(24 页)cmu15418_data/lectures/
作业 1 说明doc/asst1_handout.pdf(13 页,含完整的”探索并行计算”实验要求)cmu15418_data/doc_asst1_handout.pdf
CUDA Recitationdoc/CUDA-recitation.pdf(39 页 CUDA 速成)cmu15418_data/doc_CUDA-recitation.pdf
全部讲义的逐页文本抽取38 个 .txt(标记 ===== [slide i/N] =====cmu15418_data/extracted/
姊妹课程补充讲义Stanford CS149 Fall 2025 的 18 份公开讲义抽取文本cmu15418_data/cs149_supp/
历史学期练习题Spring 2022 Exam 1/S21 Exam 1 练习卷与解答cmu15418_data/supp/exams/

2.2 未公开 / 需登录(仅记录名称)

资源状态
Fall 2026 讲课录像(Panopto / YouTube)日程表中链接被 HTML 注释隐藏,注明 “uncomment when posted for Fall 2026” —— 未发布
日程表中引用的归档讲义(/afs/cs/academic/class/15418-{f22,s23}/public/lectures/*.pdf匿名访问返回 CMU IdP 登录页 —— 需 CMU 登录
Ed 讨论区 https://edstem.org/us/courses/102588/discussion需登录
Autolab 提交系统 https://autolab.andrew.cmu.edu/courses/15418-f26需登录
Canvas 书面作业与评分细则需登录
Fall 2026 尚未发布的讲义:Lecture 8、9(Performance Optimization I/II)、Lecture 14(Performance Analysis / Profiling)、Lecture 17(Transactional Memory)、Lecture 24(AI in System Design)、Lecture 25–27日程表中该行无 slides 链接 —— 未发布(历史学期对应 PDF 需 CMU 登录)
Lecture 20 Guest Lecture 讲义客座讲座,未公开
Exam 1 / Exam 2 试卷当堂闭卷考试,不公开

:Lecture 8、9 的讲义虽未在 Fall 2026 日程表行内链接,但 lectures/07_progperf1.pdflectures/08_progperf2.pdf 本身可在公开目录直接下载(首页标注为历史学期版本,属讲义沿用),因此本笔记的 L8/L9 有官方原文支撑。Lecture 14、17、24 则由公开的姊妹课程(Stanford CS149)同主题讲义与公开成熟知识构建,笔记中已逐处标注来源。


3. 完整的 Fall 2026 课程日程

来源:https://www.cs.cmu.edu/~418/schedule.html(”The exact topics of the lectures are subject to change.”)。下表为去除 HTML 注释后的可见日程。

#日期主题官方讲义作业/考试
1Aug 24Why Parallelism?lectures/01_whyparallelism.pdf
2Aug 26Out-of-order Processor & Pipelinelectures/02_ilp.pdf
3Aug 28A Modern Multi-Core Processorlectures/03_basicarch.pdfAssignment 1 out
4Aug 31Parallel Programming Modelslectures/04_progmodels.pdf
5Sep 2GPU Architecture and CUDA Programminglectures/05-CUDA-programming.pdfA1 early deadline Thu 9/3(waitlist)
6Sep 4GPU Architecture and CUDA Programming (continued)lectures/05-CUDA-programming.pdf
Sep 7Labor Day — no class
7Sep 9Parallel Programming Basicslectures/06_progbasics.pdfA1 due, Assignment 2 out
8Sep 11Performance Optimization Ilectures/07_progperf1.pdf(沿用版本)
9Sep 14Performance Optimization IIlectures/08_progperf2.pdf(沿用版本)
10Sep 16Interconnection Networkslectures/14_interconnects.pdf
11Sep 18Snooping-Based Cache Coherencelectures/10_cachecoherence.pdfWritten Asst 1/2 out
12Sep 21Directory-Based Cache Coherencelectures/11_directorycoherence.pdf
13Sep 23Snooping-Based Multiprocessor Designlectures/12_snoopimpl.pdfA2 due, Assignment 3 out
Sep 25Exam 1(Lecture 1–13)lectures/revision_exam1.pdfWritten Asst 1 solutions due
14Sep 28Performance Analysis / Profiling未发布
15Sep 30Implementing Synchronizationlectures/16_synchronization.pdf
16Oct 2Fine-Grained Synchronization, Lock-Free Programminglectures/17_lockfree.pdfWritten Asst 2 solutions / Asst 1 peer grading due
17Oct 5Transactional Memory未发布
18Oct 7Heterogeneous Parallelism, Hardware Specializationlectures/20_heterogeneity.pdflectures/20_specialization_csd.pdfA3 due, Assignment 4 out
19Oct 9Virtual Memorylectures/13_virtualmemory.pdf
Oct 12/14/16Fall Break — no class
20Oct 19Guest Lecture未公开Written Asst 3 out;Asst 2 peer grading due
21Oct 21Memory Consistencylectures/15_consistency.pdf
22Oct 23Parallel Deep Learning (data parallelism)lectures/24-parallel_deep_learning_data_parallel.pdfA4 due
23Oct 26Parallel Deep Learning (model and pipeline parallelism)lectures/25-parallel_deep_learning_model_pipeline_parallel.pdfWritten Asst 3 solutions due
24Oct 28AI in System Design未发布
Oct 30(无课)Written Asst 3 peer grading due
Nov 2Exam 2(Lecture 14–24,不含 guest lecture)
Nov 3Written Asst 4 solutions due
Nov 4/6Meetings to discuss project ideas
Nov 10Written Asst 4 peer grading due
Nov 12–14Project idea meetings(Wed/Thu/Fri)Project proposal 相关
Nov 17Project proposal due
Dec 1Milestone report due
Dec 8Final report due

日程表中还有若干被 HTML 注释包裹的历史条目(如 “Heterogenous parallelism”、”Under the Hood: Message Passing Implementation”、”MPI, OpenMP, Cilk implementation”、”Deep neural networks”、”ML accelerators at Amazon”),它们是往期课程的遗留行,本笔记将其整理为 Lecture 25–27 与归档主题,作为知识补充。


4. 作业、考试与项目

4.1 四次编程作业(”The assignments are the heart of this course”)

作业发布截止主题
Assignment 1Fri 8/28Wed 9/9(waitlist 早交:Thu 9/3)Exploring parallel computing(性能分析基础:work-span、测量方法论、ISPC/OpenMP 多核与 SIMD 实践)
Assignment 2Wed 9/9Wed 9/23GPU programming in CUDA(并行 patterns、分块、归约、性能调优)
Assignment 3Wed 9/23Wed 10/7Parallel VLSI Wire Routing via OpenMP(真实算法级并行化 + 负载均衡 + 同步)
Assignment 4Wed 10/7Fri 10/23Parallel VLSI Wire Routing via MPI(分布式内存 + 消息传递 + 通信开销)

作业策略(官方规定):全部 11:59pm 截止;迟交每天扣 10%;每人一学期有 5 个 late-day points;最多迟交 3 天;一人团队用 1 点延 1 天,两人团队用 2 点延 1 天;作业通过 GitHub 发放,Autolab + Gradescope 提交。

Waitlist 机制:教室容量封顶,Assignment 1 的表现是能否从 waitlist 转正的主要依据;越早提交影响很小(”This is not a race”)。

4.2 四次书面作业(Written Assignments)

面向考试准备,Canvas 发放与提交,个人独立完成(匿名同伴互评,不要写名字)。成绩构成:1/3 按时提交合理解答 + 1/3 认真互评他人 + 1/3 同伴给你的平均分。无 late days。每份有两个截止点:提交解答截止 + 完成同伴互评截止(逾期提交则不能参与互评)。

4.3 两次考试

 Exam 1Exam 2
日期周五 2026/9/25周一 2026/11/2
覆盖Lecture 1–13(含 Snooping-Based Multiprocessor Design)Lecture 14–24(不含 guest lecture)
形式当堂、闭卷、闭笔记;可带 一张 A4 双面手写纸;必须用黑/蓝笔;不许计算器或电子设备同左
说明非累积,各覆盖约一半内容官方建议用书面作业与 Spring 2022 练习题备考

官方备考提示:简答题多,”choose and explain” 题型中解释的分值远高于选项本身

4.4 期末项目

里程碑时间
与教师讨论想法(idea meetings)Wed Nov 12 / Thu Nov 13 / Fri Nov 14
Project ProposalMon, Nov 17, 11:59pm
Milestone ReportMon, Dec 1, 11:59pm
Final ReportMon, Dec 8, 11:59pm
Poster SessionTBD

往届优秀项目方向(课程页面公开列出的 Fall 2024 / Fall 2022 例子)非常能说明这门课的”落地面”:无锁数据结构(lock-free AVL tree、无锁优先队列、并发哈希表)、多核 cache 模拟器与 ZSim 优化、并行内存优化(prefetching、可扩展无锁分配器)、图像处理(seam carving、Hough 变换、gradient domain fusion)、图形渲染(ray tracing、voxel octree、path tracing)、并行 AI 算法(K-means、RRT、车辆路径)、并行科学计算(流体模拟、化学反应)、并行图算法(Delaunay 三角化、图着色)、并行求解器(SAT、LP、FFT、QR)等。

4.5 教学团队与求助渠道

  • 教师:Brian Railing(bpr@cs.cmu.edu,GHC 6005)、Dimitrios Skarlatos(dskarlat@cs.cmu.edu,GHC 9125)
  • 求助:优先使用 Ed 讨论区(默认私密)而非邮件;office hours TBA
  • 课程目录:/afs/cs/academic/class/15418-f26/

5. 如何使用本笔记

  1. 按讲顺序精读。每讲都遵循同一 7 段结构:概述 → 核心概念与架构图解 → 代码示例与性能分析 → 性能模型与复杂度分析 → 关键要点 → 常见陷阱 → 思考题。建议先读第 2 节建立硬件直觉,再动手跑第 3 节的代码。
  2. 亲手跑代码。笔记中的代码示例为完整可编译版本,多数标注了 g++ -O3 -march=native -fopenmp / nvcc -O3 / mpicc -O3 之类命令。没有实测条件的(如 CUDA)笔记里已明确标注为模型预测。
  3. 把”三把尺子”随时带在手边。任何并行程序都问三个问题:Work 和 Span 各是多少(并行度够不够)?串行比例是多少(Amdahl 上限多少)?算术强度是多少(是算力受限还是带宽受限)?
  4. 注意抽象距离。看到任何”高性能”抽象都追问一句:它离硬件有多远?编译器/运行时会生成什么指令?
  5. 用速查表复习。考试前用第三部分的六张速查表做最后一遍串讲。
  6. 材料公开性已逐讲标注。凡是依据未公开讲义”重述”的部分,笔记中都会说明其依据来自公开的姊妹课程材料或公开成熟知识,请以课程实际讲授为准。