Skip to content

01. 为什么需要算子优化 ​

页面目标 ​

本页建立算子优化的共同问题:同一个数学表达式,为什么在不同的数据布局、访存路径和 kernel 实现下,会产生不同的时间、显存和端到端结果?

算子优化的对象不是源代码本身,而是从数学语义到硬件执行的映射。先确认输出正确,再判断局部 kernel 的改进能否传递到模型和服务层。

从数学语义到执行证据 ​

层次要回答的问题需要留下的证据
语义输入、输出、shape、dtype 和边界条件是什么?参考实现、测试用例、误差阈值
kernel数据如何 load、计算、store?中间结果在哪里驻留?kernel 代码、编译配置、内存路径
硬件哪些线程、warp、block 或 Tensor Core 执行它?GPU、指令路径、occupancy 或 trace
系统局部变快是否减少了端到端成本?固定 workload、延迟、吞吐和显存

为什么图级优化属于算子优化 ​

算子优化不只从单个 kernel 开始。高层计算图决定哪些中间张量会落到显存、哪些依赖允许重排、哪些连续阶段可合并;随后 lowering、layout 与 backend 决定这些候选能否变成有效执行。图正确只说明语义没有变,不能说明执行成本一定下降。

从图到执行的判断需要确认的内容下一步入口
图结构依赖、共享输入与中间张量是否值得改写03 图级优化、融合与 Kernel 组合
可执行性dtype、layout、动态 shape 与算子支持是否允许下沉04 CUDA 执行与硬件约束
成本写回、launch、寄存器和编译成本是否真的下降05 成本模型与 Profiling
结果局部变化是否在目标 Block 或 workload 中成立06 Benchmark 与项目验证

常见算子类型 ​

不同算子暴露的瓶颈不同,不能用同一套 Kernel 结构解释所有问题。

类型典型例子主要优化对象后续入口
Elementwise激活、缩放、逐元素变换合并访存、向量化、融合Task1–3
ReductionRMSNorm、Softmax、统计量分块归约、同步、累加精度Task2–4
GEMMLinear、投影矩阵tile、Tensor Core、数据复用Task1–4
AttentionQK、Softmax、PV分块、在线 Softmax、中间状态Task3–4
FusionNorm + 激活、多个连续阶段中间张量写回和 launchTask3
不规则访问Gather、Scatter、稀疏路由layout、索引、负载均衡扩展阅读

学习重点 ​

先把 PyTorch 参考实现作为语义基线,再逐步替换为 Triton 或 CUDA kernel。每次只改变一个关键因素,并同时记录 shape、dtype、布局、warmup 和迭代次数。这样才能区分“结果正确”“kernel 变快”和“系统真的获益”。

与其他专题的连接 ​

模型架构解释 Attention、MLP 和 MoE 的结构;本专题解释这些结构如何落成计算图、kernel 和执行配置。推理、显存和性能分析专题提供端到端 workload、资源预算和证据解释。

本页出口 ​

完成本页后,学习者应能写出一个算子的输入输出契约,指出参考实现与候选 kernel 的比较指标,并说明为什么 CPU 正确性测试不能替代 GPU 性能验证。

Released under the MIT License.