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
package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Transpose TilingData 结构与参数说明
|
|
2
|
+
|
|
3
|
+
本文说明 Transpose 各 tiling 策略所用的 TilingData 结构体(POD blob,host 计算后原样拷入 kernel 的 `tiling` GM 参数)。结构体定义见 [`templates/transpose_tiling_data.template`](templates/transpose_tiling_data.template)。
|
|
4
|
+
|
|
5
|
+
## 使用方式
|
|
6
|
+
|
|
7
|
+
1. 根据实际入参(dtype、shape、perm),对照 [`guide.md`](guide.md) 策略速查表选择 tiling 策略。
|
|
8
|
+
2. 直接引用 [`templates/dav3510/`](templates/dav3510/) 下对应策略的 kernel 模板文件(见下表映射),按需微调。
|
|
9
|
+
3. host 侧计算 TilingData 时,参照本文各字段含义填充。
|
|
10
|
+
|
|
11
|
+
## 策略 → kernel 模板 → TilingData 结构 映射
|
|
12
|
+
|
|
13
|
+
| 策略 | kernel 模板文件 | TilingData 结构 | 参考文档 |
|
|
14
|
+
|------|-------------|-----------------|----------|
|
|
15
|
+
| TENSOR_MOVE | `templates/dav3510/transpose_tensor_move.template` | `TransposeOpTilingData` | [transpose_tensor_move.md](transpose_tensor_move.md) |
|
|
16
|
+
| SMALL_SHAPE | `templates/dav3510/transpose_small_shape.template` | `TransposeOpTilingData` | [transpose_small_shape.md](transpose_small_shape.md) |
|
|
17
|
+
| CUT_ONCE | `templates/dav3510/transpose_cut_one_axis.template` | `TransposeOpTilingData` | [transpose_cut_one_axis.md](transpose_cut_one_axis.md) |
|
|
18
|
+
| CUT_TWICE | `templates/dav3510/transpose_cut_two_axis.template` | `TransposeOpTilingData` | [transpose_cut_two_axis.md](transpose_cut_two_axis.md) |
|
|
19
|
+
| N_LAST_TRANSPOSE | `templates/dav3510/transpose_n_last.template` | `TransposeOpTilingData` | [transpose_n_last.md](transpose_n_last.md) |
|
|
20
|
+
| BIG_DIM | `templates/dav3510/transpose_big_dim.template` | `TransposeOpTilingData` | [transpose_big_dim.md](transpose_big_dim.md) |
|
|
21
|
+
| GATHER_TRANSPOSE | `templates/dav3510/transpose_with_gather.template` | `GatherTransposeTilingData` | [transpose_gather.md](transpose_gather.md) |
|
|
22
|
+
| VCONV_TRANSPOSE (5HD) | `templates/dav3510/transpose_transdata_5hd.template` | `TransposeVCONVTilingData` | [transpose_vconv_5hd.md](transpose_vconv_5hd.md) |
|
|
23
|
+
| VCONV_021_TRANSPOSE | `templates/dav3510/transpose_transdata_5hd_021axis.template` | `Transpose021VCONVTilingData` | [transpose_vconv_021.md](transpose_vconv_021.md) |
|
|
24
|
+
|
|
25
|
+
> NDDMA 家族共用同一个 `TransposeOpTilingData`;加速策略(gather/vconv/021)各有独立结构。所有结构均 `#pragma pack(push, 8)` 8 字节对齐。
|
|
26
|
+
|
|
27
|
+
## 外部依赖(CANN toolkit 头文件)
|
|
28
|
+
|
|
29
|
+
kernel 代码依赖以下 toolkit 头(不在本目录,由 CANN 环境提供):
|
|
30
|
+
|
|
31
|
+
- `kernel_operator.h` — AscendC 核心 API(TPipe/TQue/DataCopy 等)
|
|
32
|
+
- `op_kernel/platform_util.h`、`op_kernel/math_util.h` — 平台常量与 CeilDiv/FloorDiv 等
|
|
33
|
+
- `simt_api/asc_simt.h` — SMALL_SHAPE 的 SIMT 逐元素模型
|
|
34
|
+
- `reg_compute/kernel_reg_compute_datacopy_intf.h` — GATHER 的 MicroAPI/Reg 寄存器编程与 `DataCopyGatherImpl`(仅 dav-3510)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 一、TransposeOpTilingData(NDDMA 家族)
|
|
39
|
+
|
|
40
|
+
NDDMA 家族把逻辑 shape 归约后对齐到固定 5 维(`NDDMA_MAX_DIM_NUM=5`),用带 stride 的多维 DMA 完成搬运 + 换轴。字段分四组。
|
|
41
|
+
|
|
42
|
+
### 1.1 轴与切分基础
|
|
43
|
+
|
|
44
|
+
| 字段 | 类型 | 含义 |
|
|
45
|
+
|------|------|------|
|
|
46
|
+
| `permSize` | int64 | 归约后有效维数(perm 长度)。5 维扩展偏移 = `NDDMA_MAX_DIM_NUM - permSize`。 |
|
|
47
|
+
| `inCutIndex` | int64 | 输入方向切分轴下标(归约后坐标)。 |
|
|
48
|
+
| `outCutIndex` | int64 | 输出方向切分轴下标(归约后坐标)。CUT_TWICE 判定:`outCutIndex > FindOutIndex(inCutIndex)`。 |
|
|
49
|
+
| `inUbFactor` | int64 | 输入切分轴的 UB 分块因子(每块取多少元素)。 |
|
|
50
|
+
| `outUbFactor` | int64 | 输出切分轴的 UB 分块因子。 |
|
|
51
|
+
| `inTailFactor` | int64 | 输入切分轴尾块大小(`inCutAxisSize % inUbFactor`),0 表示无尾块。 |
|
|
52
|
+
| `outTailFactor` | int64 | 输出切分轴尾块大小,0 表示无尾块。 |
|
|
53
|
+
| `ubSize` | int64 | 本策略可用的 UB 字节数(已按 double buffer 等预留后的值)。 |
|
|
54
|
+
|
|
55
|
+
### 1.2 多核切分
|
|
56
|
+
|
|
57
|
+
| 字段 | 类型 | 含义 |
|
|
58
|
+
|------|------|------|
|
|
59
|
+
| `realCoreNum` | int64 | 实际参与计算的核数(`blockIdx >= realCoreNum` 的核直接返回)。 |
|
|
60
|
+
| `blkFactor` | int64 | 每核处理的 NDDMA 块数(基础值)。 |
|
|
61
|
+
| `blkTailFactor` | int64 | 前 `blkTailFactor` 个核各多处理一块,用于均衡余数。见 `ParseMultiCoreRange`。 |
|
|
62
|
+
| `totalNddmaNum` | int64 | 总 NDDMA 块数(一维扁平编号总数),供多核均分。 |
|
|
63
|
+
|
|
64
|
+
### 1.3 CUT_TWICE 的四类块区间(扁平 loopidx 边界)
|
|
65
|
+
|
|
66
|
+
同时切两轴 → main/inputTail/outputTail/tail 四类块。区间边界由 host `GetIntervalInfoForCutTwice` 预算,kernel 用本核范围与之求交。仅当对应尾 factor 非 0 时区间存在。
|
|
67
|
+
|
|
68
|
+
| 字段 | 含义 |
|
|
69
|
+
|------|------|
|
|
70
|
+
| `rangeMainEnd` | main(两轴都取满)区间结束。 |
|
|
71
|
+
| `rangeInputTailStart` / `rangeInputTailEnd` | inputTail(输入取尾、输出取满)区间。 |
|
|
72
|
+
| `rangeOutputTailStart` / `rangeOutputTailEnd` | outputTail(输出取尾、输入取满)区间。 |
|
|
73
|
+
| `rangeTailStart` / `rangeTailEnd` | tail(两轴都取尾)区间。 |
|
|
74
|
+
|
|
75
|
+
### 1.4 Shape 与 UB 布局数组
|
|
76
|
+
|
|
77
|
+
| 字段 | 长度 | 含义 |
|
|
78
|
+
|------|------|------|
|
|
79
|
+
| `inputShape` / `outputShape` | 8 | 归约后输入/输出逻辑 shape(`TRANSPOSE_MAX_AXIS_NUM_TD=8`)。 |
|
|
80
|
+
| `perm` | 8 | 归约后 perm。 |
|
|
81
|
+
| `baseInShape` | 8 | 输入各维的元素步长(后缀连乘),用于 GM 地址还原。 |
|
|
82
|
+
| `baseNddmaShape` / `nddmaIdx` | 5 | BIG_DIM 专用:折叠后 NDDMA 各维的基数与原始轴映射(见 `FlushBaseNumForBigDim`)。 |
|
|
83
|
+
| `expandedPerm` | 5 | 5 维扩展后的 perm(换轴 stride 依据)。 |
|
|
84
|
+
| `expandedInputShape` / `expandedOutputShape` | 5 | 5 维扩展后的输入/输出 shape。 |
|
|
85
|
+
| `inUbMainSrcShape` / `inUbMainDstShape` | 5 | main 块进/出 UB 的 5 维形状(src=读入布局,dst=换轴写回布局)。 |
|
|
86
|
+
| `inUbInputTailSrcShape` / `inUbInputTailDstShape` | 5 | inputTail 块的 UB src/dst 形状。 |
|
|
87
|
+
| `inUbOutputTailSrcShape` / `inUbOutputTailDstShape` | 5 | outputTail 块的 UB src/dst 形状。 |
|
|
88
|
+
| `inUbTailSrcShape` / `inUbTailDstShape` | 5 | tail 块的 UB src/dst 形状。 |
|
|
89
|
+
|
|
90
|
+
> TENSOR_MOVE / SMALL_SHAPE / N_LAST / CUT_ONCE / BIG_DIM 只用到与自身相关的子集,四类块的 UB 形状数组主要服务 CUT_TWICE;其余策略对应字段可能为 0 或退化值。
|
|
91
|
+
|
|
92
|
+
外层封装 `TransposeTilingData { TransposeOpTilingData transposeOpTiling; }` 仅为与原始 layout 对齐,kernel 入口传 `&tilingData.transposeOpTiling`。
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 二、GatherTransposeTilingData(GATHER_TRANSPOSE)
|
|
97
|
+
|
|
98
|
+
见 [`transpose_gather.md`](transpose_gather.md)。UB 内向量 gather 重排,MTE2/MTE3 两端连续大 burst。
|
|
99
|
+
|
|
100
|
+
### 2.1 标量控制
|
|
101
|
+
|
|
102
|
+
| 字段 | 类型 | 含义 |
|
|
103
|
+
|------|------|------|
|
|
104
|
+
| `dataTensorSize` | uint32 | 单份 data buffer 字节数(×2 ping-pong ×2 in/out 后须放进 UB)。 |
|
|
105
|
+
| `indexTensorSize` | uint32 | gather index buffer 字节数(容纳所有相位的 index)。 |
|
|
106
|
+
| `usedCoreCnt` | uint32 | 实际用核数,要求 `>= coreNum/2` 否则该策略放弃。 |
|
|
107
|
+
|
|
108
|
+
### 2.2 轴切分位置(int8 下标,-1 表示该方向不被切分)
|
|
109
|
+
|
|
110
|
+
| 字段 | 含义 |
|
|
111
|
+
|------|------|
|
|
112
|
+
| `blkAxesCnt` | block 轴数量(UB 分块之上、分给核的轴)。 |
|
|
113
|
+
| `blkInUbCutPos` / `blkOutUbCutPos` | 输入/输出切轴是否被 block 切分且除不尽(决定尾块相位是否存在)。 |
|
|
114
|
+
| `ubAxesCnt` | 进 UB 参与重排的轴数。 |
|
|
115
|
+
| `inUbInCutPos` / `inUbOutCutPos` | 输入侧在 UB 内的切分/连续边界位置。 |
|
|
116
|
+
| `outUbInCutPos` / `outUbOutCutPos` | 输出侧在 UB 内的切分/连续边界位置(`ubAxesCnt - outUbOutCutPos` = 需 gather 的维数,≤3)。 |
|
|
117
|
+
|
|
118
|
+
### 2.3 分块因子与 stride
|
|
119
|
+
|
|
120
|
+
| 字段 | 类型 | 含义 |
|
|
121
|
+
|------|------|------|
|
|
122
|
+
| `blkFactor` / `blkTailFactor` | int64 | 每核 / 末核处理的 block 数。 |
|
|
123
|
+
| `inUbCutAxisSize` / `outUbCutAxisSize` | int64 | 输入/输出切轴的总大小。 |
|
|
124
|
+
| `inUbCutAxisFactor` / `outUbCutAxisFactor` | int32 | 输入/输出切轴的 UB 分块因子;尾块 = size % factor。 |
|
|
125
|
+
| `axis0/1/2InSrcStride` | int64 | MTE2 搬入的多层 GM 源步长(最多 3 层循环)。 |
|
|
126
|
+
| `axis0/1/2OutDstStride` | int64 | MTE3 搬出的多层 GM 目的步长。 |
|
|
127
|
+
|
|
128
|
+
### 2.4 轴数组
|
|
129
|
+
|
|
130
|
+
| 字段 | 长度 | 含义 |
|
|
131
|
+
|------|------|------|
|
|
132
|
+
| `blkAxes` | 8 | 各 block 轴大小(`GATHER_MAX_TRANS_AXIS_NUM_TD=8`)。 |
|
|
133
|
+
| `blkAxesInAOffset` / `blkAxesOutAOffset` | 8 | 各 block 轴对应的输入/输出 GM 地址偏移基数(`CalcBlkAddr` 用)。 |
|
|
134
|
+
| `inUbAxes` / `outUbAxes` | 6 | UB 内输入/输出各轴大小(`GATHER_UB_MAX_DIM_NUM_TD=6`)。 |
|
|
135
|
+
| `ubPerm` | 6 | UB 内轴序(int8),生成 gather index 与循环用。 |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 三、TransposeVCONVTilingData(VCONV_TRANSPOSE 5HD,仅 16bit)
|
|
140
|
+
|
|
141
|
+
见 [`transpose_vconv_5hd.md`](transpose_vconv_5hd.md)。2D 末轴交换,片上 `TransDataTo5HD` 做 16×16 块转置。
|
|
142
|
+
|
|
143
|
+
辅助结构 `CoreSplitPara`(核间切分:`AlignBlockFactor`/`BlockFactor`/`BlockCount`/尾块)与 `UbSplitPara`(UB 内切分:主核/尾核的 UB align/factor/count),被下表按 R/C 方向各引用一份。
|
|
144
|
+
|
|
145
|
+
| 字段 | 类型 | 含义 |
|
|
146
|
+
|------|------|------|
|
|
147
|
+
| `AvailableUbSize` | int64 | 可用 UB 字节数。 |
|
|
148
|
+
| `UsedCoreNum` | int64 | 实际用核数。 |
|
|
149
|
+
| `MainCoreLoopCount` / `TailCoreLoopCount` | int64 | 主核 / 尾核的 UB 循环次数。 |
|
|
150
|
+
| `RLen` / `CblkLen` | int64 | 转置矩阵的行(R)/列(C)长度。 |
|
|
151
|
+
| `RAlignBlock` / `CAlignBlock` | int64 | R/C 向 16 对齐后的块数。 |
|
|
152
|
+
| `RAlignBlockElem` / `CAlignBlockElem` | int64 | R/C 对齐后的元素数。 |
|
|
153
|
+
| `IsRSplit` / `IsRCSplit` | bool | 切分模式:仅切 R / R 和 C 都切(都为 false = 仅切 C)。三种模式覆盖不同 UB 容量。 |
|
|
154
|
+
| `rSplitPara` / `cSplitPara` | CoreSplitPara | R/C 方向的核间切分参数。 |
|
|
155
|
+
| `rUbSplitPara` / `cUbSplitPara` | UbSplitPara | R/C 方向的 UB 内切分参数。 |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 四、Transpose021VCONVTilingData(VCONV_021_TRANSPOSE,支持 8/16/32bit)
|
|
160
|
+
|
|
161
|
+
见 [`transpose_vconv_021.md`](transpose_vconv_021.md)。`perm=[0,2,1]` 保 batch 转置,按 batch 维循环 + `TransDataTo5HD`。
|
|
162
|
+
|
|
163
|
+
辅助结构 `Transpose021UbSplitPara`(`UbAlignFactor`/`UbFactor`/`UbCount`/`UbTailAlignFactor`/`UbTailFactor`),被 R/C 方向各引用一份。
|
|
164
|
+
|
|
165
|
+
| 字段 | 类型 | 含义 |
|
|
166
|
+
|------|------|------|
|
|
167
|
+
| `AvailableUbSize` | int64 | 可用 UB 字节数。 |
|
|
168
|
+
| `UsedCoreNum` | int64 | 实际用核数。 |
|
|
169
|
+
| `NLen` / `HLen` / `WLen` | int64 | batch(N)/ 后两维 H / W 的长度。 |
|
|
170
|
+
| `HAlignBlockElem` / `WAlignBlockElem` | int64 | H/W 对齐后的元素数。 |
|
|
171
|
+
| `NPerCore` / `NTailCore` | int64 | 按 N 维多核切分时每核 / 尾核的 N 数。 |
|
|
172
|
+
| `UbLoopCount` | int64 | UB 循环次数。 |
|
|
173
|
+
| `UseRConv` | bool | H≥W 时为 true,选 R 为主转置轴(影响 R/C 主轴选择)。 |
|
|
174
|
+
| `UseHSplit` | bool | 是否按 H 维(而非 N 维)做多核切分。 |
|
|
175
|
+
| `HPerCore` / `HTailCore` | int64 | 按 H 切分时每核 / 尾核的 H 数。 |
|
|
176
|
+
| `rUbSplitPara` / `cUbSplitPara` | Transpose021UbSplitPara | R/C 方向的 UB 内切分参数。 |
|
package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Transpose 021 TransData 策略性能调优参考
|
|
2
|
+
|
|
3
|
+
- **策略名**:VCONV_021_TRANSPOSE / 021 TransData(基于 `TransDataTo5HD`)
|
|
4
|
+
- **tilingKey**:`10008`
|
|
5
|
+
- **支持数据类型宽度**:8-bit(int8/uint8)、16-bit(half/bfloat16)、32-bit(float/int32)
|
|
6
|
+
- **kernel 类**:`Transpose::KernelTransDataTo5HD021<T>`(`arch35/transpose_transdata_5hd_021.h`)
|
|
7
|
+
- **host tiling**:`transpose_host::Transpose021WithVCONV::DoTiling`(`transpose_tiling_021.cpp/.h`)
|
|
8
|
+
- **命中判定**:`TransposeNddmaTiling::Is021VConvValid`(`transpose_tiling.cpp`)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 一、适用场景
|
|
13
|
+
|
|
14
|
+
### 1.1 什么是 021 转置
|
|
15
|
+
|
|
16
|
+
021 指 `perm = [0, 2, 1]`:把一个三维张量 `[N, H, W]` 变换为 `[N, W, H]`。
|
|
17
|
+
第 0 维(batch/N)保持不变,只交换后两维 H 与 W。它是标准的“逐 batch 的 2D 矩阵转置”,
|
|
18
|
+
每个 batch 内部就是一个 `H × W → W × H` 的转置,batch 之间彼此独立。
|
|
19
|
+
|
|
20
|
+
判定入口 `Is021VConvValid` 中的 perm 条件:
|
|
21
|
+
|
|
22
|
+
```cpp
|
|
23
|
+
// reducedPerm[0]==0 && reducedPerm[1]==2 && reducedPerm[2]==1
|
|
24
|
+
if (!(shapeInfo_.reducedPerm[0] == 0 &&
|
|
25
|
+
shapeInfo_.reducedPerm[DIM_ONE] == VCONV_DIM_NUM /*=2*/ &&
|
|
26
|
+
shapeInfo_.reducedPerm[DIM_TWO] == 1)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 1.2 为什么可以用 VCONV / TransData 加速
|
|
32
|
+
|
|
33
|
+
朴素的转置是“逐元素散射/聚集”式的搬运,DMA stride 极不友好,带宽利用率低。
|
|
34
|
+
昇腾提供了向量转置指令 `TransDataTo5HD`(俗称 VCONV / TransData),它在 UB 内一次性完成
|
|
35
|
+
一个 `16 × blockElem` 分块的转置:以 16 行为一组、按数据块(block)为列粒度做硬件转置,
|
|
36
|
+
把“逐元素搬运”变成“分块硬件转置 + 规整 DMA”,从而显著提升转置吞吐。
|
|
37
|
+
|
|
38
|
+
其中每次转置处理的行数固定为 `TRANSELEM_021 = 16`,列粒度 `blockElem` 随位宽变化(一个 32B block 内的元素数):
|
|
39
|
+
|
|
40
|
+
```cpp
|
|
41
|
+
static constexpr int64_t blockElem = (sizeof(T) == 1) ? 32 : // 8-bit
|
|
42
|
+
(sizeof(T) == 4) ? 8 : // 32-bit
|
|
43
|
+
16; // 16-bit
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 1.3 与 5HD 策略(10007)的区别
|
|
47
|
+
|
|
48
|
+
| 项 | 5HD VCONV(tilingKey=10007) | 021 TransData(tilingKey=10008) |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| perm | 2D 末轴交换 `[1,0]` | 3D 保 batch `[0,2,1]` |
|
|
51
|
+
| 维度 | `dim == 2` | `dim == 3` |
|
|
52
|
+
| 支持位宽 | 仅 16-bit(派发处 `sizeof(T)==sizeof(int16_t)` 才实例化) | **8/16/32-bit 全支持** |
|
|
53
|
+
|
|
54
|
+
派发入口 `transpose_kernel.cpp`:
|
|
55
|
+
|
|
56
|
+
```cpp
|
|
57
|
+
} else if (tilingKey == VCONV_021_TRANSPOSE) { // 10008
|
|
58
|
+
// 021 VCONV kernel supports 8/16/32-bit element widths.
|
|
59
|
+
if constexpr (sizeof(T) == sizeof(int8_t) || sizeof(T) == sizeof(int16_t) ||
|
|
60
|
+
sizeof(T) == sizeof(int32_t)) {
|
|
61
|
+
Transpose021VCONVTilingData lt; LoadTiling(tiling, lt);
|
|
62
|
+
Transpose::KernelTransDataTo5HD021<T> op;
|
|
63
|
+
op.Init(x, y, <, &pipe);
|
|
64
|
+
op.Process();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
021 策略针对不同位宽在 kernel 内走了不同分支:8-bit 走 `Compute8BitCore`(奇偶行拆分 + high/low half 处理),
|
|
70
|
+
16/32-bit 走 `ComputeRConvGeneric` / `ComputeCConvGeneric`(32-bit 额外用 `dstStrideFactor=2` 处理跨 block)。
|
|
71
|
+
|
|
72
|
+
### 1.4 命中条件(`Is021VConvValid`)
|
|
73
|
+
|
|
74
|
+
除 perm=[0,2,1] 与 `dim==3` 外,还需同时满足:
|
|
75
|
+
|
|
76
|
+
- 位宽为 8 / 16 / 32-bit(`eleLenInBytes` ∈ {1,2,4})。
|
|
77
|
+
- `H > 8` 且 `W > 8`(`DIM_EIGHT`),过滤掉极小边长。
|
|
78
|
+
- `H * W >= HW_MIN_PRODUCT`(转置面积下限)。
|
|
79
|
+
- 有效元素占对齐后面积比例不能太低:`H*W > hAlign*wAlign/2`(`hAlign/wAlign` 按 16 对齐),
|
|
80
|
+
避免为凑对齐引入过多 padding 浪费。
|
|
81
|
+
- 总字节量 `totalVolumeActual * eleLenInBytes >= 70000`(`SMALL_SHAPE_BYTES_THRES_HOLD_DAV_5102_021`),
|
|
82
|
+
小 shape 不走此路径(启动/搬运开销占比过高,收益不足)。
|
|
83
|
+
|
|
84
|
+
### 1.5 为什么能提升性能
|
|
85
|
+
|
|
86
|
+
- 用硬件向量转置指令替代逐元素搬运,UB 内转置吞吐高。
|
|
87
|
+
- CopyIn/CopyOut 均通过 `DataCopyPad` 做规整的分块 DMA,配合 stride 参数直接完成 gap/padding 处理。
|
|
88
|
+
- 多核按 batch(N)或按 H 切分并行,见 1.6。
|
|
89
|
+
- Double buffer(`BUFFER_NUM=2`)流水,搬入/计算/搬出重叠。
|
|
90
|
+
- 命中门槛(面积、字节量、对齐利用率)保证只在收益为正的 shape 上启用。
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 二、kernel 执行流程与关键实现
|
|
95
|
+
|
|
96
|
+
### 2.1 host tiling 关键决策(`transpose_tiling_021.cpp`)
|
|
97
|
+
|
|
98
|
+
`CalcBasicInfo` 计算基本量后有三个关键开关:
|
|
99
|
+
|
|
100
|
+
- **`UseRConv = (HLen >= WLen)`**:H 不小于 W 时以 “R(行/H)为转置主轴” 走 `ComputeRConv`;
|
|
101
|
+
否则以 “C(列/W)为主轴” 走 `ComputeCConv`。目的是让 `repeatTimes` 落在较大的那一维,提高单次指令效率。
|
|
102
|
+
- **`UseHSplit`**:当 `NLen < 5 && !UseRConv && HLen >= NLen*16` 时启用“按 H 切分多核”,
|
|
103
|
+
用于 batch 数很少、H 很大的场景把并行度提上去;注意 `CalcUbSplitHSplit` 中 8-bit 直接 `return false`(HSplit 不支持 8-bit)。
|
|
104
|
+
- **UB 切分**:`AvailableUbSize = ubSize/2/BUFFER_NUM`。分 `CalcUbSplitRConv` / `CalcUbSplitCConv` / `CalcUbSplitHSplit`:
|
|
105
|
+
若整块 `HAlign*WAlign` 能放进 UB 则 `UbLoopCount=1`(不切分);否则沿主轴切成多份 UB loop。
|
|
106
|
+
若连一个 `TRANSELEM(16) × 对齐边` 都放不下,则 tiling 失败返回 false(回退其它策略)。
|
|
107
|
+
|
|
108
|
+
多核切分:非 HSplit 时 `CalcNSplitInfo` 按 N 均分(`NPerCore` + 尾核 `NTailCore`);
|
|
109
|
+
HSplit 时 `CalcHSplitInfo` 按 H 对齐后均分(`HPerCore` + `HTailCore`)。`tilingKey` 固定写为 10008,`blockDim = UsedCoreNum`。
|
|
110
|
+
|
|
111
|
+
最终参数写入 `Transpose021VCONVTilingData`(含 `rUbSplitPara` / `cUbSplitPara` 两组 UB 切分因子)。
|
|
112
|
+
|
|
113
|
+
### 2.2 Init
|
|
114
|
+
|
|
115
|
+
```cpp
|
|
116
|
+
srcGlobal / dstGlobal 绑定 GM 输入输出;
|
|
117
|
+
if (UseHSplit) { 按 blockIdx 分配 hStart_/hCount_,nStart_=0, nCount_=NLen }
|
|
118
|
+
else { 按 blockIdx 分配 nStart_/nCount_(区分整核/尾核) }
|
|
119
|
+
pipe->InitBuffer(inQueueSrc, BUFFER_NUM, AvailableUbSize);
|
|
120
|
+
pipe->InitBuffer(outQueueDst, BUFFER_NUM, AvailableUbSize);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
两条 TQue:`inQueueSrc`(VECIN) / `outQueueDst`(VECOUT),各 `BUFFER_NUM=2` 块,形成 double buffer。
|
|
124
|
+
|
|
125
|
+
### 2.3 Process 主循环
|
|
126
|
+
|
|
127
|
+
```mermaid
|
|
128
|
+
flowchart TD
|
|
129
|
+
A[Process] --> B{blockIdx >= UsedCoreNum?}
|
|
130
|
+
B -->|是| Z[return 空转核]
|
|
131
|
+
B -->|否| C{UseHSplit?}
|
|
132
|
+
C -->|是| D[for n in 0..nCount_:<br/>ProcessOneBatchHSplit n]
|
|
133
|
+
C -->|否| E[for n in 0..nCount_:<br/>ProcessOneBatch nStart_+n]
|
|
134
|
+
D --> F[每 batch: for ubLoop in UbLoopCount]
|
|
135
|
+
E --> F
|
|
136
|
+
F --> G[CopyIn]
|
|
137
|
+
G --> H[Compute]
|
|
138
|
+
H --> I[CopyOut]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`ProcessOneBatch` / `ProcessOneBatchHSplit` 内部按 `UbLoopCount` 循环,最后一次 loop 使用尾块因子
|
|
142
|
+
(`UbTailFactor` / `UbTailAlignFactor`),其余用整块因子(`UbFactor` / `UbAlignFactor`)。
|
|
143
|
+
每次 loop 都是 `CopyIn → Compute → CopyOut` 三段式,天然被 double buffer 流水化。
|
|
144
|
+
|
|
145
|
+
### 2.4 CopyIn:GM → UB
|
|
146
|
+
|
|
147
|
+
用 `DataCopyPad` + `DataCopyExtParams copyInParams_` 搬入。根据 W 是否对齐(`WLen % wAlignCheck`,
|
|
148
|
+
8-bit 检查 `blockElem`,其余检查 16)分两条路:
|
|
149
|
+
|
|
150
|
+
- **`CopyInWAligned`**:W 对齐时尽量整段搬(`blockCount=1`),或按行搬(`blockCount=actualValidRows`)设置行间 `srcStride`。
|
|
151
|
+
- **`CopyInWUnaligned`**:W 非对齐时逐行搬有效宽度 `validW`,用 `dstStride` 在 UB 内补齐到对齐宽度(`WAlignBlockElem`)。
|
|
152
|
+
|
|
153
|
+
`UseRConv` 时按 `rUbSplitPara` 偏移并计算 `actualValidRows`(防越界取 `min`);否则按 `cUbSplitPara` 偏移。
|
|
154
|
+
|
|
155
|
+
### 2.5 Compute:UB 内 TransDataTo5HD 转置
|
|
156
|
+
|
|
157
|
+
`Compute` 按 `UseRConv` 分派到 `ComputeRConv` / `ComputeCConv`;两者再按位宽分派:
|
|
158
|
+
|
|
159
|
+
- **8-bit → `Compute8BitCore`**:关键在于 8-bit 一个 block 有 32 个元素而转置组只有 16 行,
|
|
160
|
+
故把 32 行拆成 **偶数组 / 奇数组**(`evenUbCount`/`oddUbCount`),并借助 `srcHighHalf`(low/high half)
|
|
161
|
+
两次遍历完成一个 `32-elem block` 的转置;组间用 `PipeBarrier<PIPE_V>()` 保证依赖顺序。
|
|
162
|
+
- **16-bit → `ComputeRConvGeneric` / `ComputeCConvGeneric`**:构造 `srcList[16]` / `dstList[16]` 地址表,
|
|
163
|
+
设置 `repeatTimes / srcRepStride / dstRepStride` 后调用 `TransDataTo5HD<T>`,沿 `cAlign`(或 `rAlign`)循环。
|
|
164
|
+
- **32-bit → 同上 Generic 分支但走 `dstStrideFactor=2` 路径**:32-bit 一个 block 只有 8 个元素,
|
|
165
|
+
转置目的地址需按 `dstStrideFactor` 拆成两半(`dstList[2k]` / `dstList[2k+1]` 分别指向 block 内前后段),
|
|
166
|
+
正确处理 16 行跨两个 32-bit block 的排布。
|
|
167
|
+
|
|
168
|
+
`ComputeRConv` 与 `ComputeCConv` 的区别在于把 `repeatTimes` 放在 R 还是 C 方向,
|
|
169
|
+
以及 `srcRepStride/dstRepStride` 的取值(`repeatTimes==1` 时 stride 置 0)。
|
|
170
|
+
|
|
171
|
+
指令使用示意(16-bit Generic 分支):
|
|
172
|
+
|
|
173
|
+
```cpp
|
|
174
|
+
TransDataTo5HDParams p;
|
|
175
|
+
p.repeatTimes = r / TRANSELEM_021; // 16 行一组
|
|
176
|
+
p.dstRepStride = (p.repeatTimes == 1) ? 0 : dstStrideFactor;
|
|
177
|
+
p.srcRepStride = (p.repeatTimes == 1) ? 0 : cAlign * TRANSELEM_021;
|
|
178
|
+
for (j = 0; j < cAlign; j++) {
|
|
179
|
+
for (i = 0; i < 16; i++) srcLocalList[i] = srcLocal[i*c + j*blockElem].GetPhyAddr();
|
|
180
|
+
// 组装 dstLocalList[16] ...
|
|
181
|
+
TransDataTo5HD<T>(dstLocalList, srcLocalList, p);
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
计算前 `DeQue<T>` 取输入、`AllocTensor<T>` 取输出,计算后 `EnQue` 输出并 `FreeTensor` 释放输入。
|
|
186
|
+
|
|
187
|
+
### 2.6 CopyOut:UB → GM
|
|
188
|
+
|
|
189
|
+
同样用 `DataCopyPad` + `copyOutParams_`,按 H、W 是否都对齐分 `CopyOutAligned` / `CopyOutUnaligned`:
|
|
190
|
+
|
|
191
|
+
- 转置后维度变为 `[W, H]`,故 `dstStride` 以 `HLen` 为行跨度回填 GM。
|
|
192
|
+
- `UseRConv` 与否影响 `blockCount/blockLen`(整段 vs 逐列),非对齐时用 `validLen/validCount` 裁掉 padding。
|
|
193
|
+
- HSplit 走独立的 `CopyInHSplit` / `CopyOutHSplit`,按 `hStart_` 定位 GM 的 H 段。
|
|
194
|
+
|
|
195
|
+
### 2.7 关键技术小结(均以代码为准)
|
|
196
|
+
|
|
197
|
+
- **`TransDataTo5HD` 向量转置指令**:16 行一组的硬件分块转置,是加速核心。
|
|
198
|
+
- **Double buffer**:`BUFFER_NUM=2`,`InitBuffer` 分配双缓冲,CopyIn/Compute/CopyOut 流水重叠。
|
|
199
|
+
- **TQue 管理**:`inQueueSrc`(VECIN) / `outQueueDst`(VECOUT),`AllocTensor/EnQue/DeQue/FreeTensor` 生命周期管理。
|
|
200
|
+
- **`PipeBarrier<PIPE_V>()`**:仅在 8-bit 奇偶组/half 切换处插入,保证 vector 转置的写后读依赖。
|
|
201
|
+
- **R/C 主轴自适应**:`UseRConv = HLen>=WLen`,让 repeat 落在较长维度。
|
|
202
|
+
- **位宽自适应**:`blockElem`(32/16/8)、`dstStrideFactor`(32-bit=2) 按 `sizeof(T)` 编译期确定。
|
|
203
|
+
- **多核切分**:N 切分为主;batch 少而 H 大时切换 H 切分(HSplit,不支持 8-bit)。
|
|
204
|
+
- **`DataCopyPad` + stride**:搬运阶段直接处理对齐 gap 与 padding,避免额外 pad 计算指令。
|
|
205
|
+
|
|
206
|
+
> 注意:文中未出现的技术(如 MTE/L1 缓存、mask、reduce 等)本策略并未使用,请勿据此推断。
|
package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Transpose 策略参考:VCONV_TRANSPOSE / 5HD TransData
|
|
2
|
+
|
|
3
|
+
- **策略名**:VCONV_TRANSPOSE(5HD TransData 向量转置)
|
|
4
|
+
- **tilingKey**:`10007`
|
|
5
|
+
- **kernel 类**:`Transpose::KernelTransDataTo5HD<T>`(`arch35/transpose_transdata_5hd.h`)
|
|
6
|
+
- **重要约束**:**仅支持 16bit 元素宽度**(`eleLenInBytes == 2`,如 fp16/bf16/int16)。派发处用 `if constexpr (sizeof(T) == sizeof(int16_t))` 保护;host 侧命中条件也强制 `eleLenInBytes == VCONV_DSIZE(=2)`。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、适用场景
|
|
11
|
+
|
|
12
|
+
### 1.1 什么是 5HD / VCONV 转置
|
|
13
|
+
|
|
14
|
+
本策略把一次「二维矩阵转置」映射到 AscendC 的向量转置指令 `TransDataTo5HD` 上完成。`TransDataTo5HD` 原本用于 ND 与 5HD(NC1HWC0)之间的格式转换,其硬件本质是在 Vector 单元内对一个 **16 × 16 的元素块**做转置。由于每个 16bit 元素恰好让一个 block(32B)容纳 16 个元素,16×16 的方块转置可以被向量单元一条指令高效吞掉,因此把整块矩阵拆成若干 16×16 子块,逐块调用 `TransDataTo5HD` 即可完成整体转置。
|
|
15
|
+
|
|
16
|
+
相比走 DMA/NDDMA 的搬运式转置,VCONV 路径把转置计算放在片上 UB 中由 Vector 单元完成,搬入搬出都是**连续或规则跨步**的 `DataCopyPad`,避免了细粒度、非连续的 GM 随机访问,因此在命中场景下带宽利用率更高。
|
|
17
|
+
|
|
18
|
+
### 1.2 为什么 2D 末轴交换的 16bit 数据能用 VCONV 加速
|
|
19
|
+
|
|
20
|
+
- **16×16 块对齐天然契合 16bit**:`TransDataTo5HD` 一次处理 16 行 × 16 列。16bit 元素下,16 个元素 = 32B = 1 个 UB block,转置后的写出也天然对齐,无需额外的位宽拼接/拆分。这也是它只支持 16bit 的原因。
|
|
21
|
+
- **末轴交换 (perm=[1,0]) 即纯二维转置**:输入 `[R, C]` 输出 `[C, R]`,访问模式规整,能整齐地切成 16×16 网格。
|
|
22
|
+
- **性能收益来源**:
|
|
23
|
+
- 转置在片上完成,GM 侧读写是大块连续搬运(`DataCopyPad` 带规则 stride),而非逐元素散读。
|
|
24
|
+
- 借助 `TQue` 双缓冲(`BUFFER_NUM = 2`),搬入 / 计算 / 搬出三级流水互相掩盖。
|
|
25
|
+
- 多核按 16 行/列块粒度均分,充分利用全部 AI Core。
|
|
26
|
+
|
|
27
|
+
### 1.3 命中条件(host 侧 `TryVCONVTiling`)
|
|
28
|
+
|
|
29
|
+
在 `transpose_tiling.cpp` 的 `TryVCONVTiling` 中,同时满足以下条件才进入本策略(`transpose_tiling_5hd.cpp` 的 `DoTiling`):
|
|
30
|
+
|
|
31
|
+
```cpp
|
|
32
|
+
shapeInfo_.reducedPerm[0] == 1 && shapeInfo_.reducedPerm[1] == 0 && // 二维末轴交换
|
|
33
|
+
shapeInfo_.dim == VCONV_DIM_NUM (== 2) && // reduce 后为 2D
|
|
34
|
+
shapeInfo_.eleLenInBytes == VCONV_DSIZE (== 2) && // 16bit
|
|
35
|
+
shapeInfo_.reducedInShape[0] > DIM_FIVE (> 5) // R 轴长度 > 5
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
即:经过 `RemoveAxisV2` / `MergeAxisV2` 归约后是一个二维、末轴交换、16bit、且 R(第 0 轴)长度大于 5 的转置。`R > 5` 用于排除过小的 shape(此类小 shape 交给通用路径更划算)。若 `DoTiling` 因 UB 放不下(见下文 `CalcRCNotFullLoadUbSplitInfo` 的失败分支)返回 false,则回退到其他策略。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 二、Tiling 切分逻辑(host 侧)
|
|
43
|
+
|
|
44
|
+
记输入为 `[R=RLen, C=CblkLen]`。以下常量:`TRANSELEM = 16`(块边长),`BUFFER_NUM = 2`(双缓冲),`BUFFER_TENSOR_NUM = 2`(输入+输出各一块)。
|
|
45
|
+
|
|
46
|
+
### 2.1 基础信息 `CalcBasicInfo`
|
|
47
|
+
|
|
48
|
+
```cpp
|
|
49
|
+
AvailableUbSize = ubSize / BUFFER_TENSOR_NUM / BUFFER_NUM; // 单块可用 UB (in/out 各一块、双 buffer)
|
|
50
|
+
RAlignBlock = CeilDiv(RLen, 16); RAlignBlockElem = RAlignBlock * 16; // R 向上对齐到 16
|
|
51
|
+
CAlignBlock = CeilDiv(CblkLen, 16); CAlignBlockElem = CAlignBlock * 16; // C 向上对齐到 16
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
即把 R、C 都向上对齐到 16 的倍数,按 16×16 块组织。
|
|
55
|
+
|
|
56
|
+
### 2.2 三种切分模式(`CalcBlockAndUbSplitInfo`)
|
|
57
|
+
|
|
58
|
+
按「哪一维能在 UB 内整列/整行放下」决定核间切分维与 UB 内切分维:
|
|
59
|
+
|
|
60
|
+
| 判断条件 | 核切分维 | UB 全载维 | 标志 |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| `16 * CAlignBlockElem * 2 <= AvailableUbSize` | R 轴切核 (`CalcRSplitInfo`) | C 全载 (`CalcCFullLoadRUbSplitInfo`) | `IsRSplit=true` |
|
|
63
|
+
| 否则若 `16 * RAlignBlockElem * 2 <= AvailableUbSize` | C 轴切核 (`CalcCSplitInfo`) | R 全载 (`CalcRFullLoadCUbSplitInfo`) | `IsRSplit=false` |
|
|
64
|
+
| 否则(两维都放不下一个 16 条带) | R 轴切核 | R、C 均需再切 (`CalcRCNotFullLoadUbSplitInfo`) | `IsRCSplit=true` |
|
|
65
|
+
|
|
66
|
+
- **R-split / C 全载**:一次处理若干整行(R 方向,16 的倍数),C 方向整列全载。若 `BlockFactor 行 × C 全载` 一次装不下 UB,则进一步按 `MainCoreUbFactor` 沿 R 分多个 UB 循环(`MainCoreLoopCount`)。
|
|
67
|
+
- **C-split / R 全载**:对称地,一次处理若干整列,R 全载,必要时沿 C 分 UB 循环。
|
|
68
|
+
- **RC 双切 (`IsRCSplit`)**:R、C 都装不下时,核间按 R 切,UB 内先固定 R 的 `BlockFactor`,再沿 C 用 `MainCoreUbFactor` 分块循环。若连 `BlockFactor(16行) × 16 × 2B` 都超过 `AvailableUbSize`,`CalcRCNotFullLoadUbSplitInfo` 返回 false,`DoTiling` 失败并回退到其它策略。
|
|
69
|
+
|
|
70
|
+
核间切分(`CalcRSplitInfo` / `CalcCSplitInfo`)以 16 对齐块为单位在 `coreNum` 个核间均分,得到主核 `BlockFactor` 与尾核 `BlockTailFactor`,`UsedCoreNum = BlockCount`。UB 内切分则用 `MainCore*` / `TailCore*` × (`Ub` / `TailUb`) 一套四组因子覆盖「主核/尾核 × 主UB循环/尾UB循环」的所有边界。这些因子最终由 `WriteTilingData` 写入 `TransposeVCONVTilingData`(结构见 `transpose_tiling_data.h`:`rSplitPara/cSplitPara` 为 `CoreSplitPara`,`rUbSplitPara/cUbSplitPara` 为 `UbSplitPara`)。
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 三、Kernel 执行流程与关键实现
|
|
75
|
+
|
|
76
|
+
### 3.1 Init
|
|
77
|
+
|
|
78
|
+
```cpp
|
|
79
|
+
blockIdx_ = GetBlockIdx();
|
|
80
|
+
fullCoreNum = UsedCoreNum - 1; // [0, fullCoreNum-1] 主核, 其余尾核
|
|
81
|
+
loopCount = (blockIdx_ <= fullCoreNum-1) ? MainCoreLoopCount : TailCoreLoopCount;
|
|
82
|
+
isRsplit = IsRSplit; isRCSplit = IsRCSplit;
|
|
83
|
+
pipe->InitBuffer(inQueueSrc, BUFFER_NUM, AvailableUbSize); // VECIN 双缓冲
|
|
84
|
+
pipe->InitBuffer(outQueueDst, BUFFER_NUM, AvailableUbSize); // VECOUT 双缓冲
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
用两条 `TQue`(`TPosition::VECIN` / `VECOUT`),各开 `BUFFER_NUM=2` 块,实现搬入/计算/搬出的 double buffer 流水。
|
|
88
|
+
|
|
89
|
+
### 3.2 Process 主循环
|
|
90
|
+
|
|
91
|
+
```mermaid
|
|
92
|
+
flowchart TD
|
|
93
|
+
A[Process] --> B{blockIdx_ >= UsedCoreNum?}
|
|
94
|
+
B -- 是 --> Z[空转返回]
|
|
95
|
+
B -- 否 --> C{blockIdx_ < fullCoreNum?}
|
|
96
|
+
C -- 主核 --> D[loop i in 0..loopCount]
|
|
97
|
+
C -- 尾核 --> E[loop i in 0..loopCount]
|
|
98
|
+
D --> F{i < loopCount-1?}
|
|
99
|
+
F -- 是 --> G[BaseProcess: MainCoreUbFactor]
|
|
100
|
+
F -- 否/尾UB --> H[BaseProcess: MainCoreTailUbFactor]
|
|
101
|
+
E --> I{i < loopCount-1?}
|
|
102
|
+
I -- 是 --> J[BaseProcess: TailCoreUbFactor]
|
|
103
|
+
I -- 否/尾UB --> K[BaseProcess: TailCoreTailUbFactor]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`Process` 依据「主核/尾核」× 「主 UB 循环/尾 UB 循环」四种组合,取对应的 `r/c/rAlign/cAlign` 因子,先 `SetBasePocessData` 算出本次的 GM/UB 偏移,再走 `BaseProcess`。多余核(`blockIdx_ >= UsedCoreNum`)直接返回。
|
|
107
|
+
|
|
108
|
+
### 3.3 BaseProcess:搬入 → 计算 → 搬出
|
|
109
|
+
|
|
110
|
+
```cpp
|
|
111
|
+
BaseProcess(process, r, c, rAlign, cAlign) {
|
|
112
|
+
BaseCopyIn(process); // DataCopyPad: GM -> inQueueSrc
|
|
113
|
+
BaseCompute(r, c, rAlign, cAlign);// TransDataTo5HD 转置
|
|
114
|
+
BaseCopyOut(process); // DataCopyPad: outQueueDst -> GM
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- **BaseCopyIn**:`AllocTensor` → `SetCopyInParams`(按 `isRCSplit/isRsplit/否` 分派为 `SetRCSplitCopyInParams` / `SetRSplitCopyInParams` / `SetCSplitCopyInParams`,分别设置 `blockCount / blockLen / srcStride`)→ `DataCopyPad(srcLocal, srcGlobal[gmOffset+copyInCoreOffset], Params, padParams)` → `EnQue`。注意 `SetRSplitCopyInParams` 对 `CblkLen % 16 == 0` 走单块连续搬运,否则按行 `blockCount` 搬运。
|
|
119
|
+
- **BaseCopyOut**:对称,`SetCopyOutParams` 分派设置写回的 `blockCount/blockLen/dstStride`,`DataCopyPad` 写回 `dstGlobal`。
|
|
120
|
+
|
|
121
|
+
### 3.4 核心计算:`TransDataTo5HD` 16×16 块转置
|
|
122
|
+
|
|
123
|
+
`BaseCompute` 按 `r >= c` 选择两条对称路径:
|
|
124
|
+
|
|
125
|
+
```cpp
|
|
126
|
+
if (r >= c) ComputeRConv(r, c, cAlign); // 沿 C 方向循环转置
|
|
127
|
+
else ComputeCConv(r, c, rAlign); // 沿 R 方向循环转置
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**`ComputeRConv`(r ≥ c)**关键实现:
|
|
131
|
+
|
|
132
|
+
```cpp
|
|
133
|
+
TransDataTo5HDParams p;
|
|
134
|
+
p.repeatTimes = r / 16; // 一次处理 r/16 个 16 行块
|
|
135
|
+
p.dstRepStride = (p.repeatTimes == 1) ? 0 : 1;
|
|
136
|
+
p.srcRepStride = (p.repeatTimes == 1) ? 0 : cAlign * 16;
|
|
137
|
+
for (int j = 0; j < cAlign; j++) { // 沿列方向 16 列一组
|
|
138
|
+
LocalTensor<T> srcLocalList[16], dstLocalList[16];
|
|
139
|
+
for (int i = 0; i < 16; i++)
|
|
140
|
+
srcLocalList[i] = srcLocal[i * c + j * 16]; // 源 16 行地址
|
|
141
|
+
for (int i = 0; i < 16; i++)
|
|
142
|
+
dstLocalList[i] = dstLocal[i * r + j * 16 * r]; // 目的地址(已转置布局)
|
|
143
|
+
TransDataTo5HD(dstLocalList, srcLocalList, p);
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
- 每次 `TransDataTo5HD` 处理一个 16 列宽、`repeatTimes` 个 16 行块的条带,把该条带内每个 16×16 方块转置。`srcLocalList[16]` / `dstLocalList[16]` 是 16 个行指针(高低半 `dstHighHalf/srcHighHalf` 均 false)。
|
|
148
|
+
- `srcRepStride = cAlign*16` 让 repeat 在源上跳过整行对齐宽度;`dstRepStride = 1` 让转置结果落到目的的连续块位置。目的偏移 `i*r + j*16*r` 体现「转置后行列互换」的地址布局。
|
|
149
|
+
- `ComputeCConv` 与之对称(`repeatTimes = c/16`,`dstRepStride = rAlign*16`,`srcRepStride = 1`,外层沿 `rAlign` 循环)。选择 `r>=c` 与否是为了让 `repeatTimes` 取较大的那一维,减少外层循环次数、提升单条指令的吞吐。
|
|
150
|
+
|
|
151
|
+
计算完 `outQueueDst.EnQue(dstLocal)` 并 `inQueueSrc.FreeTensor(srcLocal)`,交回给 double buffer 流水。
|
|
152
|
+
|
|
153
|
+
### 3.5 关键技术小结
|
|
154
|
+
|
|
155
|
+
- **向量转置指令 `TransDataTo5HD`**:片上 16×16 块转置,是本策略性能核心;16bit 元素与 16-block 对齐是其使用前提。
|
|
156
|
+
- **16×16 分块 + 16 对齐**:R、C 向上对齐到 16,按块组织搬运与转置。
|
|
157
|
+
- **Double buffer**:`inQueueSrc` / `outQueueDst` 各 `BUFFER_NUM=2`,搬入/计算/搬出流水掩盖。
|
|
158
|
+
- **`TQue` (VECIN/VECOUT)** 管理 UB 张量生命周期(`AllocTensor/EnQue/DeQue/FreeTensor`)。
|
|
159
|
+
- **`DataCopyPad` 规则搬运**:配合 `CoreSplitPara/UbSplitPara` 的 stride 参数,GM 侧读写为大块规则搬运而非散读。
|
|
160
|
+
- **三种切分(RSplit / CSplit / RCSplit)** 覆盖 C 全载、R 全载、双切三类 UB 容量场景,主核/尾核 + 主UB/尾UB 因子处理所有边界。
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 附:tilingKey 与派发
|
|
165
|
+
|
|
166
|
+
`transpose_kernel.cpp` 中:
|
|
167
|
+
|
|
168
|
+
```cpp
|
|
169
|
+
} else if (tilingKey == VCONV_TRANSPOSE /* 10007 */) {
|
|
170
|
+
if constexpr (sizeof(T) == sizeof(int16_t)) { // 仅 16bit 实例化
|
|
171
|
+
TransposeVCONVTilingData lt; LoadTiling(tiling, lt);
|
|
172
|
+
Transpose::KernelTransDataTo5HD<T> op;
|
|
173
|
+
op.Init(x, y, <, &pipe);
|
|
174
|
+
op.Process();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
注意:tilingKey 10008 (`VCONV_021_TRANSPOSE`) 是相邻的 021 三维 VCONV 策略(支持 8/16/32bit),与本文的 10007 是不同 kernel(`KernelTransDataTo5HD021`),不要混淆。
|