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,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 内切分参数。 |
@@ -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, &lt, &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 等)本策略并未使用,请勿据此推断。
@@ -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, &lt, &pipe);
174
+ op.Process();
175
+ }
176
+ }
177
+ ```
178
+
179
+ 注意:tilingKey 10008 (`VCONV_021_TRANSPOSE`) 是相邻的 021 三维 VCONV 策略(支持 8/16/32bit),与本文的 10007 是不同 kernel(`KernelTransDataTo5HD021`),不要混淆。