READ WITH A QUESTION
资料少一点,读得具体一点。
先读本章,再带着一个明确问题打开官方资料。每章的「继续查证」给出具体章节,避免同时开启多套完整课程。
已经整合的图解与代码
- ROCm Stack Atlas · 十步 GEMM 图解 ↗
由现有修正版唯一源文件生成的同源镜像;包含双语、逐步聚焦与各层职责。
- AMD 学习平台 ↗
保留独立资料库,按模块查阅;阅读完成不代表实际驱动开发经验。
- 下载本书全部独立示例源码
示例下载用于学习;每章提供单文件下载、编译命令和预期输出。
- Reduction Lab 与答辩指南 →
用一个主项目串起正确性、并行、测量和复现。
七个主要资料入口
- C++ 与对象模型 ↗
CS106L:按 types、references、classes、templates、move、RAII 选读。
- 操作系统 ↗
OSTEP:process、address space、threads、locks、condition variables。
- 并行计算 ↗
CS149:architecture、locality、GPU、memory consistency。
- AMD HIP ↗
运行前切换到匹配已安装版本的文档;先读 programming model 与基础 tutorial。
- Tenstorrent Metalium ↗
从 DRAM、elementwise、matmul 逐步理解显式数据移动。
- Cerebras ↗
公开 architecture、CSL、host 与 tutorial;使用许可和实际环境另行核对。
- LLVM ↗
Kaleidoscope:从 lexer/AST 到 IR,注意教学简化与生产实现的区别。
按主题复用 AMD 平台
- GPU 执行层级与 wave 图解 ↗
辅助对照软件线程与硬件执行单位;旧调试题中的最后一段 wave 隐式同步不能作为正确实现,按本书第 31/36 章证明同步。
- HIP 基础:Grid、Block 与 Thread ↗
复习线程索引与 host/device 调用顺序,运行时与驱动的职责以本书第 35 章及修正版 Atlas 为准。
- ROCm 计算与 kernel 主题库 ↗
按内存、stream 和性能主题补充阅读;设备练习需满足该版本环境要求。
- ROCm 内核与 KFD 主题库 ↗
继续了解队列、内存和内核边界,避免把稳态直接派发描述为每次都进入内核。
- GPU 调试方法主题库 ↗
按错误、卡住、性能回归分类选读;寄存器和工具命令须对照实际设备版本。
- 原有 C/C++ 编程题库 ↗
按当前缺口选择一题;基础练习仍使用标准 C++20,不按旧站点完成标记解锁 G0。
按章查找精确出处
C++ 基础与工程
- 01 · 第一份程序:保存、编译与顺序执行
GCC:整体选项 — -o file指定输出;--version识别工具版本。
Clang:命令指南 — DESCRIPTION与Language Selection and Mode Options:构建工具入口及-std=c++20。
C++工作草案:main入口 — main返回int、空参数入口形式、从main返回和成功退出。
C++工作草案:iostream头文件概要 — iostream声明的标准输入输出对象。
- 02 · 类型与表达式:先运算,再保存
C++工作草案:基本类型 — 整数最小宽度、无符号模运算、有符号越界和浮点类型。本文按C++20限定讲授,当前草案用于查证。
C++工作草案:整数字面量 — 十进制字面量与U、LL后缀的候选类型。
C++工作草案:乘除与余数 — 整数商向零截断;商可表示时的商余恒等式;零除及不可表示的商。
C++工作草案:列表初始化 — 空列表的值初始化和浮点到整数窄化限制。
C++工作草案:浮点与整数转换 — 浮点转整数丢弃小数部分;结果不可表示时的限制。
C++工作草案:auto占位类型 — 由初始化表达式推导声明的类型;本文只涵盖标量auto x = expression。
C++工作草案:固定宽度整数头文件 — 精确宽度类型名的可选性,uint32_t的适用条件。
- 03 · 控制流:选择与重复
C++工作草案:语句与条件 — 语句与条件的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:整数到bool的转换 — 整数到bool的转换的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:关系比较 — 关系比较的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:相等比较 — 相等比较的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:内建逻辑与与短路 — 内建逻辑与与短路的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:内建逻辑或与短路 — 内建逻辑或与短路的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:if/else选择 — if/else选择的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:块作用域 — 块作用域的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:while循环 — while循环的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:前缀自增减 — 前缀自增减的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:后缀自增减 — 后缀自增减的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:赋值与复合赋值 — 赋值与复合赋值的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:普通for执行顺序 — 普通for执行顺序的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:continue — continue的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:break — break的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:do/while — do/while的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:switch标签与贯穿 — switch标签与贯穿的条款;正文限定C++20已有规则,当前草案用于查证。
C++工作草案:条件运算符 — 条件运算符的条款;正文限定C++20已有规则,当前草案用于查证。
- 04 · 普通函数:参数、调用与返回
N4861 C++20草案:函数接口与参数 — 04.1;返回类型、参数列表与名称。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:普通函数定义 — 04.1;定义位于普通块外,函数体的规则。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:实参、参数与调用 — 04.1–04.2;实参初始化参数、参数对象的适用边界。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:多个实参的求值边界 — 04.1与04.4;不推断从左到右的求值顺序。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:返回到调用者 — 04.1–04.3;控制与返回结果。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:void、结果和末尾返回 — 04.3;普通非void漏返回及void正常到尾。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:main的返回特例 — 04.3;区别普通函数结果与程序结束。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:块作用域与遮蔽 — 04.4;同名内外层对象。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:参数名的作用域 — 04.4;形参不能在函数体最外层再声明。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:局部声明的执行 — 04.4;每次执行声明重新初始化本次局部对象。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:抽象机与实现 — 04.4;逻辑调用图不规定物理栈布局。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:声明与定义 — 04.5;定义本身也是声明。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:默认实参 — 04.5;省略尾部输入时补值。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:默认实参的重复声明边界 — 04.5;在选定可见声明给值,不重复指定。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:标准转换的匹配等级 — 04.5;本章int/double两个候选的精确匹配。 固定版本文本的HTML镜像,并非ISO官网。
N4861 C++20草案:不能仅按返回类型重载 — 04.5;同参数列表的冲突。 固定版本文本的HTML镜像,并非ISO官网。
Clang官方:返回路径诊断 — 04.3;工具警告与语言规则区分,实际编译器版本看本地执行记录。
- 05 · 引用与const:副本和同一个对象
WG21 N4861:C++20工作草案 — 固定版本第一方原件,2020-04-01;下列HTML为同版本定位镜像。
N4861 C++20草案:引用声明与是否需要存储 — 05.1–05.2;普通引用初始化与形参绑定,不承诺具体存储。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:引用初始化后不改绑 — 05.1;赋值写入被引用对象。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:直接绑定与const限制 — 05.1–05.3;本章具名int及不合法绑定。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:const访问路径 — 05.3;路径只读不等于可写对象被冻结。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:auto的推导入口 — 05.4;只讲具名标量的使用结果,不要求定义模板。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:推导中的引用与const — 05.4;副本与引用推导差异,固定C++20条款。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:普通局部对象的存储期 — 05.5;本章普通局部int到退出块为止。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:对象与引用的生命周期 — 05.5;名字作用域与对象存活分别判断。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:生命周期结束后的访问 — 05.5;不得读取悬空引用对应的对象。 固定版本HTML镜像,并非ISO官网。
N4861 C++20草案:返回结果与局部对象结束的次序 — 05.5;按值结果与局部引用的区别。 固定版本HTML镜像,并非ISO官网。
Clang:返回局部地址或引用的诊断 — 05.5;诊断是工具行为,实际选项和版本见运行记录。
- 06 · 指针:地址、空值与有效访问
WG21 N4861:C++20工作草案 — 2020-04-01固定版本一手原件;下列HTML用于同版本精确定位,不是ISO官网。
N4861:指针声明与两层const — 06.1/06.4;指针对象与目标访问分别限定。 固定C++20文本的HTML定位镜像。
N4861:取地址与间接访问 — 06.1–06.2;一元*与&的对象语义。 固定C++20文本的HTML定位镜像。
N4861:赋值指定被修改对象 — 06.2;赋值左操作数是p还是*p。 固定C++20文本的HTML定位镜像。
N4861:指针值与地址 — 06.1–06.2;图只用目标名字,不保证地址数值或布局。 固定C++20文本的HTML定位镜像。
N4861:nullptr字面量 — 06.3;空值的专用写法。 固定C++20文本的HTML定位镜像。
N4861:空指针转换 — 06.3;nullptr形成所需指针类型的空值。 固定C++20文本的HTML定位镜像。
N4861:指针相等比较 — 06.3;本章显式比较,输入限定有效指针或空值。 固定C++20文本的HTML定位镜像。
N4861:形参从实参初始化 — 06.3;普通指针参数是独立的按值副本。 固定C++20文本的HTML定位镜像。
N4861:返回结果与局部结束次序 — 06.3/06.5;返回指针值不复制目标。 固定C++20文本的HTML定位镜像。
N4861:const路径与对象 — 06.4;通过只读路径观察可写对象。 固定C++20文本的HTML定位镜像。
N4861:资格转换 — 06.4;不能隐式去掉目标的const。 固定C++20文本的HTML定位镜像。
N4861:普通块局部存储期 — 06.5;普通局部int在退出块时结束。 固定C++20文本的HTML定位镜像。
N4861:存储期结束后的无效指针 — 06.5;不执行失效指针的读取、比较、复制或打印来证明安全。 固定C++20文本的HTML定位镜像。
N4861:C++20不确定值 — 06.3;未初始化指针不能先拿来判空。 固定C++20文本的HTML定位镜像。
Clang:返回局部地址的诊断 — 06.5;工具诊断不等于语言保证。实际编译器版本与结果见运行收据。
- 07 · 类与对象:状态、接口和销毁顺序
WG21 N4861:C++20工作草案 — 2020-04-01第一方固定版本;以下HTML为同版本定位镜像,不是ISO官网。
N4861:成员访问权限 — 07.1;class/struct默认权限及访问标签。
N4861:点与箭头 — 07.1;对象成员与指针成员访问。
N4861:this与const成员函数 — 07.1/07.3;当前对象指针及const访问路径。
N4861:局部类 — 07.1;函数块内的类不是自动捕获局部变量的函数。
N4861:构造函数与默认构造 — 07.2;构造声明、参数和默认构造入口,默认构造细则见同章[class.default.ctor]。
N4861:成员初始化优先规则与顺序 — 07.2;第9–10段说明默认初值,第13段规定声明顺序和构造体顺序。
N4861:C++20聚合初始化 — 07.1–07.2;仅使用无用户声明构造、公开标量成员的简单类型。
N4861:显式构造 — 07.2;explicit构造与隐式转换。
N4861:引用绑定 — 07.2;引用成员绑定调用者的具名整数,借用不延长其寿命。
N4861:生命周期端点 — 07.4;类对象生命周期在析构调用开始时结束。
N4861:构造与析构期间的访问 — 07.4;销毁开始不意味着自身尚未销毁成员立即不可访问。
N4861:正常跳转与局部销毁 — 07.4;正常离块及return,按构造逆序处理已建立对象。
N4861:析构体与成员次序 — 07.4;先执行本对象析构体,再处理其成员。
N4861:静态成员函数 — 07.5;静态成员函数没有this;限定访问另见[class.static]/1。
N4861:命名枚举与转换边界 — 07.5;enum class的独立类型及无隐式int/bool转换。
N4861:虚函数与覆盖 — 07.6仅认读;override检查及经基类引用的虚调用,不加入学习验收。
- 08 · 拥有一组数据:array、vector与string
WG21 N4861:C++20工作草案 — 固定2020-04-01草案;08.1见[temp.arg]、[dcl.typedef]、[expr.sizeof],08.2见[array.overview]、[dcl.init.aggr]、[dcl.init.string]、[dcl.fct],08.3–08.4见[vector.cons]、[vector.capacity]、[string.cons],08.5见[numeric.limits.members]及[basic.fundamental]。
Microsoft C++标准库参考:vector — 08.1与08.3的补充查证:value_type、size_type、构造、size、capacity、reserve、resize和push_back;仅查本章所用接口,不要求提前阅读该页的迭代器、异常与模板定义例子。
- 09 · 遍历与借用:范围、视图与失效
WG21 N4861:C++20工作草案 — 固定2020-04-01草案;09.1查[expr.add]、[iterator.requirements.general]、[vector.cons],09.2查[stmt.ranged],09.3查[span.cons]、[span.elem]、[string.view.cons]、[string.view.io]、[string.cons],09.4查[vector.capacity]、[vector.modifiers]。
Microsoft C++标准库参考:span — 09.3查构造、size、empty与元素访问;正文限定C++20的无检查下标,不把“safer”理解为自动发现悬空或越界。只查所用接口,不要求提前阅读模板定义。
Microsoft C++标准库参考:basic_string_view — 09.3查按指针/长度构造、size、data与非拥有关系;结合固定C++20草案核对按长度输出及string拥有快照。
- 10 · 算法与lambda:表达处理意图
WG21 N4861:C++20工作草案 — 固定2020-04-01草案。10.1–10.3查[algorithms.requirements]、[alg.find]、[alg.count]、[alg.any.of]、[alg.sorting]、[sort]和[accumulate];10.4查[expr.prim.lambda.capture]、[expr.prim.lambda.closure]、[dcl.spec.auto];10.5查[alg.transform]、[alg.remove]和ranges::sort的projection参数。
Microsoft标准库参考:algorithm函数 — 10.2–10.5按函数名查find、sort、count_if、any_of、transform和remove_if的范围、返回值与使用前提;不提前阅读执行策略、模板实现或本章未使用的算法。
Microsoft标准库参考:accumulate — 10.2查初值决定Type、每轮结果回存Type、空范围返回初值;本章明确使用不带执行策略的std::accumulate,不能用最后接收变量的类型倒推累加器。
- 11 · 关联容器与适配器:查找、唯一性与访问顺序
WG21 N4861:C++20工作草案 — 固定2020-04-01草案。11.1查[pairs]、[dcl.struct.bind];11.2查[associative.reqmts]、[map.access]及[set];11.3查[unord.req]、[unord.map.modifiers]、[expr.call];11.4查[map.modifiers]与迭代器成员访问;11.5查[deque]、[queue]、[stack]。
Microsoft标准库参考:map成员接口 — 11.2/11.4按成员名核对find、count、contains、at、operator[]、insert、emplace和try_emplace;只调用本章已讲的接口,不先读分配器、模板实现或异常处理。
Microsoft标准库参考:unordered_map成员接口 — 11.3按成员名核对find、contains、operator[]和at;哈希相等、rehash与迭代器失效以固定C++20草案为准,不采用网页顶部对插入失效的过度概括,也不依赖其示例遍历顺序。
- 12 · 复制与移动:追踪对象、调用与结果
WG21 N4861:C++20工作草案 — 固定2020-04-01版本。12.1核对[basic.lval]、[dcl.init.ref]与[class.temporary];12.2核对[forward]、[class.copy.ctor]、[class.copy.assign]、[dcl.fct.def.default]及[dcl.fct.def.delete];12.3核对[lib.types.movedfrom]、[container.requirements.general]、[class.copy.elision]与[dcl.init]的同类型prvalue初始化。
C++ Core Guidelines:C.20 Rule of Zero — 12.4只补充C.20的设计建议:已有成员能正确承担所需操作时,避免重复定义默认管理操作。本章不提前要求该站其他条目的资源释放、异常保证或完美转发实现。
- 13 · 真实资源与RAII:独占拥有
WG21 N4861:C++20工作草案 — 固定2020-04-01版本。13.1查[expr.new]、[expr.delete];13.2查[class.dtor]与[stmt.jump];13.3查[unique.ptr.single.ctor]、[unique.ptr.single.dtor]、[unique.ptr.single.observers]及[unique.ptr.create];13.4查[unique.ptr.single.asgn]、[unique.ptr.single.modifiers];13.5查[expr.call]与独占拥有者的析构合同。
C++ Core Guidelines:R.1 自动管理资源 — 13.2/13.5补充R.1的设计动机:把释放职责绑定到拥有者生命周期。本章只完成单对象与同步接口的正常退出路径,不提前要求异常处理、锁或自定义删除器实现。
- 14 · 共享拥有与回调寿命
WG21 N4861:C++20工作草案 — 固定2020-04-01版本。14.1查[util.smartptr.shared.const]、[util.smartptr.shared.dest]、[util.smartptr.shared.obs]与[util.smartptr.shared.create];14.2查[util.smartptr.weak.obs]、[stmt.if]及[class.dtor];14.3查[expr.prim.lambda.capture];14.4查[func.wrap.func.con]、[func.wrap.func.asgn]与[func.wrap.func.inv],以C++20的目标复制要求为准。
C++ Core Guidelines:R.24 弱关系与共享拥有环 — 14.2补充双向强拥有形成环,以及用弱回边表达观察关系的设计动机。本文例子按父强子、子弱父的固定关系展开,不从规则推断所有双向关系都必须共享拥有。
- 15 · 定义模板与concepts
WG21 N4861:C++20工作草案 — 固定2020-04-01版本。15.1查[temp.param]、[temp.arg.explicit]与[temp.deduct.call];15.2查[temp.type]与[temp.res];15.3查[dcl.constexpr]、[dcl.pre]的static_assert、[meta.unary.cat]、[meta.rel]及[stmt.if];15.4查[temp.constr]、[expr.prim.req]、[concept.same]、[concept.convertible]与[concepts.arithmetic];15.5查[expr.prim.lambda]、[temp.func.order]、[temp.deduct.call]、[dcl.ref]与[forward]。
Microsoft C++参考:Templates — 15.1/15.2补充函数模板、类模板和模板实参的读法。定义可见性只作为15.5的接口阅读边界,多文件构建安排在17章;不把参考页的高级模板写法增加为本章先备。
- 16 · 错误处理与输入解析
WG21 N4861:C++20工作草案 — 固定2020-04-01版本。16.2查[optional.observe]、[optional.nullopt];16.3查[charconv.from.chars]、[istream.formatted.arithmetic]、[string.io];16.4/16.5查[except.throw]、[except.handle]、[except.ctor]、[unique.ptr.single.dtor]及[vector.capacity];16.6查[except.spec]、[except.terminate]与[forward]。
N4861精确位置:optional访问 — 16.2:[optional.observe],文内页589、PDF第597页起;has_value、条件转换、解引用、value与value_or的合同。
N4861精确位置:整数from_chars — 16.3:[charconv.from.chars],文内页720、PDF第728页起;停止指针、错误码、字符模式与整数表示范围。
N4861精确位置:异常展开与部分构造 — 16.5:[except.ctor],文内页435、PDF第443页起;已构造对象清理与构造失败。noexcept与move_if_noexcept仍查同一固定草案[except.spec]、[except.terminate]、[forward],vector交换查[vector.capacity]。
- 17 · 多文件编译、链接与构建
WG21 N4861:C++20工作草案 — 17.1查[lex.phases];17.2查[cpp.include]、[cpp.replace]、[cpp.cond]、[namespace.def]、[namespace.qual]、[basic.def.odr]与[dcl.inline];17.3查[basic.start.main]。标准描述语言合同,具体Clang命令与诊断由本机实际验证。
CMake官方:cmake-buildsystem — 17.3/17.4的Binary Targets、Static Libraries及Build Specification and Usage Requirements;本例仅明确STATIC库、两个可执行目标、PUBLIC编译特性和PRIVATE链接依赖。
Clang官方:Command Guide — 17.1的Stage Selection Options:-E、-S、-c以及无阶段停止选项时的链接;17.4记录实际编译器版本,不要求读取LLVM IR。
- 18 · 测试与调试:独立定位失败
WG21 N4861:C++20断言与条件编译 — 固定2020-04-01工作草案,19.3[assertions]、19.3.1[cassert.syn]及15.2[cpp.cond]。核对<cassert>的宏性质、NDEBUG影响与条件编译;本章不执行断言失败终止路径。
LLVM LLDB官方教程:断点、单步与栈帧 — Setting Breakpoints、Controlling Your Program与Examining Stack Frame State:breakpoint set、run、next、thread backtrace与frame variable。在线命令说明用于查证;本机版本与实际停点以本章调试记录为准。
Clang AddressSanitizer:编译、链接与运行 — Usage:编译和最终链接使用-fsanitize=address,-g与-fno-omit-frame-pointer辅助定位。当前网页是开发文档,不把其版本当作本机编译器版本。
Clang UndefinedBehaviorSanitizer:使用与检查范围 — Usage与Available checks:-fsanitize=undefined启用指定检查组;无报告不能证明需求正确或所有路径安全。本章不运行故意的未定义行为。
数据结构与算法
- 19 · 数组、哈希与双指针:重复工作从哪里删掉
MIT 6.006 · Data Structures — Lecture 2:序列接口、数组与操作成本
MIT 6.006 · Hashing — Lecture 4:字典接口、哈希与预期复杂度
- 20 · 二分、排序与堆:保留哪些候选
C++ 标准工作草案 · alg.binary.search — alg.binary.search(本章仅采用 C++20 已有规则)
C++ 标准工作草案 · priority.queue — priority.queue(本章仅采用 C++20 已有规则)
- 21 · 递归、树与图:沿着依赖和边访问
MIT 6.006 · Breadth-First Search — Lecture 9:BFS、最短边数与父指针
Princeton Algorithms · Undirected Graphs — Depth-first search、Breadth-first search、Connected components
- 22 · 动态规划与解题表达:状态必须回答一句话
MIT 6.006 · Dynamic Programming I — Lecture 19:子问题、记忆化与自底向上
MIT 6.006 · Dynamic Programming II — Lecture 20:状态选择与转移推导
Linux 与并发系统
- 23 · 进程、系统调用与文件描述符
OSTEP:Process API — 5.1 fork、5.2 wait、5.3 exec
POSIX read — RETURN VALUE、ERRORS、管道结束行为
- 24 · 虚拟内存、页表与 mmap
OSTEP:Address Spaces — 13.3 地址空间、13.4 虚拟化目标
POSIX mmap — MAP_PRIVATE、MAP_SHARED、RETURN VALUE
- 25 · 线程、互斥锁与死锁
C++ draft:Data races — conflicting evaluations、happens before、data race
OSTEP:Locks — 28.1 基本概念、28.3 评价锁
- 26 · 条件变量、有界队列与关闭协议
OSTEP:Condition Variables — 30.1 定义、30.2 生产者消费者
C++ draft:condition_variable — wait、谓词等待与 notify_all
- 27 · 原子操作与 happens-before
C++ draft:Atomic order — memory_order_relaxed、release/acquire、synchronizes with
C++ draft:Data races — happens before 与非原子冲突访问
- 28 · TCP 字节流、分包、超时与背压
IETF RFC 9293:TCP — 2.2 服务、3.9 用户接口与流控制
POSIX poll — POLLIN、POLLHUP、timeout 与 EINTR
架构、性能与并行
- 29 · CPU cache、缓存一致性与 SIMD
CS149:Parallel Computing — 课程中的 memory hierarchy、cache coherence 与 SIMD 讲次
AMD HIP:Performance guidelines — Memory throughput;作为后续 GPU 局部性对照
- 30 · 可信测量、原始样本与性能模型
C++ draft:steady_clock — 单调时钟要求
CS149:Parallel Computing — 性能分析、Amdahl 定律与 memory bandwidth 主题
AMD HIP:Performance guidelines — 性能测量与内存吞吐
- 31 · 并行分解、分块与负载均衡
CS149:Parallel Computing — parallel decomposition、work distribution、scheduling 讲次
C++ draft:Thread completion — join 的同步关系与线程完成
- 32 · Reduction、scan 与数值正确性
AMD HIP:Reduction — 树形归约、共享内存与优化步骤
C++ draft:reduce — 归约操作的顺序与操作约束
C++ draft:Numeric limits — 浮点精度与特殊值属性
- 33 · Host/device、传输与异步生命周期
AMD HIP:Memory management — Host/device memory 与分配管理
AMD HIP:Asynchronous execution — Streams、events、异步并发
- 34 · Kernel 索引、边界与 grid-stride loop
AMD HIP:C++ language extensions — threadIdx、blockIdx、blockDim、gridDim
AMD HIP:Programming model — 线程组织与kernel启动
- 35 · 合并访问、共享内存与同步范围
AMD HIP:Performance guidelines — Memory throughput、shared memory、occupancy
AMD HIP:C++ language extensions — 共享变量、__syncthreads 与执行模型
- 36 · Tensor shape、stride 与 GEMM 分块
AMD HIP:Matrix multiplication — 二维kernel、矩阵乘法与分块;官方HIP教程
NVIDIA CUDA C++ Best Practices — 10.2.3 Shared Memory,矩阵乘法与数据复用
AMD · HIP 与 ROCm
- 37 · HIP:从 CPU 数据到一次 kernel 调用
HIP programming model — Host programming; hierarchical thread model
HIP error handling — API and asynchronous errors
- 38 · Streams 与 events:用依赖组织异步工作
HIP asynchronous execution — Streams and events
HIP host memory — Pinned memory and asynchronous copies
- 39 · ROCm 各层:一次请求由谁负责
What is ROCR — User-mode runtime, queues and signals; historical version explicitly identified
Linux amdgpu documentation — Driver overview, memory and compute support
- 40 · HIP Reduction:从正确性到 profiling 问题
HIP Reduction tutorial — Reduction stages and optimization
ROCprofiler quick guide — Tracing options and hardware counters
Tenstorrent · 显式数据流
- 41 · Tensix 与 tiles:先安排数据,再安排计算
Metalium Architecture Guide — Architecture, tiles and local memory; generation-specific details
Tenstorrent matrix lab — Tile layout and engine roles
- 42 · TTNN 与 Metalium:不同抽象保留同一份数学合同
TTNN Tensor and Add tutorial — Tensor conversion and addition
Metalium Getting Started — Software stack and programming philosophy
- 43 · Reader、compute、writer:缓冲区里的生产与消费
CB reserve API — Capacity and reservation contract
Metalium kernel API index — Circular buffer and NoC APIs
CB push API — Publication, pointer advancement and wrap constraints
- 44 · Tenstorrent 端到端例子:让每一层对同一结果负责
Metalium eltwise binary example — Mesh host setup and compute pipeline
Metalium DRAM loopback — Host transfer, execution and validation lifecycle
Cerebras · 晶圆级计算
- 45 · WSE 与 PE:把数据放在拥有它的计算节点旁边
Cerebras public multiple-PE tutorial — Replication and layout coordinates
Cerebras public routing tutorial — Partitioned computation and communication
- 46 · CSL 与 host:装载、启动、回读是一份共同合同
Cerebras complete program tutorial — Layout, PE, host and command completion
Cerebras public host memcpy example — SdkRuntime lifecycle and transfer arguments
Cerebras basic syntax — Types, functions and builtins
- 47 · 多PE scan:消息里到底应该传什么
Cerebras routes tutorial — Routes, colors and asynchronous completion
Cerebras streaming wavelet tutorial — Wavelet-triggered tasks and payloads
- 48 · 功能模型、simulator 与硬件:分别证明什么
Cerebras public SDK examples — Simulator/hardware distinction and release compatibility
Cerebras debug library tutorial — Trace values and host inspection
Cerebras simprint tutorial — Simulator logging and incomplete-program diagnosis
Compiler 与 runtime
- 49 · AST、IR 与 SSA:同一个表达式的三种表示
LLVM Kaleidoscope AST tutorial — AST and parser concepts
LLVM Language Reference — SSA values, phi and integer instruction semantics
- 50 · 优化首先要合法:别名、溢出与浮点重排
LLVM vectorizers — Runtime pointer checks and optimization diagnostics
LLVM Language Reference — Integer flags and fast-math semantics
- 51 · Tensor lowering 与内存规划:值什么时候可以共用一块空间
MLIR Bufferization — Destination-passing style and read-after-write conflicts
MLIR Toy lowering tutorial — Partial lowering and memref operations
- 52 · ABI、装载与 runtime:找到函数还不等于能安全调用
LLVM ORC design — Runtime linking, symbol lookup and resource management
LLVM AMDGPU usage — Code objects, target identification and kernel argument metadata
LLVM JITLink — Object linking and symbol resolution