florianmattana/sass-king
GitHub: florianmattana/sass-king
系统化反向工程 NVIDIA SASS 并关联 NCU 性能分析,填补 GPU 指令级审计与性能映射的空白。
Stars: 89 | Forks: 3
# SASS King
系统化地对 NVIDIA SASS 进行反向工程,跨越不同架构。
每一项研究都将 **SASS 阅读**(`cuobjdump` + [gpuasm.com](https://gpuasm.com/))与 **NCU 性能分析** 相结合,以关联指令与实测性能。
完整背景:[第一部分 — 从第一性原理阅读 NVIDIA SASS](https://florianmattana.com/posts/sass_king/)
## 路线图
### 阶段 1 — 在 SM120 上教学内核(可控变化)
* [x] **第一部分** — 内核 01 至 04:基线、FMA 融合、记分板、展开级联。[阅读](https://florianmattana.com/posts/sass_king/)
* [x] 内核 05 — 循环次数较少且固定的循环
* [x] 内核 06 — 共享内存标量(`LDS`、`STS`、`BAR.SYNC`),运行时取模 `CALL`
* [x] 内核 07 — 共享内存模式(库冲突、填充、多缓冲)
* [x] 内核 08 — 向量化全局内存(`LDG.E.128`、`LDG.E.ENL2.256`、FP64)
* [x] 内核 09 — 战线原语(`SHFL.BFLY`、`VOTE`、`MATCH`)
* [x] 内核 10 — 战线规约模式(`REDUX`、蝴蝶、lane-zero)
* [x] 内核 11 — 慢路径算术(`MUFU.RCP/LG2/EX2/RSQ`、内联除法、`log2f`、`expf`、`sinf`、`sqrtf`、Payne-Hanek)
* [x] 内核 12 — 寄存器溢出与局部内存(`STL`、`LDL`、`LDL.LU`、`STL.128`、栈帧、`R2UR`)
* [ ] 内核 13+ — 张量核心(`HMMA`、`QMMA`、`OMMA`)
### 阶段 2 — 经典算法
* [ ] 向量加法
* [ ] 前缀和(扫描)
* [ ] SGEMM
* [ ] 规约(求和、最大值)
* [ ] Softmax
* [ ] LayerNorm / RMSNorm
### 阶段 3 — 库审计
对实际生产内核进行端到端注释。目标如下;内核数量反映 gpuasm.com 上的可用情况。
| 库 | 内核数 | 状态 |
|------------------|--------|--------|
| flash_attn2 | 138 | Planned |
| flash_attn4 | 49 | Planned |
| cutlass (SM120a) | 113 | Planned |
| cute-tutorial | 13 | Planned |
| xformers | 36 | Planned |
| transformer_engine | 109 | Planned |
| flashinfer | 36 | Planned |
| flashmla | 9 | Planned |
| deepep | 2 | Planned |
| llamacpp / ggml | 218 | Planned |
| sglang | 14 | Planned |
| llmc | 8 | Planned |
| tinygrad | 12 | Planned |
| nunchaku | 37 | Planned |
| fouroversix | 57 | Planned |
| bitsandbytes | 2 | Planned |
| arcquant | 24 | Planned |
| qerl | 6 | Planned |
| sgemm | 60 | Planned |
| quack | — | Planned |
### 阶段 4 — 跨架构
在同一研究基础上复现于以下架构:
* [ ] SM80(A100)
* [ ] SM86(RTX 3090)—— gpuasm 示例语料库
* [ ] SM89(RTX 4090)
* [ ] SM90a(H100)
* [ ] SM100a(B200)
### 阶段 5 — 参考
* [ ] 每条指令的 SASS 参考,每条操作码一页,包含每架构的实测延迟、吞吐量、流水线以及双发射规则。
## 目标架构
| 架构 | GPU | 原因 |
|--------|------------------|-----------------------------------------------------|
| SM80 | A100 | 数据中心 Ampere 基线 |
| SM86 | RTX 3090 | 消费级 Ampere,gpuasm 示例语料库 |
| SM89 | RTX 4090 | 最常见的消费级推理卡 |
| SM90a | H100 | TMA、WGMMA、战线专业化、mbarrier、集群 |
| SM100a | B200 | `tcgen05.mma`、TMEM |
| SM120 | RTX 5070 Ti/5090 | 混合 SM90/SM100 ISA,`mma.sync` 搭配 `mxf8f6f4` |
工作从 SM120 开始(直接硬件访问)。其他架构通过公开转储和贡献者进行。
## 工具
* `cuobjdump --dump-sass` 用于原始反汇编
* [gpuasm.com](https://gpuasm.com/) 用于查看记分板、停顿、压力与依赖箭头
* Nsight Compute(NCU)用于每内核性能分析、SASS 到源码映射以及停顿归因
## 作者
Florian Mattana。 [florianmattana.com](https://florianmattana.com)
标签:cuobjdump, cute-tutorial, cutlass, flash_attn2, flash_attn4, FMA 融合, FP64, gpuasm.com, GPU 指令级分析, GPU 架构, HMMA, LDG.E.128, LDL, MATCH, MUFU, NCU 性能分析, NVIDIA SASS, OMMA, QMMA, REDUX, SASS 阅读, SHFL.BFLY, SM120, STL, transformer_engine, Vectored Exception Handling, VOTE, warp 原语, warp 约简, Waymore结果处理, xformers, 共享内存, 内核审计, 反向工程, 向量化全局内存, 寄存器溢出, 张量核心, 性能调优, 本地内存, 模式识别, 生产内核审计, 银行冲突