Baseline / PTO到底是什么意思ok、blocked、pass应该怎么一起读- 为什么 tutorial 里的“代表性 kernel”不等于“仓库里最快 kernel”
本教程统一引用:
bench/reports/regression_latest.mdbench/reports/regression_latest.csvbench/reports/kernel_state_matrix_latest.md
不手写、不猜测、不临时重新 benchmark。
表示 baseline 路径是否稳定可跑。
表示 PTO 路径是否稳定可跑。
表示 baseline latency 除以 PTO latency 的比例。
举例:
80%左右:PTO 已经比较接近 baseline30%左右:PTO 能跑,但还有较大优化空间n/a:通常说明 baseline blocked 或 PTO blocked
| Kernel | Ratio |
|---|---|
grouped_mat_mul_all_reduce |
89.4%..94.5% |
prompt_flash_attention |
71.0%..87.4% |
matmul_reduce_scatter |
76.6%..82.7% |
这些 kernel 说明:
- PTO 路径已经非常接近业务可用形态
- tile-first 结构通常更利于持续优化
| Kernel | Ratio |
|---|---|
grouped_matmul |
42.3%..42.5% |
flash_attention_score |
36.2%..37.3% |
fused_infer_attention_score |
33.0%..41.1% |
这些 kernel 很适合教学,因为:
- 结构清晰
- baseline 和 PTO 都稳定
- 同时还能看到真实性能差距
| Kernel | Ratio |
|---|---|
ffn |
18.9%..20.7% |
incre_flash_attention |
24.0%..24.8% |
这些例子提醒你:
“能跑通”和“性能好”是两个不同层级的目标。
| Kernel | 状态 |
|---|---|
qkv_rms_norm_rope_cache |
baseline blocked, PTO ok (0.7783 ms) |
moe_finalize_routing_v2 |
baseline blocked, PTO ok (0.3181 ms) |
这种状态不是失败,而是说明:
- PTO 已经写出来并跑通
- 但当前 host 上没有可用 baseline entrypoint
| Kernel | 状态 |
|---|---|
recurrent_gated_delta_rule |
baseline ok, PTO blocked |
这个例子适合说明:
- 有时候 PTODSL 和 PTOAS 都不是主问题
- 问题可能最终落在 backend/runtime 合约
看 bench/reports/kernel_state_matrix_latest.md 你会发现:
green + tile-firstgreen but scalar-heavy
这是两个不同状态。
区别在于:
green:当前 correctness / benchmark 状态稳定scalar-heavy:hot path 里仍有较多load_scalar / store_scalar / scalar_select
所以:
一个 kernel 可以“能用”,但还不算迁移质量最好。
教程的目标不是罗列最快排行榜,而是帮读者建立正确心智模型。
因此会优先讲:
grouped_matmulgrouped_matmul_addflash_attention_scoreprompt_flash_attentionmoe_token_permute
而不是先从最难、最不稳定或最底层 blocker 最多的 kernel 开始。
- 误区:比例低就说明 kernel 没价值 不对。很多低比例 kernel 仍然是很好的教学样本。
- 误区:
baseline blocked / PTO ok就没法讲性能 不对。仍然可以讲 PTO 自身性能、结构和 blocker 性质,只是不能做直接对比。
下一章:把前面内容收束成一个新增 kernel 的实操 checklist。