ops-tune-workbench-plugin 0.0.0-stage → 0.0.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +14 -0
- package/README.md +39 -2
- package/cordis.patch.yml +20 -0
- package/lib/client.js +4253 -0
- package/lib/host.js +2518 -0
- package/package.json +53 -4
- package/skills/tool-ops-tune/INSTALL.md +52 -0
- package/skills/tool-ops-tune/README.md +167 -0
- package/skills/tool-ops-tune/SKILL.md +93 -0
- package/skills/tool-ops-tune/agent/AGENTS.md +195 -0
- package/skills/tool-ops-tune/agent/agents/perf-implementer.md +68 -0
- package/skills/tool-ops-tune/agent/agents/perf-reviewer.md +86 -0
- package/skills/tool-ops-tune/agent/workflows/task-prompts.md +362 -0
- package/skills/tool-ops-tune/agent/workflows/troubleshooting.md +43 -0
- package/skills/tool-ops-tune/docs/figures/opstune-architecture.png +0 -0
- package/skills/tool-ops-tune/docs/figures/opstune-architecture.svg +253 -0
- package/skills/tool-ops-tune/docs/ops-tune-design.md +404 -0
- package/skills/tool-ops-tune/docs//347/224/250/344/276/213/346/236/204/345/273/272.md +714 -0
- package/skills/tool-ops-tune/docs//347/237/245/350/257/206/345/272/223/350/247/204/350/214/203.md +103 -0
- package/skills/tool-ops-tune/evals/evals.json +242 -0
- package/skills/tool-ops-tune/ops-collect/SKILL.md +146 -0
- package/skills/tool-ops-tune/ops-collect/references/tool-routing.md +86 -0
- package/skills/tool-ops-tune/ops-collect/scripts/collect_board.sh +444 -0
- package/skills/tool-ops-tune/ops-collect/scripts/collect_cases.py +368 -0
- package/skills/tool-ops-tune/ops-collect/scripts/collect_sim.sh +134 -0
- package/skills/tool-ops-tune/ops-collect/scripts/csv_to_db.py +314 -0
- package/skills/tool-ops-tune/ops-collect/scripts/db_bench.py +545 -0
- package/skills/tool-ops-tune/ops-collect/scripts/facts_bridge.py +1063 -0
- package/skills/tool-ops-tune/ops-collect/scripts/isolation_test.py +454 -0
- package/skills/tool-ops-tune/ops-collect/scripts/jsonl_to_cases.py +163 -0
- package/skills/tool-ops-tune/ops-family/SKILL.md +76 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/advanced_tiling.md +92 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/broadcast_design.md +160 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_kernel.cpp +126 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_tiling.cpp +144 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_tiling_common.h +401 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_kernel.cpp +107 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_tiling.cpp +64 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/datacopypad_design.md +46 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/guide.md +14 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/nddma_design.md +53 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/onedim_design.md +114 -0
- package/skills/tool-ops-tune/ops-family/references/broadcast/ub_broadcast_design.md +67 -0
- package/skills/tool-ops-tune/ops-family/references/common/datacopy_optimization_design.md +351 -0
- package/skills/tool-ops-tune/ops-family/references/common/index.md +9 -0
- package/skills/tool-ops-tune/ops-family/references/common/tail_block_design.md +268 -0
- package/skills/tool-ops-tune/ops-family/references/common/timing_harness/index.md +38 -0
- package/skills/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_aclrt_event.cpp +199 -0
- package/skills/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_torch_event.py +130 -0
- package/skills/tool-ops-tune/ops-family/references/common/ub_resident_design.md +342 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/guide.md +69 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/index.md +4 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_base.template +81 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_big_dim.template +217 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_one_axis.template +336 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_two_axis.template +781 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_n_last.template +340 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_small_shape.template +321 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_tensor_move.template +102 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd.template +480 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd_021axis.template +533 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_with_gather.template +688 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/templates/transpose_tiling_data.template +192 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_big_dim.md +220 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_cut_one_axis.md +175 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_cut_two_axis.md +177 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_fusion_design.md +398 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_gather.md +191 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_n_last.md +276 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_small_shape.md +315 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_tensor_move.md +203 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md +176 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md +206 -0
- package/skills/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md +179 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/double_buffer_design.md +288 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/guide.md +46 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/index.md +10 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/CMakeLists.txt +131 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/README.md +55 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/add_custom_torch.cpp +80 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/ops.h +23 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/register.cpp +30 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/add_custom.asc +149 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/data_utils.h +97 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_kernel.asc +136 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_tiling.h +31 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/run.sh +86 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/gen_data.py +70 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/golden.py +34 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/test_torch.py +99 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/verify_result.py +56 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/templates/usage_guide.md +61 -0
- package/skills/tool-ops-tune/ops-family/references/elementwise/vector_efficiency_design.md +203 -0
- package/skills/tool-ops-tune/ops-family/references/fa/fa_mixed_kernel_design.md +174 -0
- package/skills/tool-ops-tune/ops-family/references/fa/fa_roofline_design.md +141 -0
- package/skills/tool-ops-tune/ops-family/references/fa/guide.md +87 -0
- package/skills/tool-ops-tune/ops-family/references/knowledge_gaps.json +56 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/best-practices-guide.md +14 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/fullload_design.md +344 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/guide.md +52 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/mte2_preload_design.md +320 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/pingpong_design.md +254 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/scale_coalescing_design.md +282 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/streamk_design.md +374 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/swat_design.md +423 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/templates/matmul_basic_blaze.template +165 -0
- package/skills/tool-ops-tune/ops-family/references/matmul/templates/usage_guide.md +29 -0
- package/skills/tool-ops-tune/ops-family/references/mc2/best-practices-guide.md +43 -0
- package/skills/tool-ops-tune/ops-family/references/mc2/guide.md +42 -0
- package/skills/tool-ops-tune/ops-family/references/mc2/local_matmul_design.md +130 -0
- package/skills/tool-ops-tune/ops-family/references/mc2/pipeline_balancing_design.md +502 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/guide.md +178 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template +75 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_full_load.template +429 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_recompute.template +485 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_small_r.template +348 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_full_load.template +574 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_online.template +324 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_recompute.template +436 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_base.template +950 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/fused_attention_online_softmax_design.md +428 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_full_load.md +137 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_recompute.md +135 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_small_r.md +122 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_full_load.md +144 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_online.md +185 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_recompute.md +163 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling.template +460 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling_data.template +278 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/state_resident_design.md +337 -0
- package/skills/tool-ops-tune/ops-family/references/reduce/templates/usage_guide.md +253 -0
- package/skills/tool-ops-tune/ops-family/references/scalar/coding_principles.md +476 -0
- package/skills/tool-ops-tune/ops-family/references/scalar/conv_scalar.md +163 -0
- package/skills/tool-ops-tune/ops-family/references/scalar/guide.md +30 -0
- package/skills/tool-ops-tune/ops-family/references/simt/guide.md +91 -0
- package/skills/tool-ops-tune/ops-family/references/simt/optimization-guide.md +110 -0
- package/skills/tool-ops-tune/ops-family/references/sort/guide.md +83 -0
- package/skills/tool-ops-tune/ops-family/references/sort/radix_sort.md +354 -0
- package/skills/tool-ops-tune/ops-family/scripts/family_asset_audit.py +68 -0
- package/skills/tool-ops-tune/ops-family/scripts/tiling_candidates.py +419 -0
- package/skills/tool-ops-tune/ops-mechanism/SKILL.md +23 -0
- package/skills/tool-ops-tune/ops-mechanism/cases/ascendc/case_groupedmatmul_pipeline.md +23 -0
- package/skills/tool-ops-tune/ops-mechanism/cases/ascendc/case_triton_atomic_revert.md +19 -0
- package/skills/tool-ops-tune/ops-mechanism/cases/mc2/case_mc2_fusion.md +19 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/api-usage.md +70 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/ascendc-regbase-vf.md +45 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/ascendc-tiling.md +51 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/data-copy.md +67 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/index.md +45 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/mc2-balancing.md +77 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/mc2.md +103 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/memory-hierarchy.md +40 -0
- package/skills/tool-ops-tune/ops-mechanism/references/optimize/pipeline.md +95 -0
- package/skills/tool-ops-tune/ops-mechanism/scripts/case_backfill.py +170 -0
- package/skills/tool-ops-tune/ops-mechanism/scripts/log_gap.py +145 -0
- package/skills/tool-ops-tune/ops-mechanism/scripts/mc2_search.py +367 -0
- package/skills/tool-ops-tune/ops-report/SKILL.md +77 -0
- package/skills/tool-ops-tune/ops-verdict/evals/run_evals.py +837 -0
- package/skills/tool-ops-tune/ops-verdict/evals/smoke/install-hooks.sh +65 -0
- package/skills/tool-ops-tune/ops-verdict/evals/smoke/run_smoke.sh +405 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/core_tail_a5.csv +25 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/few_cores_a5.csv +5 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/mte2_bound_a2.csv +17 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/multi_kernel_mix_a5.csv +7 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/no_bound_a5.csv +9 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/serial_no_overlap_a2.csv +9 -0
- package/skills/tool-ops-tune/ops-verdict/fixtures/vec_bound_a5.csv +9 -0
- package/skills/tool-ops-tune/ops-verdict/references/io-contracts.md +94 -0
- package/skills/tool-ops-tune/ops-verdict/references/rule-schema.md +130 -0
- package/skills/tool-ops-tune/ops-verdict/references/scope-schema.md +61 -0
- package/skills/tool-ops-tune/ops-verdict/references/soc-spec.yaml +140 -0
- package/skills/tool-ops-tune/ops-verdict/rules/L0-instruction.yaml +67 -0
- package/skills/tool-ops-tune/ops-verdict/rules/L1-single-core.yaml +316 -0
- package/skills/tool-ops-tune/ops-verdict/rules/L2-inter-core.yaml +173 -0
- package/skills/tool-ops-tune/ops-verdict/rules/L3-inter-card.yaml +156 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/batch_pipeline.py +444 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/calibrate.py +249 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/delta_compare.py +244 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/render_html.py +274 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/snapshot.py +200 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/trace_bubble.py +331 -0
- package/skills/tool-ops-tune/ops-verdict/scripts/verdict.py +1072 -0
- package/skills/tool-ops-tune/scripts/diff_audit.py +281 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Reduction 归约类算子高性能实现索引
|
|
2
|
+
|
|
3
|
+
Reduce 族算子(Softmax、LayerNorm、RMSNorm、ReduceSum、ReduceMax 等)在 Ascend Vector 核心上的高性能实现,沉淀为一组**可复用 Kernel 模板**。本指南是这些模板的入口,介绍每个模板解决的问题、关键技术与适用条件,以及如何适配到同族其他算子(如 Norm)。
|
|
4
|
+
|
|
5
|
+
> 本指南是**优秀实践目录**,而非选型决策树:每个模板列出其适用条件与解决的问题,由实现者根据实际 shape、UB 容量与带宽情况判断采用。Reduce 族算子形态多样,不存在普适的"唯一最优",理解各模板的权衡是正确适配的前提。
|
|
6
|
+
|
|
7
|
+
## 文档结构
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
guide.md(本文件)
|
|
11
|
+
└── templates/
|
|
12
|
+
├── usage_guide.md 模板集成指南
|
|
13
|
+
├── softmax_v2_tiling_data.template 六套 TilingData 公共定义(→ .h)
|
|
14
|
+
├── softmax_v2_tiling.template 六个独立 Host tiling 参考实现(→ .h)
|
|
15
|
+
├── dav310/
|
|
16
|
+
│ ├── kernel_utils.template Device 侧公共工具模板(→ .h)
|
|
17
|
+
│ ├── softmax_v2_base.template 公共基类 SoftmaxV2OpsBase(→ .h)
|
|
18
|
+
│ ├── softmax_v2_ar_small_r.template AR-SmallR Kernel(→ .h)
|
|
19
|
+
│ ├── softmax_v2_ar_full_load.template AR-FullLoad Kernel(→ .h)
|
|
20
|
+
│ ├── softmax_v2_ar_recompute.template AR-Recompute Kernel(→ .h)
|
|
21
|
+
│ ├── softmax_v2_ara_full_load.template ARA-FullLoad Kernel(→ .h)
|
|
22
|
+
│ ├── softmax_v2_ara_recompute.template ARA-Recompute Kernel(→ .h)
|
|
23
|
+
│ └── softmax_v2_ara_online.template ARA-Online Kernel(→ .h)
|
|
24
|
+
├── softmax_v2_ar_small_r.md AR-SmallR 说明文档
|
|
25
|
+
├── softmax_v2_ar_full_load.md AR-FullLoad 说明文档
|
|
26
|
+
├── softmax_v2_ar_recompute.md AR-Recompute 说明文档
|
|
27
|
+
├── softmax_v2_ara_full_load.md ARA-FullLoad 说明文档
|
|
28
|
+
├── softmax_v2_ara_recompute.md ARA-Recompute 说明文档
|
|
29
|
+
├── softmax_v2_ara_online.md ARA-Online 说明文档
|
|
30
|
+
├── fused_attention_online_softmax_design.md 融合 Attention Online Softmax 设计
|
|
31
|
+
└── state_resident_design.md 融合算子 UB 状态常驻设计
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**阅读顺序**:先读本指南「通用范式」「公共框架」理解骨架 → 读对应模板 `.md` 了解流程与关键技术 → 落代码时对照同名 `.template`(使用时去掉 `.template` 后缀转成 `.h`,见 [usage_guide.md](templates/usage_guide.md) 第 0 节)→ 集成时读 [usage_guide.md](templates/usage_guide.md) → 在线场景读 `fused_attention_online_softmax_design.md` / `state_resident_design.md`。
|
|
35
|
+
|
|
36
|
+
> ⚠️ **集成前必读**:[usage_guide.md](templates/usage_guide.md) 说明了如何将模板集成到实际项目中,包括构建配置、kernel 入口写法、host 调用方式、常见编译问题及解决方案。
|
|
37
|
+
|
|
38
|
+
## Reduce 计算的通用范式
|
|
39
|
+
|
|
40
|
+
Reduce 族算子均可拆为两段,模板的差异主要在"如何切分 R 以适配 UB",而两段数学是可替换的:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
① 归约统计(reduce statistic):沿 R 轴求一个标量/向量统计量
|
|
44
|
+
Softmax → max、sum(exp)
|
|
45
|
+
LayerNorm → mean、variance
|
|
46
|
+
RMSNorm → mean(square)
|
|
47
|
+
ReduceSum → sum
|
|
48
|
+
ReduceMax → max
|
|
49
|
+
|
|
50
|
+
② 归一化/输出(normalize):用统计量逐元素变换
|
|
51
|
+
Softmax → (x - max) → exp → div sum
|
|
52
|
+
LayerNorm → (x - mean) / sqrt(var + eps) → scale + shift
|
|
53
|
+
RMSNorm → x / sqrt(mean_sq + eps) → scale
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
正因如此,6 个 Softmax 模板的**骨架(切分 + 流水 + 归约统计的组织方式)对 Norm 等同族算子通用**,适配时只需替换两段数学(见下文「适配同类算子」)。
|
|
57
|
+
|
|
58
|
+
## 公共框架与工具
|
|
59
|
+
|
|
60
|
+
所有模板继承 [dav310/softmax_v2_base.template](templates/dav310/softmax_v2_base.template)(转换后 `softmax_v2_base.h`)中的 `SoftmaxV2OpsBase`,提供跨模板复用的 VF 工具:
|
|
61
|
+
|
|
62
|
+
| 工具 | 说明 |
|
|
63
|
+
|------|------|
|
|
64
|
+
| `CastTrait` | MicroAPI Cast 必需配置(饱和模式、舍入、掩码合并),`castTraitFp16ToFp32`/`castTraitFp32ToFp16` |
|
|
65
|
+
| `CastToFp32From<T>` / `CastFromFp32To<T>` | 载入即升 FP32、输出即降回原精度,FP32 直通、FP16/BF16 自动 Cast |
|
|
66
|
+
| `UpdateCache` | **跨 chunk/bin 二分累加树**核心:按 `cacheID` 层级归并局部 sum,recompute 类模板共用 |
|
|
67
|
+
| `GetCacheID` / `FindNearestPower2` | 二分树层级计算,确定配对关系与根节点位置 |
|
|
68
|
+
| `NlastReduceSum` | N-last 方向规约求和:小 R 用 `NlastDichotomyAdd` 编译期二分展开,大 R 用 `NlastReduceSumLargeR` 8 行分组折叠 |
|
|
69
|
+
| `CopyIn` / `CopyOut` | 带 stride 的批量 DMA(rows×cols),支持非对齐尾块 |
|
|
70
|
+
| 常量 | `VL_FP32=64`(256B VReg / 4B float)、`CONST_EIGHT=8`、`BLOCK_SIZE=32` |
|
|
71
|
+
|
|
72
|
+
> `UpdateCache` 和 `NlastReduceSum` 是 recompute 系模板(AR-Recompute / ARA-Recompute)的关键,把"逐 chunk 串行累加 sum"变为"二分树对数层合并",显著降低长 R 的归约串行延迟。
|
|
73
|
+
|
|
74
|
+
## 离线计算模板
|
|
75
|
+
|
|
76
|
+
离线模板针对**独立 Kernel** 的 Reduce 算子,输入已完整存在于 GM,按 R 能否载入 UB 与输入维数分为 5 个。各模板互相独立,Host 侧 Tiling 根据 shape 与 UB 容量选用。
|
|
77
|
+
|
|
78
|
+
> 注:下表"适用条件"是模板的设计前提,非强制决策规则。边界 shape(如 R 刚好接近 UB 上限)可由实现者权衡带宽与空间。
|
|
79
|
+
|
|
80
|
+
| 模板 | 输入 | R 与 UB 关系 | 核心策略 | 代码 | 说明 |
|
|
81
|
+
|------|------|-------------|---------|------|------|
|
|
82
|
+
| **AR-SmallR** | 2D `[A1,R]` | R 极小(FP32≤16/FP16≤32) | 转置为 `(R,A1)`,沿 A1 向量化 | [.template](templates/dav310/softmax_v2_ar_small_r.template) | [.md](templates/softmax_v2_ar_small_r.md) |
|
|
83
|
+
| **AR-FullLoad** | 2D `[A1,R]` | R 全量载入 UB | 多行批量载入,单 pass VF 计算 | [.template](templates/dav310/softmax_v2_ar_full_load.template) | [.md](templates/softmax_v2_ar_full_load.md) |
|
|
84
|
+
| **AR-Recompute** | 2D `[A1,R]` | R 超出 UB | R 切 chunk,3 阶段重读 GM + 二分累加树 | [.template](templates/dav310/softmax_v2_ar_recompute.template) | [.md](templates/softmax_v2_ar_recompute.md) |
|
|
85
|
+
| **ARA-FullLoad** | 3D `[A1,R,A0]` | R 全量载入 UB | 沿 A0 切 tile,跨 R 逐列 VF | [.template](templates/dav310/softmax_v2_ara_full_load.template) | [.md](templates/softmax_v2_ara_full_load.md) |
|
|
86
|
+
| **ARA-Recompute** | 3D `[A1,R,A0]` | R 超出 UB | R 切 bin,3 阶段跨 bin 二分折叠 | [.template](templates/dav310/softmax_v2_ara_recompute.template) | [.md](templates/softmax_v2_ara_recompute.md) |
|
|
87
|
+
|
|
88
|
+
各模板的「解决的问题 / 适用条件 / 执行流程 / 关键技术 / 关键代码索引」详见对应 `.md` 文档。
|
|
89
|
+
|
|
90
|
+
### 维度命名约定
|
|
91
|
+
|
|
92
|
+
- **A1**:最外层非归约轴(行方向),2D 中即行数。
|
|
93
|
+
- **R**:归约轴(reduce axis),Softmax/Norm 沿此求统计量。
|
|
94
|
+
- **A0**:3D 中 R 内侧的非归约轴(列方向),与 R 共同决定一个 tile 的数据量。
|
|
95
|
+
- **AR**:2D `(A1, R)`;**ARA**:3D `(A1, R, A0)`。
|
|
96
|
+
|
|
97
|
+
## 在线计算模板
|
|
98
|
+
|
|
99
|
+
### 独立 ARA Online Softmax
|
|
100
|
+
|
|
101
|
+
| 模板 | 输入 | 核心策略 | 代码 | 说明 |
|
|
102
|
+
|------|------|---------|------|------|
|
|
103
|
+
| **ARA-Online** | 3D `[A1,R,A0]` | 沿 R 分 chunk 在线更新 running max/sum,输入读 2 次 | [.template](templates/dav310/softmax_v2_ara_online.template) | [.md](templates/softmax_v2_ara_online.md) |
|
|
104
|
+
|
|
105
|
+
ARA Online Softmax 是**独立的 Online Softmax**,不包含 `QK^T`、`P×V` 或 FlashAttention 融合。与 ARA Recompute(输入读 3 次)相比,减少一次 R 全量搬入。
|
|
106
|
+
|
|
107
|
+
### 融合 Attention Online Softmax 设计
|
|
108
|
+
|
|
109
|
+
| 文档 | 解决的问题 | 关键思想 |
|
|
110
|
+
|------|-----------|---------|
|
|
111
|
+
| [fused_attention_online_softmax_design.md](templates/fused_attention_online_softmax_design.md) | FlashAttention 中 Softmax 需 O(S²) 中间内存 | 逐 tile 生成 `QK^T`,维护 running max/sum,融合 `P×V`,内存降至 O(S) |
|
|
112
|
+
| [state_resident_design.md](templates/state_resident_design.md) | 融合算子跨 S2 循环重复分配状态 buffer | 状态 buffer 一次性常驻 UB + 双缓冲索引 |
|
|
113
|
+
|
|
114
|
+
> **重要区分**:[softmax_v2_ara_online.md](templates/softmax_v2_ara_online.md) 是独立的 Online Softmax Kernel 实现(输入读 2 次,输出完整概率)。[fused_attention_online_softmax_design.md](templates/fused_attention_online_softmax_design.md) 是 FlashAttention 融合场景的设计参考(逐 tile 生成 score 即消费,融合 `P×V`,通常不生成完整概率矩阵)。两者共享在线 max/sum 数学基础,但不是同一个实现。当前目录未提供与融合设计完全对应的 FlashAttention Kernel。
|
|
115
|
+
|
|
116
|
+
## 关键技术总览
|
|
117
|
+
|
|
118
|
+
以下技术横跨多个模板,是 Reduce 族高性能实现的公共经验:
|
|
119
|
+
|
|
120
|
+
| 技术 | 涉及模板 | 核心要点 |
|
|
121
|
+
|------|---------|---------|
|
|
122
|
+
| **DOUBLE/TRIPLE BUFFER 乒乓** | 全部 | `TQue` 多缓冲让 CopyIn/Compute/CopyOut 重叠;recompute 用 3 缓冲支持 Main/Fold 双 chunk 并行载入 |
|
|
123
|
+
| **MicroAPI VF(`__VEC_SCOPE__`)** | 全部 | `RegTensor<float>` + `MaskReg` 直接操作 256B VReg,逐 `VL_FP32=64` 块处理,尾块用 `UpdateMask` 精确掩码 |
|
|
124
|
+
| **FP16/BF16 ↔ FP32 计算** | 全部 | 载入即升 FP32 保证数值稳定,输出即降回,`CastTrait` 控饱和/舍入 |
|
|
125
|
+
| **批量 strided DMA** | 全部 | `DataCopyPad` + `DataCopyExtParams`,`blockCount` 一次搬多行,`srcStride/dstStride` 跨维跳跃,对齐到 32B block |
|
|
126
|
+
| **二分累加树(UpdateCache)** | AR/ARA-Recompute | 跨 chunk/bin 的局部 sum 按 `GetCacheID` 层级二分合并,O(log N) 层而非 O(N) 串行 |
|
|
127
|
+
| **NlastReduceSum** | ARA-FullLoad/Recompute | N-last 方向规约:小 R 用 `NlastDichotomyAdd` 编译期二分展开,大 R 用 8 行分组折叠 |
|
|
128
|
+
| **MainBlock/FoldBlock 配对** | AR/ARA-Recompute | 两 chunk 的 exp 在 tmp 上 `Add` 合并后一次 ReduceSum,归约次数减半 |
|
|
129
|
+
| **布局转置向量化** | AR-SmallR | 短归约轴转置到外层,长伴生轴转成向量化方向,VReg 利用率从 R/64 拉到 ~100% |
|
|
130
|
+
| **BinaryAddVF** | ARA-FullLoad | R>8 时按 8 行分组二分折叠,`TwoRowAddWithTail` 处理余数尾块 |
|
|
131
|
+
| **按 R 大小分支归约** | ARA-FullLoad | R≤2/≤4/≤8 用 VF `Add` 直累,R>8 用 `BinaryAddVF` 二分折叠 |
|
|
132
|
+
| **在线 max/sum 更新** | ARA-Online | 沿 R 分 chunk,running max/sum 单遍在线更新,减少一次输入读取 |
|
|
133
|
+
|
|
134
|
+
## 适配同类算子
|
|
135
|
+
|
|
136
|
+
Softmax 模板的骨架(切分 + 流水 + 归约统计组织)对同族算子通用,适配只需替换两段数学。下面以 **LayerNorm / RMSNorm** 为例说明映射关系。
|
|
137
|
+
|
|
138
|
+
### 适配要点
|
|
139
|
+
|
|
140
|
+
1. **维度映射**:Norm 的归约轴(hidden_size / norm_size)对应模板的 R;其余轴对应 A1(2D)或 A1+A0(3D)。
|
|
141
|
+
- 2D LayerNorm `[N, H]` 沿 H 归约 → AR 模板(R=H, A1=N)。
|
|
142
|
+
- 3D LayerNorm `[B, S, H]` 沿 H 归约 → 可视为 ARA(R=H, A0=S, A1=B),或展平为 AR。
|
|
143
|
+
2. **数学替换**:把 Softmax 的 `max/sub/exp/sum/div` 替换为 Norm 的统计量计算,见下表。
|
|
144
|
+
3. **阶段数调整**:
|
|
145
|
+
- Softmax 是三段(max → exp-sum → div)。
|
|
146
|
+
- LayerNorm 可两遍扫描(mean → var)或 Welford 单遍;recompute 模板的阶段①可同时累加 mean,阶段②算 var。
|
|
147
|
+
- RMSNorm 单段即可(平方累加 → div sqrt),比 Softmax 更简单。
|
|
148
|
+
4. **affine 参数**:Norm 通常带 gamma/beta(scale/shift),可在输出阶段追加 `Muls`+`Add`。
|
|
149
|
+
5. **精度**:mean/variance 建议用 FP32 累加(与 Softmax 的 FP32 中间一致),即使输入输出为 FP16。
|
|
150
|
+
|
|
151
|
+
### 数学替换对照
|
|
152
|
+
|
|
153
|
+
| 算子 | 阶段①(reduce statistic) | 阶段②(sum/second pass) | 阶段③(normalize/output) |
|
|
154
|
+
|------|------------------------|------------------------|--------------------------|
|
|
155
|
+
| **Softmax** | global max | exp 累加求 sum | sub max→exp→div sum |
|
|
156
|
+
| **LayerNorm(两遍)** | 累加求 mean | sub mean→平方→累加求 var | sub mean→div sqrt(var+eps)→scale+shift |
|
|
157
|
+
| **RMSNorm** | 平方累加 | (可并入①) | div sqrt(mean_sq+eps)→scale |
|
|
158
|
+
| **ReduceSum** | 累加求 sum | — | (直接输出) |
|
|
159
|
+
| **ReduceMax** | max 累加 | — | (直接输出) |
|
|
160
|
+
|
|
161
|
+
### 模板选择参考
|
|
162
|
+
|
|
163
|
+
| Norm 变体 | R(norm_size)特征 | 倾向模板 |
|
|
164
|
+
|-----------|-------------------|---------|
|
|
165
|
+
| LayerNorm/RMSNorm,hidden 小 | 极小 | AR-SmallR(转置向量化收益高) |
|
|
166
|
+
| LayerNorm/RMSNorm,hidden 中等 | 全量载入 | AR-FullLoad / ARA-FullLoad |
|
|
167
|
+
| LayerNorm/RMSNorm,hidden 很大 | 超出 UB | AR-Recompute / ARA-Recompute |
|
|
168
|
+
|
|
169
|
+
> 以上是"特征—模板"对应关系,非决策树。实际选择还需结合 A1/A0 规模、UB 预算、是否需 affine、是否与 matmul 融合等综合判断。
|
|
170
|
+
|
|
171
|
+
## Softmax 独有优化(在线融合)
|
|
172
|
+
|
|
173
|
+
以下两个设计文档主要服务于 Softmax 在 Attention 中的融合场景,对独立 Norm 算子参考价值有限,列出供完整性:
|
|
174
|
+
|
|
175
|
+
| 文档 | 说明 |
|
|
176
|
+
|------|------|
|
|
177
|
+
| [fused_attention_online_softmax_design.md](templates/fused_attention_online_softmax_design.md) | 融合 Attention Online Softmax 设计:逐 tile 生成 `QK^T`,running max/sum + `P×V` 融合,内存 O(S²)→O(S) |
|
|
178
|
+
| [state_resident_design.md](templates/state_resident_design.md) | 融合算子状态 buffer 跨循环常驻 + 双缓冲设计建议 |
|
package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Huawei Technologies Co., Ltd.
|
|
3
|
+
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
|
|
4
|
+
* CANN Open Software License Agreement Version 2.0 (the "License").
|
|
5
|
+
* Please refer to the License for details. You may not use this file except in compliance with the License.
|
|
6
|
+
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
|
7
|
+
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
8
|
+
* See LICENSE in the root of the software repository for the full text of the License.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/*!
|
|
12
|
+
* \file kernel_utils.h
|
|
13
|
+
* \brief
|
|
14
|
+
*/
|
|
15
|
+
#ifndef OPS_BUILT_IN_OP_ASCENDC_KERNEL_UTILS_H_
|
|
16
|
+
#define OPS_BUILT_IN_OP_ASCENDC_KERNEL_UTILS_H_
|
|
17
|
+
|
|
18
|
+
namespace ops {
|
|
19
|
+
|
|
20
|
+
template<typename Tp, Tp v>
|
|
21
|
+
struct IntegralConstant {
|
|
22
|
+
static constexpr Tp value = v;
|
|
23
|
+
};
|
|
24
|
+
using trueType = IntegralConstant<bool, true>;
|
|
25
|
+
using falseType = IntegralConstant<bool, false>;
|
|
26
|
+
template<typename, typename>
|
|
27
|
+
struct IsSame
|
|
28
|
+
: public falseType {
|
|
29
|
+
};
|
|
30
|
+
template<typename Tp>
|
|
31
|
+
struct IsSame<Tp, Tp>
|
|
32
|
+
: public trueType {
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
template <typename T>
|
|
36
|
+
__aicore__ inline T Ceil(T a, T b)
|
|
37
|
+
{
|
|
38
|
+
return (a + b - 1) / b;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
template <typename T>
|
|
42
|
+
__aicore__ inline T CeilAlign(T a, T b)
|
|
43
|
+
{
|
|
44
|
+
return (a + b - 1) / b * b;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
template <typename T>
|
|
48
|
+
__aicore__ inline T CeilDiv(T a, T b)
|
|
49
|
+
{
|
|
50
|
+
if (b == 0) {
|
|
51
|
+
return a;
|
|
52
|
+
}
|
|
53
|
+
return (a + b - 1) / b;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
template <typename T>
|
|
57
|
+
__aicore__ inline T FloorDiv(T a, T b)
|
|
58
|
+
{
|
|
59
|
+
if (b == 0) {
|
|
60
|
+
return a;
|
|
61
|
+
}
|
|
62
|
+
return a / b;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
template <typename T>
|
|
66
|
+
__aicore__ inline T Aligned(T value, T alignment)
|
|
67
|
+
{
|
|
68
|
+
if (alignment == 0) {
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
return (value + alignment - 1) / alignment * alignment;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
#endif // OPS_BUILT_IN_OP_ASCENDC_KERNEL_UTILS_H_
|