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,342 @@
|
|
|
1
|
+
# UB/TBuf 常驻复用与 Bank 冲突规避优化设计
|
|
2
|
+
|
|
3
|
+
## 1. 优化目标
|
|
4
|
+
|
|
5
|
+
在 Vector 算子中,小尺寸参数(weight、gamma、scale)或跨迭代状态(累加器、递推结果)若每个 tile/loop 都重复从 GM 搬运,会造成大量冗余 MTE2 开销。本优化通过将这类数据常驻 UB/TBuf,在循环外一次初始化、循环内片上读写,**消除重复搬运**。同时,通过地址分配优化和计算逻辑调整**规避 UB bank 冲突**,避免 Vector 计算性能退化。
|
|
6
|
+
|
|
7
|
+
| 指标 | naive | optimized | 收益 |
|
|
8
|
+
|------|-------|-----------|------|
|
|
9
|
+
| 参数搬运次数 | 每 tile/loop 1 次 | Process 生命周期仅 1 次 | 搬运次数降低 N 倍(N=tile/loop 数) |
|
|
10
|
+
| 临时 buffer 总量 | `sum(stage_buffers)` | `max(concurrent_buffers)` | UB 占用降低 30-60% |
|
|
11
|
+
| Vector 单 Repeat 周期 | 多拍(bank 冲突,因芯片而异) | 1-2 拍(无冲突) | 计算速度提升数倍 |
|
|
12
|
+
| 代码复杂度 | 低 | 中(需生命周期管理) | 常驻 buffer + 分区 offset |
|
|
13
|
+
|
|
14
|
+
## 2. 架构概览
|
|
15
|
+
|
|
16
|
+
### 2.1 常驻复用 vs 分时复用
|
|
17
|
+
|
|
18
|
+
| 策略类型 | 数据生命周期 | 复用方式 | 典型场景 |
|
|
19
|
+
|---------|------------|---------|---------|
|
|
20
|
+
| **常驻复用** | 跨整个 Process 或多层循环 | 循环外搬入,循环内只读/读写 | weight、gamma、scale 小参数 |
|
|
21
|
+
| **分时复用** | 单次 Process 内多阶段串行 | 前一阶段结束,后一阶段覆盖 | RmsNorm→RoPE、SoftMax→后处理 |
|
|
22
|
+
|
|
23
|
+
### 2.2 UB Bank 结构与冲突原理
|
|
24
|
+
|
|
25
|
+
以 Ascend 910B 为例:UB (192KB) = 48 bank × 4KB = 16 bank group × 3 bank/group。不同芯片的 bank 数可能不同,需查阅对应硬件手册。
|
|
26
|
+
|
|
27
|
+
#### 2.2.1 Bank 冲突的硬件原理
|
|
28
|
+
|
|
29
|
+
Vector 计算单元在一个 Repeat 周期内会并行发出多个 DataBlock 的读写请求。理想情况下,这些请求被分发到不同的 bank/bank group 上并发执行,1 个 Repeat 周期完成全部访问。当多个请求因地址映射关系落到**同一 bank 或同一 bank group** 时,硬件仲裁逻辑会将其串行化,导致单 Repeat 从 1-2 拍退化到多拍(具体拍数因芯片和冲突 DataBlock 数量而异)。
|
|
30
|
+
|
|
31
|
+
> **注意**:不同芯片的 bank 结构和冲突条件不同,必须查阅对应硬件文档。下文以 NPU 架构版本 220x(Atlas A2/A3 系列)和 Atlas 350 为例说明。
|
|
32
|
+
|
|
33
|
+
#### 2.2.2 不同芯片的 UB Bank 结构
|
|
34
|
+
|
|
35
|
+
| 芯片 | UB 大小 | Bank 数 | Bank Group 数 | 每组 Bank 数 | 每 Bank 大小 | 每行大小 |
|
|
36
|
+
|------|---------|---------|---------------|-------------|-------------|---------|
|
|
37
|
+
| DAV_2201 | 192 KB | 48 | 16 | 3 | 4 KB (128 行) | 32 B |
|
|
38
|
+
| DAV_3510 | 256 KB | 16 | 8 | 2 | 16 KB (512 行) | 32 B |
|
|
39
|
+
|
|
40
|
+
**Bank Group 组成方式**:group 内各 bank 的编号满足 `bank_id % num_groups` 相同。以 220x 为例:
|
|
41
|
+
- group 0: bank 0, 16, 32
|
|
42
|
+
- group 1: bank 1, 17, 33
|
|
43
|
+
- ...
|
|
44
|
+
- group 15: bank 15, 31, 47
|
|
45
|
+
|
|
46
|
+
**冲突条件差异**(关键区别):
|
|
47
|
+
|
|
48
|
+
| 冲突类型 | NPU 220x | Atlas 350 |
|
|
49
|
+
|---------|----------|-----------|
|
|
50
|
+
| 读写冲突 | 同一 **bank** | 同一 **bank** |
|
|
51
|
+
| 写写冲突 | 同一 **bank group** | 同一 **bank group** |
|
|
52
|
+
| 读读冲突 | 同一 **bank group** | 同一 **bank**(两个读操作),或**两个以上**读操作同一 bank group |
|
|
53
|
+
|
|
54
|
+
> Atlas 350 的 bank group 上有两组读口和写口,因此**两次读操作访问同一 bank group 的不同 bank 时不会冲突**,但 220x 上同一 bank group 内的任意多次并发访问都会冲突。
|
|
55
|
+
|
|
56
|
+
#### 2.2.3 DataBlock 与 Bank 映射
|
|
57
|
+
|
|
58
|
+
Vector 指令处理的数据被切分为固定大小的 **DataBlock**,每行长度为 32B。一个 Vector 指令在一个 Repeat 内最多处理 **8 个 DataBlock**(block0~block7)。各 DataBlock 根据起始地址映射到某个 bank,进而归属于某个 bank group。
|
|
59
|
+
|
|
60
|
+
**映射的核心规律**(由官方示例推导,具体公式以芯片手册为准):
|
|
61
|
+
- 地址上相邻的 32B 行通常映射到相邻的 bank(按 bank 总数循环)。
|
|
62
|
+
- 因此,**DataBlock 之间的地址差(由 `blk_stride` 决定)直接决定了它们是否落入同一 bank group**。
|
|
63
|
+
|
|
64
|
+
以 220x 为例:
|
|
65
|
+
- `blk_stride = 16`:相邻 DataBlock 地址差 = 16 × 32B = 512B。bank 编号差 = 16(假设按 32B 行轮询),16 % 16 = 0,即**所有 DataBlock 落入同一 bank group**,8 拍完成一个 Repeat。
|
|
66
|
+
- `blk_stride = 8`:bank 编号差 = 8,block0 和 block2 的 bank 差 = 16,16 % 16 = 0,落入同一 group,4 拍完成一个 Repeat。
|
|
67
|
+
|
|
68
|
+
#### 2.2.4 冲突判断方法
|
|
69
|
+
|
|
70
|
+
**步骤 1:识别并发访问的数据源**
|
|
71
|
+
|
|
72
|
+
一个 Vector 指令(如 `Add(dst, src0, src1)`)在同一 Repeat 内会同时读取 `src0`、`src1` 并写入 `dst`。这三个操作数的 DataBlock 是并发访问的候选冲突源。
|
|
73
|
+
|
|
74
|
+
**步骤 2:分析地址间隔规律**
|
|
75
|
+
|
|
76
|
+
- **多操作数之间**:若 `dst`、`src0`、`src1` 的 buffer 起始地址在 UB 内连续分配,且间隔恰好是 bank size 的整数倍,则它们的对应 DataBlock 会周期性地映射到同一 bank/bank group。
|
|
77
|
+
- **单操作数内部**:若 `blk_stride` 使 DataBlock 之间的 bank 差等于 group 数(220x: 16,350: 8)或其倍数,则多个 DataBlock 会回卷到同一 bank group。
|
|
78
|
+
|
|
79
|
+
**步骤 3:通过官方工具或实验确认**
|
|
80
|
+
|
|
81
|
+
- **msProf 资源冲突占比分析**:官方提供的 msProf 工具可以采集资源冲突占比数据,直接定位 bank 冲突。具体使用方法参考《算子开发工具》文档。
|
|
82
|
+
- **Profiling 验证**:如果 Vector 计算耗时远高于理论值,且 MTE2 不是瓶颈,则极可能存在 bank 冲突。
|
|
83
|
+
- **实验验证**:对疑似冲突的代码添加 256B padding 或调整 `blk_stride` 后重新 profiling,观察周期数是否下降。
|
|
84
|
+
|
|
85
|
+
#### 2.2.5 常见冲突场景与规避原理
|
|
86
|
+
|
|
87
|
+
以下场景来自官方文档的典型示例。
|
|
88
|
+
|
|
89
|
+
**场景 1:读写冲突 —— src 与 dst 落在同一 bank**
|
|
90
|
+
|
|
91
|
+
```cpp
|
|
92
|
+
// 假设 x 起始地址在 bank0,y 起始地址也在 bank0(地址差为 bank size 的整数倍)
|
|
93
|
+
Add(dst, src, src2, ...); // src 读 bank0,dst 写 bank0,读写冲突
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**规避**:确保 src 和 dst 的起始地址不在同一 bank。对于 220x,通常给中间 buffer 增加 padding 使地址错开至少一个 bank。
|
|
97
|
+
|
|
98
|
+
**场景 2:写写冲突 —— dst 的多个 DataBlock 落入同一 bank group**
|
|
99
|
+
|
|
100
|
+
```cpp
|
|
101
|
+
// 220x 上 blk_stride=16:8 个 DataBlock 全部落入同一 bank group,8 拍完成
|
|
102
|
+
Adds(dst, src, scalar, MASK, 1, {1, 16, 1, 16});
|
|
103
|
+
|
|
104
|
+
// 220x 上 blk_stride=8:block0 和 block2 落入同一 bank group,4 拍完成
|
|
105
|
+
Adds(dst, src, scalar, MASK, 1, {1, 8, 1, 8});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**规避**:改为 `blk_stride = 1`(连续读),通过 `dst_gap/src_gap` 控制跨 Repeat 的地址增量。
|
|
109
|
+
|
|
110
|
+
**场景 3:读读冲突 —— 双 src 落入同一 bank group(220x),或同一 bank(350)**
|
|
111
|
+
|
|
112
|
+
```cpp
|
|
113
|
+
// 220x:x 和 y 起始地址差为 bank size 整数倍,DataBlock 0 同时读同一 bank group
|
|
114
|
+
Add(zLocal, xLocal, yLocal, ...);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**规避**:在 `xBuf` 后增加 256B padding,打破地址周期性,使 `x` 和 `y` 的 DataBlock 分散到不同 bank group。对于 350,还需确保两个 src 不在同一 bank。
|
|
118
|
+
|
|
119
|
+
**场景 4:连续分配多个 buffer,地址周期性重叠**
|
|
120
|
+
|
|
121
|
+
```cpp
|
|
122
|
+
// 220x 原始实现:x/y/z 连续分配,起始地址差为 0x4000(16KB)
|
|
123
|
+
// x: bank0, y: bank0(地址差 16KB = 4×bank size),z: bank0
|
|
124
|
+
// 一个 Repeat 内 x 和 y 同时读同一 group,x/y 和 z 同时读写同一 bank
|
|
125
|
+
pipe.InitBuffer(inQueueX, 1, 4096 * sizeof(float));
|
|
126
|
+
pipe.InitBuffer(inQueueY, 1, 4096 * sizeof(float));
|
|
127
|
+
pipe.InitBuffer(outQueueZ, 1, 4096 * sizeof(float));
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**规避(220x 官方推荐)**:
|
|
131
|
+
```cpp
|
|
132
|
+
// x 多申请 256B,避免一个 Repeat 内 x 和 y 同时读同一 bank group
|
|
133
|
+
// y 多申请空间,确保 z 不会和 x/y 落入同一个 bank
|
|
134
|
+
pipe.InitBuffer(inQueueX, 1, 4096 * sizeof(float) + 256);
|
|
135
|
+
pipe.InitBuffer(inQueueY, 1, 64 * 1024 - (4096 * sizeof(float) + 256));
|
|
136
|
+
pipe.InitBuffer(outQueueZ, 1, 4096 * sizeof(float));
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 2.3 数据流 — 常驻复用
|
|
140
|
+
|
|
141
|
+
常驻复用:小尺寸参数(weight、gamma、scale)在 Process 入口通过 MTE2 一次搬入 UB/TBuf,后续整个生命周期内循环只读,全程不再访问 GM。
|
|
142
|
+
|
|
143
|
+
### 2.4 数据流 — 分时复用(Zone Reuse)
|
|
144
|
+
|
|
145
|
+
分时复用:单块 TBuf 按阶段划分为多个 zone。前一阶段(如 RmsNorm)使用 zone0/1/2 计算完成后数据失效,后一阶段(如 RoPE)直接复用同一物理空间的 zone0/1/2,无需额外分配 buffer。UB 临时 buffer 总量从 `sum(stage_buffers)` 降为 `max(concurrent_buffers)`。
|
|
146
|
+
|
|
147
|
+
## 3. 关键参数配置
|
|
148
|
+
|
|
149
|
+
```cpp
|
|
150
|
+
// 常驻复用参数
|
|
151
|
+
struct ResidentBufferConfig {
|
|
152
|
+
uint32_t paramSize; // 常驻参数元素数(如 hidden_size)
|
|
153
|
+
uint32_t computePrecision; // 计算精度:FP16=2, FP32=4 bytes
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// 分时复用参数
|
|
157
|
+
struct ZoneReuseConfig {
|
|
158
|
+
uint32_t zone0Size; // 阶段 1 临时 buffer 大小
|
|
159
|
+
uint32_t zone1Size; // 阶段 2 临时 buffer 大小
|
|
160
|
+
uint32_t zone2Size; // 阶段 3 临时 buffer 大小
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
// Bank 冲突规避参数
|
|
164
|
+
struct BankConflictConfig {
|
|
165
|
+
uint32_t dataSize; // 数据大小(字节)
|
|
166
|
+
uint32_t paddingSize; // Padding 大小(通常为 256B)
|
|
167
|
+
};
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 3.1 参数选取原则
|
|
171
|
+
|
|
172
|
+
| 参数 | 典型值 | 说明 |
|
|
173
|
+
|------|--------|------|
|
|
174
|
+
| `paramSize` | 64 / 128 / 256 / 512 | head_dim 或 hidden_size |
|
|
175
|
+
| `paddingSize` | 256 | 使相邻 buffer 错开 bank group |
|
|
176
|
+
| `zoneOffset` | `rows * headSize` | 按数据量对齐划分 zone |
|
|
177
|
+
|
|
178
|
+
## 4. 核心计算循环
|
|
179
|
+
|
|
180
|
+
### 4.1 naive 版本(优化前)
|
|
181
|
+
|
|
182
|
+
**参数每 tile 重复搬运:**
|
|
183
|
+
```cpp
|
|
184
|
+
for (int64_t bIdx = 0; bIdx < baseB; ++bIdx) {
|
|
185
|
+
for (int64_t sIdx = 0; sIdx < baseS; ++sIdx) {
|
|
186
|
+
// 每次 loop 都从 GM 搬运 weight
|
|
187
|
+
LocalTensor<half> weightLocal = inQueueW.AllocTensor<half>();
|
|
188
|
+
DataCopyPad(weightLocal, weightGm, copyParams);
|
|
189
|
+
Cast(weightFp32, weightLocal, RoundMode::CAST_NONE, alignBaseH);
|
|
190
|
+
Compute(xLocalFp32, weightFp32, ...);
|
|
191
|
+
inQueueW.FreeTensor(weightLocal);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**分时复用反例 — 独立分配:**
|
|
197
|
+
```cpp
|
|
198
|
+
// 各阶段独立 buffer,总量 = sum
|
|
199
|
+
pipe.InitBuffer(rmsBuf0, 1, zoneSize);
|
|
200
|
+
pipe.InitBuffer(rmsBuf1, 1, zoneSize);
|
|
201
|
+
pipe.InitBuffer(rmsBuf2, 1, zoneSize);
|
|
202
|
+
pipe.InitBuffer(ropeCosBuf, 1, zoneSize);
|
|
203
|
+
pipe.InitBuffer(ropeSinBuf, 1, zoneSize);
|
|
204
|
+
// 总量 = 5 × zoneSize
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Bank 冲突反例 — 连续分配(220x):**
|
|
208
|
+
```cpp
|
|
209
|
+
// 问题:x/y/z 连续分配,地址差为 dataSize。
|
|
210
|
+
// 若 dataSize 是 bank size(4KB)整数倍,x/y/z 的对应 DataBlock 周期性地映射到
|
|
211
|
+
// 同一 bank group。Add 指令同时读 x、读 y、写 z,产生严重的读写/读读冲突。
|
|
212
|
+
pipe.InitBuffer(inQueueX, 1, 4096 * sizeof(float)); // addr = 0x0
|
|
213
|
+
pipe.InitBuffer(inQueueY, 1, 4096 * sizeof(float)); // addr = 0x4000
|
|
214
|
+
pipe.InitBuffer(outQueueZ, 1, 4096 * sizeof(float)); // addr = 0x8000
|
|
215
|
+
|
|
216
|
+
// 问题:220x 上 blk_stride=16,8 个 DataBlock 全部落入同一 bank group(bank 差=16,
|
|
217
|
+
// 16 % 16 = 0),8 拍完成一个 Repeat。
|
|
218
|
+
Adds(dst, src, scalar, MASK, 1, {1, 16, 1, 16}); // 全冲突!
|
|
219
|
+
|
|
220
|
+
// 问题:220x 上 blk_stride=8,block0 和 block2 落入同一 group(bank 差=16),4 拍。
|
|
221
|
+
Adds(dst, src, scalar, MASK, 1, {1, 8, 1, 8}); // 部分冲突!
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 4.2 optimized 版本(优化后)
|
|
225
|
+
|
|
226
|
+
**常驻复用 — Process 入口搬入,循环内只读:**
|
|
227
|
+
```cpp
|
|
228
|
+
__aicore__ inline void Process() {
|
|
229
|
+
// 阶段 0:一次搬入 + Cast,常驻 UB
|
|
230
|
+
LocalTensor<float> weightFp32 = this->inQueueW.AllocTensor<float>();
|
|
231
|
+
DataCopyPad(weightLocal, weightGm, copyParams, padParams);
|
|
232
|
+
Cast(weightFp32, weightLocal, RoundMode::CAST_NONE, alignBaseH);
|
|
233
|
+
|
|
234
|
+
// 阶段 1~N:循环内只读常驻 weightFp32
|
|
235
|
+
for (int64_t bIdx = 0; bIdx < baseB; ++bIdx) {
|
|
236
|
+
for (int64_t sIdx = 0; sIdx < baseS; ++sIdx) {
|
|
237
|
+
Compute(xLocalFp32, weightFp32, y0Fp32, y1Fp32, y2Fp32);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
this->inQueueW.FreeTensor(weightFp32);
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**分时复用 — Zone 划分:**
|
|
245
|
+
```cpp
|
|
246
|
+
// 单块 TBuf 划分为多 zone
|
|
247
|
+
int64_t xLocalFp32Offset = 0;
|
|
248
|
+
int64_t xSquareLocalOffset = rows * headSize;
|
|
249
|
+
int64_t xSumLocalOffset = rows * headSize * 2;
|
|
250
|
+
|
|
251
|
+
LocalTensor<float> xLocalFp32 = wsLocal[xLocalFp32Offset];
|
|
252
|
+
LocalTensor<float> xSquareLocal = wsLocal[xSquareLocalOffset];
|
|
253
|
+
LocalTensor<float> xSumLocal = wsLocal[xSumLocalOffset];
|
|
254
|
+
|
|
255
|
+
// 阶段 1:使用 zone0/1/2
|
|
256
|
+
RmsNorm(xLocalFp32, xSquareLocal, xSumLocal, ...);
|
|
257
|
+
|
|
258
|
+
// 阶段 2:复用 zone0/1/2 做 RoPE
|
|
259
|
+
LocalTensor<float> ropeCosLocal = wsLocal[xLocalFp32Offset];
|
|
260
|
+
LocalTensor<float> ropeSinLocal = wsLocal[xSquareLocalOffset];
|
|
261
|
+
RoPE(ropeCosLocal, ropeSinLocal, ...);
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Bank 冲突规避 — Padding 错开(220x 官方推荐):**
|
|
265
|
+
```cpp
|
|
266
|
+
// 原理:x 多申请 256B,使 x 和 y 的 DataBlock 错开 bank group;
|
|
267
|
+
// y 再补齐到 64KB(16 个 bank)边界,确保 z 不与 x/y 同 bank。
|
|
268
|
+
pipe.InitBuffer(inQueueX, 1, 4096 * sizeof(float) + 256);
|
|
269
|
+
pipe.InitBuffer(inQueueY, 1, 64 * 1024 - (4096 * sizeof(float) + 256));
|
|
270
|
+
pipe.InitBuffer(outQueueZ, 1, 4096 * sizeof(float));
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Bank 冲突规避 — 连续读跳写:**
|
|
274
|
+
```cpp
|
|
275
|
+
// 原理:blk_stride=1 使同一操作数内的 8 个 DataBlock 顺序映射到相邻 bank,
|
|
276
|
+
// 避免落入同一 bank group。dst_gap/src_gap 控制跨 Repeat 的地址增量。
|
|
277
|
+
// 220x 上 mask=128(8 DataBlock)时,连续读无自冲突;跳写使 dst 分散。
|
|
278
|
+
UnaryRepeatParams params;
|
|
279
|
+
params.dstBlkStride = 8;
|
|
280
|
+
params.srcBlkStride = 1;
|
|
281
|
+
Adds(dstLocal, srcLocal, 0, 128, 2, params); // 连续读,跳写
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## 5. 从 naive 到 ub_resident 的关键修改点
|
|
285
|
+
|
|
286
|
+
| 修改项 | naive(优化前) | ub_resident(优化后) |
|
|
287
|
+
|--------|---------------|---------------------|
|
|
288
|
+
| 参数搬运 | 每 tile/loop 重复 MTE2 | Process 入口一次搬入,常驻 UB |
|
|
289
|
+
| 临时 buffer 总量 | `sum(stage_buffers)`(独立分配) | `max(concurrent_buffers)`(分区复用) |
|
|
290
|
+
| UB 地址分配 | 连续分配,无 padding | 256B padding 错开 bank group |
|
|
291
|
+
| Vector stride | 跳读连续写(blk_stride=16) | 连续读跳写(blk_stride=1) |
|
|
292
|
+
| 数据生命周期 | 每阶段独立 buffer | 串行阶段复用同一物理空间 |
|
|
293
|
+
|
|
294
|
+
## 6. 注意事项 / 约束
|
|
295
|
+
|
|
296
|
+
1. **常驻 buffer 压缩主数据 tile 空间**:常驻 buffer 会长期占用 UB,需确保剩余空间仍可容纳主数据 tile、双缓冲和临时计算空间。
|
|
297
|
+
|
|
298
|
+
2. **TBuf/VECCALC 不受队列同步保护**:需要手动使用 PipeBarrier 或明确阶段边界保证一致性。
|
|
299
|
+
|
|
300
|
+
3. **分时复用需严格串行边界**:各阶段必须具备严格的串行边界,错误判断生命周期会导致后续阶段覆盖仍在使用的数据。
|
|
301
|
+
|
|
302
|
+
4. **Bank 冲突规避需区分芯片型号**:
|
|
303
|
+
- NPU 220x(A2/A3):192KB = 48 bank × 4KB = 16 group × 3 bank,读写/写写/读读冲突条件见 2.2.2 节。
|
|
304
|
+
- Atlas 350:256KB = 16 bank × 16KB = 8 group × 2 bank,两次读操作同一 group 不同 bank 不冲突。
|
|
305
|
+
- 具体规格和推荐配置务必查阅对应版本的《Ascend C 算子开发最佳实践》。
|
|
306
|
+
|
|
307
|
+
5. **Padding 增加 UB 占用**:256B padding 虽然小,但多个 buffer 累积后需计入总 UB 预算。
|
|
308
|
+
|
|
309
|
+
6. **后续阶段重叠流水时需重算 zone**:若后续优化把串行阶段改造成重叠流水,原有 zone reuse 方案可能失效。
|
|
310
|
+
|
|
311
|
+
## 7. 实施常见问题与解决方案
|
|
312
|
+
|
|
313
|
+
| 问题 | 根因 | 解决方案 |
|
|
314
|
+
|------|------|---------|
|
|
315
|
+
| 常驻 buffer 后 UB 溢出 | 常驻 buffer + 主 tile + 双缓冲超预算 | 减小 tile_size 或常驻 buffer 大小;精确计算 UB 预算 |
|
|
316
|
+
| 分时复用数据被覆盖 | 阶段边界判断错误 | 确保前一阶段完全结束后再覆盖;使用 PipeBarrier 明确边界 |
|
|
317
|
+
| Vector 性能仍低 | bank 冲突未解决 | 使用 msProf 采集资源冲突占比确认;按 2.2.5 节场景逐一排查(读写/写写/读读冲突);确认 padding 后各 buffer 的 DataBlock 不在同一 bank/bank group;检查 `blk_stride` 是否导致 8 个 DataBlock 回卷到同一 group |
|
|
318
|
+
| 累加器精度不足 | FP16 累加溢出 | 常驻累加器使用 FP32 精度 |
|
|
319
|
+
|
|
320
|
+
## 8. 选型决策与自检清单
|
|
321
|
+
|
|
322
|
+
### 8.1 选型决策
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
if (算子包含小尺寸参数 weight/gamma/scale 且跨 loop 不变):
|
|
326
|
+
→ 启用常驻复用:Process 入口搬入,循环内只读
|
|
327
|
+
elif (算子包含多阶段串行计算,临时 buffer 生命周期不重叠):
|
|
328
|
+
→ 启用分时复用:单块 TBuf 分区,阶段间覆盖
|
|
329
|
+
elif (Profiling 显示 Vector 计算时间异常高):
|
|
330
|
+
→ 启用 bank 冲突规避:padding 错开 或 连续读跳写
|
|
331
|
+
else:
|
|
332
|
+
→ 标准分配即可
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### 8.2 自检清单
|
|
336
|
+
|
|
337
|
+
- [ ] 常驻 buffer 大小 + 主 tile + 双缓冲 ≤ UB 容量
|
|
338
|
+
- [ ] 分时复用各阶段有严格的串行边界(PipeBarrier)
|
|
339
|
+
- [ ] Bank 冲突规避:相邻 buffer 间隔 ≥ 256B 或 不在同一 bank group
|
|
340
|
+
- [ ] Vector API 的 blk_stride 避免导致多 DataBlock 落入同一 bank group
|
|
341
|
+
- [ ] 累加器/递推状态使用 FP32 精度
|
|
342
|
+
- [ ] 验证通过:与 naive 实现对比,结果一致
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Transpose 性能调优参考(策略文档 + 可复用 kernel 模板)
|
|
2
|
+
|
|
3
|
+
本目录为 Transpose 算子(AscendC / arch35 / dav-3510)提供**按 tiling 策略组织的调优参考**:开发者或 agent 根据实际入参选定策略后,可直接引用对应 kernel 模板,或仅做微调即可完成调优。每份策略文档均包含两部分:**一、适用场景**(为何需要、解决什么问题、为何提速)与 **二、kernel 执行流程与关键实现**(关键函数流程 + 所用关键技术)。
|
|
4
|
+
|
|
5
|
+
## 目录结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
conversion/
|
|
9
|
+
├── guide.md # 本文:调优工作流入口 + 策略总览 + 关键技术对比
|
|
10
|
+
├── transpose_tiling_data.md # TilingData 结构与各参数说明
|
|
11
|
+
├── transpose_<策略>.md # 每种策略一份原理与实现文档
|
|
12
|
+
├── transpose_fusion_design.md # 融合设计文档
|
|
13
|
+
└── templates/ # 可复用 kernel 模板代码
|
|
14
|
+
├── transpose_tiling_data.template # 所有 TilingData POD 结构定义
|
|
15
|
+
└── dav3510/ # 各策略 kernel 模板实现(.template 文件)
|
|
16
|
+
├── transpose_base.template
|
|
17
|
+
├── transpose_tensor_move.template
|
|
18
|
+
├── transpose_small_shape.template
|
|
19
|
+
├── transpose_cut_one_axis.template
|
|
20
|
+
├── transpose_cut_two_axis.template
|
|
21
|
+
├── transpose_n_last.template
|
|
22
|
+
├── transpose_big_dim.template
|
|
23
|
+
├── transpose_with_gather.template
|
|
24
|
+
├── transpose_transdata_5hd.template
|
|
25
|
+
└── transpose_transdata_5hd_021axis.template
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 调优工作流
|
|
29
|
+
|
|
30
|
+
1. **判定入参**:确定 dtype(元素字节宽度)、输入 shape、perm(转置轴序)。
|
|
31
|
+
2. **选策略**:对照下方「策略速查」表,按命中条件确定 tiling 策略。
|
|
32
|
+
3. **读原理**:阅读该策略的 `transpose_<策略>.md`,理解适用场景与 kernel 执行流程。
|
|
33
|
+
4. **引用代码**:从 [`templates/dav3510/`](templates/dav3510/) 取对应策略的 `.template` 模板文件,按实际算子微调后接入。
|
|
34
|
+
5. **填 TilingData**:参照 [`transpose_tiling_data.md`](transpose_tiling_data.md) 填充对应结构;结构体定义见 [`templates/transpose_tiling_data.template`](templates/transpose_tiling_data.template)。
|
|
35
|
+
6. **SIMT 策略专项检查**(仅 SMALL_SHAPE 策略):若使用 SMALL_SHAPE 策略,务必检查 memory coalescing 和向量化读写。原始模板逐元素读写带宽利用率仅 6.25%,当 perm 末轴不转置时(`perm[permSize-1] == permSize-1`)应实现向量化读写(每线程处理 C 个连续元素)。详见 [`transpose_small_shape.md` §6](transpose_small_shape.md#6-memory-coalescing-与向量化读写)。
|
|
36
|
+
7. **N_LAST 策略维度合并检查**(仅 N_LAST 策略):若使用 N_LAST 策略,检查 CopyOut 的循环顺序是否与 output 连续性匹配。当 perm 导致相邻 input 轴在 output 中不连续时,CopyOut 退化为多次 strided 小搬运。可通过检查 `inv_perm` 连续性合并 output 中相邻维度组,将 strided 多循环写出降为连续单次写出。详见 [`transpose_n_last.md` §3](transpose_n_last.md#三copyout-维度合并优化)。
|
|
37
|
+
|
|
38
|
+
## 策略速查
|
|
39
|
+
|
|
40
|
+
各策略对应的 kernel 模板文件、参考文档与 TilingData 结构如下:
|
|
41
|
+
|
|
42
|
+
| 策略 | 命中条件(简) | kernel 模板文件 | 参考文档 | TilingData 结构 |
|
|
43
|
+
|------|----------------|-----------------|----------|-----------------|
|
|
44
|
+
| TENSOR_MOVE | 规约后 `dim==1`,退化为纯拷贝 | `templates/dav3510/transpose_tensor_move.template` | [transpose_tensor_move.md](transpose_tensor_move.md) | `TransposeOpTilingData` |
|
|
45
|
+
| SMALL_SHAPE | 总字节数 < 阈值(小 shape),SIMT 逐元素 | `templates/dav3510/transpose_small_shape.template` | [transpose_small_shape.md](transpose_small_shape.md) | `TransposeOpTilingData` |
|
|
46
|
+
| CUT_ONCE | 单轴切分即可满足输入/输出 UB 约束 | `templates/dav3510/transpose_cut_one_axis.template` | [transpose_cut_one_axis.md](transpose_cut_one_axis.md) | `TransposeOpTilingData` |
|
|
47
|
+
| CUT_TWICE | 需在输入、输出两方向各切一轴 | `templates/dav3510/transpose_cut_two_axis.template` | [transpose_cut_two_axis.md](transpose_cut_two_axis.md) | `TransposeOpTilingData` |
|
|
48
|
+
| N_LAST_TRANSPOSE | 末轴不参与转置且末轴元素数 ≥32 | `templates/dav3510/transpose_n_last.template` | [transpose_n_last.md](transpose_n_last.md) | `TransposeOpTilingData` |
|
|
49
|
+
| BIG_DIM | 规约后维度 > NDDMA 上限(5) | `templates/dav3510/transpose_big_dim.template` | [transpose_big_dim.md](transpose_big_dim.md) | `TransposeOpTilingData` |
|
|
50
|
+
| GATHER_TRANSPOSE | 末轴参与转置,UB 内 gather 重排(需 dav-3510 + `TRANSPOSE_ENABLE_GATHER`) | `templates/dav3510/transpose_with_gather.template` | [transpose_gather.md](transpose_gather.md) | `GatherTransposeTilingData` |
|
|
51
|
+
| VCONV_TRANSPOSE (5HD) | 2D 末轴交换、16bit、R>5 | `templates/dav3510/transpose_transdata_5hd.template` | [transpose_vconv_5hd.md](transpose_vconv_5hd.md) | `TransposeVCONVTilingData` |
|
|
52
|
+
| VCONV_021_TRANSPOSE | perm=[0,2,1] 保 batch 转置,支持 8/16/32bit | `templates/dav3510/transpose_transdata_5hd_021axis.template` | [transpose_vconv_021.md](transpose_vconv_021.md) | `Transpose021VCONVTilingData` |
|
|
53
|
+
|
|
54
|
+
> NDDMA 家族(TENSOR_MOVE / SMALL_SHAPE / CUT_ONCE / CUT_TWICE / N_LAST / BIG_DIM)共用同一个 `TransposeOpTilingData`;加速策略(GATHER / VCONV_5HD / VCONV_021)各有独立结构。所有结构均 `#pragma pack(push, 8)` 8 字节对齐,定义见 [`templates/transpose_tiling_data.template`](templates/transpose_tiling_data.template)。
|
|
55
|
+
|
|
56
|
+
## 关键技术一览(便于横向对比)
|
|
57
|
+
|
|
58
|
+
- **NDDMA 多维 DMA**:CUT_ONCE / CUT_TWICE / BIG_DIM / N_LAST —— 用带 stride 的多维描述符在搬运中完成 perm 取址。
|
|
59
|
+
- **VCONV / TransDataTo5HD 向量转置**:VCONV_5HD / VCONV_021 —— 片上 16×16 块转置。
|
|
60
|
+
- **MicroAPI / regbase gather**:GATHER —— `DataCopyGatherImpl` 按预生成 index 在 UB 内重排(仅 dav-3510)。
|
|
61
|
+
- **SIMT 逐元素**:SMALL_SHAPE —— `asc_vf_call` + 魔数除法反算索引,省搬运流水固定开销。**注意**:原始模板逐元素读写带宽利用率仅 6.25%,当 perm 末轴不转置时应实现向量化读写(每线程处理 C 个连续元素),详见 [transpose_small_shape.md §6](transpose_small_shape.md#6-memory-coalescing-与向量化读写)。
|
|
62
|
+
- **double buffer**:TENSOR_MOVE / N_LAST / VCONV 系列 / GATHER 用到;CUT_ONCE / CUT_TWICE / BIG_DIM 为单缓冲(见各文档说明)。
|
|
63
|
+
- **CopyOut 维度合并**:N_LAST —— 当 perm 导致循环顺序与 output 连续性不匹配时,可通过检查 `inv_perm` 连续性合并 output 中相邻的维度组,将 strided 多循环写出降为连续单次写出。详见 [transpose_n_last.md §3](transpose_n_last.md#三copyout-维度合并优化)。
|
|
64
|
+
|
|
65
|
+
## 编译注意
|
|
66
|
+
|
|
67
|
+
- GATHER 策略受编译宏 `TRANSPOSE_ENABLE_GATHER`(默认 0)保护,需 MicroAPI/Reg 寄存器模型,仅 `__NPU_ARCH__==3510` 可用。关闭时 host 不产出该策略,相应 shape 由 NDDMA 家族覆盖。
|
|
68
|
+
- kernel 模板依赖 CANN toolkit 头(`kernel_operator.h`、`op_kernel/platform_util.h`、`op_kernel/math_util.h`、`simt_api/asc_simt.h`、`reg_compute/*`),详见 [`transpose_tiling_data.md`](transpose_tiling_data.md#外部依赖cann-toolkit-头文件)。
|
|
69
|
+
- VCONV 5HD 策略仅支持 16bit;021 VCONV 策略支持 8/16/32bit。
|
|
@@ -0,0 +1,81 @@
|
|
|
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 transpose_base.h
|
|
13
|
+
* \brief transpose_base
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
#ifndef TRANSPOSE_BASE_H
|
|
17
|
+
#define TRANSPOSE_BASE_H
|
|
18
|
+
|
|
19
|
+
#include "kernel_operator.h"
|
|
20
|
+
#include "op_kernel/platform_util.h"
|
|
21
|
+
#include "op_kernel/math_util.h"
|
|
22
|
+
#include "../transpose_tiling_data.h"
|
|
23
|
+
|
|
24
|
+
namespace Transpose {
|
|
25
|
+
using namespace AscendC;
|
|
26
|
+
|
|
27
|
+
constexpr int64_t TRANSPOSE_MAX_AXIS_NUM = 8;
|
|
28
|
+
constexpr int64_t NDDMA_MAX_DIM_NUM = 5;
|
|
29
|
+
constexpr int64_t BLOCK_SIZE_BYTE = 32;
|
|
30
|
+
constexpr int64_t DIM_TWO = 2;
|
|
31
|
+
constexpr int64_t DIM_THREE = 3;
|
|
32
|
+
constexpr int64_t DIM_FOUR = 4;
|
|
33
|
+
constexpr int64_t DIM_FIVE = 5;
|
|
34
|
+
constexpr int64_t DIM_SIX = 6;
|
|
35
|
+
constexpr int64_t DIM_SEVEN = 7;
|
|
36
|
+
constexpr int64_t DIM_EIGHT = 8;
|
|
37
|
+
constexpr MultiCopyConfig config = {false, 0, 0, false};
|
|
38
|
+
constexpr int64_t TWO = 2;
|
|
39
|
+
constexpr int64_t BUFFER_NUM = 2;
|
|
40
|
+
|
|
41
|
+
template <typename T>
|
|
42
|
+
class TransposeBase {
|
|
43
|
+
public:
|
|
44
|
+
__aicore__ inline TransposeBase(){};
|
|
45
|
+
|
|
46
|
+
protected:
|
|
47
|
+
template <typename T1>
|
|
48
|
+
__aicore__ inline void reverseArray(T1 array[])
|
|
49
|
+
{
|
|
50
|
+
for (uint8_t i = 0; i < NDDMA_MAX_DIM_NUM / 2; i++) {
|
|
51
|
+
uint32_t temp = array[i];
|
|
52
|
+
array[i] = array[NDDMA_MAX_DIM_NUM - 1 - i];
|
|
53
|
+
array[NDDMA_MAX_DIM_NUM - 1 - i] = temp;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// Compute this core's processing range from multicore tiling params.
|
|
59
|
+
// Returns false when this core has no work (blockIdx >= realCoreNum).
|
|
60
|
+
__aicore__ inline bool ParseMultiCoreRange(int64_t blockIdx, int64_t realCoreNum, int64_t blkFactor,
|
|
61
|
+
int64_t blkTailFactor, int64_t& blkProcessNum, int64_t& blkProcessIdxStart,
|
|
62
|
+
int64_t& blkProcessIdxEnd)
|
|
63
|
+
{
|
|
64
|
+
if (blockIdx >= realCoreNum) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
blkProcessNum = blkFactor;
|
|
68
|
+
blkProcessIdxStart = blockIdx * blkFactor;
|
|
69
|
+
if (blockIdx < blkTailFactor) {
|
|
70
|
+
blkProcessNum += 1;
|
|
71
|
+
blkProcessIdxStart += blockIdx;
|
|
72
|
+
} else {
|
|
73
|
+
blkProcessIdxStart += blkTailFactor;
|
|
74
|
+
}
|
|
75
|
+
blkProcessIdxEnd = blkProcessIdxStart + blkProcessNum;
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
} // namespace Transpose
|
|
80
|
+
|
|
81
|
+
#endif // TRANSPOSE_BASE_H
|