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,315 @@
1
+ # Transpose 性能调优参考:SMALL_SHAPE 策略
2
+
3
+ - 策略名:SMALL_SHAPE
4
+ - tilingKey:10001(`KEY_SMALL_SHAPE`)
5
+ - kernel 实现:`arch35/transpose_small_shape.h`(类 `TransposeSmallShape`)
6
+ - 派发入口:`transpose_kernel.cpp`
7
+ - host 选择逻辑:`transpose_tiling.cpp`(`EntryTilingTemplate` / `CalcBlockSplitInfoForSmallShape`)
8
+
9
+ ---
10
+
11
+ ## 一、适用场景
12
+
13
+ ### 1. 为什么需要此策略
14
+
15
+ Transpose 的主流实现(NDDMA / N_LAST / CUT_ONCE / CUT_TWICE / BIG_DIM)都属于「搬运型」策略:
16
+ 它们把数据按块从 GM 搬入 UB,依赖 NDDMA、对齐搬运、double buffer 等技术把带宽打满。这类实现
17
+ 在数据量较大时效率很高,但存在固定开销:
18
+
19
+ - 需要做 UB 切分(`CalcUBSplitInfo` / `DoSplitUB`),tiling 计算相对复杂;
20
+ - 每个核都要经历 GM→UB→GM 的多级搬运与队列同步;
21
+ - double buffer、UB 分块等机制在数据量很小时收益无法覆盖其启动/同步开销。
22
+
23
+ 当总数据量非常小时,搬运型策略的这些固定开销反而成为瓶颈——真正搬运的数据没多少,时间都花在
24
+ 了切分、入队出队、搬运流水的启动上。SMALL_SHAPE 就是为这一档「小 shape」准备的专用策略。
25
+
26
+ ### 2. 它解决什么问题
27
+
28
+ SMALL_SHAPE 放弃了「分块搬入 UB 再搬出」的思路,改为 **SIMT(逐元素、按输出线性索引直接搬运)**
29
+ 模型:每个线程负责若干个输出元素,直接从 GM 输入按转置后的索引读取、写回 GM 输出,完全不经过
30
+ UB 分块与队列。这样就消除了 UB 切分和搬运流水的固定开销,对小数据量而言更划算。
31
+
32
+ ### 3. host 侧如何被选中(阈值)
33
+
34
+ 选择逻辑在 `EntryTilingTemplate`(`transpose_tiling.cpp:656`):
35
+
36
+ ```cpp
37
+ if (shapeInfo_.totalVolumeActual * shapeInfo_.eleLenInBytes >= SMALL_SHAPE_BYTES_THRES_HOLD) {
38
+ // ... 走 N_LAST / NDDMA_BASE / BIG_DIM 等搬运型策略
39
+ }
40
+ tilingKey_ = KEY_SMALL_SHAPE; // 未达阈值 -> 小 shape
41
+ ```
42
+
43
+ 判据是 **总元素数 × 单元素字节数(即总字节数)是否小于阈值 `SMALL_SHAPE_BYTES_THRES_HOLD`**。
44
+ 该阈值定义在 `transpose_tiling.h:167`:
45
+
46
+ ```cpp
47
+ int64_t SMALL_SHAPE_BYTES_THRES_HOLD = 4000000; // 4 MB
48
+ ```
49
+
50
+ 即:总字节数 < 4 MB 且 `dim > 1` 时选中 SMALL_SHAPE。`dim == 1` 会先被判为 `KEY_TENSOR_MOVE`
51
+ (纯拷贝,`EntryTilingTemplate` 开头处理),不进入 SMALL_SHAPE。
52
+
53
+ > 注:`transpose_tiling.cpp:52` 另有一个 `SMALL_SHAPE_BYTES_THRES_HOLD_DAV_5102_021 = 70000`,
54
+ > 它用于 021 VCONV 分支的判定,与本策略的 4MB 阈值不是同一处,不要混淆。
55
+
56
+ ### 4. block(多核)切分:为什么能提升性能
57
+
58
+ 选中后,block 切分在 `CalcBlockSplitInfoForSmallShape`(`transpose_tiling.cpp:745`):
59
+
60
+ ```cpp
61
+ int64_t totalElements = shapeInfo_.totalVolumeActual;
62
+ if (totalElements < coreNum_) { // 元素比核还少:一核一元素
63
+ realCoreNum_ = totalElements; blkFactor_ = 1; blkTailFactor_ = 0; return;
64
+ }
65
+ int64_t blkFactor = totalElements / coreNum_;
66
+ // 把每核处理量对齐到 128 字节边界(SMALL_SHAPE_SPLIT_BYTES_ALIGN_SIZE)
67
+ int64_t ceilAlignFactor = CeilDiv (blkFactor*eleBytes, 128) * 128 / eleBytes;
68
+ int64_t floorAlignFactor = FloorDiv(blkFactor*eleBytes, 128) * 128 / eleBytes;
69
+ ...
70
+ ```
71
+
72
+ 关键点:
73
+
74
+ - 每核处理量 `blkFactor_` 被对齐到 **128 字节**(`SMALL_SHAPE_SPLIT_BYTES_ALIGN_SIZE`)。128 字节
75
+ 是 cacheline/写合并友好的粒度,让每个核写出的输出区间尽量落在整齐的边界上,减少跨 cacheline 的
76
+ 写放大,提升 GM 写带宽利用率。
77
+ - 优先用 `floorAlignFactor`(向下对齐)让所有核均摊,若尾核放不下再退化为 `ceilAlignFactor`
78
+ (向上对齐)并用 `CeilDiv` 重新算实际核数 `realCoreNum_`。
79
+ - 元素数不足核数时直接一核一元素,避免空转核。
80
+
81
+ 这些切分只影响每核的 **输出区间 [blkStartOffset, blkStartOffset+blkProcessNum)**,kernel 内部
82
+ 再由 SIMT 线程并行覆盖这个区间。
83
+
84
+ ---
85
+
86
+ ## 二、kernel 执行流程与关键实现
87
+
88
+ ### 1. 派发
89
+
90
+ `transpose_kernel.cpp` 中,`tilingKey == SMALL_SHAPE(10001)` 时:
91
+
92
+ ```cpp
93
+ TransposeSmallShape<T> op;
94
+ op.Init(x, y, &lt); // 注意:不传 pipe
95
+ op.Process();
96
+ ```
97
+
98
+ 与其它搬运型策略不同,SMALL_SHAPE 的 `Init` **不接收 `TPipe*`**——因为它不使用 TQue/TBuf/UB,
99
+ 无需 pipe 管理内存。`T` 按元素字节宽度实例化(b8/b16/b32/b64)。
100
+
101
+ ### 2. Init
102
+
103
+ `transpose_small_shape.h:50`:
104
+
105
+ ```cpp
106
+ blockIdx_ = GetBlockIdx();
107
+ tilingData_ = tilingData;
108
+ inputGM_.SetGlobalBuffer((__gm__ T*)x);
109
+ outputGM_.SetGlobalBuffer((__gm__ T*)y);
110
+ ```
111
+
112
+ 只做了绑定输入/输出 GlobalTensor 和记录 blockIdx,没有任何 UB/队列初始化。
113
+
114
+ ### 3. Process 执行流程
115
+
116
+ ```mermaid
117
+ flowchart TD
118
+ A[blockIdx >= realCoreNum?] -->|是| Z[return 空核]
119
+ A -->|否| B[计算本核输出区间<br/>blkStartOffset / blkProcessNum]
120
+ B --> C[根据 perm 计算<br/>outputShape[] 与 dstStride[]]
121
+ C --> D[对每个 outputShape[i]<br/>预计算除法魔数 m[i]/shift[i]]
122
+ D --> E{permSize?}
123
+ E -->|2| F2[asc_vf_call SimtComputeDimTwo]
124
+ E -->|3..8| F3[对应 SimtComputeDimN]
125
+ ```
126
+
127
+ 关键步骤(`transpose_small_shape.h:244`):
128
+
129
+ 1. **空核跳过**:`blockIdx_ >= realCoreNum` 直接返回。
130
+
131
+ 2. **本核输出区间**:
132
+ ```cpp
133
+ blkProcessNum = tilingData_->blkFactor;
134
+ blkStartOffset = blockIdx_ * tilingData_->blkFactor;
135
+ if (blockIdx_ == realCoreNum-1 && blkTailFactor != 0) blkProcessNum = blkTailFactor;
136
+ ```
137
+ 即每核负责输出张量上一段连续区间,尾核用 `blkTailFactor` 收尾。
138
+
139
+ 3. **构造输出 stride 与反查输入的映射**:根据 `perm` 和 `inputShape` 计算 `dstStrideTmp`
140
+ (输入的行主序 stride),再按 perm 重排得到 `outputShape[]` 与 `dstStride[]`。`dstStride[i]`
141
+ 表示「输出第 i 维走一步,对应到输入线性地址要跳多少」,这是把输出索引还原成输入索引的核心。
142
+
143
+ 4. **预计算除法魔数**:
144
+ ```cpp
145
+ for (i) GetUintDivMagicAndShift(m[i], shift[i], outputShape[i]);
146
+ ```
147
+ 逐元素反算多维索引时需要对每个维大小做整除/取模。这里预先算出「魔数除法」的乘数 `m` 与移位
148
+ `shift`,kernel 里用 `Simt::UintDiv(x, m, s)` 代替昂贵的硬件除法。这是本策略性能的关键优化点。
149
+
150
+ 5. **SIMT 分发**:按 `permSize`(维数 2~8)调用对应的 `SimtComputeDimN`,通过
151
+ `asc_vf_call<...>(dim3(THREAD_DIM), ...)` 启动 SIMT 向量线程。`THREAD_DIM = 2048`
152
+ (FPGA 上为 512),即每个 AIV 核以 2048 个线程并行处理本核负责的输出区间。
153
+
154
+ ### 4. SIMT compute kernel(逐元素转置)
155
+
156
+ 以 `SimtComputeDimTwo`(`transpose_small_shape.h:59`)为例,其它维数是同构展开:
157
+
158
+ ```cpp
159
+ for (uint32_t idx = threadIdx.x; idx < coreFactor; idx += blockDim.x) {
160
+ uint32_t yIdx = coreOffset + idx; // 本线程负责的输出线性下标
161
+ // 用魔数除法把 yIdx 逐维拆成输入的多维索引
162
+ uint32_t inputIndex0 = yIdx - UintDiv(yIdx,m0,s0)*outputShape0;
163
+ yIdx = UintDiv(yIdx,m0,s0);
164
+ uint32_t inputIndex1 = yIdx - UintDiv(yIdx,m1,s1)*outputShape1;
165
+ uint32_t xIdx = inputIndex0*outputShape1 + inputIndex1; // 还原输入线性下标
166
+ outputGM[coreOffset + idx] = inputGM[xIdx]; // 直接 GM->GM 逐元素搬运
167
+ }
168
+ ```
169
+
170
+ 要点:
171
+
172
+ - **grid-stride 循环**:`idx += blockDim.x`,每个线程按线程数步长跨越覆盖本核区间,负载均衡且
173
+ 与 `coreFactor` 无关。
174
+ - **输出连续、输入跳读**:写地址 `coreOffset+idx` 连续(配合 host 的 128 字节对齐,写合并友好);
175
+ 读地址 `xIdx` 是转置后的散列地址,由多维索引 + `dstStride` 还原。
176
+ - **`__gm__ volatile T* outputGM`**:输出指针带 volatile,保证逐元素写直达 GM。
177
+ - 三维及以上版本额外传入 `dstStride0..N`,用 `inputIndexK * dstStrideK` 累加得到 `xIdx`,逻辑
178
+ 与二维一致,只是维数更多。
179
+
180
+ ### 5. 用到的关键技术小结
181
+
182
+ | 技术 | 说明 |
183
+ | --- | --- |
184
+ | SIMT / `asc_vf_call` + `__simt_vf__` | 逐元素、多线程(THREAD_DIM=2048)并行,`LAUNCH_BOUND` 限定线程规模 |
185
+ | 魔数除法 `Simt::UintDiv` + `GetUintDivMagicAndShift` | 用乘法+移位替代硬件整除,加速多维索引反算 |
186
+ | 直接 GM→GM 搬运 | 不经 UB、无 TQue/TBuf/double buffer,省去搬运流水固定开销 |
187
+ | host 侧 128 字节对齐切分 | 每核输出区间对齐 cacheline,写合并友好,提升写带宽 |
188
+ | grid-stride loop | 线程按 blockDim 步长覆盖区间,负载均衡 |
189
+
190
+ ### 6. Memory Coalescing 与向量化读写
191
+
192
+ > ⚠️ **实战经验**:SIMT 逐元素读写是 SMALL_SHAPE 策略的性能关键。原始模板的 `outputGM[idx] = inputGM[xIdx]` 每线程处理 1 个元素,在以下两个维度存在严重带宽浪费,实测可导致 SIMT 分支比基线 DataCopyPad 慢 3-10 倍。
193
+
194
+ #### 6.1 问题:逐元素读写的带宽利用率极低
195
+
196
+ GM burst 要求 32B 对齐。每线程读/写 1 个元素(float16=2B),带宽利用率仅 `2/32 = 6.25%`。2048 个线程各读 2B = 4KB 总量,但每次 GM 访问只有 2B 有效数据。
197
+
198
+ | dtype | 单元素字节 | 每线程带宽利用率 |
199
+ |-------|----------|---------------|
200
+ | int8 | 1B | 3.1% |
201
+ | float16/bfloat16 | 2B | 6.25% |
202
+ | float32/int32 | 4B | 12.5% |
203
+
204
+ #### 6.2 问题:Memory Coalescing 不满足
205
+
206
+ 相邻线程的 `yIdx` 连续递增时,输出最内维 C 会回绕到倒数第二维(如 perm=[2,3,0,4,1,5] 的倒数第二维是 bs)。当 C 回绕时,输入地址发生大跳转。
207
+
208
+ 以 batch_to_space(perm=[2,3,0,4,1,5],C=4,bs=2)为例:
209
+
210
+ ```
211
+ yIdx=0: out[0,0,0,0,0,0] -> in[0,0,0,0,0,0] -> xIdx=0 ← 前4线程 coalesced
212
+ yIdx=1: out[0,0,0,0,0,1] -> in[0,0,0,0,0,1] -> xIdx=1
213
+ yIdx=2: out[0,0,0,0,0,2] -> in[0,0,0,0,0,2] -> xIdx=2
214
+ yIdx=3: out[0,0,0,0,0,3] -> in[0,0,0,0,0,3] -> xIdx=3
215
+ yIdx=4: out[0,0,0,0,1,0] -> in[0,1,0,0,0,0] -> xIdx=25920 ← 跳转!delta=25917
216
+ ```
217
+
218
+ 每 C 个线程一组 coalesced,但第 C+1 个线程跳到 `input[0][1]...` 的位置,硬件无法合并为一次 burst。
219
+
220
+ #### 6.3 优化:向量化读写(每线程处理 C 个连续元素)
221
+
222
+ **核心思路**:当 perm 末轴不转置(`perm[last] == last`)时,输出和输入在末轴 C 上都是连续的。每个线程处理一个 C 维度的连续 tile(而非单个元素),利用这一连续性。
223
+
224
+ **优化后的 VF 函数**(以 6D 为例):
225
+
226
+ ```cpp
227
+ __simt_vf__ LAUNCH_BOUND(THREAD_DIM) __aicore__
228
+ void SimtComputeDimSixVec(__gm__ T* inputGM, __gm__ volatile T* outputGM,
229
+ uint32_t coreTileCount, uint32_t coreTileOffset,
230
+ uint32_t C, // 末轴长度(向量化宽度)
231
+ // 前 5 维的 outputShape / dstStride / magic / shift(不含第 6 维 C)
232
+ uint32_t outputShape0, ..., outputShape4,
233
+ uint32_t dstStride0, ..., dstStride4,
234
+ uint32_t m0, ..., m4, uint32_t s0, ..., s4)
235
+ {
236
+ for (uint32_t tileIdx = threadIdx.x; tileIdx < coreTileCount; tileIdx += blockDim.x) {
237
+ uint32_t yTile = coreTileOffset + tileIdx;
238
+ // 只需 5 维魔数除法(不含 C 维度),减少一次 UintDiv
239
+ uint32_t inputIndex0 = yTile - Simt::UintDiv(yTile, m0, s0) * outputShape0;
240
+ yTile = Simt::UintDiv(yTile, m0, s0);
241
+ // ... 前 4 维分解
242
+ uint32_t inputIndex4 = yTile; // 最后一维不需要除法
243
+ uint32_t xTileOffset = inputIndex0*dstStride0 + ... + inputIndex4*dstStride4;
244
+
245
+ // 向量化读写 C 个连续元素
246
+ uint32_t outOffset = (coreTileOffset + tileIdx) * C;
247
+ for (uint32_t c = 0; c < C; c++) {
248
+ outputGM[outOffset + c] = inputGM[xTileOffset + c];
249
+ }
250
+ }
251
+ }
252
+ ```
253
+
254
+ **关键改动**:
255
+ - 循环以 **tile** 为单位(`tileIdx`),每个 tile = C 个元素
256
+ - 只需 **N-1 维**魔数除法(不含末轴 C),减少一次 `Simt::UintDiv`
257
+ - 每个线程内循环 C 次读写连续元素
258
+ - `coreFactor` / `blkFactor` 改为 tile 级
259
+ - Host 端 `GetUintDivMagicAndShift` 只调用 N-1 次
260
+
261
+ **Coalescing 改善**:
262
+ - tile 内:C 个元素连续读写,完全 coalesced
263
+ - tile 间:相邻 tile 在倒数第二维连续(如 perm=[2,3,0,4,1,5] 的倒数第二维是 W),输入地址差 = C,仍 coalesced
264
+ - 跳转频率降低 C 倍(只有倒数第二维回绕时才跳转)
265
+
266
+ **带宽利用率改善**:
267
+
268
+ | C | 优化前(float16) | 优化后(float16) |
269
+ |---|----------------|----------------|
270
+ | 4 | 6.25% | 25% |
271
+ | 8 | 6.25% | 50% |
272
+ | 16 | 6.25% | 100% |
273
+ | 32 | 6.25% | 100%(已打满) |
274
+
275
+ #### 6.4 适用条件
276
+
277
+ 向量化优化需要满足:
278
+ 1. **perm 末轴不转置**:`perm[permSize-1] == permSize-1`(末轴 C 在输入输出中都连续)
279
+ 2. **C ≥ 1**:C 越大收益越明显,C=1 时退化为逐元素(无收益但无害)
280
+ 3. **C 为已知常量或 TilingData 字段**:host 端需将 C 传入 kernel
281
+
282
+ > 若 perm 末轴参与转置(`perm[permSize-1] != permSize-1`),末轴不连续,不能直接向量化。此时可考虑按其他连续维度做向量化,或回退到逐元素模式。
283
+
284
+ #### 6.5 实测数据参考
285
+
286
+ 以 batch_to_space 算子(perm=[2,3,0,4,1,5],6D)为例,在 ascend950 上的实测:
287
+
288
+ | 优化阶段 | SIMT scalar_time | SIMT vec_time | SIMT geomean vs 基线 |
289
+ |---------|-----------------|--------------|---------------------|
290
+ | 原始(逐元素) | ~10us* | 2.4-29.3us | 0.17x(严重退化) |
291
+ | +TilingData GM 直访 | ~4us | 同上 | 0.27x |
292
+ | +host 预算 magic/shift | 0.02-3.6us | 同上 | 0.32x |
293
+ | +向量化读写(C tile) | 同上 | 预期降低 C 倍 | 待验证 |
294
+
295
+ > *scalar_time ~10us 原始值来自 kernel 入口逐字节拷贝 TilingData(972 字节),修正后降至 ~4us;再经 host 预算 magic/shift 降至 0.02-3.6us。但 vec_time(VF 内 GM 读写)始终是大头,只有向量化读写才能解决。
296
+
297
+ **结论**:SIMT 策略的性能瓶颈不在 scalar 索引计算(可通过 host 预算消除),而在 VF 内的 GM 读写效率。向量化读写是 SIMT 策略达到可用性能的必要条件,否则带宽利用率仅 6.25%,不如基线的批量 DataCopyPad。
298
+
299
+ ---
300
+
301
+ ### 7. 与搬运型策略的取舍
302
+
303
+ - **不使用**的机制:UB 分块、double buffer、TQue/TBuf、NDDMA/对齐搬运。这些在大 shape 下是加速
304
+ 手段,在小 shape 下反而是开销,故本策略一律不用。
305
+ - **代价**:逐元素读为转置散列地址,读侧不一定连续,带宽利用率不如 NDDMA。但对总量 < 4MB 的
306
+ 小 shape,省下的固定开销和 SIMT 并行足以抵消,整体更快。
307
+ - **前提**:必须实现向量化读写(§6.3),否则带宽利用率仅 6.25%,可能不如基线 DataCopyPad。
308
+ - **调优提示**:若实测某档 shape 在阈值附近抖动(4MB 上下),可关注 `SMALL_SHAPE_BYTES_THRES_HOLD`
309
+ 的取值是否契合目标硬件;若小 shape 写带宽偏低,检查 `SMALL_SHAPE_SPLIT_BYTES_ALIGN_SIZE`
310
+ (128 字节)对齐是否与输出 dtype 匹配。
311
+ - **SIMT 性能排查清单**:
312
+ 1. 检查 `vec_time` 是否远大于 `scalar_time`——若是,瓶颈在 GM 读写,需向量化
313
+ 2. 检查 perm 末轴是否不转置——若是,可按 C 维度向量化
314
+ 3. 检查 scalar_time 是否恒定且与数据量无关——若是,可能是 TilingData 逐字节拷贝或 host 可预算的计算(magic/shift)未移到 host
315
+ 4. 检查 block_num 是否超过物理核数——若是,SyncAll 会阻塞(如有多核同步)
@@ -0,0 +1,203 @@
1
+ # Transpose 调优参考:TENSOR_MOVE 策略(tilingKey = 10000)
2
+
3
+ 本文面向做 AscendC Transpose 算子性能调优的开发者,介绍 NDDMA 家族中最简单的一档策略 `TENSOR_MOVE`。
4
+
5
+ - 策略名:`TENSOR_MOVE`
6
+ - tilingKey:`10000`(host 侧常量 `KEY_TENSOR_MOVE`,kernel 侧宏 `#define TENSOR_MOVE 10000`)
7
+ - kernel 实现:`arch35/transpose_tensor_move.h`,类 `Transpose::TransposeTensorMove<T>`
8
+ - 基类:`arch35/transpose_base.h`,`TransposeBase<T>`
9
+ - 派发入口:`transpose_kernel.cpp`
10
+ - host 选择逻辑:`transpose_tiling.cpp`,`EntryTilingTemplate` / `CalcUBSplitInfo` / `CalcBlockSplitInfoForTensorMove`
11
+
12
+ ---
13
+
14
+ ## 一、适用场景
15
+
16
+ ### 1. 它解决什么问题
17
+
18
+ `TENSOR_MOVE` 处理的是「本质上不需要做转置」的情况:输入经过 host 侧的轴规约后,实际只剩下**一个连续的数据轴**。这种情况下的 Transpose 退化为纯粹的按元素顺序拷贝(GM → UB → GM),没有任何维度重排,因此不需要 NDDMA 的多维搬运、也不需要 UB 内的转置计算。
19
+
20
+ 为什么会退化成单轴?host 在 `Run` 中先后做了两步形状化简:
21
+
22
+ - `RemoveAxisV2`:删除所有值为 1 的轴(全 1 形状会被压成 `dim=1`)。
23
+ - `MergeAxisV2`:把 perm 中连续递增的相邻轴合并成一个轴。
24
+
25
+ 对于「不改变数据物理排布」的 perm(例如恒等 perm `0,1,2...`,或所有非 1 轴在 perm 下仍保持连续升序),合并后 `shapeInfo_.dim` 会变成 1。此时输出的内存布局与输入完全一致,搬运即完成转置语义。
26
+
27
+ ### 2. 被选中的 host 条件
28
+
29
+ 选择发生在 `EntryTilingTemplate()`:
30
+
31
+ ```cpp
32
+ void TransposeNddmaTiling::EntryTilingTemplate()
33
+ {
34
+ SetIsLastAxisTranspose();
35
+ splitInfo_.ubElement = ubSize_ / shapeInfo_.eleLenInBytes;
36
+ if (shapeInfo_.dim == 1) { // 规约合并后只剩一个轴
37
+ tilingKey_ = KEY_TENSOR_MOVE; // 10000
38
+ return;
39
+ }
40
+ ...
41
+ }
42
+ ```
43
+
44
+ 判定极其简单:**只要化简后 `dim == 1`,就无条件选中 TENSOR_MOVE**,且早于 `SMALL_SHAPE / N_LAST / NDDMA / BIG_DIM` 等所有其他分支。这是最优先、最省事的一档。
45
+
46
+ 需要注意选择的前提:该分支在 NDDMA 家族入口内,只有在前面的加速策略(VCONV 5hd、021 VCONV、可选的 GATHER)都未命中时才会走到。对单轴场景,那些加速策略也不会命中,所以最终稳定落在 TENSOR_MOVE。
47
+
48
+ ### 3. 为什么能提升性能
49
+
50
+ - **零转置开销**:数据在 UB 里不做任何重排,只是「进 UB 再出 UB」,搬运即结果。相比走 NDDMA/多轴切分,省掉了 UB 内部的地址重映射与多维 DMA 描述符构造。
51
+ - **完全连续、对齐友好的 DMA**:单轴意味着源和目的都是连续地址,`DataCopyPad` 以大块 burst 搬运,带宽利用率高。
52
+ - **均衡的多核切分**:`CalcBlockSplitInfoForTensorMove` 把总元素数按核数均分,几乎打满所有核。
53
+ - **double buffer 掩盖搬入/搬出延迟**:见下文,MTE2(GM→UB)与 MTE3(UB→GM)通过 `TQueBind` 的双缓冲流水化,拷入与拷出可重叠。
54
+
55
+ 对于「形状里带了很多 1、或 perm 实际不换数据」的常见退化 case,这一策略把 Transpose 变成接近理论带宽上限的 memcpy。
56
+
57
+ ---
58
+
59
+ ## 二、kernel 执行流程与关键实现
60
+
61
+ ### 1. 数据结构与 buffer
62
+
63
+ ```cpp
64
+ TQueBind<QuePosition::VECIN, QuePosition::VECOUT, 1> vecQue_; // 进/出共用的绑定队列
65
+ GlobalTensor<T> inputGM_;
66
+ GlobalTensor<T> outputGM_;
67
+ DataCopyPadExtParams<T> padParams_{false, 0, 0, 0};
68
+ DataCopyExtParams copyOutParamsMain_{1, 0, 0, 0, 0};
69
+ ```
70
+
71
+ 关键点:
72
+
73
+ - 用的是 `TQueBind<VECIN, VECOUT, 1>`,把「输入队列」和「输出队列」绑成同一块 buffer。因为这里不做计算,同一块 UB 既作为搬入目的、又作为搬出源,`AllocTensor` 出来的 tensor 直接 `EnQue` / `DeQue` 后原样搬出即可。这样避免了额外的 VECIN→VECOUT 拷贝。
74
+ - `T` 为字节宽度类别(int8/int16/int32/int64),Transpose 只搬字节不做算术,fp16/bf16 归为 int16、fp32 归为 int32。
75
+
76
+ ### 2. Init
77
+
78
+ ```cpp
79
+ void Init(GM_ADDR x, GM_ADDR y, const TransposeOpTilingData* tilingData, TPipe* pipe)
80
+ {
81
+ blockIdx_ = GetBlockIdx();
82
+ tiling_ = tilingData;
83
+ inputGM_.SetGlobalBuffer((__gm__ T*)x);
84
+ outputGM_.SetGlobalBuffer((__gm__ T*)y);
85
+ pipe->InitBuffer(vecQue_, BUFFER_NUM, tiling_->ubSize / BUFFER_NUM);
86
+ }
87
+ ```
88
+
89
+ - 记录当前核 id,绑定输入/输出 GM。
90
+ - `InitBuffer(vecQue_, BUFFER_NUM, ubSize/BUFFER_NUM)`,`BUFFER_NUM = 2`,即**开启 double buffer**。注意 host 侧在 `CalcUBSplitInfo` 中已针对该 key 把可用 UB 元素数按 2 折半:
91
+
92
+ ```cpp
93
+ case KEY_TENSOR_MOVE:
94
+ case KEY_N_LAST_TRANSPOSE:
95
+ splitInfo_.ubElement = ubSize_ / BUFFER_NUM / shapeInfo_.eleLenInBytes;
96
+ ```
97
+
98
+ `inUbFactor`(单次搬运元素数)最终就取自这个折半后的 `ubElement`(见 `CalcBlockSplitInfoForTensorMove`)。
99
+
100
+ ### 3. 多核切分(host)
101
+
102
+ `CalcBlockSplitInfoForTensorMove` 按总元素数 `totalVolumeActual` 分核:
103
+
104
+ - 若总量小于核数:`realCoreNum_ = totalVolumeActual`,每核 1 个元素(`blkFactor=1`)。
105
+ - 否则:`realCoreNum_ = coreNum`,`blkFactor = total / coreNum`,余数放进 `blkTailFactor`,前 `blkTailFactor` 个核各多分 1 个元素(经典的均分 + 余数补齐)。
106
+ - 两种情况都令 `inUbFactor = ubElement`(UB 单次搬运的粒度)。
107
+
108
+ ### 4. Process:每核确定自己的区间
109
+
110
+ ```cpp
111
+ void Process()
112
+ {
113
+ if (blockIdx_ >= tiling_->realCoreNum) { return; } // 多余的核直接退出
114
+ blockLoopNum_ = tiling_->blkFactor;
115
+ srcOffset_ = blockIdx_ * tiling_->blkFactor;
116
+ if (blockIdx_ < tiling_->blkTailFactor) { // 前 blkTailFactor 个核多搬 1 个
117
+ blockLoopNum_ += 1;
118
+ srcOffset_ += blockIdx_;
119
+ } else {
120
+ srcOffset_ += tiling_->blkTailFactor;
121
+ }
122
+ inLoopNum_ = Ops::Base::CeilDiv(blockLoopNum_, tiling_->inUbFactor); // UB 循环次数
123
+ inputTailFactor_ = blockLoopNum_ % tiling_->inUbFactor; // 尾块元素数
124
+ ProcessPerCore();
125
+ }
126
+ ```
127
+
128
+ - 由 `blkFactor / blkTailFactor` 推出本核负责的元素总数 `blockLoopNum_` 和在 GM 上的起始偏移 `srcOffset_`。这段与基类 `ParseMultiCoreRange` 的逻辑一致(此处内联实现)。
129
+ - 再按 UB 单次容量 `inUbFactor` 把本核区间切成 `inLoopNum_` 次搬运,`inputTailFactor_` 为最后一块的余量。
130
+
131
+ ### 5. ProcessPerCore:double buffer 搬运主循环
132
+
133
+ ```cpp
134
+ void ProcessPerCore()
135
+ {
136
+ int64_t copyNum = tiling_->inUbFactor;
137
+ for (int64_t loopIdx = 0; loopIdx < inLoopNum_; loopIdx++) {
138
+ if (loopIdx == inLoopNum_ - 1 && inputTailFactor_ != 0) {
139
+ copyNum = inputTailFactor_; // 尾块用实际余量
140
+ }
141
+ copyOutParamsMain_.blockLen = copyNum * sizeof(T); // 按字节数设置 burst 长度
142
+
143
+ LocalTensor<T> bindLocalIn = vecQue_.AllocTensor<T>();
144
+ DataCopyPad(bindLocalIn,
145
+ inputGM_[srcOffset_ + loopIdx * tiling_->inUbFactor],
146
+ copyOutParamsMain_, padParams_); // GM -> UB (MTE2)
147
+ vecQue_.EnQue(bindLocalIn);
148
+
149
+ LocalTensor<T> bindLocalOut = vecQue_.DeQue<T>();
150
+ DataCopyPad(outputGM_[srcOffset_ + loopIdx * tiling_->inUbFactor],
151
+ bindLocalOut, copyOutParamsMain_); // UB -> GM (MTE3)
152
+ vecQue_.FreeTensor(bindLocalOut);
153
+ }
154
+ }
155
+ ```
156
+
157
+ 流程要点:
158
+
159
+ 1. 每次循环 `AllocTensor` 拿一块 UB,`DataCopyPad` 从 GM 搬入(单块连续、`blockLen` 以字节计,`blockCount = 1`)。
160
+ 2. `EnQue` / `DeQue` 完成同步语义:同一 tensor 搬入完成后立刻作为源搬出到 GM。
161
+ 3. `FreeTensor` 归还 buffer。
162
+ 4. 因为 `TQueBind` 深度为 `BUFFER_NUM = 2`,相邻两次循环的搬入(MTE2)与前一次的搬出(MTE3)可以在硬件上重叠,形成流水,掩盖单向 DMA 延迟。
163
+ 5. 源/目的偏移完全相同(`srcOffset_ + loopIdx * inUbFactor`),再次印证这是「原位布局的纯拷贝」。
164
+
165
+ ### 6. 执行流程图
166
+
167
+ ```mermaid
168
+ flowchart TD
169
+ A[host EntryTilingTemplate: dim==1 -> key=10000] --> B[CalcUBSplitInfo: ubElement = ubSize/2/eleBytes]
170
+ B --> C[CalcBlockSplitInfoForTensorMove: 均分 blkFactor/blkTailFactor, inUbFactor=ubElement]
171
+ C --> D[kernel Init: 绑定 GM, InitBuffer 双缓冲]
172
+ D --> E{blockIdx < realCoreNum?}
173
+ E -- 否 --> Z[return]
174
+ E -- 是 --> F[Process: 算本核区间 srcOffset/blockLoopNum, 拆 inLoopNum]
175
+ F --> G[ProcessPerCore 主循环]
176
+ G --> H[AllocTensor + DataCopyPad GM->UB]
177
+ H --> I[EnQue/DeQue]
178
+ I --> J[DataCopyPad UB->GM + FreeTensor]
179
+ J --> G
180
+ ```
181
+
182
+ ### 7. 用到 / 未用到的关键技术
183
+
184
+ 用到:
185
+
186
+ - **double buffer**:`InitBuffer(..., BUFFER_NUM=2, ...)` + `TQueBind` 深度 2,搬入搬出流水化。
187
+ - **TQueBind(VECIN+VECOUT 合一)**:进出共用一块 UB,免去中间拷贝。
188
+ - **`DataCopyPad`**:带 pad 参数的连续块搬运,`blockLen` 按字节设置,自动处理非 32B 对齐尾块。
189
+ - **多核均分切分**:host 侧按元素总数平均分核 + 余数补齐,尽量打满 `coreNum`。
190
+ - **字节宽度模板化**:按 1/2/4/8 字节分派,不区分具体 dtype。
191
+
192
+ 未用到(区别于其他 Transpose 策略,便于对照理解):
193
+
194
+ - 没有 NDDMA 多维搬运 / `nddmaIdx`、`inUbMainSrcShape` 等描述符(那是 CUT_ONCE/CUT_TWICE/BIG_DIM 才用)。
195
+ - 没有 UB 内部转置、没有 regbase / MicroAPI(寄存器)编程(那是 GATHER_TRANSPOSE 路径)。
196
+ - 没有 VCONV / 5HD 相关搬运(那是 VCONV 系列)。
197
+ - 没有独立的 TBuf 临时空间,仅一个绑定队列。
198
+
199
+ ---
200
+
201
+ ## 小结
202
+
203
+ TENSOR_MOVE 是 Transpose 在「轴规约后退化为单轴、无需真正重排」时的快路径:host 一眼判定(`dim==1`),kernel 用双缓冲的连续 `DataCopyPad` 把数据 GM→UB→GM 原位搬过去,接近理论带宽。调优时若发现某个 Transpose case 命中 10000,通常说明该 case 已是最优形态,重点关注是否打满核数与 UB 单次搬运粒度即可。