- name
- write-leetcuda-book
- description
- 把 LeetCUDA kernels/interview 教学源码(base/sgemv/sgemm/hgemm/flash_attn/ffpa_attn.cuh)写成中文 CUDA 技术书(4 Part 26 章,XeLaTeX→PDF)。当任务涉及:撰写或修改书稿章节(chapters/chNN-*.tex)、每章最小测试(book/tests/chNN_*.cu)、知乎资料收集与提炼、drawio 图重建或新建、源码注释核查、勾选 RFC 进度、构建/审校 book.pdf 时使用。规范源=BOOK_PLAN.md(章节结构/每章 DoD 八条/源码冻结/容差表/图片管线),执行跟踪=RFC.md(RFC-0..J 里程碑 + 26 章卡片 + 图清单 + 知乎参考种子表)。
- user-invocable
- true
# write-leetcuda-book — LeetCUDA 成书工作流
本 skill 目录即唯一事实源,两份核心文档(同目录):
| 文件 | 角色 |
|---|---|
| `BOOK_PLAN.md` | **规范源**:26 章结构、每章模板与 DoD 八条、素材/测试/图表/公式工程、LaTeX 管线、风险与验收 |
| `RFC.md` | **执行跟踪**:RFC-0..J 里程碑 checkbox、每章执行卡片、图清单登记表、知乎参考种子表 |
绝对路径:`/workspace/dev/vipshop/LeetCUDA/kernels/interview/book/skills/write-leetcuda-book/`(已软链到 `/workspace/dev/vipshop/.github/skills/write-leetcuda-book`)。
## 工作流(每次任务)
1. **领任务**:读 `RFC.md` 里程碑总览表 + 对应章节的执行卡片,按依赖顺序(0→A→(B∥C)→D→E→F→(G∥H∥I)→J)取未勾选项。
2. **读规范**:`BOOK_PLAN.md` §3 章节卡片(源码区间/宏/公式/图/参考/测试映射)+ §4 模板与 DoD + 相关工程节。
3. **执行**:章节任务四合一 = 正文 tex + 最小测试 .cu + 注释核查 + 增量 bench。
4. **验收**:对照 §4.2 DoD 八条逐条自检(编译零 error / 锚点断言 / CHECKLOG / 测试 PASS / bench 落盘 / 图表登记 / 延伸阅读 / pdftotext 抽查)。
5. **回写**:RFC.md 勾选 `- [x]` + 追加日期;发现问题记 CHECKLOG / RFC 对应位置。
## 硬规则速查(违反必返工)
1. **源码冻结**:`*.cuh` / notes-v2.cu 在 RFC-A 登记 SHA256 后**零改动**。注释错误只记 `book/CHECKLOG.md` + 正文「勘误与考据」,不回写源码。
2. **正文形态**:原理讲解 + 关键代码段(每段 ≤40 行,`linerange` 多段裁剪,`firstnumber=auto`);完整代码给附录 D 的 **GitHub commit permalink**;每章正文(非 listings)≥3500 字。
3. **测试**:`book/tests/chNN_*.cu` 无 cuBLAS/cuDNN 依赖,CPU fp64 参考 + 容差三档(F32Acc 1e-3 / F16Acc 5e-2 / TF32 1e-2),规模 ≤512,arch 不在位输出 SKIP;行数 ≤300(基础章)/≤500(复杂章)。
4. **知乎素材**:五步法(枚举→全文落 `zhihu-analysis/`→提炼→成文不照抄→附录 E 汇总);**图片直接引用+出处标注**(作者/文章/链接/日期),原图归档 `book/figures/zhihu/`;水印/作者角标/平台 logo 一律标记为非内容元素,不得进入书内图。
5. **drawio 管线**(知乎图→正式图主路径):`drawio-reconstruction` skill 为主(inventory→重建→审查闭环),`drawio-diagram-builder`/`drawio-flow-forge` 辅助(ASCII 升级/新建)。**执行模式:主 agent 直接做,不派 task agent**(闭环子代理实测易卡死,用户 2026-09-11 拍板)。审查结论如实记 audit(自审需标注)。**质量三查(每图必过)**:XML well-formed + 文字覆盖(COVER=0)+ 渲染宽不越界(见「drawio 制图铁律」)。**`.drawio` 源文件必须入库**(用户要求可手改,勿只提交 PNG)。
6. **行文风格(作者基线)**:参考 @DefTruth《图解:从Online-Softmax到FlashAttention V1/V2/V3》与《WINT8/4》系列——**原理一定要讲细**:公式逐项展开、指令逐 bit/逐字段解释、先直觉后形式化再代码;中文叙述、术语保留英文。其余可自由发挥。
7. **注释核查五类**:F1 架构事实(Prog Guide+cutlass skill arch guides)/ F2 PTX(本地 ptx-docs)/ F3 数学(独立推导)/ F4 性能断言(标来源)/ F5 历史陈述(对原论文)。
8. **构建**:CWD=`book/`,`TEXMFCNF=../tex/: xelatex -interaction=nonstopmode book.tex` ×2(或 `./build.sh`);本机已有 xelatex+ctexbook+Noto CJK(已验证)。
## 工具链速查
```bash
# drawio headless 导出(已装 v31.4.5 deb + xvfb;Ubuntu noble 无 apt 包,须用 GitHub releases deb)
DRAWIO_PATH=/usr/local/bin/drawio-headless \
python3 /workspace/dev/vipshop/.github/skills/drawio-reconstruction/scripts/export_drawio.py in.drawio out.png
python3 /workspace/dev/vipshop/.github/skills/drawio-reconstruction/scripts/check_drawio.py in.drawio
# 也可直接:/usr/local/bin/drawio-headless -x -s 3 -o out.png in.drawio
# VS Code drawio 插件(用户已装):用于人工查看/微调 .drawio;自动导出仍走上面 CLI
# 全书图几何体检(book/scripts/,2026-09 新增;改动后必须复检至 0)
python3 scripts/check_overlap.py figures/drawio/*/*.drawio # 文字覆盖(COVER = 后画实心框盖住先画 text)
python3 scripts/check_text_fit.py figures/drawio/*/*.drawio # 渲染宽 vs geometry 宽 + 页宽越界
# 知乎 CLI(已授权;--count 上限 10)
/root/.local/share/zhihu-cli/current/zhihu-cli search zhihu --query "..." --count 10
python3 /workspace/dev/vipshop/.github/skills/zhihu/scripts/fetch_column_fulltext.py <专栏URL> # 枚举/取全文
# 源码锚点断言(RFC-A 后可用)
python3 /workspace/dev/vipshop/LeetCUDA/kernels/interview/book/scripts/verify_anchors.py --ch chNN
```
## drawio 制图铁律(2026-09 全书返工沉淀)
**生成器结构**:每图一份自包含 `gen.py`(`F` 类 box/text/line + 输出 `python3 gen.py <输出文件全名>`,如 `gen.py fig-12-2.drawio`——误传目录名会产生孤儿文件)。批量期的权威源在 `.tmp/drawio/gen_batch_{a,b1,b2,c1,c2,d,e}.py`(**`.gitignore` 忽略**),每图目录的 gen.py 是其回流拷贝(入库、自包含)。**改图必须改 `.tmp` 权威源再回流**,直接改目录版会在下一轮批量重跑时被静默覆盖(fig-14-2 实测踩中);回流后用 `cmp -s` 校验。
**XML 铁律**:
1. `value` 禁裸 `<` / `&`:`Tile<64,64,16>`、`Swizzle<3,4,3>`、`->`、`R^16` 类写法的 `<` 必须转义 `<`。裸 `<` 毁掉 well-formed → drawio **静默**渲染成细条(fig-26-1 只输出 2522x74,书里等于废图)。
2. 每个生成器末尾做 `ET.fromstring(xml)` 自检;全书定期 `python3 -c "ET.parse"` 全量扫(本次 2/39 破损)。
3. `text` 元素**不自动换行**:geometry 宽小于渲染宽,文字直接溢出色框(甚至越出页宽)。长注释必须手工拆多行,或把 geometry 宽改到 ≥ 估算渲染宽。
4. 宽度估算:CJK/全角 × `fontSize×1.02`,ASCII × `fontSize×0.58`(含全角标点按 CJK 计)。`check_text_fit.py` 用此公式报 `[OOB]`(越页宽)/`[COLLIDE]`(侵入右邻框)。
5. z-order:后画的**实心 box 会盖住**先画的 text。右上角注释卡与左侧网格文字相交时,把文字移出卡区(`check_overlap.py` 的 `COVER` 即此类)。
6. 导出体检:`PNG 宽 ≈ pageWidth × 3`(`-s 3`),高宽比 ≈ pageHeight/pageWidth。比例异常 = 渲染崩了(先查 XML well-formed),不要直接 `includegraphics`。
**常见布局病**(本轮回修):说明行(y 40–60)与列头框(y 50+)净空不足 → 原点下移 16–26px;卡片内文字 409px 渲染塞 300px 框 → 框加宽 + 拆行;左表右侧的 `...` 居左文本 geometry 过宽侵入相邻框 → 宽度收到渲染宽;「标题 + 图」跨页 → 图示节前 `\needspace{图高+30mm}`(mm = `width_tw × 181 × png_h/png_w`,`preamble.tex` 已 `\usepackage{needspace}`)。
**其它约定**:CJK 禁 `bold`(易糊);两位数格宽 ≥54px;纯色缩略格无文字;`.drawio`/`.png`/`gen.py` 三件套全部入库。
## 目录结构(book/,相对本 skill 的 `../../`)
```
kernels/interview/book/
├── book.tex / preamble.tex / build.sh # RFC-0 产出
├── chapters/chNN-*.tex … appendices/ # RFC-C..I 产出
├── figures/{ascii/,zhihu/,drawio/,tikz/}
├── tests/{common_test.h, chNN_*.cu, build_tests.sh}
├── notes/ references/ scripts/ CHECKLOG.md
├── skills/write-leetcuda-book/ # 本 skill(规范+跟踪)
└── .tmp/ # 测试/bench 临时产物(按任务建子目录)
```
## Examples
- `examples/drawio-recon-m1/`:drawio 重建 smoke test 固化样例(重建件 + headless 导出预览 + audit + 复现命令)。正式重建任务照此流程执行;原图在 drawio-reconstruction skill 的 `examples/m1.png`(路径引用,不复制)。
## 关联 skill
- `drawio-reconstruction`(知乎图重建主路径)、`drawio-diagram-builder` / `drawio-flow-forge`(新建图)
- `zhihu`(资料五步法)
- `cuda-cpp-kernel`(ptx-docs=F2 核查源)、`cutlass-cpp-kernel`(arch guides=F1 核查源)、`cuda-auto-tune`(bench 复测方法论)
- `ffpa-cuda-understand`(ch19/26 大 D split-D 背景)
Ver no GitHub