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.
Files changed (408) hide show
  1. package/README.md +183 -2
  2. package/THIRD_PARTY_NOTICES.md +85 -0
  3. package/cordis.patch.yml +3 -0
  4. package/doctor/LICENSE +202 -0
  5. package/doctor/NOTICE +12 -0
  6. package/doctor/README.md +18 -0
  7. package/lib/client.js +94437 -0
  8. package/lib/index.d.ts +722 -0
  9. package/lib/index.js +33711 -0
  10. package/locale/en.json +6 -0
  11. package/locale/zh.json +6 -0
  12. package/package.json +171 -4
  13. package/skills/asc-tools/tool-ops-tune/INSTALL.md +52 -0
  14. package/skills/asc-tools/tool-ops-tune/LICENSE +38 -0
  15. package/skills/asc-tools/tool-ops-tune/README.md +167 -0
  16. package/skills/asc-tools/tool-ops-tune/SKILL.md +93 -0
  17. package/skills/asc-tools/tool-ops-tune/agent/AGENTS.md +195 -0
  18. package/skills/asc-tools/tool-ops-tune/agent/agents/perf-implementer.md +68 -0
  19. package/skills/asc-tools/tool-ops-tune/agent/agents/perf-reviewer.md +86 -0
  20. package/skills/asc-tools/tool-ops-tune/agent/workflows/task-prompts.md +362 -0
  21. package/skills/asc-tools/tool-ops-tune/agent/workflows/troubleshooting.md +43 -0
  22. package/skills/asc-tools/tool-ops-tune/docs/figures/opstune-architecture.png +0 -0
  23. package/skills/asc-tools/tool-ops-tune/docs/figures/opstune-architecture.svg +253 -0
  24. package/skills/asc-tools/tool-ops-tune/docs/ops-tune-design.md +404 -0
  25. package/skills/asc-tools/tool-ops-tune/docs//347/224/250/344/276/213/346/236/204/345/273/272.md +730 -0
  26. 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
  27. package/skills/asc-tools/tool-ops-tune/evals/evals.json +242 -0
  28. package/skills/asc-tools/tool-ops-tune/ops-collect/SKILL.md +146 -0
  29. package/skills/asc-tools/tool-ops-tune/ops-collect/references/tool-routing.md +86 -0
  30. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_board.sh +458 -0
  31. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_cases.py +368 -0
  32. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_sim.sh +134 -0
  33. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/csv_to_db.py +314 -0
  34. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/db_bench.py +545 -0
  35. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/facts_bridge.py +1102 -0
  36. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/isolation_test.py +452 -0
  37. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/jsonl_to_cases.py +163 -0
  38. package/skills/asc-tools/tool-ops-tune/ops-family/SKILL.md +76 -0
  39. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/advanced_tiling.md +92 -0
  40. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/broadcast_design.md +160 -0
  41. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_kernel.cpp +126 -0
  42. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_tiling.cpp +144 -0
  43. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_tiling_common.h +401 -0
  44. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_kernel.cpp +107 -0
  45. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_tiling.cpp +64 -0
  46. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/datacopypad_design.md +46 -0
  47. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/guide.md +14 -0
  48. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/nddma_design.md +53 -0
  49. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/onedim_design.md +114 -0
  50. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/ub_broadcast_design.md +67 -0
  51. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/datacopy_optimization_design.md +351 -0
  52. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/index.md +9 -0
  53. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/tail_block_design.md +268 -0
  54. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/index.md +38 -0
  55. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_aclrt_event.cpp +199 -0
  56. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_torch_event.py +130 -0
  57. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/ub_resident_design.md +342 -0
  58. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/guide.md +69 -0
  59. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/index.md +4 -0
  60. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_base.template +81 -0
  61. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_big_dim.template +217 -0
  62. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_one_axis.template +336 -0
  63. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_two_axis.template +781 -0
  64. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_n_last.template +340 -0
  65. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_small_shape.template +321 -0
  66. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_tensor_move.template +102 -0
  67. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd.template +480 -0
  68. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd_021axis.template +533 -0
  69. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_with_gather.template +688 -0
  70. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/transpose_tiling_data.template +192 -0
  71. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_big_dim.md +220 -0
  72. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_cut_one_axis.md +175 -0
  73. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_cut_two_axis.md +177 -0
  74. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_fusion_design.md +398 -0
  75. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_gather.md +191 -0
  76. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_n_last.md +276 -0
  77. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_small_shape.md +315 -0
  78. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tensor_move.md +203 -0
  79. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md +176 -0
  80. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md +206 -0
  81. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md +179 -0
  82. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/double_buffer_design.md +288 -0
  83. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/guide.md +46 -0
  84. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/index.md +10 -0
  85. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/CMakeLists.txt +131 -0
  86. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/README.md +55 -0
  87. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/add_custom_torch.cpp +80 -0
  88. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/ops.h +23 -0
  89. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/register.cpp +30 -0
  90. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/add_custom.asc +149 -0
  91. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/data_utils.h +97 -0
  92. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_kernel.asc +136 -0
  93. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_tiling.h +31 -0
  94. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/run.sh +87 -0
  95. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/gen_data.py +70 -0
  96. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/golden.py +34 -0
  97. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/test_torch.py +99 -0
  98. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/verify_result.py +56 -0
  99. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/usage_guide.md +61 -0
  100. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/vector_efficiency_design.md +203 -0
  101. package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/fa_mixed_kernel_design.md +174 -0
  102. package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/fa_roofline_design.md +141 -0
  103. package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/guide.md +87 -0
  104. package/skills/asc-tools/tool-ops-tune/ops-family/references/knowledge_gaps.json +56 -0
  105. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/best-practices-guide.md +14 -0
  106. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/fullload_design.md +344 -0
  107. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/guide.md +52 -0
  108. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/mte2_preload_design.md +320 -0
  109. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/pingpong_design.md +254 -0
  110. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/scale_coalescing_design.md +282 -0
  111. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/streamk_design.md +374 -0
  112. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/swat_design.md +423 -0
  113. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/templates/matmul_basic_blaze.template +165 -0
  114. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/templates/usage_guide.md +29 -0
  115. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/best-practices-guide.md +43 -0
  116. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/guide.md +42 -0
  117. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/local_matmul_design.md +130 -0
  118. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/pipeline_balancing_design.md +502 -0
  119. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/guide.md +178 -0
  120. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template +75 -0
  121. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_full_load.template +429 -0
  122. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_recompute.template +485 -0
  123. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_small_r.template +348 -0
  124. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_full_load.template +574 -0
  125. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_online.template +324 -0
  126. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_recompute.template +436 -0
  127. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_base.template +950 -0
  128. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/fused_attention_online_softmax_design.md +428 -0
  129. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_full_load.md +137 -0
  130. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_recompute.md +135 -0
  131. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_small_r.md +122 -0
  132. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_full_load.md +144 -0
  133. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_online.md +185 -0
  134. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_recompute.md +163 -0
  135. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling.template +460 -0
  136. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling_data.template +278 -0
  137. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/state_resident_design.md +337 -0
  138. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/usage_guide.md +253 -0
  139. package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/coding_principles.md +476 -0
  140. package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/conv_scalar.md +163 -0
  141. package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/guide.md +30 -0
  142. package/skills/asc-tools/tool-ops-tune/ops-family/references/simt/guide.md +91 -0
  143. package/skills/asc-tools/tool-ops-tune/ops-family/references/simt/optimization-guide.md +110 -0
  144. package/skills/asc-tools/tool-ops-tune/ops-family/references/sort/guide.md +83 -0
  145. package/skills/asc-tools/tool-ops-tune/ops-family/references/sort/radix_sort.md +354 -0
  146. package/skills/asc-tools/tool-ops-tune/ops-family/scripts/family_asset_audit.py +68 -0
  147. package/skills/asc-tools/tool-ops-tune/ops-family/scripts/tiling_candidates.py +419 -0
  148. package/skills/asc-tools/tool-ops-tune/ops-mechanism/SKILL.md +23 -0
  149. package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/ascendc/case_groupedmatmul_pipeline.md +23 -0
  150. package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/ascendc/case_triton_atomic_revert.md +19 -0
  151. package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/mc2/case_mc2_fusion.md +19 -0
  152. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/api-usage.md +70 -0
  153. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/ascendc-regbase-vf.md +45 -0
  154. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/ascendc-tiling.md +51 -0
  155. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/data-copy.md +67 -0
  156. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/index.md +45 -0
  157. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/mc2-balancing.md +77 -0
  158. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/mc2.md +103 -0
  159. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/memory-hierarchy.md +40 -0
  160. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/pipeline.md +95 -0
  161. package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/case_backfill.py +170 -0
  162. package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/log_gap.py +145 -0
  163. package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/mc2_search.py +367 -0
  164. package/skills/asc-tools/tool-ops-tune/ops-report/SKILL.md +77 -0
  165. package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/run_evals.py +963 -0
  166. package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/smoke/install-hooks.sh +65 -0
  167. package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/smoke/run_smoke.sh +535 -0
  168. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/core_tail_a5.csv +25 -0
  169. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/few_cores_a5.csv +5 -0
  170. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/mte2_bound_a2.csv +17 -0
  171. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/multi_kernel_mix_a5.csv +7 -0
  172. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/no_bound_a5.csv +9 -0
  173. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/serial_no_overlap_a2.csv +9 -0
  174. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/vec_bound_a5.csv +9 -0
  175. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/io-contracts.md +94 -0
  176. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/rule-schema.md +130 -0
  177. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/scope-schema.md +61 -0
  178. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/soc-spec.yaml +140 -0
  179. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L0-instruction.yaml +67 -0
  180. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L1-single-core.yaml +316 -0
  181. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L2-inter-core.yaml +173 -0
  182. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L3-inter-card.yaml +156 -0
  183. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/batch_pipeline.py +466 -0
  184. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/calibrate.py +249 -0
  185. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/delta_compare.py +278 -0
  186. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/render_html.py +304 -0
  187. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/snapshot.py +200 -0
  188. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/trace_bubble.py +331 -0
  189. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/verdict.py +1094 -0
  190. package/skills/asc-tools/tool-ops-tune/scripts/diff_audit.py +281 -0
  191. package/skills/asc-tools/tool-precision-debug/LICENSE +38 -0
  192. package/skills/asc-tools/tool-precision-debug/README.md +190 -0
  193. package/skills/asc-tools/tool-precision-debug/scripts/install.sh +475 -0
  194. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/LICENSE +38 -0
  195. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/SKILL.md +136 -0
  196. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/evals/evals.json +932 -0
  197. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/baseline.md +69 -0
  198. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/checkpoint-design.md +82 -0
  199. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/dumptensor.md +83 -0
  200. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/hypothesis-experiment.md +114 -0
  201. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/index.md +20 -0
  202. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/localization.md +85 -0
  203. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/numerical-modeling.md +94 -0
  204. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/operator-modeling.md +116 -0
  205. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/progressive-error-analysis.md +86 -0
  206. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/reporting.md +140 -0
  207. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/reproducibility.md +121 -0
  208. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/semantic-bisection.md +72 -0
  209. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/sensitive-points.md +146 -0
  210. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/fp16-promotion-boundary.md +46 -0
  211. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/fused-rmsnorm-gelu-residual.md +162 -0
  212. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/index.md +16 -0
  213. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/integer-float-collision.md +44 -0
  214. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/partial-statistics-merge.md +30 -0
  215. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/softplus-v2-grad-family.md +156 -0
  216. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/sync-dataflow-handshake.md +89 -0
  217. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/tail-valid-region-state.md +30 -0
  218. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/thnn-fused-gru-bias-reduction.md +73 -0
  219. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/index.md +34 -0
  220. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/accumulation-order.md +108 -0
  221. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/algorithm-parameter-contract.md +118 -0
  222. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/buffer-lifetime-alias.md +133 -0
  223. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/cast-rounding.md +76 -0
  224. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/complex-operator-boundary.md +48 -0
  225. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/data-movement-alignment.md +104 -0
  226. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/golden-host-contract.md +84 -0
  227. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/index-address-ownership.md +57 -0
  228. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/index.md +32 -0
  229. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/multicore-ownership.md +117 -0
  230. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/pipeline-sync-visibility.md +146 -0
  231. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/precision-mode-approximation.md +90 -0
  232. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/shape-boundary-contract.md +57 -0
  233. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/special-values.md +122 -0
  234. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/tiling-tail-state.md +146 -0
  235. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/broadcast-transpose.md +64 -0
  236. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/convolution.md +60 -0
  237. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/dynamic-quant.md +47 -0
  238. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/index.md +18 -0
  239. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/matmul-mmad.md +131 -0
  240. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/normalization.md +145 -0
  241. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/reduction.md +167 -0
  242. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/softplus-v2-grad.md +58 -0
  243. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/sort-merge.md +65 -0
  244. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/index.md +18 -0
  245. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/kernel-debug-data.md +133 -0
  246. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/msobjdump.md +150 -0
  247. package/skills/cann-doctor/SKILL.md +15 -0
  248. package/skills/catalog.json +79 -0
  249. package/skills/mattpocock/GLOSSARY.md +30 -0
  250. package/skills/mattpocock/LICENSE +21 -0
  251. package/skills/mattpocock/README.md +258 -0
  252. package/skills/mattpocock/SCOPE.md +35 -0
  253. package/skills/mattpocock/docs/agents/triage-labels.md +15 -0
  254. package/skills/mattpocock/docs/engineering/ask-matt.md +91 -0
  255. package/skills/mattpocock/docs/engineering/code-review.md +101 -0
  256. package/skills/mattpocock/docs/engineering/codebase-design.md +88 -0
  257. package/skills/mattpocock/docs/engineering/diagnosing-bugs.md +94 -0
  258. package/skills/mattpocock/docs/engineering/domain-modeling.md +86 -0
  259. package/skills/mattpocock/docs/engineering/grill-with-docs.md +82 -0
  260. package/skills/mattpocock/docs/engineering/implement-spec.md +86 -0
  261. package/skills/mattpocock/docs/engineering/implement.md +97 -0
  262. package/skills/mattpocock/docs/engineering/improve-codebase-architecture.md +113 -0
  263. package/skills/mattpocock/docs/engineering/pr.md +79 -0
  264. package/skills/mattpocock/docs/engineering/prototype.md +67 -0
  265. package/skills/mattpocock/docs/engineering/research.md +73 -0
  266. package/skills/mattpocock/docs/engineering/resolving-merge-conflicts.md +53 -0
  267. package/skills/mattpocock/docs/engineering/retro.md +81 -0
  268. package/skills/mattpocock/docs/engineering/setup-matt-pocock-skills.md +94 -0
  269. package/skills/mattpocock/docs/engineering/tdd.md +94 -0
  270. package/skills/mattpocock/docs/engineering/to-spec.md +81 -0
  271. package/skills/mattpocock/docs/engineering/to-tickets.md +99 -0
  272. package/skills/mattpocock/docs/engineering/triage.md +109 -0
  273. package/skills/mattpocock/docs/engineering/wayfinder.md +103 -0
  274. package/skills/mattpocock/docs/engineering/wizard.md +96 -0
  275. package/skills/mattpocock/docs/productivity/grill-me.md +76 -0
  276. package/skills/mattpocock/docs/productivity/grilling.md +87 -0
  277. package/skills/mattpocock/docs/productivity/handoff.md +76 -0
  278. package/skills/mattpocock/docs/productivity/teach.md +97 -0
  279. package/skills/mattpocock/docs/productivity/to-questionnaire.md +78 -0
  280. package/skills/mattpocock/docs/productivity/wait-what.md +36 -0
  281. package/skills/mattpocock/docs/productivity/writing-for-agents.md +70 -0
  282. package/skills/mattpocock/scripts/link-skills.sh +62 -0
  283. package/skills/mattpocock/scripts/list-skills.sh +7 -0
  284. package/skills/mattpocock/scripts/sync-plugin-version.mjs +41 -0
  285. package/skills/mattpocock/skills/deprecated/README.md +3 -0
  286. package/skills/mattpocock/skills/engineering/README.md +34 -0
  287. package/skills/mattpocock/skills/engineering/ask-matt/PHASE-BOUNDARIES.md +55 -0
  288. package/skills/mattpocock/skills/engineering/ask-matt/SKILL.md +97 -0
  289. package/skills/mattpocock/skills/engineering/ask-matt/agents/openai.yaml +5 -0
  290. package/skills/mattpocock/skills/engineering/code-review/SKILL.md +89 -0
  291. package/skills/mattpocock/skills/engineering/code-review/agents/openai.yaml +3 -0
  292. package/skills/mattpocock/skills/engineering/codebase-design/DEEPENING.md +37 -0
  293. package/skills/mattpocock/skills/engineering/codebase-design/DESIGN-IT-TWICE.md +44 -0
  294. package/skills/mattpocock/skills/engineering/codebase-design/SKILL.md +114 -0
  295. package/skills/mattpocock/skills/engineering/codebase-design/agents/openai.yaml +3 -0
  296. package/skills/mattpocock/skills/engineering/diagnosing-bugs/SKILL.md +138 -0
  297. package/skills/mattpocock/skills/engineering/diagnosing-bugs/agents/openai.yaml +3 -0
  298. package/skills/mattpocock/skills/engineering/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
  299. package/skills/mattpocock/skills/engineering/domain-modeling/ADR-FORMAT.md +47 -0
  300. package/skills/mattpocock/skills/engineering/domain-modeling/GLOSSARY-FORMAT.md +60 -0
  301. package/skills/mattpocock/skills/engineering/domain-modeling/SKILL.md +74 -0
  302. package/skills/mattpocock/skills/engineering/domain-modeling/agents/openai.yaml +3 -0
  303. package/skills/mattpocock/skills/engineering/grill-with-docs/SKILL.md +7 -0
  304. package/skills/mattpocock/skills/engineering/grill-with-docs/agents/openai.yaml +5 -0
  305. package/skills/mattpocock/skills/engineering/implement/SKILL.md +17 -0
  306. package/skills/mattpocock/skills/engineering/implement/agents/openai.yaml +5 -0
  307. package/skills/mattpocock/skills/engineering/implement-spec/SKILL.md +42 -0
  308. package/skills/mattpocock/skills/engineering/implement-spec/agents/openai.yaml +5 -0
  309. package/skills/mattpocock/skills/engineering/improve-codebase-architecture/HTML-REPORT.md +123 -0
  310. package/skills/mattpocock/skills/engineering/improve-codebase-architecture/SKILL.md +71 -0
  311. package/skills/mattpocock/skills/engineering/improve-codebase-architecture/agents/openai.yaml +5 -0
  312. package/skills/mattpocock/skills/engineering/pr/CREDITS.md +3 -0
  313. package/skills/mattpocock/skills/engineering/pr/SKILL.md +170 -0
  314. package/skills/mattpocock/skills/engineering/pr/agents/openai.yaml +3 -0
  315. package/skills/mattpocock/skills/engineering/prototype/LOGIC.md +67 -0
  316. package/skills/mattpocock/skills/engineering/prototype/SKILL.md +26 -0
  317. package/skills/mattpocock/skills/engineering/prototype/UI.md +112 -0
  318. package/skills/mattpocock/skills/engineering/prototype/agents/openai.yaml +3 -0
  319. package/skills/mattpocock/skills/engineering/research/SKILL.md +12 -0
  320. package/skills/mattpocock/skills/engineering/research/agents/openai.yaml +3 -0
  321. package/skills/mattpocock/skills/engineering/retro/SKILL.md +44 -0
  322. package/skills/mattpocock/skills/engineering/retro/agents/openai.yaml +5 -0
  323. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/SKILL.md +120 -0
  324. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  325. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/domain.md +51 -0
  326. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +50 -0
  327. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
  328. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
  329. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -0
  330. package/skills/mattpocock/skills/engineering/tdd/SKILL.md +38 -0
  331. package/skills/mattpocock/skills/engineering/tdd/agents/openai.yaml +3 -0
  332. package/skills/mattpocock/skills/engineering/tdd/mocking.md +59 -0
  333. package/skills/mattpocock/skills/engineering/tdd/tests.md +77 -0
  334. package/skills/mattpocock/skills/engineering/to-spec/SKILL.md +75 -0
  335. package/skills/mattpocock/skills/engineering/to-spec/agents/openai.yaml +5 -0
  336. package/skills/mattpocock/skills/engineering/to-tickets/SKILL.md +105 -0
  337. package/skills/mattpocock/skills/engineering/to-tickets/agents/openai.yaml +5 -0
  338. package/skills/mattpocock/skills/engineering/triage/AGENT-BRIEF.md +207 -0
  339. package/skills/mattpocock/skills/engineering/triage/OUT-OF-SCOPE.md +105 -0
  340. package/skills/mattpocock/skills/engineering/triage/SKILL.md +112 -0
  341. package/skills/mattpocock/skills/engineering/triage/agents/openai.yaml +5 -0
  342. package/skills/mattpocock/skills/engineering/wayfinder/SKILL.md +128 -0
  343. package/skills/mattpocock/skills/engineering/wayfinder/agents/openai.yaml +5 -0
  344. package/skills/mattpocock/skills/engineering/wizard/SKILL.md +44 -0
  345. package/skills/mattpocock/skills/engineering/wizard/agents/openai.yaml +3 -0
  346. package/skills/mattpocock/skills/engineering/wizard/template.sh +223 -0
  347. package/skills/mattpocock/skills/in-progress/README.md +17 -0
  348. package/skills/mattpocock/skills/in-progress/chief-of-staff/SKILL.md +75 -0
  349. package/skills/mattpocock/skills/in-progress/chief-of-staff/agents/openai.yaml +5 -0
  350. package/skills/mattpocock/skills/in-progress/claude-handoff/SKILL.md +18 -0
  351. package/skills/mattpocock/skills/in-progress/claude-handoff/agents/openai.yaml +5 -0
  352. package/skills/mattpocock/skills/in-progress/loop-me/SKILL.md +32 -0
  353. package/skills/mattpocock/skills/in-progress/loop-me/agents/openai.yaml +5 -0
  354. package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/SKILL.md +102 -0
  355. package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/agents/openai.yaml +5 -0
  356. package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/dependency-cruiser.config.cjs +95 -0
  357. package/skills/mattpocock/skills/in-progress/software-factory/EXAMPLE-TASKS.md +80 -0
  358. package/skills/mattpocock/skills/in-progress/software-factory/GIT-HOSTS.md +84 -0
  359. package/skills/mattpocock/skills/in-progress/software-factory/OBSERVABILITY-PLATFORMS.md +75 -0
  360. package/skills/mattpocock/skills/in-progress/software-factory/RUNNERS.md +94 -0
  361. package/skills/mattpocock/skills/in-progress/software-factory/SKILL.md +98 -0
  362. package/skills/mattpocock/skills/in-progress/software-factory/TICKET-TRACKERS.md +85 -0
  363. package/skills/mattpocock/skills/in-progress/writing-beats/SKILL.md +67 -0
  364. package/skills/mattpocock/skills/in-progress/writing-beats/agents/openai.yaml +5 -0
  365. package/skills/mattpocock/skills/in-progress/writing-fragments/SKILL.md +79 -0
  366. package/skills/mattpocock/skills/in-progress/writing-fragments/agents/openai.yaml +5 -0
  367. package/skills/mattpocock/skills/in-progress/writing-shape/SKILL.md +79 -0
  368. package/skills/mattpocock/skills/in-progress/writing-shape/agents/openai.yaml +5 -0
  369. package/skills/mattpocock/skills/misc/README.md +8 -0
  370. package/skills/mattpocock/skills/misc/git-guardrails-claude-code/SKILL.md +95 -0
  371. package/skills/mattpocock/skills/misc/git-guardrails-claude-code/agents/openai.yaml +3 -0
  372. package/skills/mattpocock/skills/misc/git-guardrails-claude-code/scripts/block-dangerous-git.sh +25 -0
  373. package/skills/mattpocock/skills/misc/migrate-to-shoehorn/SKILL.md +118 -0
  374. package/skills/mattpocock/skills/misc/migrate-to-shoehorn/agents/openai.yaml +3 -0
  375. package/skills/mattpocock/skills/misc/scaffold-exercises/SKILL.md +106 -0
  376. package/skills/mattpocock/skills/misc/scaffold-exercises/agents/openai.yaml +3 -0
  377. package/skills/mattpocock/skills/misc/setup-pre-commit/SKILL.md +91 -0
  378. package/skills/mattpocock/skills/misc/setup-pre-commit/agents/openai.yaml +3 -0
  379. package/skills/mattpocock/skills/productivity/README.md +20 -0
  380. package/skills/mattpocock/skills/productivity/grill-me/SKILL.md +7 -0
  381. package/skills/mattpocock/skills/productivity/grill-me/agents/openai.yaml +5 -0
  382. package/skills/mattpocock/skills/productivity/grilling/SKILL.md +30 -0
  383. package/skills/mattpocock/skills/productivity/grilling/agents/openai.yaml +3 -0
  384. package/skills/mattpocock/skills/productivity/handoff/SKILL.md +16 -0
  385. package/skills/mattpocock/skills/productivity/handoff/agents/openai.yaml +5 -0
  386. package/skills/mattpocock/skills/productivity/teach/GLOSSARY-FORMAT.md +35 -0
  387. package/skills/mattpocock/skills/productivity/teach/LEARNING-RECORD-FORMAT.md +46 -0
  388. package/skills/mattpocock/skills/productivity/teach/MISSION-FORMAT.md +31 -0
  389. package/skills/mattpocock/skills/productivity/teach/RESOURCES-FORMAT.md +32 -0
  390. package/skills/mattpocock/skills/productivity/teach/SKILL.md +140 -0
  391. package/skills/mattpocock/skills/productivity/teach/agents/openai.yaml +5 -0
  392. package/skills/mattpocock/skills/productivity/to-questionnaire/SKILL.md +54 -0
  393. package/skills/mattpocock/skills/productivity/to-questionnaire/agents/openai.yaml +5 -0
  394. package/skills/mattpocock/skills/productivity/wait-what/SKILL.md +7 -0
  395. package/skills/mattpocock/skills/productivity/wait-what/agents/openai.yaml +5 -0
  396. package/skills/mattpocock/skills/productivity/writing-for-agents/SKILL-MECHANICS.md +22 -0
  397. package/skills/mattpocock/skills/productivity/writing-for-agents/SKILL.md +81 -0
  398. package/skills/mattpocock/skills/productivity/writing-for-agents/agents/openai.yaml +3 -0
  399. package/skills/task-agents/operator-development/Agent.md +71 -0
  400. package/skills/task-agents/operator-development/skills.json +120 -0
  401. package/skills/task-agents/operator-development/stages.schema.json +532 -0
  402. package/skills/task-agents/performance-optimization/Agent.md +78 -0
  403. package/skills/task-agents/performance-optimization/skills.json +64 -0
  404. package/skills/task-agents/response-protocol.md +35 -0
  405. package/skills/task-agents/sidebar-contracts.schema.json +4168 -0
  406. package/skills/task-agents/sidebar-selection.schema.json +971 -0
  407. package/skills/task-agents/visuals/components.json +283 -0
  408. package/skills/task-agents/visuals/contracts.schema.json +3628 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Copyright (c) 2026 Huawei Technologies Co., Ltd.
3
+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4
+ * CANN Open Software License Agreement Version 2.0 (the "License").
5
+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7
+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8
+ * See LICENSE in the root of the software repository for the full text of the License.
9
+ */
10
+
11
+ /*!
12
+ * \file transpose_tiling_data.h
13
+ * \brief POD TilingData for the <<<>>> direct-launch Transpose op.
14
+ *
15
+ * This replaces the framework-generated (BEGIN_TILING_DATA_DEF ...) struct used by the
16
+ * original arch35 op. The field names, types and array lengths match TransposeOpTilingData
17
+ * in transpose_tiling_arch35.h exactly, so the arch35 kernel headers read it unchanged via
18
+ * plain member access (tilingData_->field). The struct is a plain-old-data blob copied
19
+ * verbatim from host to the kernel `tiling` GM argument.
20
+ */
21
+ #ifndef TRANSPOSE_TILING_DATA_H
22
+ #define TRANSPOSE_TILING_DATA_H
23
+
24
+ #include <cstdint>
25
+
26
+ #ifndef TRANSPOSE_MAX_AXIS_NUM_TD
27
+ #define TRANSPOSE_MAX_AXIS_NUM_TD 8
28
+ #endif
29
+ #ifndef NDDMA_MAX_DIM_NUM_TD
30
+ #define NDDMA_MAX_DIM_NUM_TD 5
31
+ #endif
32
+
33
+ #pragma pack(push, 8)
34
+ struct TransposeOpTilingData {
35
+ int64_t permSize;
36
+ int64_t inCutIndex;
37
+ int64_t outCutIndex;
38
+ int64_t inUbFactor;
39
+ int64_t outUbFactor;
40
+ int64_t inTailFactor;
41
+ int64_t outTailFactor;
42
+ int64_t realCoreNum;
43
+ int64_t blkFactor;
44
+ int64_t blkTailFactor;
45
+ int64_t ubSize;
46
+ int64_t totalNddmaNum;
47
+ int64_t rangeMainEnd;
48
+ int64_t rangeInputTailStart;
49
+ int64_t rangeInputTailEnd;
50
+ int64_t rangeOutputTailStart;
51
+ int64_t rangeOutputTailEnd;
52
+ int64_t rangeTailStart;
53
+ int64_t rangeTailEnd;
54
+ int64_t inputShape[TRANSPOSE_MAX_AXIS_NUM_TD];
55
+ int64_t outputShape[TRANSPOSE_MAX_AXIS_NUM_TD];
56
+ int64_t perm[TRANSPOSE_MAX_AXIS_NUM_TD];
57
+ int64_t baseInShape[TRANSPOSE_MAX_AXIS_NUM_TD];
58
+ int64_t baseNddmaShape[NDDMA_MAX_DIM_NUM_TD];
59
+ int64_t nddmaIdx[NDDMA_MAX_DIM_NUM_TD];
60
+ int64_t expandedPerm[NDDMA_MAX_DIM_NUM_TD];
61
+ int64_t expandedInputShape[NDDMA_MAX_DIM_NUM_TD];
62
+ int64_t expandedOutputShape[NDDMA_MAX_DIM_NUM_TD];
63
+ int64_t inUbMainSrcShape[NDDMA_MAX_DIM_NUM_TD];
64
+ int64_t inUbMainDstShape[NDDMA_MAX_DIM_NUM_TD];
65
+ int64_t inUbInputTailSrcShape[NDDMA_MAX_DIM_NUM_TD];
66
+ int64_t inUbInputTailDstShape[NDDMA_MAX_DIM_NUM_TD];
67
+ int64_t inUbOutputTailSrcShape[NDDMA_MAX_DIM_NUM_TD];
68
+ int64_t inUbOutputTailDstShape[NDDMA_MAX_DIM_NUM_TD];
69
+ int64_t inUbTailSrcShape[NDDMA_MAX_DIM_NUM_TD];
70
+ int64_t inUbTailDstShape[NDDMA_MAX_DIM_NUM_TD];
71
+ };
72
+
73
+ // Wrapper struct kept for parity with the original TransposeTilingData layout,
74
+ // so the kernel entry can pass &tilingData.transposeOpTiling like the original.
75
+ struct TransposeTilingData {
76
+ TransposeOpTilingData transposeOpTiling;
77
+ };
78
+
79
+ // ===================== Accelerator-strategy TilingData (POD) =====================
80
+ // These mirror the framework (BEGIN_TILING_DATA_DEF ...) structs used by the
81
+ // gather / vconv(5hd) / 021vconv arch35 kernels. Field names/types/order match the
82
+ // originals exactly so the kernel headers read them unchanged via plain member access.
83
+
84
+ #ifndef GATHER_UB_MAX_DIM_NUM_TD
85
+ #define GATHER_UB_MAX_DIM_NUM_TD 6
86
+ #endif
87
+ #ifndef GATHER_MAX_TRANS_AXIS_NUM_TD
88
+ #define GATHER_MAX_TRANS_AXIS_NUM_TD 8
89
+ #endif
90
+
91
+ struct GatherTransposeTilingData {
92
+ uint64_t tilingKey;
93
+ uint32_t dataTensorSize;
94
+ uint32_t indexTensorSize;
95
+ uint32_t usedCoreCnt;
96
+ int8_t blkAxesCnt;
97
+ int8_t blkInUbCutPos;
98
+ int8_t blkOutUbCutPos;
99
+ int8_t ubAxesCnt;
100
+ int8_t inUbInCutPos;
101
+ int8_t inUbOutCutPos;
102
+ int8_t outUbInCutPos;
103
+ int8_t outUbOutCutPos;
104
+ int64_t blkFactor;
105
+ int64_t blkTailFactor;
106
+ int64_t inUbCutAxisSize;
107
+ int64_t outUbCutAxisSize;
108
+ int32_t inUbCutAxisFactor;
109
+ int32_t outUbCutAxisFactor;
110
+ int64_t axis0InSrcStride;
111
+ int64_t axis1InSrcStride;
112
+ int64_t axis2InSrcStride;
113
+ int64_t axis0OutDstStride;
114
+ int64_t axis1OutDstStride;
115
+ int64_t axis2OutDstStride;
116
+ int64_t blkAxes[GATHER_MAX_TRANS_AXIS_NUM_TD];
117
+ int64_t blkAxesInAOffset[GATHER_MAX_TRANS_AXIS_NUM_TD];
118
+ int64_t blkAxesOutAOffset[GATHER_MAX_TRANS_AXIS_NUM_TD];
119
+ int32_t inUbAxes[GATHER_UB_MAX_DIM_NUM_TD];
120
+ int32_t outUbAxes[GATHER_UB_MAX_DIM_NUM_TD];
121
+ int8_t ubPerm[GATHER_UB_MAX_DIM_NUM_TD];
122
+ };
123
+
124
+ struct CoreSplitPara {
125
+ int64_t AlignBlockFactor;
126
+ int64_t BlockFactor;
127
+ int64_t BlockCount;
128
+ int64_t AlignBlockTailFactor;
129
+ int64_t BlockTailFactor;
130
+ };
131
+
132
+ struct UbSplitPara {
133
+ int64_t MainCoreUbAlignFactor;
134
+ int64_t MainCoreUbFactor;
135
+ int64_t MainCoreUbCount;
136
+ int64_t MainCoreTailUbAlignFactor;
137
+ int64_t MainCoreTailUbFactor;
138
+ int64_t TailCoreUbAlignFactor;
139
+ int64_t TailCoreUbFactor;
140
+ int64_t TailCoreUbCount;
141
+ int64_t TailCoreTailUbAlignFactor;
142
+ int64_t TailCoreTailUbFactor;
143
+ };
144
+
145
+ struct TransposeVCONVTilingData {
146
+ int64_t AvailableUbSize;
147
+ int64_t UsedCoreNum;
148
+ int64_t MainCoreLoopCount;
149
+ int64_t TailCoreLoopCount;
150
+ int64_t RLen;
151
+ int64_t CblkLen;
152
+ int64_t RAlignBlock;
153
+ int64_t CAlignBlock;
154
+ int64_t RAlignBlockElem;
155
+ int64_t CAlignBlockElem;
156
+ bool IsRSplit;
157
+ bool IsRCSplit;
158
+ CoreSplitPara rSplitPara;
159
+ CoreSplitPara cSplitPara;
160
+ UbSplitPara rUbSplitPara;
161
+ UbSplitPara cUbSplitPara;
162
+ };
163
+
164
+ struct Transpose021UbSplitPara {
165
+ int64_t UbAlignFactor;
166
+ int64_t UbFactor;
167
+ int64_t UbCount;
168
+ int64_t UbTailAlignFactor;
169
+ int64_t UbTailFactor;
170
+ };
171
+
172
+ struct Transpose021VCONVTilingData {
173
+ int64_t AvailableUbSize;
174
+ int64_t UsedCoreNum;
175
+ int64_t NLen;
176
+ int64_t HLen;
177
+ int64_t WLen;
178
+ int64_t HAlignBlockElem;
179
+ int64_t WAlignBlockElem;
180
+ int64_t NPerCore;
181
+ int64_t NTailCore;
182
+ int64_t UbLoopCount;
183
+ bool UseRConv;
184
+ bool UseHSplit;
185
+ int64_t HPerCore;
186
+ int64_t HTailCore;
187
+ Transpose021UbSplitPara rUbSplitPara;
188
+ Transpose021UbSplitPara cUbSplitPara;
189
+ };
190
+ #pragma pack(pop)
191
+
192
+ #endif // TRANSPOSE_TILING_DATA_H
@@ -0,0 +1,220 @@
1
+ # Transpose 性能调优参考:BIG_DIM(高维转置)
2
+
3
+ - 策略名:BIG_DIM(高维转置)
4
+ - tilingKey:10005(`transpose_kernel.cpp` 中宏 `BIG_DIM 10005`)
5
+ - kernel 实现:`arch35/transpose_big_dim.h`,类 `TransposeBigDim`
6
+ - host 选择/切分:`transpose_tiling.cpp` 中 `EntryTilingTemplate`、`DoSplitUBBigDim`、`FlushBaseNumForBigDim`、`CalcBlockSplitInfoForBigDim`
7
+
8
+ 本文面向性能调优开发者,内容以上述代码为准。
9
+
10
+ ---
11
+
12
+ ## 一、适用场景
13
+
14
+ ### 为什么需要专门的高维策略
15
+
16
+ 其它 NDDMA 系列策略(NDDMA_BASE、CUT_ONCE、CUT_TWICE 等)依赖硬件 NDDMA(N 维 DMA)搬运指令,一次搬运能描述的维数受硬件上限约束。代码中该上限为常量:
17
+
18
+ ```cpp
19
+ // transpose_base.h
20
+ constexpr int64_t NDDMA_MAX_DIM_NUM = 5; // NDDMA 一次最多描述 5 维
21
+ ```
22
+
23
+ kernel 侧的多维搬运参数结构也被固定成 `NDDMA_MAX_DIM_NUM` 维:`MultiCopyLoopInfo<NDDMA_MAX_DIM_NUM>`、`MultiCopyParams<T, NDDMA_MAX_DIM_NUM>`。也就是说,一条 NDDMA 指令的 loop 描述最多只有 5 个维度(loopSize / src stride / dst stride)。
24
+
25
+ 当算子的 reduce 之后维度(`shapeInfo_.dim`)超过 5 时,无法用一条 NDDMA 指令覆盖全部维度。`EntryTilingTemplate` 中的分派逻辑正是据此选择:
26
+
27
+ ```cpp
28
+ // transpose_tiling.cpp EntryTilingTemplate()
29
+ if (shapeInfo_.dim <= NDDMA_MAX_DIM_NUM) {
30
+ tilingKey_ = KEY_NDDMA_BASE; // <=5 维,单指令可覆盖
31
+ } else {
32
+ tilingKey_ = KEY_BIG_DIM; // >5 维,走高维专用策略
33
+ }
34
+ ```
35
+
36
+ 前置条件:只有当总数据量达到阈值(`totalVolumeActual * eleLenInBytes >= SMALL_SHAPE_BYTES_THRES_HOLD`)且不满足 N_LAST 特例时,`dim > 5` 才会落到 BIG_DIM;否则走 SMALL_SHAPE 等策略。
37
+
38
+ ### 它解决什么问题
39
+
40
+ BIG_DIM 解决的核心问题是:**维数超过 NDDMA 硬件上限(5)时,如何仍然用 NDDMA 高效完成任意 perm 的转置**。
41
+
42
+ 思路是把高维转置拆成两层:
43
+
44
+ 1. **外层软件循环(host + kernel 协同)**:把「不进 NDDMA 的那些维度」以及被切分维度的分块,折叠成一个一维的 `loopIdx` 计数,由多核和 kernel 内循环遍历。每个 `loopIdx` 对应一次 NDDMA 搬运。
45
+ 2. **内层 NDDMA 硬件搬运**:每个 `loopIdx` 内,用一条最多 5 维的 NDDMA 指令搬运一块连续/带 stride 的子张量,由硬件完成这 5 维范围内的重排。
46
+
47
+ ### 为什么能提升性能
48
+
49
+ - 内层仍然使用 NDDMA 硬件多维搬运,享受硬件带 stride 的多维搬运能力,避免退化为逐元素 gather/标量搬运。
50
+ - 外层把无法放进 NDDMA 的维度折叠成一维 `loopIdx`,天然可按 `loopIdx` 做多核均分(`CalcBlockSplitInfoForBigDim` + `ParseMultiCoreRange`),核间负载均衡。
51
+ - UB 分块因子(`outUbFactor`)在 host 侧按 UB 容量和核数联合寻优,尽量让核用满(`VEC_CORE_USED_THRES_HOLD`),兼顾单次搬运粒度与并行度。
52
+
53
+ ---
54
+
55
+ ## 二、kernel 执行流程与关键实现
56
+
57
+ ### 维度映射:哪 5 维进 NDDMA(host `FlushBaseNumForBigDim`)
58
+
59
+ host 侧需要从 >5 维中,挑出「最内侧的、连续的」维度交给 NDDMA。按输出维序从最内(`dim-1`)向外遍历,填充 `nddmaIdx_`(记录进 NDDMA 的是原 perm 的哪个轴)与 `baseNddmaShape_`(该轴在 NDDMA 输出内的 stride 基数),同时累计 `totalNddmaNum_`(一次 NDDMA 搬运的元素总量):
60
+
61
+ ```cpp
62
+ // transpose_tiling.cpp FlushBaseNumForBigDim() 关键片段
63
+ for (int64_t i = shapeInfo_.dim - 1; i >= 0; i--) {
64
+ baseInShape_[i] = baseInNum;
65
+ baseInNum *= shapeInfo_.reducedInShape[i];
66
+ if (i > splitInfo_.outCutIndex) { // 切分点更内侧:整轴进 NDDMA
67
+ nddmaIdx_[idxNum] = shapeInfo_.reducedPerm[i];
68
+ tmpNddmaShape[idxNum] = totalNddmaNum_;
69
+ totalNddmaNum_ *= shapeInfo_.reducedOutShape[i];
70
+ idxNum--;
71
+ } else if (i == splitInfo_.outCutIndex) { // 切分轴:只进 outUbFactor 份
72
+ nddmaIdx_[idxNum] = shapeInfo_.reducedPerm[i];
73
+ tmpNddmaShape[idxNum] = totalNddmaNum_;
74
+ totalNddmaNum_ *= splitInfo_.outUbFactor;
75
+ idxNum--;
76
+ } else if (idxNum >= 0) { // 切分点外侧:折叠到外层 loopIdx
77
+ nddmaIdx_[idxNum] = shapeInfo_.reducedPerm[i];
78
+ tmpNddmaShape[idxNum] = totalNddmaNum_;
79
+ idxNum--;
80
+ }
81
+ }
82
+ std::sort(std::begin(nddmaIdx_), std::end(nddmaIdx_)); // 按原始轴号排序
83
+ // 排序后重建 baseNddmaShape_ 与 nddmaIdx_ 的对应关系
84
+ ```
85
+
86
+ 要点:
87
+ - `outCutIndex`(输出切分轴)以内的维度整轴进 NDDMA;切分轴本身只取 `outUbFactor` 份进 NDDMA;更外侧维度不进 NDDMA,交给外层 `loopIdx`。
88
+ - `nddmaIdx_` 最终经 `std::sort` 排序,`baseNddmaShape_` 随之重排,使 NDDMA 内部按输入侧轴序索引一致。
89
+ - UB 分块由 `DoSplitUBBigDim` 决定:从最内维往外找,直到 `ubElement < reducedOutShape[i]` 或剩余可用 NDDMA 维数(`dimSize`,初始 `NDDMA_MAX_DIM_NUM-1`)耗尽,确定 `outCutIndex / outUbFactor / outTailFactor`。
90
+
91
+ ### Init
92
+
93
+ ```cpp
94
+ // transpose_big_dim.h
95
+ void Init(...) {
96
+ blockIdx_ = GetBlockIdx();
97
+ tiling_ = tilingData;
98
+ inputGM_.SetGlobalBuffer((__gm__ T*)x);
99
+ outputGM_.SetGlobalBuffer((__gm__ T*)y);
100
+ pipe->InitBuffer(vecQue_, 1, tiling_->ubSize); // 单块 UB
101
+ }
102
+ ```
103
+
104
+ 注意:`vecQue_` 使用 `TQueBind<VECIN, VECOUT, 1>`,buffer 深度为 1(单缓冲,in/out 复用同一块 UB),本策略未使用 double buffer。
105
+
106
+ ### Process 主流程
107
+
108
+ ```mermaid
109
+ flowchart TD
110
+ A[Process] --> B[ParseMultiCoreRange: 按 blockIdx 分配 loopIdx 区间]
111
+ B -->|本核无任务| Z[return]
112
+ B --> C[SetLoopInfo: 构建 NDDMA 5 维 loop 描述]
113
+ C --> D[构造 copyOut 参数 main/tail]
114
+ D --> E[组装 paramsMain / paramsTail]
115
+ E --> F[ProcessPerCore]
116
+ F --> G[预计算 mixedBase / dstLoopStride / srcLoopStride]
117
+ G --> H{遍历 loopIdx}
118
+ H -->|尾块| I[CopyIn paramsTail + CopyOut Tail]
119
+ H -->|主块| J[CopyIn paramsMain + CopyOut Main]
120
+ ```
121
+
122
+ 多核切分:`ParseMultiCoreRange`(在 `transpose_base.h`)根据 `realCoreNum / blkFactor / blkTailFactor` 把外层 `loopIdx` 空间均分给各核,返回本核区间 `[blkProcessIdxStart_, blkProcessIdxEnd_)`;`blockIdx_ >= realCoreNum` 的核直接返回不参与。
123
+
124
+ ### SetLoopInfo:构建 NDDMA 5 维搬运描述
125
+
126
+ 为每个 NDDMA 维打标 `nddmaFlag`,区分三类:
127
+
128
+ - `== -1`:该 NDDMA 轴正好是被切分的输出轴(`perm[outCutIndex]`)→ loopSize 取 `outUbFactor`,记录 `cutIdx_`。
129
+ - `== 1`:该轴位于切分点之后(属于 NDDMA 内部整搬运的轴)→ loopSize 取输入 shape,src stride 取 `baseInShape`,dst stride 取 `baseNddmaShape`。
130
+ - 其它:loopSize=1,仅带 dst stride。
131
+
132
+ ```cpp
133
+ // transpose_big_dim.h SetLoopInfo() 核心分支
134
+ if (nddmaFlag[...] == 1) {
135
+ loopInfo.loopSize[i] = tiling_->inputShape[nddmaIdx];
136
+ loopInfo.loopSrcStride[i] = tiling_->baseInShape[nddmaIdx];
137
+ loopInfo.loopDstStride[i] = tiling_->baseNddmaShape[...];
138
+ } else if (nddmaFlag[...] == -1) {
139
+ cutIdx_ = i;
140
+ loopInfo.loopSize[i] = tiling_->outUbFactor;
141
+ loopInfo.loopSrcStride[i] = tiling_->baseInShape[nddmaIdx];
142
+ loopInfo.loopDstStride[i] = tiling_->baseNddmaShape[...];
143
+ } else {
144
+ loopInfo.loopSize[i] = 1; loopInfo.loopSrcStride[i] = 1;
145
+ loopInfo.loopDstStride[i] = tiling_->baseNddmaShape[...];
146
+ }
147
+ ```
148
+
149
+ `loopLpSize/loopRpSize`(左右 pad)全部置 0,本策略不做 padding。
150
+
151
+ ### 主块 / 尾块
152
+
153
+ `outCutIndex` 轴被 `outUbFactor` 切分,末尾可能剩余 `outTailFactor` 份:
154
+
155
+ ```cpp
156
+ copyOutParamsMain.blockLen = tiling_->totalNddmaNum * sizeof(T);
157
+ copyOutParamsTail.blockLen =
158
+ tiling_->totalNddmaNum / tiling_->outUbFactor * tiling_->outTailFactor * sizeof(T);
159
+ // 尾块把 cutIdx_ 维的 loopSize 改成 outTailFactor
160
+ if (tiling_->outTailFactor != 0) {
161
+ loopInfo.loopSize[cutIdx_] = tiling_->outTailFactor;
162
+ }
163
+ ```
164
+
165
+ `ProcessPerCore` 中判定:当 `outTailFactor != 0` 且 `(loopIdx+1) % outCutLoopSize == 0` 时走尾块参数,否则走主块。`outCutLoopSize = CeilDiv(outputShape[outCutIndex], outUbFactor)`。
166
+
167
+ ### 索引映射:loopIdx → 混合进制 → GM 地址(CopyIn/CopyOut)
168
+
169
+ 外层 `loopIdx` 是把「切分轴的分块 + 切分点外侧各维」折叠成的一维计数。`ProcessPerCore` 先预计算每一位的进制 `dstAddressOffsetMixedBase_` 与各维步长 `dstLoopStride_ / srcLoopStride_`:
170
+
171
+ ```cpp
172
+ // 逐维累乘构造 stride,切分轴步长再乘 outUbFactor
173
+ if (i >= 1) {
174
+ dstLoopStride_[i] = dstLoopStride_[i-1] * tiling_->outputShape[permSize - i];
175
+ srcLoopStride_[i] = srcLoopStride_[i-1] * tiling_->inputShape[permSize - i];
176
+ }
177
+ dstLoopStride_[permSize-1-outCutIndex] *= outUbFactor;
178
+ srcLoopStride_[permSize-1-perm[outCutIndex]] *= outUbFactor;
179
+ ```
180
+
181
+ `DecimalToMixed` 把一维 `loopIdx` 按混合进制展开成各维坐标 `dstAddressOffsetMixedBaseRes_`(十进制 → 混合进制转换):
182
+
183
+ ```cpp
184
+ void DecimalToMixed(int64_t num, int64_t bases[], int64_t mixedBase[]) {
185
+ for (int64_t i = 0; i < permSize; i++) {
186
+ mixedBase[i] = num % bases[i];
187
+ num /= bases[i];
188
+ if (num == 0) break;
189
+ }
190
+ }
191
+ ```
192
+
193
+ - CopyIn:用 perm 把输出坐标映射回输入坐标,累加得 `srcAddressOffset`,再发 NDDMA `DataCopy<T, NDDMA_MAX_DIM_NUM, config>` 把子张量搬进 UB。
194
+ - CopyOut:直接用输出坐标累加 `dstAddressOffset`,`DataCopyPad` 把 UB 结果写回 `outputGM_`。
195
+
196
+ ```cpp
197
+ // CopyIn:输出坐标 -> 输入偏移(perm 逆映射)
198
+ srcAddressOffset += dstAddressOffsetMixedBaseRes_[i] *
199
+ srcLoopStride_[permSize - 1 - perm[permSize - 1 - i]];
200
+ // CopyOut:输出坐标 -> 输出偏移
201
+ dstAddressOffset += dstAddressOffsetMixedBaseRes_[i] * dstLoopStride_[i];
202
+ ```
203
+
204
+ 维度重排本身由内层 NDDMA 依据 `loopSrcStride/loopDstStride`(源按输入布局带 stride 读、目的按 NDDMA 连续布局写)完成;外层负责把「装不进 NDDMA 的高维」逐块定位到正确 GM 地址。
205
+
206
+ ### 关键技术小结(按代码实际)
207
+
208
+ - **NDDMA 多维搬运**:内层 `DataCopy<T, NDDMA_MAX_DIM_NUM, config>` + `DataCopyPad`,一次最多 5 维带 stride 搬运,完成 NDDMA 范围内的重排。
209
+ - **维度折叠 + 混合进制索引**:`FlushBaseNumForBigDim`(host)划定进 NDDMA 的维度,`DecimalToMixed`(kernel)把外层一维 `loopIdx` 还原为多维坐标,突破 5 维硬件上限。
210
+ - **多核切分**:按外层 `loopIdx` 空间用 `ParseMultiCoreRange` 均分,`CalcBlockSplitInfoForBigDim` 在 host 按核数寻优 `outUbFactor`(阈值 `VEC_CORE_USED_THRES_HOLD`)。
211
+ - **主/尾块处理**:切分轴非整除时用 `outTailFactor` 单独构造 tail 参数。
212
+ - **UB 缓冲**:单块 UB(`InitBuffer(vecQue_, 1, ubSize)`),in/out 复用,**未使用 double buffer**。
213
+
214
+ ---
215
+
216
+ ## 调优提示
217
+
218
+ - 若观察到核利用率不足,关注 host 侧 `outUbFactor` 是否被 `VEC_CORE_USED_THRES_HOLD` 逻辑压小以换取更多并行块;单块搬运粒度(`totalNddmaNum`)过小会拉低 NDDMA 效率。
219
+ - BIG_DIM 单缓冲、无 double buffer,搬入搬出串行;其性能主要取决于每块 NDDMA 的连续度与多核均衡,而非流水掩盖。
220
+ - 维数恰为 5 时不会进入 BIG_DIM(走 NDDMA_BASE);只有 reduce 后维度 > 5 才触发本策略。
@@ -0,0 +1,175 @@
1
+ # Transpose 单轴切分策略 (CUT_ONCE) 性能调优参考
2
+
3
+ - 策略名:CUT_ONCE(单轴切分)
4
+ - tilingKey:`10002`
5
+ - kernel 实现:`transpose_cut_one_axis.h`,类 `TransposeCutOneAxis<T>`
6
+ - 派发入口:`transpose_kernel.cpp`(`tilingKey == CUT_ONCE`)
7
+ - host 选择逻辑:`transpose_tiling.cpp`(`DoSplitUB` / `CalcBlockSplitInfoForCutOnce` / `CalcInUbShapeInfoForCutOnce`)
8
+
9
+ 本文面向性能调优开发者,描述 CUT_ONCE 在什么场景下被选中、为何能提升性能,以及 kernel 侧的执行流程与关键实现。所有结论以上述源码为准。
10
+
11
+ ---
12
+
13
+ ## 一、适用场景
14
+
15
+ ### 1. Transpose 为什么要切分 UB
16
+
17
+ Transpose(转置/permute)本质是把输入按 `perm` 重排到输出,只搬字节、不做算术。arch35 的 NDDMA 家族用一次 `DataCopy`(MTE2,支持多维 stride 的搬入)把一块数据搬进 UB,再用 `DataCopyPad`(MTE3)按目标布局搬出,从而在一次 in/out 中完成维度重排。
18
+
19
+ 问题在于 UB 容量有限:整块 shape 通常放不下。因此 host 侧需要沿某些轴做切分,让每次进 UB 的 tile 既能放下、又能让多核充分并行。切分策略的核心矛盾就是 **UB 容量 vs shape 大小**。
20
+
21
+ ### 2. host 侧如何切分并区分 CUT_ONCE / CUT_TWICE
22
+
23
+ NDDMA 家族(`KEY_NDDMA_BASE` 分支)在 `CalcUBSplitInfo` 里先把 UB 可容纳的元素数开平方作为输入侧的初始预算:
24
+
25
+ ```cpp
26
+ splitInfo_.inUbElement = sqrt(splitInfo_.ubElement);
27
+ DoSplitUB();
28
+ ```
29
+
30
+ `DoSplitUB` 分两步:
31
+
32
+ 1. `DoSplitUBInput()`:从输入最内轴往外走,能整轴放下就整轴吃掉、更新剩余预算;放不下的那一轴成为 **输入切分轴 `inCutIndex`**,并确定 `inUbFactor`(该轴每次进 UB 的份数)、`inTailFactor`(尾块)。剩余 UB 预算 `outUbElement = ubElement / inUbActual` 留给输出侧。
33
+ 2. 沿输出轴(按 `reducedPerm` 从内往外)继续切,选出 **输出切分轴 `outCutIndex`** 与 `outUbFactor`,同时兼顾多核数量(`coreNum_`)。
34
+
35
+ 关键的策略判定在 `DoSplitUB` 末尾:
36
+
37
+ ```cpp
38
+ if (splitInfo_.outCutIndex > FindOutIndex(splitInfo_.inCutIndex)) {
39
+ tilingKey_ = KEY_CUT_TWICE; // 10003
40
+ } else {
41
+ tilingKey_ = KEY_CUT_ONCE; // 10002
42
+ }
43
+ ```
44
+
45
+ `FindOutIndex(inCutIndex)` 返回输入切分轴在输出(perm)序中的位置。含义:
46
+
47
+ - **CUT_ONCE(本策略)**:当输出侧需要切分的位置 `outCutIndex` 不比输入切分轴在输出序中的位置更靠外(`outCutIndex <= FindOutIndex(inCutIndex)`),说明**一根轴的切分即可同时满足输入与输出的 UB 约束**——输入切分轴投影到输出序上的那次切分,已经覆盖了输出侧需要的切分,无需在输出侧再引入独立的第二次切分。此时只需一次切分,数据在 UB 里是连续/规整的,搬入搬出的 loop 结构简单。
48
+ - **CUT_TWICE**:当 `outCutIndex > FindOutIndex(inCutIndex)`,输入和输出各自需要在不同的轴上切分,一次切分无法同时满足两侧,必须切两次(输入一次、输出一次),并额外处理 input-tail / output-tail / tail 三类边界(见 `GetIntervalInfoForCutTwice`),loop 与地址计算都更复杂。
49
+
50
+ ### 3. 为什么 CUT_ONCE 能提升性能
51
+
52
+ - 只需单轴切分,`CalcInUbShapeInfoForCutOnce` 生成的 UB tile 布局规整,搬出时的 `DataCopyPad` loop 层级更浅(`CopyOut` 里的 `endIndex` 之后一般只剩少数几层 loop),MTE3 指令数少。
53
+ - 相比 CUT_TWICE 没有 input-tail/output-tail 的交叉边界组合,尾块处理只有一种(`outTailFactor`),分支简单、气泡少。
54
+ - `CalcBlockSplitInfoForCutOnce` 会在核数不足时(`outUbAxis < coreNum_`)回退调小 `outUbFactor` 以拆出更多可并行的块,尽量把 `VEC_CORE_USED_THRES_HOLD` 之上的多核利用率吃满,同时用 `UbOutOfBoundCheck` 保证不超 UB。
55
+
56
+ ### 4. 多核块划分要点(`CalcBlockSplitInfoForCutOnce`)
57
+
58
+ - 若输入切分轴恰好就是输出切分轴对应的输入轴(`inCutIndex == reducedPerm[outCutIndex]`),把 `outUbFactor *= inUbFactor` 合并,尾块随之更新。
59
+ - 若 `outUbFactor` 已等于整轴长度,则改用 `FindOutIndex(inCutIndex)` 作为输出切分轴,`outUbFactor = inUbFactor`。
60
+ - 总并行块数 `outUbAxis = CeilDiv(outShape[outCutIndex], outUbFactor) * (outCutIndex 之前、perm<inCutIndex 的轴乘积)`,再交给 `SetRealCoreNumAndBlkFactor` 换算 `realCoreNum / blkFactor / blkTailFactor`。当块数不足核数时,从大到小回退 `outUbFactor` 找到满足多核阈值又不超 UB 的因子。
61
+
62
+ ---
63
+
64
+ ## 二、kernel 执行流程与关键实现
65
+
66
+ kernel 侧仅使用一块 UB 队列做 in→out 直通搬运,不含 vector 计算。核心类 `TransposeCutOneAxis<T>` 继承自 `TransposeBase<T>`。
67
+
68
+ ### 1. 缓冲与队列
69
+
70
+ ```cpp
71
+ TQueBind<QuePosition::VECIN, QuePosition::VECOUT, 1> vecQue_; // depth = 1
72
+ GlobalTensor<T> inputGM_, outputGM_;
73
+ ```
74
+
75
+ - 用 `TQueBind<VECIN, VECOUT, 1>`:同一块 UB 既作搬入(VECIN)又作搬出(VECOUT)的绑定队列,搬入 `EnQue` 后直接 `DeQue` 搬出,中间不做运算。
76
+ - 队列深度为 1,`InitBuffer(vecQue_, 1, tiling_->ubSize)` 只分配一块 buffer。**注意:本策略未开启 double buffer**(深度=1、buffer 数=1),`BUFFER_NUM=2` 常量在此 kernel 未被使用;流水靠 MTE2/MTE3 与队列同步驱动,而非双缓冲乒乓。
77
+
78
+ ### 2. Init 流程
79
+
80
+ ```cpp
81
+ Init(x, y, tilingData, pipe):
82
+ blockIdx_ = GetBlockIdx();
83
+ tiling_ = tilingData;
84
+ ParseTilingData(); // expandedOutputCutIndex_ = outCutIndex + 5 - permSize
85
+ inputGM_.SetGlobalBuffer(x);
86
+ outputGM_.SetGlobalBuffer(y);
87
+ pipe->InitBuffer(vecQue_, 1, tiling_->ubSize);
88
+ ```
89
+
90
+ `ParseTilingData` 把 host 的 `outCutIndex` 映射到 NDDMA 固定 5 维(`NDDMA_MAX_DIM_NUM=5`)展开后的下标 `expandedOutputCutIndex_`(host 侧对不足 5 维的 shape 做了右对齐扩展,见 `NDDMADimExpand`)。
91
+
92
+ ### 3. Process / ProcessPerCore 流程
93
+
94
+ ```mermaid
95
+ flowchart TD
96
+ A[Process] --> B{ParseMultiCoreRange<br/>blockIdx < realCoreNum?}
97
+ B -- 否 --> Z[本核无任务, return]
98
+ B -- 是 --> C[ProcessPerCore]
99
+ C --> D[GetLoopParams 逐轴<br/>算 main/tail 的 loopSize 与 stride]
100
+ C --> E[GetLoopAndStride<br/>算 src/dst 全局地址 stride 与 loopSize]
101
+ C --> F[SetupLoopInfo main<br/>构造 MTE2 MultiCopy 参数]
102
+ C --> G[循环 loopIdx = start..end]
103
+ G --> H{是否 tail?<br/>outTailFactor!=0 且 loopIdx+1 是 outCutLoop 边界}
104
+ H -- 是 --> I[SetupLoopInfo tail + CopyIn + CopyOut tail]
105
+ H -- 否 --> J[CopyIn main + CopyOut main]
106
+ ```
107
+
108
+ - **多核范围** `ParseMultiCoreRange`(基类):由 `blkFactor / blkTailFactor` 计算本核负责的 `[blkProcessIdxStart_, blkProcessIdxEnd_)`。前 `blkTailFactor` 个核多分 1 个块,做到负载均衡;`blockIdx >= realCoreNum` 的核直接返回。
109
+ - **loop 参数** `GetLoopParams` 逐轴(reverse 下标)填 `loopSizeMain_/loopSizeTail_` 及 `loopSrcStrideMain_/loopDstStrideMain_`。在输出切分轴对应位置(`n == NDDMA_MAX_DIM_NUM - expandedOutputCutIndex_`)对 src stride 做 32B(`BLOCK_SIZE_BYTE`)对齐(`CeilAlign`),保证 UB 内每行按 block 对齐。
110
+ - **地址 stride** `GetLoopAndStride` 用 `expandedInputShape/expandedOutputShape` 反推各维全局 stride,并在切分轴上乘 `outUbFactor` 得到块间步长;`srcLoopSize_/dstLoopSize_` 是各维的块数(`CeilDiv(shape, ubShape)`),供混合进制地址换算使用。
111
+
112
+ ### 4. 搬入 CopyIn(MTE2, NDDMA DataCopy)
113
+
114
+ ```cpp
115
+ CopyIn(loopIdx, params):
116
+ DecimalToMixed(loopIdx, dstLoopSize_, dstAddressOffsetMixedBase_); // 线性块号 -> 多维块坐标
117
+ for i in 0..5:
118
+ srcAddressOffsetMixedBase_[perm[i]] = dstAddressOffsetMixedBase_[i];
119
+ srcAddressOffset += ... * srcLoopStride_[perm[i]]; // 按 perm 反查输入地址
120
+ localIn = vecQue_.AllocTensor();
121
+ DataCopy<T, 5, config>(localIn, inputGM_[srcAddressOffset], params); // 多维 stride 搬入
122
+ vecQue_.EnQue(localIn);
123
+ ```
124
+
125
+ - `DecimalToMixed` 把线性 `loopIdx` 按各维块数 `dstLoopSize_` 拆成混合进制的多维块坐标(输出视角)。
126
+ - 通过 `perm` 把输出块坐标映射回输入,累加得到输入起始地址 `srcAddressOffset`——**这一步就是转置:搬入即按输入布局取,搬出按输出布局写。**
127
+ - `DataCopy<T, 5, config>` 是 NDDMA 的多维搬运,`params`(`MultiCopyParams`)由 `SetupLoopInfo` 生成,携带每维 `loopSize / loopSrcStride / loopDstStride`。`SetupLoopInfo` 里对输出切分轴前一维的 dst stride 做 32B 对齐,并用 `expandedPerm` 把 dst stride 重排到输出序;最后 `reverseArray` 把 5 维数组翻转以匹配 NDDMA 的维序约定。
128
+
129
+ ### 5. 搬出 CopyOut(MTE3, DataCopyPad + LoopMode)
130
+
131
+ ```cpp
132
+ CopyOut(loopIdx, loopSize, loopSrcStride, loopDstStride):
133
+ dstAddressOffset = Σ dstAddressOffsetMixedBase_[i] * dstLoopStride_[i];
134
+ copyOutParams.blockLen = sizeof(T);
135
+ // 从最内维累乘 blockLen,直到遇到 “被切分/不整轴” 的维 -> endIndex
136
+ ... 设定 blockCount / dstStride ...
137
+ // endIndex 之后剩余维用 LoopModeParams 的 loop1/loop2 承载
138
+ localOut = vecQue_.DeQue();
139
+ DataCopyPad(outputGM_[dstAddressOffset], localOut, copyOutParams); // 带 pad 的多维搬出
140
+ vecQue_.FreeTensor(localOut);
141
+ ```
142
+
143
+ - 通过扫描 `expandedOutputShape[i] != inUbMainDstShape[i]` 找到第一处“非整轴”维 `endIndex`,把它之内的连续维合并成一次 `blockLen` 的连续搬出,`blockCount / dstStride` 描述次外层,更外层用 `LoopModeParams` 的 `loop1/loop2`(必要时再套一层 `loop4` 手动循环)承载。这样把多维搬出压成尽量少的 `DataCopyPad` 调用。
144
+ - `SetLoopModePara(..., UB_TO_OUT)` / `ResetLoopModePara` 成对使用,配置 MTE3 的多重循环搬运模式。
145
+ - CUT_ONCE 因为只切一轴,`endIndex` 之后残余维通常很少,`DataCopyPad` loop 层级浅,MTE3 效率高。
146
+
147
+ ### 6. main / tail 分流
148
+
149
+ `ProcessPerCore` 主循环里:
150
+
151
+ ```cpp
152
+ outCutLoopSize = CeilDiv(expandedOutputShape[expandedOutputCutIndex_], outUbFactor);
153
+ if (outTailFactor != 0 && (loopIdx + 1) % outCutLoopSize == 0) // 该切分轴的最后一块 -> tail
154
+ CopyIn(paramsTail); CopyOut(tail);
155
+ else
156
+ CopyIn(paramsMain); CopyOut(main);
157
+ ```
158
+
159
+ 切分轴无法整除时,每一轮切分的最后一个块用 tail 参数(`inUbTailSrcShape/inUbTailDstShape` + `loopSizeTail_` 等),其余用 main 参数。CUT_ONCE 只有这一种尾块分支,不像 CUT_TWICE 需要 input-tail/output-tail/tail 四类组合。
160
+
161
+ ---
162
+
163
+ ## 关键技术小结
164
+
165
+ | 技术点 | 是否使用 | 说明 |
166
+ |---|---|---|
167
+ | 多核切分 `ParseMultiCoreRange` | 是 | 按 `blkFactor/blkTailFactor` 均衡分块 |
168
+ | `TQueBind<VECIN,VECOUT,1>` | 是 | in→out 直通,单块 buffer,无运算 |
169
+ | double buffer | 否 | 队列深度=1,未开启乒乓双缓冲 |
170
+ | NDDMA `DataCopy`(MTE2) | 是 | 多维 stride 搬入,搬入即完成 perm 取址 |
171
+ | `DataCopyPad` + LoopMode(MTE3) | 是 | 多维带 pad 搬出,loop 层级浅 |
172
+ | 混合进制地址换算 `DecimalToMixed` | 是 | 线性块号 → 多维块坐标 → 经 perm 反查输入地址 |
173
+ | 32B 对齐(`CeilAlign`/`BLOCK_SIZE_BYTE`) | 是 | UB 内行按 block 对齐,保证搬运效率 |
174
+
175
+ 调优时重点关注:切分轴选择是否让 `outUbFactor` 足够大以摊薄 MTE3 开销、同时块数是否达到 `realCoreNum` 以吃满多核;当 shape 使得输入/输出需在不同轴切分时会退化为 CUT_TWICE,此时 loop 与尾块开销更高。