cann-workbench 0.0.0-stage → 0.0.2-alpha
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/README.md +183 -2
- package/THIRD_PARTY_NOTICES.md +85 -0
- package/cordis.patch.yml +3 -0
- package/doctor/LICENSE +202 -0
- package/doctor/NOTICE +12 -0
- package/doctor/README.md +18 -0
- package/lib/client.js +94437 -0
- package/lib/index.d.ts +722 -0
- package/lib/index.js +33711 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +171 -4
- package/skills/asc-tools/tool-ops-tune/INSTALL.md +52 -0
- package/skills/asc-tools/tool-ops-tune/LICENSE +38 -0
- package/skills/asc-tools/tool-ops-tune/README.md +167 -0
- package/skills/asc-tools/tool-ops-tune/SKILL.md +93 -0
- package/skills/asc-tools/tool-ops-tune/agent/AGENTS.md +195 -0
- package/skills/asc-tools/tool-ops-tune/agent/agents/perf-implementer.md +68 -0
- package/skills/asc-tools/tool-ops-tune/agent/agents/perf-reviewer.md +86 -0
- package/skills/asc-tools/tool-ops-tune/agent/workflows/task-prompts.md +362 -0
- package/skills/asc-tools/tool-ops-tune/agent/workflows/troubleshooting.md +43 -0
- package/skills/asc-tools/tool-ops-tune/docs/figures/opstune-architecture.png +0 -0
- package/skills/asc-tools/tool-ops-tune/docs/figures/opstune-architecture.svg +253 -0
- package/skills/asc-tools/tool-ops-tune/docs/ops-tune-design.md +404 -0
- package/skills/asc-tools/tool-ops-tune/docs//347/224/250/344/276/213/346/236/204/345/273/272.md +730 -0
- package/skills/asc-tools/tool-ops-tune/docs//347/237/245/350/257/206/345/272/223/350/247/204/350/214/203.md +103 -0
- package/skills/asc-tools/tool-ops-tune/evals/evals.json +242 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/SKILL.md +146 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/references/tool-routing.md +86 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_board.sh +458 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_cases.py +368 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_sim.sh +134 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/csv_to_db.py +314 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/db_bench.py +545 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/facts_bridge.py +1102 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/isolation_test.py +452 -0
- package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/jsonl_to_cases.py +163 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/SKILL.md +76 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/advanced_tiling.md +92 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/broadcast_design.md +160 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_kernel.cpp +126 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_tiling.cpp +144 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_tiling_common.h +401 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_kernel.cpp +107 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_tiling.cpp +64 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/datacopypad_design.md +46 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/guide.md +14 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/nddma_design.md +53 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/onedim_design.md +114 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/ub_broadcast_design.md +67 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/datacopy_optimization_design.md +351 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/index.md +9 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/tail_block_design.md +268 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/index.md +38 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_aclrt_event.cpp +199 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_torch_event.py +130 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/common/ub_resident_design.md +342 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/guide.md +69 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/index.md +4 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_base.template +81 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_big_dim.template +217 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_one_axis.template +336 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_two_axis.template +781 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_n_last.template +340 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_small_shape.template +321 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_tensor_move.template +102 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd.template +480 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd_021axis.template +533 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_with_gather.template +688 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/transpose_tiling_data.template +192 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_big_dim.md +220 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_cut_one_axis.md +175 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_cut_two_axis.md +177 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_fusion_design.md +398 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_gather.md +191 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_n_last.md +276 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_small_shape.md +315 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tensor_move.md +203 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md +176 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md +206 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md +179 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/double_buffer_design.md +288 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/guide.md +46 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/index.md +10 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/CMakeLists.txt +131 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/README.md +55 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/add_custom_torch.cpp +80 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/ops.h +23 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/register.cpp +30 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/add_custom.asc +149 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/data_utils.h +97 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_kernel.asc +136 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_tiling.h +31 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/run.sh +87 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/gen_data.py +70 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/golden.py +34 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/test_torch.py +99 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/verify_result.py +56 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/usage_guide.md +61 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/vector_efficiency_design.md +203 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/fa_mixed_kernel_design.md +174 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/fa_roofline_design.md +141 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/guide.md +87 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/knowledge_gaps.json +56 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/best-practices-guide.md +14 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/fullload_design.md +344 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/guide.md +52 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/mte2_preload_design.md +320 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/pingpong_design.md +254 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/scale_coalescing_design.md +282 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/streamk_design.md +374 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/swat_design.md +423 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/templates/matmul_basic_blaze.template +165 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/templates/usage_guide.md +29 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/best-practices-guide.md +43 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/guide.md +42 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/local_matmul_design.md +130 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/pipeline_balancing_design.md +502 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/guide.md +178 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template +75 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_full_load.template +429 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_recompute.template +485 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_small_r.template +348 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_full_load.template +574 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_online.template +324 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_recompute.template +436 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_base.template +950 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/fused_attention_online_softmax_design.md +428 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_full_load.md +137 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_recompute.md +135 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_small_r.md +122 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_full_load.md +144 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_online.md +185 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_recompute.md +163 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling.template +460 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling_data.template +278 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/state_resident_design.md +337 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/usage_guide.md +253 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/coding_principles.md +476 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/conv_scalar.md +163 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/guide.md +30 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/simt/guide.md +91 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/simt/optimization-guide.md +110 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/sort/guide.md +83 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/references/sort/radix_sort.md +354 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/scripts/family_asset_audit.py +68 -0
- package/skills/asc-tools/tool-ops-tune/ops-family/scripts/tiling_candidates.py +419 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/SKILL.md +23 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/ascendc/case_groupedmatmul_pipeline.md +23 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/ascendc/case_triton_atomic_revert.md +19 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/mc2/case_mc2_fusion.md +19 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/api-usage.md +70 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/ascendc-regbase-vf.md +45 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/ascendc-tiling.md +51 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/data-copy.md +67 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/index.md +45 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/mc2-balancing.md +77 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/mc2.md +103 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/memory-hierarchy.md +40 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/pipeline.md +95 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/case_backfill.py +170 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/log_gap.py +145 -0
- package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/mc2_search.py +367 -0
- package/skills/asc-tools/tool-ops-tune/ops-report/SKILL.md +77 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/run_evals.py +963 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/smoke/install-hooks.sh +65 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/smoke/run_smoke.sh +535 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/core_tail_a5.csv +25 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/few_cores_a5.csv +5 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/mte2_bound_a2.csv +17 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/multi_kernel_mix_a5.csv +7 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/no_bound_a5.csv +9 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/serial_no_overlap_a2.csv +9 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/vec_bound_a5.csv +9 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/references/io-contracts.md +94 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/references/rule-schema.md +130 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/references/scope-schema.md +61 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/references/soc-spec.yaml +140 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L0-instruction.yaml +67 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L1-single-core.yaml +316 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L2-inter-core.yaml +173 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L3-inter-card.yaml +156 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/batch_pipeline.py +466 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/calibrate.py +249 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/delta_compare.py +278 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/render_html.py +304 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/snapshot.py +200 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/trace_bubble.py +331 -0
- package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/verdict.py +1094 -0
- package/skills/asc-tools/tool-ops-tune/scripts/diff_audit.py +281 -0
- package/skills/asc-tools/tool-precision-debug/LICENSE +38 -0
- package/skills/asc-tools/tool-precision-debug/README.md +190 -0
- package/skills/asc-tools/tool-precision-debug/scripts/install.sh +475 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/LICENSE +38 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/SKILL.md +136 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/evals/evals.json +932 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/baseline.md +69 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/checkpoint-design.md +82 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/dumptensor.md +83 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/hypothesis-experiment.md +114 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/index.md +20 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/localization.md +85 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/numerical-modeling.md +94 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/operator-modeling.md +116 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/progressive-error-analysis.md +86 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/reporting.md +140 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/reproducibility.md +121 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/semantic-bisection.md +72 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/sensitive-points.md +146 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/fp16-promotion-boundary.md +46 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/fused-rmsnorm-gelu-residual.md +162 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/index.md +16 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/integer-float-collision.md +44 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/partial-statistics-merge.md +30 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/softplus-v2-grad-family.md +156 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/sync-dataflow-handshake.md +89 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/tail-valid-region-state.md +30 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/thnn-fused-gru-bias-reduction.md +73 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/index.md +34 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/accumulation-order.md +108 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/algorithm-parameter-contract.md +118 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/buffer-lifetime-alias.md +133 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/cast-rounding.md +76 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/complex-operator-boundary.md +48 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/data-movement-alignment.md +104 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/golden-host-contract.md +84 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/index-address-ownership.md +57 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/index.md +32 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/multicore-ownership.md +117 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/pipeline-sync-visibility.md +146 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/precision-mode-approximation.md +90 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/shape-boundary-contract.md +57 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/special-values.md +122 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/tiling-tail-state.md +146 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/broadcast-transpose.md +64 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/convolution.md +60 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/dynamic-quant.md +47 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/index.md +18 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/matmul-mmad.md +131 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/normalization.md +145 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/reduction.md +167 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/softplus-v2-grad.md +58 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/sort-merge.md +65 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/index.md +18 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/kernel-debug-data.md +133 -0
- package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/msobjdump.md +150 -0
- package/skills/cann-doctor/SKILL.md +15 -0
- package/skills/catalog.json +79 -0
- package/skills/mattpocock/GLOSSARY.md +30 -0
- package/skills/mattpocock/LICENSE +21 -0
- package/skills/mattpocock/README.md +258 -0
- package/skills/mattpocock/SCOPE.md +35 -0
- package/skills/mattpocock/docs/agents/triage-labels.md +15 -0
- package/skills/mattpocock/docs/engineering/ask-matt.md +91 -0
- package/skills/mattpocock/docs/engineering/code-review.md +101 -0
- package/skills/mattpocock/docs/engineering/codebase-design.md +88 -0
- package/skills/mattpocock/docs/engineering/diagnosing-bugs.md +94 -0
- package/skills/mattpocock/docs/engineering/domain-modeling.md +86 -0
- package/skills/mattpocock/docs/engineering/grill-with-docs.md +82 -0
- package/skills/mattpocock/docs/engineering/implement-spec.md +86 -0
- package/skills/mattpocock/docs/engineering/implement.md +97 -0
- package/skills/mattpocock/docs/engineering/improve-codebase-architecture.md +113 -0
- package/skills/mattpocock/docs/engineering/pr.md +79 -0
- package/skills/mattpocock/docs/engineering/prototype.md +67 -0
- package/skills/mattpocock/docs/engineering/research.md +73 -0
- package/skills/mattpocock/docs/engineering/resolving-merge-conflicts.md +53 -0
- package/skills/mattpocock/docs/engineering/retro.md +81 -0
- package/skills/mattpocock/docs/engineering/setup-matt-pocock-skills.md +94 -0
- package/skills/mattpocock/docs/engineering/tdd.md +94 -0
- package/skills/mattpocock/docs/engineering/to-spec.md +81 -0
- package/skills/mattpocock/docs/engineering/to-tickets.md +99 -0
- package/skills/mattpocock/docs/engineering/triage.md +109 -0
- package/skills/mattpocock/docs/engineering/wayfinder.md +103 -0
- package/skills/mattpocock/docs/engineering/wizard.md +96 -0
- package/skills/mattpocock/docs/productivity/grill-me.md +76 -0
- package/skills/mattpocock/docs/productivity/grilling.md +87 -0
- package/skills/mattpocock/docs/productivity/handoff.md +76 -0
- package/skills/mattpocock/docs/productivity/teach.md +97 -0
- package/skills/mattpocock/docs/productivity/to-questionnaire.md +78 -0
- package/skills/mattpocock/docs/productivity/wait-what.md +36 -0
- package/skills/mattpocock/docs/productivity/writing-for-agents.md +70 -0
- package/skills/mattpocock/scripts/link-skills.sh +62 -0
- package/skills/mattpocock/scripts/list-skills.sh +7 -0
- package/skills/mattpocock/scripts/sync-plugin-version.mjs +41 -0
- package/skills/mattpocock/skills/deprecated/README.md +3 -0
- package/skills/mattpocock/skills/engineering/README.md +34 -0
- package/skills/mattpocock/skills/engineering/ask-matt/PHASE-BOUNDARIES.md +55 -0
- package/skills/mattpocock/skills/engineering/ask-matt/SKILL.md +97 -0
- package/skills/mattpocock/skills/engineering/ask-matt/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/code-review/SKILL.md +89 -0
- package/skills/mattpocock/skills/engineering/code-review/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/codebase-design/DEEPENING.md +37 -0
- package/skills/mattpocock/skills/engineering/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/skills/mattpocock/skills/engineering/codebase-design/SKILL.md +114 -0
- package/skills/mattpocock/skills/engineering/codebase-design/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/diagnosing-bugs/SKILL.md +138 -0
- package/skills/mattpocock/skills/engineering/diagnosing-bugs/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
- package/skills/mattpocock/skills/engineering/domain-modeling/ADR-FORMAT.md +47 -0
- package/skills/mattpocock/skills/engineering/domain-modeling/GLOSSARY-FORMAT.md +60 -0
- package/skills/mattpocock/skills/engineering/domain-modeling/SKILL.md +74 -0
- package/skills/mattpocock/skills/engineering/domain-modeling/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/grill-with-docs/SKILL.md +7 -0
- package/skills/mattpocock/skills/engineering/grill-with-docs/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/implement/SKILL.md +17 -0
- package/skills/mattpocock/skills/engineering/implement/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/implement-spec/SKILL.md +42 -0
- package/skills/mattpocock/skills/engineering/implement-spec/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/skills/mattpocock/skills/engineering/improve-codebase-architecture/SKILL.md +71 -0
- package/skills/mattpocock/skills/engineering/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/pr/CREDITS.md +3 -0
- package/skills/mattpocock/skills/engineering/pr/SKILL.md +170 -0
- package/skills/mattpocock/skills/engineering/pr/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/prototype/LOGIC.md +67 -0
- package/skills/mattpocock/skills/engineering/prototype/SKILL.md +26 -0
- package/skills/mattpocock/skills/engineering/prototype/UI.md +112 -0
- package/skills/mattpocock/skills/engineering/prototype/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/research/SKILL.md +12 -0
- package/skills/mattpocock/skills/engineering/research/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/retro/SKILL.md +44 -0
- package/skills/mattpocock/skills/engineering/retro/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/SKILL.md +120 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/domain.md +51 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +50 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
- package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/skills/mattpocock/skills/engineering/tdd/SKILL.md +38 -0
- package/skills/mattpocock/skills/engineering/tdd/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/tdd/mocking.md +59 -0
- package/skills/mattpocock/skills/engineering/tdd/tests.md +77 -0
- package/skills/mattpocock/skills/engineering/to-spec/SKILL.md +75 -0
- package/skills/mattpocock/skills/engineering/to-spec/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/to-tickets/SKILL.md +105 -0
- package/skills/mattpocock/skills/engineering/to-tickets/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/triage/AGENT-BRIEF.md +207 -0
- package/skills/mattpocock/skills/engineering/triage/OUT-OF-SCOPE.md +105 -0
- package/skills/mattpocock/skills/engineering/triage/SKILL.md +112 -0
- package/skills/mattpocock/skills/engineering/triage/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/wayfinder/SKILL.md +128 -0
- package/skills/mattpocock/skills/engineering/wayfinder/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/engineering/wizard/SKILL.md +44 -0
- package/skills/mattpocock/skills/engineering/wizard/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/engineering/wizard/template.sh +223 -0
- package/skills/mattpocock/skills/in-progress/README.md +17 -0
- package/skills/mattpocock/skills/in-progress/chief-of-staff/SKILL.md +75 -0
- package/skills/mattpocock/skills/in-progress/chief-of-staff/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/in-progress/claude-handoff/SKILL.md +18 -0
- package/skills/mattpocock/skills/in-progress/claude-handoff/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/in-progress/loop-me/SKILL.md +32 -0
- package/skills/mattpocock/skills/in-progress/loop-me/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/SKILL.md +102 -0
- package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/dependency-cruiser.config.cjs +95 -0
- package/skills/mattpocock/skills/in-progress/software-factory/EXAMPLE-TASKS.md +80 -0
- package/skills/mattpocock/skills/in-progress/software-factory/GIT-HOSTS.md +84 -0
- package/skills/mattpocock/skills/in-progress/software-factory/OBSERVABILITY-PLATFORMS.md +75 -0
- package/skills/mattpocock/skills/in-progress/software-factory/RUNNERS.md +94 -0
- package/skills/mattpocock/skills/in-progress/software-factory/SKILL.md +98 -0
- package/skills/mattpocock/skills/in-progress/software-factory/TICKET-TRACKERS.md +85 -0
- package/skills/mattpocock/skills/in-progress/writing-beats/SKILL.md +67 -0
- package/skills/mattpocock/skills/in-progress/writing-beats/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/in-progress/writing-fragments/SKILL.md +79 -0
- package/skills/mattpocock/skills/in-progress/writing-fragments/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/in-progress/writing-shape/SKILL.md +79 -0
- package/skills/mattpocock/skills/in-progress/writing-shape/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/misc/README.md +8 -0
- package/skills/mattpocock/skills/misc/git-guardrails-claude-code/SKILL.md +95 -0
- package/skills/mattpocock/skills/misc/git-guardrails-claude-code/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/misc/git-guardrails-claude-code/scripts/block-dangerous-git.sh +25 -0
- package/skills/mattpocock/skills/misc/migrate-to-shoehorn/SKILL.md +118 -0
- package/skills/mattpocock/skills/misc/migrate-to-shoehorn/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/misc/scaffold-exercises/SKILL.md +106 -0
- package/skills/mattpocock/skills/misc/scaffold-exercises/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/misc/setup-pre-commit/SKILL.md +91 -0
- package/skills/mattpocock/skills/misc/setup-pre-commit/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/productivity/README.md +20 -0
- package/skills/mattpocock/skills/productivity/grill-me/SKILL.md +7 -0
- package/skills/mattpocock/skills/productivity/grill-me/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/productivity/grilling/SKILL.md +30 -0
- package/skills/mattpocock/skills/productivity/grilling/agents/openai.yaml +3 -0
- package/skills/mattpocock/skills/productivity/handoff/SKILL.md +16 -0
- package/skills/mattpocock/skills/productivity/handoff/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/productivity/teach/GLOSSARY-FORMAT.md +35 -0
- package/skills/mattpocock/skills/productivity/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/skills/mattpocock/skills/productivity/teach/MISSION-FORMAT.md +31 -0
- package/skills/mattpocock/skills/productivity/teach/RESOURCES-FORMAT.md +32 -0
- package/skills/mattpocock/skills/productivity/teach/SKILL.md +140 -0
- package/skills/mattpocock/skills/productivity/teach/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/productivity/to-questionnaire/SKILL.md +54 -0
- package/skills/mattpocock/skills/productivity/to-questionnaire/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/productivity/wait-what/SKILL.md +7 -0
- package/skills/mattpocock/skills/productivity/wait-what/agents/openai.yaml +5 -0
- package/skills/mattpocock/skills/productivity/writing-for-agents/SKILL-MECHANICS.md +22 -0
- package/skills/mattpocock/skills/productivity/writing-for-agents/SKILL.md +81 -0
- package/skills/mattpocock/skills/productivity/writing-for-agents/agents/openai.yaml +3 -0
- package/skills/task-agents/operator-development/Agent.md +71 -0
- package/skills/task-agents/operator-development/skills.json +120 -0
- package/skills/task-agents/operator-development/stages.schema.json +532 -0
- package/skills/task-agents/performance-optimization/Agent.md +78 -0
- package/skills/task-agents/performance-optimization/skills.json +64 -0
- package/skills/task-agents/response-protocol.md +35 -0
- package/skills/task-agents/sidebar-contracts.schema.json +4168 -0
- package/skills/task-agents/sidebar-selection.schema.json +971 -0
- package/skills/task-agents/visuals/components.json +283 -0
- package/skills/task-agents/visuals/contracts.schema.json +3628 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 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 softmax_v2_tiling_data.h
|
|
13
|
+
* \brief SoftmaxV2 六个模板的 TilingData 结构定义(host 与 device 共用,packed 布局保持一致)。
|
|
14
|
+
*
|
|
15
|
+
* 本文件集中定义六个独立的 TilingData 结构体,每个结构体对应一个 Kernel 模板。
|
|
16
|
+
* 模板之间互不依赖,使用者只需 include 本文件和对应模板头文件即可独立实例化。
|
|
17
|
+
*
|
|
18
|
+
* 结构体与模板对应关系:
|
|
19
|
+
* - SoftmaxV2ArSmallRTilingData → dav310/softmax_v2_ar_small_r.h (SoftmaxV2ArSmallR)
|
|
20
|
+
* - SoftmaxV2ARTilingData → dav310/softmax_v2_ar_full_load.h (SoftmaxV2AR)
|
|
21
|
+
* - SoftmaxV2ArRecomputeTilingData → dav310/softmax_v2_ar_recompute.h (SoftmaxV2ArRecompute)
|
|
22
|
+
* - SoftmaxV2ARATilingData → dav310/softmax_v2_ara_full_load.h (SoftmaxV2ARA)
|
|
23
|
+
* - SoftmaxV2ARARecomputeTilingData→ dav310/softmax_v2_ara_recompute.h (SoftmaxV2ARARecompute)
|
|
24
|
+
* - SoftmaxV2ARAOnlineTilingData → dav310/softmax_v2_ara_online.h (SoftmaxV2ARAOnline)
|
|
25
|
+
*
|
|
26
|
+
* 所有结构体使用 #pragma pack(1),确保 Host 与 Device 内存布局一致。
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#ifndef SOFTMAX_V2_TILING_DATA_H
|
|
30
|
+
#define SOFTMAX_V2_TILING_DATA_H
|
|
31
|
+
|
|
32
|
+
#include <cstdint>
|
|
33
|
+
|
|
34
|
+
#pragma pack(1)
|
|
35
|
+
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// AR Small R — 对应模板 SoftmaxV2ArSmallR (dav310/softmax_v2_ar_small_r.h)
|
|
38
|
+
//
|
|
39
|
+
// 适用场景:2D [A1, R] 布局,R 极小(FP32≤16 / FP16≤32),转置为 (R, A1) 向量化。
|
|
40
|
+
// 字段说明:
|
|
41
|
+
// totalA0Len — 转置后的 A0 维长度(= 原 A1),单位:元素数
|
|
42
|
+
// totalRLen — 归约轴 R 的实际长度,单位:元素数
|
|
43
|
+
// totalTiles — A0 方向总 tile 数,单位:tile
|
|
44
|
+
// tilesPerCore — 每核处理的 tile 数,单位:tile
|
|
45
|
+
// tileA0Len — 主块 A0 tile 长度(VL_FP32 对齐),单位:元素数
|
|
46
|
+
// tileA0Tail — 尾块 A0 实际长度,单位:元素数;主块时等于 tileA0Len
|
|
47
|
+
// rTileBase — R 方向转置基础块大小,FP32=8 / FP16=16,单位:元素数
|
|
48
|
+
// rAligned — R 对齐后长度(按 rTileBase 向上取整),单位:元素数
|
|
49
|
+
//
|
|
50
|
+
// Host 侧生成约束:
|
|
51
|
+
// - tileA0Len 须为 VL_FP32 (64) 的倍数
|
|
52
|
+
// - rAligned = CeilDiv(R, rTileBase) * rTileBase
|
|
53
|
+
// - tilesPerCore = CeilDiv(totalTiles, numBlocks),totalTiles = CeilDiv(A1, tileA0Len)
|
|
54
|
+
// ============================================================================
|
|
55
|
+
struct SoftmaxV2ArSmallRTilingData {
|
|
56
|
+
int64_t totalA0Len;
|
|
57
|
+
int64_t totalRLen;
|
|
58
|
+
int64_t totalTiles;
|
|
59
|
+
int64_t tilesPerCore;
|
|
60
|
+
int64_t tileA0Len;
|
|
61
|
+
int64_t tileA0Tail;
|
|
62
|
+
int64_t rTileBase;
|
|
63
|
+
int64_t rAligned;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// AR Full Load — 对应模板 SoftmaxV2AR (dav310/softmax_v2_ar_full_load.h)
|
|
68
|
+
//
|
|
69
|
+
// 适用场景:2D [A1, R] 布局,R 可整段载入 UB,单 pass VF 计算。
|
|
70
|
+
// 字段说明:
|
|
71
|
+
// a — A1 维总长度(行数),单位:元素数
|
|
72
|
+
// r — R 维实际长度,单位:元素数
|
|
73
|
+
// rAligned — R 对齐后长度(按 32B/dtypeSize 向上取整),单位:元素数
|
|
74
|
+
// ubFactor — 单次 UB 载入的行数(A 方向分块),单位:行
|
|
75
|
+
// aBlockFactor — 每核处理的行数,单位:行
|
|
76
|
+
// rLoopCount — R 方向 VL_FP32 分段数 = CeilDiv(rAligned, VL_FP32),单位:段
|
|
77
|
+
//
|
|
78
|
+
// Host 侧生成约束:
|
|
79
|
+
// - rAligned 按 blockSize/dtypeSize 对齐
|
|
80
|
+
// - ubFactor 受 UB 容量约束,须满足 ubFactor * rAligned * (dtypeSize*2 + 4) <= ubSize
|
|
81
|
+
// - aBlockFactor = CeilDiv(A1, numBlocks)
|
|
82
|
+
// ============================================================================
|
|
83
|
+
struct SoftmaxV2ARTilingData {
|
|
84
|
+
int64_t a;
|
|
85
|
+
int64_t r;
|
|
86
|
+
int64_t rAligned;
|
|
87
|
+
int64_t ubFactor;
|
|
88
|
+
int64_t aBlockFactor;
|
|
89
|
+
int64_t rLoopCount;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// AR Recompute — 对应模板 SoftmaxV2ArRecompute (dav310/softmax_v2_ar_recompute.h)
|
|
94
|
+
//
|
|
95
|
+
// 适用场景:2D [A1, R] 布局,R 超出 UB,R 切 chunk 三阶段重读 GM + 二分累加树。
|
|
96
|
+
// 字段说明:
|
|
97
|
+
// a — A1 维总长度(行数),单位:元素数
|
|
98
|
+
// r — R 维实际长度,单位:元素数
|
|
99
|
+
// ubFactor — R 方向单 chunk 长度(UB 内一次载入的 R 元素数),单位:元素数
|
|
100
|
+
// ubFactorTail — R 方向尾块长度(最后一个 chunk 的实际长度),单位:元素数
|
|
101
|
+
// aBlockFactor — 每核处理的行数,单位:行
|
|
102
|
+
// aLoopCountCeil — R 方向 chunk 总数 = CeilDiv(R, ubFactor),单位:chunk
|
|
103
|
+
// basicBlockLoop — 二分树展开的基础块数(<= aLoopCountCeil 的最大 2^k),单位:块
|
|
104
|
+
// mainFoldCount — 需要折叠的块数 = aLoopCountCeil - basicBlockLoop,单位:块
|
|
105
|
+
//
|
|
106
|
+
// Host 侧生成约束:
|
|
107
|
+
// - ubFactor 受 UB 容量约束,须满足多 buffer 约束
|
|
108
|
+
// - ubFactorTail = R - ubFactor * FloorDiv(R, ubFactor);R 整除时为 0
|
|
109
|
+
// - basicBlockLoop = FindNearestPower2(aLoopCountCeil)
|
|
110
|
+
// - mainFoldCount = FloorDiv(R, ubFactor) - basicBlockLoop
|
|
111
|
+
// ============================================================================
|
|
112
|
+
struct SoftmaxV2ArRecomputeTilingData {
|
|
113
|
+
int64_t a;
|
|
114
|
+
int64_t r;
|
|
115
|
+
int64_t ubFactor;
|
|
116
|
+
int64_t ubFactorTail;
|
|
117
|
+
int64_t aBlockFactor;
|
|
118
|
+
int64_t aLoopCountCeil;
|
|
119
|
+
int64_t basicBlockLoop;
|
|
120
|
+
int64_t mainFoldCount;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// ARA Full Load — 对应模板 SoftmaxV2ARA (dav310/softmax_v2_ara_full_load.h)
|
|
125
|
+
//
|
|
126
|
+
// 适用场景:3D [A1, R, A0] 布局,R×A0_tile 可载入 UB,沿 A0 切 tile 跨 R 逐列 VF。
|
|
127
|
+
// 字段说明:
|
|
128
|
+
// totalA1Len — A1 维总长度,单位:元素数
|
|
129
|
+
// totalRLen — R 维总长度,单位:元素数
|
|
130
|
+
// totalA0Len — A0 维总长度,单位:元素数
|
|
131
|
+
// totalTiles — 总 tile 数 = A1 * a0Outer,单位:tile
|
|
132
|
+
// tilesPerCore — 每核处理的 tile 数,单位:tile
|
|
133
|
+
// usedCoreNums — 实际使用的核数,单位:核
|
|
134
|
+
// a1Outer — A1 外层循环数(= totalA1Len),单位:次
|
|
135
|
+
// tileA1Len — A1 方向 tile 长度(当前为 1),单位:元素数
|
|
136
|
+
// tileA1Tail — A1 方向尾块长度(= totalA1Len),单位:元素数
|
|
137
|
+
// a0Outer — A0 方向 tile 总数 = CeilDiv(A0, tileA0Len),单位:tile
|
|
138
|
+
// tileA0Len — 主块 A0 tile 长度,单位:元素数
|
|
139
|
+
// tileA0Tail — 尾块 A0 实际长度,单位:元素数
|
|
140
|
+
// binaryAddK — BinaryAdd 外层折叠层数,单位:层
|
|
141
|
+
// binaryAddLast — BinaryAdd 最后是否需额外 2→1 折叠(0 或 1),单位:标志
|
|
142
|
+
// binaryAddInnerLoop — BinaryAdd 每层内循环次数,单位:次
|
|
143
|
+
// remainderLoopCount — R 对 8 取余后的折叠循环数,单位:次
|
|
144
|
+
// quotientLoopCount — R 整除 8 后的剩余折叠循环数,单位:次
|
|
145
|
+
// remainderTailCount — 余数部分的尾块计数,单位:个
|
|
146
|
+
// remainderOffset — 余数部分在 UB 中的偏移,单位:元素数
|
|
147
|
+
// baseLineOffset — 8 行 baseline 偏移,单位:元素数
|
|
148
|
+
// validNumInXUb — UB 中有效元素数 = R * tileA0Len,单位:元素数
|
|
149
|
+
// quotientTailOffset — 商部分尾块偏移,单位:元素数
|
|
150
|
+
// remainderTailOffset — 余数部分尾块偏移,单位:元素数
|
|
151
|
+
// remainderTailOffset0~7 — 余数尾块各行的具体偏移(越界则指向 validNumInXUb 做零填充),单位:元素数
|
|
152
|
+
//
|
|
153
|
+
// Host 侧生成约束:
|
|
154
|
+
// - tileA0Len 须为 a0TileBase 的倍数(FP32=8 / FP16=16)
|
|
155
|
+
// - 当 R <= 8 时,binaryAdd* 字段不使用(可全为 0)
|
|
156
|
+
// - 当 R > 8 时,binaryAddQuotient = 最大 2^k <= R-1,按 8 行分组做 BinaryAddVF
|
|
157
|
+
// ============================================================================
|
|
158
|
+
struct SoftmaxV2ARATilingData {
|
|
159
|
+
int64_t totalA1Len;
|
|
160
|
+
int64_t totalRLen;
|
|
161
|
+
int64_t totalA0Len;
|
|
162
|
+
int64_t totalTiles;
|
|
163
|
+
int64_t tilesPerCore;
|
|
164
|
+
int64_t usedCoreNums;
|
|
165
|
+
int64_t a1Outer;
|
|
166
|
+
int64_t tileA1Len;
|
|
167
|
+
int64_t tileA1Tail;
|
|
168
|
+
int64_t a0Outer;
|
|
169
|
+
int64_t tileA0Len;
|
|
170
|
+
int64_t tileA0Tail;
|
|
171
|
+
uint16_t binaryAddK;
|
|
172
|
+
uint16_t binaryAddLast;
|
|
173
|
+
uint16_t binaryAddInnerLoop;
|
|
174
|
+
uint16_t remainderLoopCount;
|
|
175
|
+
uint16_t quotientLoopCount;
|
|
176
|
+
uint16_t remainderTailCount;
|
|
177
|
+
uint32_t remainderOffset;
|
|
178
|
+
uint32_t baseLineOffset;
|
|
179
|
+
uint32_t validNumInXUb;
|
|
180
|
+
uint32_t quotientTailOffset;
|
|
181
|
+
uint32_t remainderTailOffset;
|
|
182
|
+
uint32_t remainderTailOffset0;
|
|
183
|
+
uint32_t remainderTailOffset1;
|
|
184
|
+
uint32_t remainderTailOffset2;
|
|
185
|
+
uint32_t remainderTailOffset3;
|
|
186
|
+
uint32_t remainderTailOffset4;
|
|
187
|
+
uint32_t remainderTailOffset5;
|
|
188
|
+
uint32_t remainderTailOffset6;
|
|
189
|
+
uint32_t remainderTailOffset7;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
// ============================================================================
|
|
193
|
+
// ARA Recompute — 对应模板 SoftmaxV2ARARecompute (dav310/softmax_v2_ara_recompute.h)
|
|
194
|
+
//
|
|
195
|
+
// 适用场景:3D [A1, R, A0] 布局,R 超出 UB,R 切 bin 三阶段跨 bin 二分折叠。
|
|
196
|
+
// 字段说明:
|
|
197
|
+
// totalRLen — R 维总长度,单位:元素数
|
|
198
|
+
// totalA0Len — A0 维总长度,单位:元素数
|
|
199
|
+
// totalTiles — 总 tile 数 = A1 * tileA0Outer,单位:tile
|
|
200
|
+
// tilesPerCore — 每核处理的 tile 数,单位:tile
|
|
201
|
+
// usedCoreNums — 实际使用的核数,单位:核
|
|
202
|
+
// tileA0Outer — A0 方向 tile 总数,单位:tile
|
|
203
|
+
// tileA0Len — 主块 A0 tile 长度,单位:元素数
|
|
204
|
+
// tileA0Tail — 尾块 A0 实际长度,单位:元素数
|
|
205
|
+
// binAddRFactor — R 方向单 bin 长度(默认 128),单位:元素数
|
|
206
|
+
// binAddRLoop — R 方向完整 bin 数 = FloorDiv(R, binAddRFactor),单位:bin
|
|
207
|
+
// binAddRTotalLoop — R 方向 bin 总数 = CeilDiv(R, binAddRFactor),单位:bin
|
|
208
|
+
// binAddRTail — R 方向尾 bin 长度,单位:元素数
|
|
209
|
+
// binAddBasicBlockLoop — 二分树展开的基础块数,单位:块
|
|
210
|
+
// binAddMainFoldCount — 需要折叠的块数,单位:块
|
|
211
|
+
// binAddCacheBufferCount — 二分累加 cache buffer 数量,单位:个
|
|
212
|
+
// binAddResultCacheID — 最终结果所在的 cache buffer 索引,单位:索引
|
|
213
|
+
//
|
|
214
|
+
// Host 侧生成约束:
|
|
215
|
+
// - binAddRFactor 默认 128,可根据 UB 容量调整
|
|
216
|
+
// - binAddRTail = R - (binAddRTotalLoop - 1) * binAddRFactor
|
|
217
|
+
// - binAddBasicBlockLoop = FindNearestPower2(binAddRTotalLoop)
|
|
218
|
+
// - binAddCacheBufferCount / binAddResultCacheID 由 GetCacheID 计算
|
|
219
|
+
// ============================================================================
|
|
220
|
+
struct SoftmaxV2ARARecomputeTilingData {
|
|
221
|
+
int64_t totalRLen;
|
|
222
|
+
int64_t totalA0Len;
|
|
223
|
+
int64_t totalTiles;
|
|
224
|
+
int64_t tilesPerCore;
|
|
225
|
+
int64_t usedCoreNums;
|
|
226
|
+
int64_t tileA0Outer;
|
|
227
|
+
int64_t tileA0Len;
|
|
228
|
+
int64_t tileA0Tail;
|
|
229
|
+
int64_t binAddRFactor;
|
|
230
|
+
int64_t binAddRLoop;
|
|
231
|
+
int64_t binAddRTotalLoop;
|
|
232
|
+
int64_t binAddRTail;
|
|
233
|
+
int64_t binAddBasicBlockLoop;
|
|
234
|
+
int64_t binAddMainFoldCount;
|
|
235
|
+
int64_t binAddCacheBufferCount;
|
|
236
|
+
int64_t binAddResultCacheID;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// ============================================================================
|
|
240
|
+
// ARA Online Softmax — 对应模板 SoftmaxV2ARAOnline (dav310/softmax_v2_ara_online.h)
|
|
241
|
+
//
|
|
242
|
+
// 适用场景:3D [A1, R, A0] 布局,沿 R 分 chunk 在线更新 running max / running sum。
|
|
243
|
+
// 输入读 2 次(1 遍在线 max+sum,1 遍输出),无需二分 cache。
|
|
244
|
+
// 字段说明:
|
|
245
|
+
// totalRLen — R 维总长度,单位:元素数
|
|
246
|
+
// totalA0Len — A0 维总长度,单位:元素数
|
|
247
|
+
// totalTiles — 总 tile 数 = A1 * tileA0Outer,单位:tile
|
|
248
|
+
// tilesPerCore — 每核处理的 tile 数,单位:tile
|
|
249
|
+
// usedCoreNums — 实际使用的核数,单位:核
|
|
250
|
+
// tileA0Outer — A0 方向 tile 总数,单位:tile
|
|
251
|
+
// tileA0Len — 主块 A0 tile 长度,单位:元素数
|
|
252
|
+
// tileA0Tail — 尾块 A0 实际长度,单位:元素数
|
|
253
|
+
// rChunkFactor — R 方向单 chunk 长度(默认 128),单位:元素数
|
|
254
|
+
// rChunkTotalLoop — R 方向 chunk 总数 = CeilDiv(R, rChunkFactor),单位:chunk
|
|
255
|
+
// rChunkTail — R 方向尾 chunk 长度,单位:元素数
|
|
256
|
+
//
|
|
257
|
+
// Host 侧生成约束:
|
|
258
|
+
// - rChunkFactor 默认 128,若大于 R 则取 R
|
|
259
|
+
// - rChunkTail = R - (rChunkTotalLoop - 1) * rChunkFactor
|
|
260
|
+
// - tileA0Len 须为 a0TileBase 的倍数(FP32=8 / FP16=16)
|
|
261
|
+
// ============================================================================
|
|
262
|
+
struct SoftmaxV2ARAOnlineTilingData {
|
|
263
|
+
int64_t totalRLen;
|
|
264
|
+
int64_t totalA0Len;
|
|
265
|
+
int64_t totalTiles;
|
|
266
|
+
int64_t tilesPerCore;
|
|
267
|
+
int64_t usedCoreNums;
|
|
268
|
+
int64_t tileA0Outer;
|
|
269
|
+
int64_t tileA0Len;
|
|
270
|
+
int64_t tileA0Tail;
|
|
271
|
+
int64_t rChunkFactor;
|
|
272
|
+
int64_t rChunkTotalLoop;
|
|
273
|
+
int64_t rChunkTail;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
#pragma pack()
|
|
277
|
+
|
|
278
|
+
#endif // SOFTMAX_V2_TILING_DATA_H
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# 融合算子 UB 状态 Buffer 跨循环常驻优化设计
|
|
2
|
+
|
|
3
|
+
> **定位说明**:本文档是融合算子(如 FlashAttention)中 UB 状态管理和流水设计的**建议性参考**。`SoftmaxFlashV2`、`preLoadNum` 等接口和概念**不是**当前 `templates/` 目录下七个 Kernel 已实现的统一接口。各模板有各自的局部 max/sum cache 机制(如 AR-Recompute 的 `UpdateCache` 二分树、ARA-Recompute 的 `cacheBuffer`),但并非完整的状态驻留方案。
|
|
4
|
+
|
|
5
|
+
## 1. 优化目标
|
|
6
|
+
|
|
7
|
+
在 Flash Attention / Sparse Flash Attention 等融合算子场景中,online softmax 需要在 S2 方向多次循环中累积 `softmaxMax`、`softmaxSum`、`softmaxExp` 三个状态。naive 实现每次 S2 循环都重新分配/释放这些 UB buffer,引入不必要的 `PipeBarrier` 和 `InitBuffer` 开销。
|
|
8
|
+
|
|
9
|
+
本设计将三个状态 buffer **一次性分配后常驻 UB**,通过 `loop % preLoadNum` 索引实现双缓冲复用,避免每轮 S2 循环的重复分配开销,同时支持读写并行流水。
|
|
10
|
+
|
|
11
|
+
> **注意**:`SoftmaxFlashV2` 和 `preLoadNum` 是融合 Attention 算子中的概念,当前 dav310 目录下的七个 Softmax Kernel 未实现此完整方案。各模板的局部 max/sum cache(如 [AR Recompute](softmax_v2_ar_recompute.md) 的 `cachebuffer` 和 [ARA Recompute](softmax_v2_ara_recompute.md) 的 `cacheBuffer_`)是 UB 内部的临时状态管理,与本文档的跨循环常驻设计不同。
|
|
12
|
+
|
|
13
|
+
| 指标 | naive | optimized | 收益 |
|
|
14
|
+
|------|-------|-----------|------|
|
|
15
|
+
| S2 循环内 InitBuffer 调用 | 每轮 3 次 | 0 次 | 消除重复分配开销 |
|
|
16
|
+
| PipeBarrier 数量 | 每轮若干 | 显著减少 | 减少事件同步等待 |
|
|
17
|
+
| UB 空间利用率 | 低(频繁分配释放产生碎片) | 高(预分配连续布局) | 更可控的内存预算 |
|
|
18
|
+
| 流水重叠度 | 低(单份 buffer,必须等 MTE3 写完才能开始下一轮) | 高(双缓冲支持读写并行) | 支持 pingpong 流水 |
|
|
19
|
+
|
|
20
|
+
> 适用场景:FlashAttention / Sparse FlashAttention 等融合 Attention 算子中内嵌的 online softmax 状态管理。
|
|
21
|
+
|
|
22
|
+
## 2. 架构概览
|
|
23
|
+
|
|
24
|
+
### 2.1 存储层级与数据流
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
GM (Global Memory)
|
|
28
|
+
│
|
|
29
|
+
│ MTE3 (workspace ←→ GM)
|
|
30
|
+
▼
|
|
31
|
+
UB Buffer [softmaxMax_ping | softmaxMax_pong | softmaxSum_ping | softmaxSum_pong | softmaxExp_ping | softmaxExp_pong]
|
|
32
|
+
│
|
|
33
|
+
│ Vector PIPE (SoftmaxFlashV2 / online softmax)
|
|
34
|
+
▼
|
|
35
|
+
UB Output → MTE3 → GM
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2.2 常驻 Buffer 布局
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
UB 地址空间:
|
|
42
|
+
[softmaxMaxBuff: SOFTMAX_TMP_BUFFER_SIZE * preLoadNum]
|
|
43
|
+
[softmaxSumBuff: SOFTMAX_TMP_BUFFER_SIZE * preLoadNum]
|
|
44
|
+
[softmaxExpBuff: SOFTMAX_TMP_BUFFER_SIZE * preLoadNum]
|
|
45
|
+
|
|
46
|
+
索引计算:
|
|
47
|
+
outIdx = loop % preLoadNum
|
|
48
|
+
softmaxOutOffset = outIdx * SOFTMAX_TMP_BUFFER_SIZE / sizeof(COMPUTE_T)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2.3 双缓冲原理
|
|
52
|
+
|
|
53
|
+
- **常驻**:`InitBuffer` 仅在算子初始化阶段调用一次,三个状态 buffer 常驻 UB 不释放。
|
|
54
|
+
- **双缓冲索引**:通过 `loop % preLoadNum` 轮询使用 ping/pong 两组 buffer。当 `preLoadNum = 2` 时,Vector PIPE 处理第 N 轮数据的同时,MTE3 可向第 N+1 轮 buffer 写入上一轮结果,实现读写并行。
|
|
55
|
+
|
|
56
|
+
### 2.4 事件同步模型
|
|
57
|
+
|
|
58
|
+
| 事件类型 | 含义 | 用途 |
|
|
59
|
+
|---------|------|------|
|
|
60
|
+
| `V_MTE3` | Vector 完成 → 允许 MTE3 覆写 | 状态 buffer 释放控制 |
|
|
61
|
+
| `MTE3_V` | MTE3 完成 → 允许 Vector 读取 | 状态 buffer 数据就绪 |
|
|
62
|
+
|
|
63
|
+
> 注:具体事件类型需根据实际 PIPE 配置调整,核心原则是「Vector 计算」与「MTE3 搬运」通过双缓冲解耦。
|
|
64
|
+
|
|
65
|
+
## 3. 关键参数配置
|
|
66
|
+
|
|
67
|
+
```cpp
|
|
68
|
+
// Host 侧 TilingData(或 constInfo)
|
|
69
|
+
struct SoftmaxConstInfo {
|
|
70
|
+
uint32_t preLoadNum; // 双缓冲深度,通常取 2
|
|
71
|
+
uint32_t softmaxTmpBufferSize; // 单个状态 buffer 大小,通常 = 2K(2048 bytes)
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Kernel 侧 UB buffer 定义
|
|
75
|
+
TBuf<QuePosition::VECCALC> softmaxMaxBuff;
|
|
76
|
+
TBuf<QuePosition::VECCALC> softmaxSumBuff;
|
|
77
|
+
TBuf<QuePosition::VECCALC> softmaxExpBuff;
|
|
78
|
+
|
|
79
|
+
// InitBuffer 一次性分配(构造函数或 Init 阶段)
|
|
80
|
+
pipe->InitBuffer(softmaxMaxBuff, SOFTMAX_TMP_BUFFER_SIZE * constInfo.preLoadNum);
|
|
81
|
+
pipe->InitBuffer(softmaxSumBuff, SOFTMAX_TMP_BUFFER_SIZE * constInfo.preLoadNum);
|
|
82
|
+
pipe->InitBuffer(softmaxExpBuff, SOFTMAX_TMP_BUFFER_SIZE * constInfo.preLoadNum);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 3.1 preLoadNum 选取原则
|
|
86
|
+
|
|
87
|
+
| preLoadNum | UB 占用 | 流水重叠度 | 适用场景 |
|
|
88
|
+
|-----------|---------|-----------|---------|
|
|
89
|
+
| 1 | 3 × 2K = 6KB | 无(串行) | UB 极端紧张,仅做状态常驻不求重叠 |
|
|
90
|
+
| **2** | 3 × 2K × 2 = **12KB** | pingpong 双缓冲 | **默认推荐**,读写并行 |
|
|
91
|
+
| 3 | 18KB | 三段流水 | S2 循环极长、MTE3 延迟高 |
|
|
92
|
+
| 4 | 24KB | 四段流水 | UB 充裕且 MTE3 为瓶颈时考虑 |
|
|
93
|
+
|
|
94
|
+
### 3.2 SOFTMAX_TMP_BUFFER_SIZE 计算
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
SOFTMAX_TMP_BUFFER_SIZE = row_length * sizeof(COMPUTE_T)
|
|
98
|
+
|
|
99
|
+
典型值(row_length = 512, COMPUTE_T = float):
|
|
100
|
+
SOFTMAX_TMP_BUFFER_SIZE = 512 * 4 = 2048 bytes
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 4. 核心计算循环
|
|
104
|
+
|
|
105
|
+
### 4.1 naive 版本(优化前)
|
|
106
|
+
|
|
107
|
+
```cpp
|
|
108
|
+
for (uint32_t s2Loop = 0; s2Loop < s2LoopNum; s2Loop++) {
|
|
109
|
+
// 每轮都重新分配 —— 开销大
|
|
110
|
+
TBuf<QuePosition::VECCALC> softmaxMaxBuff;
|
|
111
|
+
TBuf<QuePosition::VECCALC> softmaxSumBuff;
|
|
112
|
+
TBuf<QuePosition::VECCALC> softmaxExpBuff;
|
|
113
|
+
pipe->InitBuffer(softmaxMaxBuff, SOFTMAX_TMP_BUFFER_SIZE);
|
|
114
|
+
pipe->InitBuffer(softmaxSumBuff, SOFTMAX_TMP_BUFFER_SIZE);
|
|
115
|
+
pipe->InitBuffer(softmaxExpBuff, SOFTMAX_TMP_BUFFER_SIZE);
|
|
116
|
+
|
|
117
|
+
LocalTensor<COMPUTE_T> softmaxMaxUb = softmaxMaxBuff.Get<COMPUTE_T>();
|
|
118
|
+
LocalTensor<COMPUTE_T> softmaxSumUb = softmaxSumBuff.Get<COMPUTE_T>();
|
|
119
|
+
LocalTensor<COMPUTE_T> softmaxExpUb = softmaxExpBuff.Get<COMPUTE_T>();
|
|
120
|
+
|
|
121
|
+
// 计算 score = Q_i * K_j^T
|
|
122
|
+
// ... matmul 结果在 mmResUb ...
|
|
123
|
+
|
|
124
|
+
// Softmax 计算
|
|
125
|
+
SoftmaxFlashV2<...>(mmResUb, softmaxSumUb, softmaxMaxUb, mmResUb,
|
|
126
|
+
softmaxExpUb, inSumTensor, inMaxTensor, ...);
|
|
127
|
+
|
|
128
|
+
// 每轮结束 buffer 自动释放,但下一轮重新分配
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 4.2 optimized 版本(优化后)
|
|
133
|
+
|
|
134
|
+
```cpp
|
|
135
|
+
// 阶段 1:Init 阶段一次性分配(仅执行一次)
|
|
136
|
+
pipe->InitBuffer(softmaxMaxBuff, SOFTMAX_TMP_BUFFER_SIZE * constInfo.preLoadNum);
|
|
137
|
+
pipe->InitBuffer(softmaxExpBuff, SOFTMAX_TMP_BUFFER_SIZE * constInfo.preLoadNum);
|
|
138
|
+
pipe->InitBuffer(softmaxSumBuff, SOFTMAX_TMP_BUFFER_SIZE * constInfo.preLoadNum);
|
|
139
|
+
|
|
140
|
+
// 获取完整的常驻 UB tensor
|
|
141
|
+
LocalTensor<COMPUTE_T> softmaxMaxUb = softmaxMaxBuff.Get<COMPUTE_T>();
|
|
142
|
+
LocalTensor<COMPUTE_T> softmaxExpUb = softmaxExpBuff.Get<COMPUTE_T>();
|
|
143
|
+
LocalTensor<COMPUTE_T> softmaxSumUb = softmaxSumBuff.Get<COMPUTE_T>();
|
|
144
|
+
|
|
145
|
+
for (uint32_t s2Loop = 0; s2Loop < s2LoopNum; s2Loop++) {
|
|
146
|
+
// 双缓冲索引
|
|
147
|
+
uint32_t outIdx = s2Loop % (constInfo.preLoadNum);
|
|
148
|
+
uint32_t softmaxOutOffset = outIdx * SOFTMAX_TMP_BUFFER_SIZE / sizeof(COMPUTE_T);
|
|
149
|
+
|
|
150
|
+
// 计算 score = Q_i * K_j^T
|
|
151
|
+
// ... matmul 结果在 mmResUb ...
|
|
152
|
+
|
|
153
|
+
// Softmax 计算,使用常驻 buffer + 偏移索引
|
|
154
|
+
SoftmaxFlashV2<...>(mmResUb, softmaxSumUb[softmaxOutOffset],
|
|
155
|
+
softmaxMaxUb[softmaxOutOffset], mmResUb,
|
|
156
|
+
softmaxExpUb[softmaxOutOffset], inSumTensor, inMaxTensor, ...);
|
|
157
|
+
|
|
158
|
+
// 可选:MTE3 将本轮结果写回 GM/workspace,与下一轮 Vector 计算重叠
|
|
159
|
+
// WaitFlag<V_MTE3>(outIdx); // 等待上一轮 MTE3 完成
|
|
160
|
+
// MTE3 搬运...
|
|
161
|
+
// SetFlag<MTE3_V>(outIdx); // 通知下一轮数据就绪
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 4.3 双缓冲流水示意(preLoadNum = 2)
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
时间线 →
|
|
169
|
+
─────────────────────────────────────────────────────
|
|
170
|
+
S2 Loop 0: [Vector: softmax on ping] [MTE3: write ping result]
|
|
171
|
+
S2 Loop 1: [Vector: softmax on pong] [MTE3: write pong result]
|
|
172
|
+
S2 Loop 2: [Vector: softmax on ping] ...
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
> 当 Vector 处理 Loop N(pong buffer)时,MTE3 可同时写 Loop N-1(ping buffer)的结果到 GM/workspace,消除 MTE3 等待。
|
|
176
|
+
|
|
177
|
+
## 5. 从 naive 到 state_resident 的关键修改点
|
|
178
|
+
|
|
179
|
+
| 修改项 | naive(优化前) | state_resident(优化后) |
|
|
180
|
+
|--------|---------------|------------------------|
|
|
181
|
+
| buffer 分配位置 | S2 循环内,每轮 `InitBuffer` | 算子 Init 阶段,**一次性分配** |
|
|
182
|
+
| buffer 生命周期 | 每轮结束释放,下轮重新分配 | **常驻 UB**,循环结束不释放 |
|
|
183
|
+
| buffer 数量 | 单份(3 个) | `3 × preLoadNum` 份,支持双缓冲 |
|
|
184
|
+
| buffer 索引 | 固定偏移 0 | `loop % preLoadNum` 轮询索引 |
|
|
185
|
+
| 地址计算 | `buff.Get<T>()` | `buff.Get<T>()[outIdx * size / sizeof(T)]` |
|
|
186
|
+
| PipeBarrier 数量 | 每轮分配/释放触发多次 | 仅 Init 阶段一次,循环内无 |
|
|
187
|
+
| MTE3 与 Vector 重叠 | 无(串行) | 有(双缓冲解耦,可选事件同步) |
|
|
188
|
+
| UB 预算确定性 | 低(动态分配碎片化) | 高(预分配总量 = 3×2K×preLoadNum) |
|
|
189
|
+
|
|
190
|
+
## 6. 注意事项 / 约束
|
|
191
|
+
|
|
192
|
+
1. **UB 空间约束**:常驻占用 `3 × SOFTMAX_TMP_BUFFER_SIZE × preLoadNum`。以 `preLoadNum = 2`、`SOFTMAX_TMP_BUFFER_SIZE = 2048` 为例,总占用 12KB。需确保 UB 总预算(通常为 256KB)扣除该部分后仍有足够空间给其他 buffer(如输入 tile、输出 tile、中间计算 buffer)。
|
|
193
|
+
|
|
194
|
+
2. **preLoadNum 上限**:受 UB 总量限制。若 `preLoadNum` 过大导致 UB 溢出,编译/仿真阶段会报错。建议按以下公式校验:
|
|
195
|
+
```
|
|
196
|
+
totalResident = 3 × SOFTMAX_TMP_BUFFER_SIZE × preLoadNum
|
|
197
|
+
totalResident + otherBuffers ≤ UB_SIZE
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
3. **状态 buffer 与 Softmax API 的兼容性**:`SoftmaxFlashV2` 等高级 API 要求传入的 `softmaxMaxUb`、`softmaxSumUb`、`softmaxExpUb` 为 `LocalTensor` 类型。使用偏移索引后的子 tensor 需确保类型和形状匹配 API 要求。
|
|
201
|
+
|
|
202
|
+
4. **初始化清零**:首次使用常驻 buffer 前,建议通过 `Duplicate` 或 `DataCopy` 将初始值(如 max = -inf, sum = 0)写入,避免残留数据干扰 online softmax 的累积逻辑。
|
|
203
|
+
|
|
204
|
+
5. **与 workspace 的关系**:Flash Attention 场景下,online softmax 的 intermediate m、l、O 通常需要 GM workspace 跨 S2 tile 传递。常驻优化解决的是 **UB 内部 buffer 分配**,不改变 GM workspace 的使用逻辑。
|
|
205
|
+
|
|
206
|
+
## 7. 实施常见问题与解决方案
|
|
207
|
+
|
|
208
|
+
### 问题 1:UB 内存溢出
|
|
209
|
+
|
|
210
|
+
**现象**:编译或仿真报错,提示 UB 分配失败或溢出。
|
|
211
|
+
|
|
212
|
+
**原因**:`preLoadNum` 设置过大,或 `SOFTMAX_TMP_BUFFER_SIZE` 计算错误(如未按 `sizeof(COMPUTE_T)` 对齐),导致常驻 buffer 总占用超出 UB 容量。
|
|
213
|
+
|
|
214
|
+
**解决方案**:
|
|
215
|
+
- 降低 `preLoadNum`(如 3→2 或 2→1)
|
|
216
|
+
- 校验 `SOFTMAX_TMP_BUFFER_SIZE` 是否按 32B 或 64B 对齐(Ascend 硬件对齐要求)
|
|
217
|
+
- 使用 `printf` 或调试工具打印 UB 总占用:
|
|
218
|
+
```cpp
|
|
219
|
+
// 调试打印
|
|
220
|
+
printf("UB resident size: %u bytes\n",
|
|
221
|
+
3 * SOFTMAX_TMP_BUFFER_SIZE * preLoadNum);
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 问题 2:softmax 结果错误(数值漂移)
|
|
225
|
+
|
|
226
|
+
**现象**:精度校验失败,softmax 输出与参考实现不一致。
|
|
227
|
+
|
|
228
|
+
**原因**:双缓冲索引错误,如 `softmaxOutOffset` 计算时未除以 `sizeof(COMPUTE_T)`,导致指针偏移到错误位置;或 `preLoadNum` 为 1 时仍使用 `% preLoadNum` 索引(结果始终为 0,逻辑正确但无优化效果)。
|
|
229
|
+
|
|
230
|
+
**解决方案**:
|
|
231
|
+
- 校验偏移计算:
|
|
232
|
+
```cpp
|
|
233
|
+
// 正确:按元素个数偏移
|
|
234
|
+
uint32_t softmaxOutOffset = outIdx * SOFTMAX_TMP_BUFFER_SIZE / sizeof(COMPUTE_T);
|
|
235
|
+
// 错误:按字节偏移直接传给 LocalTensor
|
|
236
|
+
// uint32_t softmaxOutOffset = outIdx * SOFTMAX_TMP_BUFFER_SIZE; // ❌
|
|
237
|
+
```
|
|
238
|
+
- 在首循环前显式初始化状态 buffer:
|
|
239
|
+
```cpp
|
|
240
|
+
Duplicate(softmaxMaxBuff.Get<COMPUTE_T>(), FLOAT_NEG_INF, 3 * SOFTMAX_TMP_BUFFER_SIZE / sizeof(COMPUTE_T) * preLoadNum);
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 问题 3:preLoadNum = 2 但无性能提升
|
|
244
|
+
|
|
245
|
+
**现象**:cycle 数与 naive 版本接近,双缓冲未生效。
|
|
246
|
+
|
|
247
|
+
**原因**:仅做了 buffer 常驻,但未在 Vector 和 MTE3 之间插入事件同步实现真正的流水重叠。`SoftmaxFlashV2` 调用后紧跟 MTE3 写回,仍是串行执行。
|
|
248
|
+
|
|
249
|
+
**解决方案**:插入 `SetFlag` / `WaitFlag` 事件对,将 MTE3 写回与下一轮 Vector 计算解耦:
|
|
250
|
+
```cpp
|
|
251
|
+
// 正确的流水同步模式
|
|
252
|
+
for (uint32_t s2Loop = 0; s2Loop < s2LoopNum; s2Loop++) {
|
|
253
|
+
uint32_t curIdx = s2Loop % preLoadNum;
|
|
254
|
+
uint32_t prevIdx = (s2Loop + preLoadNum - 1) % preLoadNum;
|
|
255
|
+
|
|
256
|
+
// 等待上一轮 MTE3 写回完成(释放当前 buffer)
|
|
257
|
+
WaitFlag<MTE3_V>(curIdx);
|
|
258
|
+
|
|
259
|
+
// Vector 计算
|
|
260
|
+
SoftmaxFlashV2<...>(...);
|
|
261
|
+
|
|
262
|
+
// 通知 MTE3 可以写回当前 buffer
|
|
263
|
+
SetFlag<V_MTE3>(curIdx);
|
|
264
|
+
|
|
265
|
+
// MTE3 异步写回上一轮结果(与下一轮 Vector 计算重叠)
|
|
266
|
+
// 注意:实际代码中 MTE3 写回应在 SetFlag 之后、下一轮 WaitFlag 之前完成
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 问题 4:与 online softmax 的 m/sum 累积逻辑冲突
|
|
271
|
+
|
|
272
|
+
**现象**:多 tile(S2 循环)场景下,softmax 结果跨 tile 不一致。
|
|
273
|
+
|
|
274
|
+
**原因**:online softmax 要求跨 tile 维护 running max 和 running sum。若每个 S2 循环使用独立的 buffer(双缓冲),但未正确将上一轮状态传递到下一轮(如通过 GM workspace),会导致状态断裂。
|
|
275
|
+
|
|
276
|
+
**解决方案**:
|
|
277
|
+
- 明确区分「UB 内部状态 buffer」(本优化,用于单轮 softmax 计算)和「跨 tile 累积状态」(通过 GM workspace 传递,属于 online softmax 算法本身)。
|
|
278
|
+
- 本优化不改变 online softmax 的跨 tile 状态传递逻辑,仅优化单 tile 内的 UB buffer 分配策略。
|
|
279
|
+
|
|
280
|
+
### 问题总结
|
|
281
|
+
|
|
282
|
+
| # | 问题 | 根因 | 解决方案 | 影响 |
|
|
283
|
+
|---|------|------|---------|------|
|
|
284
|
+
| 1 | UB 溢出 | preLoadNum 过大或 size 未对齐 | 降低 preLoadNum、校验对齐 | 编译/仿真失败 |
|
|
285
|
+
| 2 | 精度失败 | 偏移计算错误或 buffer 未初始化 | 校验 offset 公式、首循环清零 | 结果错误 |
|
|
286
|
+
| 3 | 性能未提升 | 缺少事件同步,仍是串行 | 插入 SetFlag/WaitFlag | 性能无改善 |
|
|
287
|
+
| 4 | 跨 tile 不一致 | 混淆 UB 优化与 online softmax 状态传递 | 保持 GM workspace 累积逻辑不变 | 精度失败 |
|
|
288
|
+
|
|
289
|
+
## 8. 实测性能、叠加关系与自检清单
|
|
290
|
+
|
|
291
|
+
### 8.1 与其他优化的叠加关系
|
|
292
|
+
|
|
293
|
+
| 优化 | 叠加可行性 | 说明 |
|
|
294
|
+
|------|-----------|------|
|
|
295
|
+
| **pingpong 双缓冲** | ✅ 高度兼容 | 本优化是 pingpong 在 softmax 状态 buffer 上的具体应用,`preLoadNum` 对应 pingpong 深度 |
|
|
296
|
+
| **online softmax 算法** | ✅ 必要前置 | 状态常驻优化的前提是使用 online softmax(跨 S2 循环维护状态),两者缺一不可 |
|
|
297
|
+
| **FP32 中间计算** | ✅ 兼容 | 状态 buffer 的 `COMPUTE_T` 可设为 float,与 FP32 数值稳定性优化共存 |
|
|
298
|
+
| **mte2_preload** | ⚠️ 部分兼容 | 若 softmax 前有 MTE2 预取,需确保预取 buffer 与常驻 buffer 不冲突 |
|
|
299
|
+
| **swat / streamk** | ❌ 不适用 | 这两种优化针对 MatMul CUBE 核心,与 softmax Vector 核心无直接交集 |
|
|
300
|
+
|
|
301
|
+
### 8.2 选型决策
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
if (融合算子包含 online softmax && S2 循环次数 > 1):
|
|
305
|
+
→ 启用 state_resident 优化
|
|
306
|
+
→ preLoadNum = 2(默认,UB 充裕时可试 3)
|
|
307
|
+
else:
|
|
308
|
+
→ 无需本优化(单轮 softmax 无循环复用收益)
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### 8.3 自检清单
|
|
312
|
+
|
|
313
|
+
- [ ] `InitBuffer` 仅在算子初始化阶段调用一次,不在 S2 循环内
|
|
314
|
+
- [ ] `preLoadNum` 取值为 1/2/3/4,且满足 UB 预算约束
|
|
315
|
+
- [ ] `softmaxOutOffset` 计算正确:`outIdx * SOFTMAX_TMP_BUFFER_SIZE / sizeof(COMPUTE_T)`
|
|
316
|
+
- [ ] 首循环前状态 buffer 已初始化(max = -inf, sum = 0)
|
|
317
|
+
- [ ] 双缓冲索引与事件同步(SetFlag/WaitFlag)配套使用,实现真正流水
|
|
318
|
+
- [ ] 精度校验通过(与 naive 版本对比,误差在 1e-5 以内)
|
|
319
|
+
- [ ] cycle 数对比:optimized / naive < 0.9(至少 10% 提升,通常 15-25%)
|
|
320
|
+
|
|
321
|
+
## 9. 与当前 dav310 模板的联系与区别
|
|
322
|
+
|
|
323
|
+
当前 `templates/dav310/` 下的七个 Kernel 各有局部 max/sum cache 机制,但它们与本文档的跨循环常驻方案有本质区别:
|
|
324
|
+
|
|
325
|
+
| 特性 | 本文 state_resident 方案 | dav310 模板的局部 cache |
|
|
326
|
+
|------|------------------------|----------------------|
|
|
327
|
+
| 适用场景 | 融合 Attention 跨 S2 循环 | 独立 Softmax 单 pass 内的跨 chunk |
|
|
328
|
+
| 状态生命周期 | 跨 S2 循环常驻 UB | 单 tile 内临时使用 |
|
|
329
|
+
| 双缓冲索引 | `loop % preLoadNum` | 无(直接使用 `cacheID` 索引) |
|
|
330
|
+
| 事件同步 | SetFlag/WaitFlag 流水 | 无(同步计算) |
|
|
331
|
+
| 涉及模板 | 融合 Attention(本目录未提供) | [AR Recompute](softmax_v2_ar_recompute.md)、[ARA Recompute](softmax_v2_ara_recompute.md) |
|
|
332
|
+
|
|
333
|
+
- **AR Recompute** 的 `cachebuffer`(2048B)用于 UB 间二分累加树的 `UpdateCache`,是单行 R 方向的局部 sum 合并,非跨 S2 循环状态。
|
|
334
|
+
- **ARA Recompute** 的 `cacheBuffer_` 用于跨 bin 的 `UpdateCache` 二分树,同样是单 tile 内的局部 sum 合并。
|
|
335
|
+
- **ARA Online** 的 `xMaxBuf_`/`xSumBuf_` 维护 running max/sum,是单 tile 内跨 R chunk 的在线状态,非跨 S2 循环。
|
|
336
|
+
|
|
337
|
+
> 本文档不宣称当前 dav310 Softmax 已实现完整的融合状态驻留方案。
|