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,42 @@
1
+ # MC² 族性能优化指南(3 策略)
2
+
3
+ > A 型。适用 DAV_3510。适用于 MC² 通算融合族所有变体:`matmul_all_reduce`、
4
+ > `allgather_matmul`、`matmul_reducescatter`、`alltoall_matmul` 等。
5
+ >
6
+ > 机制决策细节(Bound 判定 / R 值五档 / 配平搜索 / 膨胀分析)见 ops-mechanism
7
+ > `optimize/mc2.md` 与 `optimize/mc2-balancing.md`——本族 guide 只维护策略-文档映射
8
+ > 与族特有约束。
9
+
10
+ ## 策略表
11
+
12
+ | 策略 | 优先级 | 适用场景 | 核心手段 | 设计文档 |
13
+ |------|--------|---------|---------|---------|
14
+ | **local_matmul** | 首选 | 所有 MC² 通算融合算子 | 将本 rank 数据的 matmul 从通信块循环中分离,前置/后置独立执行以与通信重叠 | [local_matmul_design.md](local_matmul_design.md) |
15
+ | **pipeline_balancing** | 中 | 所有 MC² 算子(在 Local Matmul 基础上叠加) | 按 Bound 类型确定长短块排布,**TilingData 驱动的系统搜索**(四条剪枝 + Top-N 候选实测)选最优切分 | [pipeline_balancing_design.md](pipeline_balancing_design.md) |
16
+ | **matmul 计算效率优化** | 最低 | 仅计算 Bound(正交可叠加) | 参考 matmul 族优化策略(pingpong/streamk/fullload 等) | [../matmul/guide.md](../matmul/guide.md) |
17
+
18
+ > Local Matmul 不依赖 Bound 判定,推荐优先实现。流水配平须先打印 TilingData
19
+ > (baseM/baseN/usedCoreNum) 并执行隔离测试获取 R 值(isolation_test.py),再通过系统
20
+ > 搜索算法(非经验值)确定最优 longMSize。三者可结合使用。
21
+
22
+ ## 融合模式分类
23
+
24
+ | 融合模式 | 执行顺序 | 典型算子 |
25
+ |---------|---------|---------|
26
+ | TP 权重聚合 | 通信→计算 | allgather_matmul |
27
+ | TP 输出分发 | 计算→通信 | matmul_reducescatter |
28
+ | 全局归约 | 计算→通信 | matmul_all_reduce |
29
+ | EP 专家分发 | 通信→计算 | alltoallv_grouped_matmul |
30
+ | EP 反向分发 | 计算→通信 | grouped_matmul_alltoallv |
31
+
32
+ > 纯通信算子(无计算融合)不属于 MC² 族,不适用本族优化策略。
33
+
34
+ ## 族特有约束
35
+
36
+ - 前置数据:TilingData(PrintTilingData 补采)+ 隔离测试 R 值(`ops-collect` 的 isolation_test.py);
37
+ - 采集:msprof task-based、循环 ≥10 前 5 warm-up、**跨 rank 取 max**、禁 host 计时;
38
+ - 指标核算:每方案必出加速比 + 掩盖率 =(融合前耗时 − 融合后耗时)/ min(T_comm, T_compute);
39
+ - 抖动诊断:时间维(同卡多次)× 空间维(不同卡同轮)双维分析,异常轮剔除规则
40
+ (首跑 >3× 均值);
41
+ - 硬约束:缺 TilingData 不得做配平分析;配平方案必须系统搜索(四剪枝 + Top-N 实测),
42
+ 禁止 1-2 个经验值交付;隔离测试在源码副本进行。
@@ -0,0 +1,130 @@
1
+ # MC² Local Matmul 优化设计
2
+
3
+ > 本文档为**实现层**设计指南。对应的**分析层**策略(原理、选型决策、约束)详见 ops-mechanism 的 [mc2.md](../../../ops-mechanism/references/optimize/mc2.md)。
4
+
5
+ ## 1. 优化目标
6
+
7
+ 将本 rank 自身数据(Local 数据,无需通信)的 matmul 计算从通信块循环中分离,提前(或延后)独立执行,与首次通信重叠,隐藏通信延迟。
8
+
9
+ > Local Matmul 是首选优化策略,不依赖 Bound 判定,可与流水配平策略结合使用。
10
+
11
+ ## 2. 架构概览
12
+
13
+ ### 2.1 Local 数据的特点
14
+
15
+ 通算融合算子按 M 维度切分后,每个 tile 的数据需跨卡通信再做 matmul。但本 rank 自身的数据无需通信——这部分 Local 数据可独立计算,与通信并行:
16
+
17
+ ```
18
+ 通信后计算(Local 前置):
19
+ AIC: LocalMatmul(全量M) → WaitFlag(0) → DoMatmul(块0) → DoMatmul(块1) → ...
20
+ AIV: 通信块0 → 通信块1 → ...
21
+ ↑ Local matmul 与首次通信重叠
22
+
23
+ 计算后通信(Local 后置):
24
+ AIC: DoMatmul(块0,远程) → DoMatmul(块1,远程) → ... → LocalMatmul(全量M,后置)
25
+ AIV: WaitCompute(0) → AlltoAll(块0) → WaitCompute(1) → AlltoAll(块1) → ...
26
+ ```
27
+
28
+ ### 2.2 独立 tiling data
29
+
30
+ Local matmul 使用独立的 tiling data(`localQbmmTilingData` / `mmLocal`),以全量 M 作为计算规模,与通算切分块的长块/短块 tiling data 相互独立。
31
+
32
+ ## 3. 关键参数
33
+
34
+ ### 3.1 通信后计算(Local 前置)
35
+
36
+ Local matmul 前置执行,与首次通信重叠:
37
+
38
+ | 模式 | 机制 | 适用场景 |
39
+ |------|------|---------|
40
+ | 融合 | self rank 在通信块循环内一起计算 | 通信量小 |
41
+ | 前置独立 | LocalMatmulProcess 先执行,与首次通信重叠 | 通信 Bound |
42
+
43
+ ### 3.2 计算后通信(Local 后置)
44
+
45
+ Local matmul 后置执行,通信块只算远程 rank:
46
+
47
+ | 模式 | 机制 | 适用场景 |
48
+ |------|------|---------|
49
+ | 融合 | self batch 在通信块循环内一起计算 | 通信量小 |
50
+ | 后置独立 | LocalCompute 后置执行,通信块只算远程 rank | 通信 Bound |
51
+
52
+ ### 3.3 Host 侧 tiling 生成
53
+
54
+ ```cpp
55
+ // 通信后计算:local tiling(以全量 M 为规模)
56
+ tilingEngine.GetTilingData(m, n, ka, false, true, tilingData.localQbmmTilingData);
57
+
58
+ // 计算后通信:local tiling(后置模式下有效)
59
+ if (isLocalDelayed) {
60
+ tilingEngine.GetTilingData(m, np, k, 1, tilingData.mmLocal);
61
+ }
62
+ ```
63
+
64
+ ## 4. 核心计算循环
65
+
66
+ ### 4.1 通信后计算 — Local Matmul 前置
67
+
68
+ ```cpp
69
+ // AIC 端 LocalMatmulProcess(),在 MatmulProcess() 之前执行
70
+ __aicore__ inline void LocalMatmulProcess() {
71
+ Params localParams;
72
+ SetupParams(&tilingData_->localQbmmTilingData, 0, localParams, MatmulMode::LOCAL);
73
+ quantMatmulKernelImpl_(localParams); // 本地数据 matmul,直接写入输出
74
+ }
75
+
76
+ // Process() 调度
77
+ __aicore__ inline void Process() {
78
+ if ASCEND_IS_AIV { AllToAllProcess(); }
79
+ if ASCEND_IS_AIC {
80
+ LocalMatmulProcess(); // 前置执行
81
+ MatmulProcess(); // 通信块计算
82
+ }
83
+ }
84
+ ```
85
+
86
+ ### 4.2 计算后通信 — Local Compute 后置
87
+
88
+ ```cpp
89
+ // AIC 端 LocalCompute(),在 MatmulProcess() 之后执行
90
+ __aicore__ inline void LocalCompute() {
91
+ GemmParams localParam;
92
+ SetupParams(tilingData_->mmLocal, 1, rankId_, axisM_, true, localParam);
93
+ localParam.skipMmadInit = false;
94
+ gemmKernel_(localParam); // self batch 后置计算,直接输出到 cGM
95
+ }
96
+
97
+ // Process() 调度
98
+ __aicore__ inline void Process() {
99
+ if ASCEND_IS_AIC { MatmulProcess(); } // 通信块计算(远程 rank)
100
+ if ASCEND_IS_AIV { AllToAllProcess(); } // 通信
101
+ if ASCEND_IS_AIC { LocalCompute(); } // 后置执行 self batch
102
+ }
103
+ ```
104
+
105
+ ## 5. 优化的关键修改点
106
+
107
+ | # | 修改点 | 改造前 | 改造后 | 说明 |
108
+ |---|--------|--------|--------|------|
109
+ | 1 | TilingData | 无 local tiling | 新增 localQbmmTilingData / mmLocal | 独立 local tiling(全量 M) |
110
+ | 2 | Host 侧 | 无 local tiling 生成 | 调用 tilingEngine 生成 local tiling | 全量 M |
111
+ | 3 | Kernel Process | 无 LocalMatmulProcess / LocalCompute | 前置或后置独立执行 | 与通信块循环分离 |
112
+
113
+ ## 6. 注意事项 / 约束
114
+
115
+ ### 6.1 Local matmul 连续性约束
116
+
117
+ 通信后计算 + 计算 Bound 场景下,Local matmul 的耗时要掩盖住首块通信,否则无法保证 matmul 计算连续性。若 Local matmul 耗时不足,需调整 Local 数据量或通信粒度。
118
+
119
+ ### 6.2 Mac 利用率
120
+
121
+ Local matmul 以全量 M 为规模,通常 Mac 利用率较高。但需确认 local tiling data 的 baseM/baseN/baseK 合理,避免全量 M 过小导致核不满。
122
+
123
+ ## 7. 选型决策
124
+
125
+ | 执行顺序 | 推荐模式 | 理由 |
126
+ |---------|---------|------|
127
+ | 通信后计算 | 前置独立 | Local 计算与首次通信重叠,隐藏通信延迟 |
128
+ | 通信后计算(通信量小) | 融合 | Local 数据占比小,独立计算收益不大 |
129
+ | 计算后通信 | 后置独立 | 通信块只算远程 rank |
130
+ | 计算后通信(通信量小) | 融合 | Local 数据占比小 |
@@ -0,0 +1,502 @@
1
+ # MC² 流水配平优化设计
2
+
3
+ > 本文档为**实现层**设计指南,提供 TilingData 结构、Host 侧搜索代码、Kernel 核心循环和修改点等实施细节。对应的**分析层**框架(Bound 判定、配平公式、搜索算法、膨胀分析、性能指标)详见 ops-mechanism 的 [mc2-balancing.md](../../../ops-mechanism/references/optimize/mc2-balancing.md) 与 [mc2.md](../../../ops-mechanism/references/optimize/mc2.md)。实施前须先完成 TilingData 采集和隔离测试(ops-collect 的 isolation_test.py)。
4
+
5
+ ## 1. 优化目标
6
+
7
+ 将 MC² 通算融合算子从**均匀切分、通信与计算串行执行**改为**长短块配平、AIC/AIV 分离流水掩盖**,通过长短块排布最大化通信与计算的重叠度,预期通算掩盖率从 50%–70% 提升至 85%+。
8
+
9
+ > Local Matmul(本 rank 数据独立计算)是与流水配平并列的独立策略,详见 [local_matmul_design.md](local_matmul_design.md)。
10
+
11
+ ## 2. 架构概览
12
+
13
+ ### 2.1 AIC/AIV 分离架构
14
+
15
+ MC² 通算融合算子采用 AIC(计算核)+ AIV(向量核)分离架构,通过 CrossCore 事件同步实现通信与计算的流水掩盖:
16
+
17
+ ```
18
+ ┌─────────────────────────────────────────────────┐
19
+ │ AIV(向量核) │
20
+ │ 职责:通信(AllToAll via UDMA / shmem) │
21
+ │ 同步:CrossCoreSetFlag → 通知 AIC 数据就绪 │
22
+ │ WaitComputeComplete → 等 AIC 计算完成 │
23
+ └──────────────────────┬──────────────────────────┘
24
+ │ CrossCore 事件同步
25
+ ┌──────────────────────┴──────────────────────────┐
26
+ │ AIC(计算核) │
27
+ │ 职责:matmul 计算(QBMM + Scale) │
28
+ │ 同步:CrossCoreWaitFlag → 等 AIV 数据就绪 │
29
+ │ NotifyComputeComplete → 通知 AIV 计算完成 │
30
+ └─────────────────────────────────────────────────┘
31
+ ```
32
+
33
+ ### 2.2 通算流水模型
34
+
35
+ 按 matmul 结果矩阵的行(M)切分为多个块,每块先做通信再做计算(或反之),相邻块的通信与计算重叠执行。
36
+
37
+ **通信后计算(如 alltoall + matmul)**:
38
+
39
+ ```
40
+ AIV: PutToAllRanks(块0) → SetFlag(0) → PutToAllRanks(块1) → SetFlag(1) → ...
41
+ AIC: WaitFlag(0) → DoMatmul(块0) → WaitFlag(1) → DoMatmul(块1) → ...
42
+ ↕ 计算与通信重叠
43
+ ```
44
+
45
+ **计算后通信(如 matmul + alltoall)**:
46
+
47
+ ```
48
+ AIC: DoMatmul(块0) → NotifyCompute(0) → DoMatmul(块1) → NotifyCompute(1) → ...
49
+ AIV: WaitCompute(0) → BarrierAll → AlltoAll(块0) → WaitCompute(1) → ...
50
+ ↕ 通信与计算重叠
51
+ ```
52
+
53
+ ### 2.3 长短块排布
54
+
55
+ 均匀切分时,首块或尾块的通信/计算无法被掩盖,造成固定开销。通过引入**长短块**,将无法被掩盖的块设为短块(耗时最小化),长块保证高 Mac 利用率。短块数量最多一块;若长块长度与短块长度一致,则只需要保留长块,短块可以不做相关配置。
56
+
57
+ 短块位置由执行顺序 × Bound 类型决定,通过 `shortBlockPos` flag 控制:
58
+
59
+ ```
60
+ 短块在前 (shortBlockPos=0): shortBlockCnt 个短块(shortMSize) + longBlockCnt 个长块(longMSize)
61
+ 短块在后 (shortBlockPos=1): longBlockCnt 个长块(longMSize) + shortBlockCnt 个短块(shortMSize)
62
+
63
+ 示例(M=2304, longMSize=512, 短块在后):
64
+ longBlockCnt=4, longMSize=512, shortBlockCnt=1, shortMSize=256
65
+ 执行序列:长块1(512) → 长块2(512) → 长块3(512) → 长块4(512) → 短块(256)
66
+ ```
67
+
68
+ > 长块和短块使用**各自独立的完整 matmul tiling data**,因为不同 M 大小导致不同的 L1/L0 切分策略。
69
+
70
+ ## 3. 关键参数
71
+
72
+ ### 3.0 TilingData 打印(实施前置条件)
73
+
74
+ > ⚠️ 流水配平的搜索算法依赖 baseM、baseN、usedCoreNum 等 matmul tiling 参数。实施前**必须**确保 host 代码打印这些参数,否则无法进行核利用率计算和搜索范围推导。
75
+
76
+ host 代码的 tiling 引擎通常包含 `PrintTilingData` 方法但被注释掉。参考 `quant_matmul_tiling_base.h`:
77
+
78
+ ```cpp
79
+ void GetTilingData(uint64_t m, uint64_t n, uint64_t k, bool transA, bool transB,
80
+ QuantMatmulTilingData& tilingData)
81
+ {
82
+ ...
83
+ DoOpTiling(tilingData);
84
+ PrintTilingData(tilingData); // ← 取消注释,启用打印
85
+ }
86
+
87
+ void PrintTilingData(const QuantMatmulTilingData& tilingData) const
88
+ {
89
+ printf("[QuantMatmul Strategy]\n");
90
+ printf(" strategy : %s\n", TilingName());
91
+ printf("[QuantMatmul Tiling Data]\n");
92
+ printf(" usedCoreNum : %u\n", tilingData.usedCoreNum);
93
+ printf(" m : %u\n", tilingData.m);
94
+ printf(" n : %u\n", tilingData.n);
95
+ printf(" k : %u\n", tilingData.k);
96
+ printf(" baseM : %u\n", tilingData.baseM);
97
+ printf(" baseN : %u\n", tilingData.baseN);
98
+ printf(" baseK : %u\n", tilingData.baseK);
99
+ printf(" stepK : %u\n", tilingData.stepK);
100
+ printf(" nBufferNum : %u\n", tilingData.nBufferNum);
101
+ printf(" dbL0c : %u\n", tilingData.dbL0c);
102
+ }
103
+ ```
104
+
105
+ **若算子无 PrintTilingData 方法**,须在 host tiling 计算完成后添加 printf 打印以下必需字段:
106
+
107
+ | 字段 | 用途 |
108
+ |------|------|
109
+ | `baseM` | 计算 mBlockCnt = ceil(longMSize / baseM) → 核利用率 |
110
+ | `baseN` | 计算 nBlockCnt = ceil(N / baseN) → 核利用率 |
111
+ | `usedCoreNum` | 确认可用核数 N_core |
112
+ | `baseK` / `stepK` | 辅助分析 L1/L0 切分合理性 |
113
+
114
+ > 长块和短块各有独立的 matmul tiling data(不同 M → 不同 baseM/baseN)。须对长块和短块分别打印 tiling data。
115
+
116
+ ### 3.1 TilingData 结构
117
+
118
+ #### 通信后计算(以 alltoall + matmul 为例)
119
+
120
+ ```cpp
121
+ struct AllToAllCommTilingData {
122
+ uint32_t tileCnt; // 总块数 = longBlockCnt + shortBlockCnt
123
+ uint32_t longBlockCnt; // 长块数量 = M / longMSize
124
+ uint32_t longMSize; // 长块 M 维大小
125
+ uint32_t shortBlockCnt; // 短块数量(0 或 1)
126
+ uint32_t shortMSize; // 短块 M 维大小 = M % longMSize
127
+ uint8_t shortBlockPos; // 短块位置: 0=前(front), 1=后(back)
128
+ };
129
+
130
+ struct allToAllMatmulTilingData {
131
+ AllToAllCommTilingData commTilingData;
132
+ QuantMatmulTilingData longQbmmTilingData; // 长块 matmul tiling
133
+ QuantMatmulTilingData shortQbmmTilingData; // 短块 matmul tiling(shortBlockCnt > 0 时有效)
134
+ QuantMatmulTilingData localQbmmTilingData; // local matmul tiling(详见 local_matmul_design.md)
135
+ };
136
+ ```
137
+
138
+ #### 计算后通信(以 matmul + alltoall 为例)
139
+
140
+ ```cpp
141
+ struct MatmulAllToAllTilingData {
142
+ QuantBatchMatmulTilingData mmLong; // 长块 matmul tiling
143
+ QuantBatchMatmulTilingData mmShort; // 短块 matmul tiling
144
+ QuantBatchMatmulTilingData mmLocal; // local matmul tiling(详见 local_matmul_design.md)
145
+ uint32_t tileCnt; // 总块数 = longBlockCnt + shortBlockCnt
146
+ uint32_t longBlockCnt; // 长块数量
147
+ uint32_t longMSize; // 长块 M 维大小
148
+ uint32_t shortBlockCnt; // 短块数量(0 或 1)
149
+ uint32_t shortMSize; // 短块 M 维大小
150
+ uint8_t shortBlockPos; // 短块位置: 0=前(front), 1=后(back)
151
+ };
152
+ ```
153
+
154
+ ### 3.2 Host 侧参数计算
155
+
156
+ #### 切分方案搜索(TilingData 驱动)
157
+
158
+ longMSize 的选择不应凭经验取固定值(如 512),而应基于 TilingData 打印的 baseM/baseN/usedCoreNum 和隔离测试的 α/β/R 值,执行系统搜索:
159
+
160
+ ```cpp
161
+ // ============ 搜索输入(从 TilingData 打印和隔离测试获取)============
162
+ // M, N: 算子 shape
163
+ // baseM, baseN, N_core: 从 TilingData 打印获取
164
+ // α (comm μs/row), β (compute μs/row), R = β/α: 从隔离测试获取
165
+
166
+ // ============ 搜索范围推导 ============
167
+ uint32_t nBlockCnt = (N + baseN - 1) / baseN;
168
+ float utilThresh = (R >= 1.0f) ? 0.80f : 0.50f; // 计算 bound 80%,通信 bound 50%
169
+ uint32_t minTotalBlk = (uint32_t)ceil(utilThresh * N_core);
170
+ uint32_t minMBlkCnt = max(1u, (minTotalBlk + nBlockCnt - 1) / nBlockCnt);
171
+ uint32_t hs_min = max(baseM, (minMBlkCnt - 1) * baseM + 16);
172
+ hs_min = (hs_min + 15) & ~15u; // 16 对齐
173
+ uint32_t hs_max = (M / 2) & ~15u; // 至少 2 块
174
+ uint32_t tcFloor = 2;
175
+ uint32_t tcCap = (R >= 1.0f) ? min((uint32_t)ceil(R) + 2, 8u)
176
+ : min((uint32_t)ceil(1.0f/R) + 2, 16u);
177
+
178
+ // ============ 扫描所有候选 hs ============
179
+ struct Candidate { uint32_t hs, hc, tail, tc; float estT; float util; };
180
+ vector<Candidate> candidates;
181
+
182
+ for (uint32_t hs = hs_min; hs <= hs_max; hs += 16) {
183
+ uint32_t hc = M / hs;
184
+ uint32_t tail = M % hs;
185
+
186
+ // P1: 尾块下限(128 行以下排除,Mac 利用率极低)
187
+ if (tail > 0 && tail < 128) continue;
188
+
189
+ // P3: tileCnt 范围
190
+ uint32_t tc = hc + (tail > 0 ? 1 : 0);
191
+ if (tc < tcFloor || tc > tcCap) continue;
192
+
193
+ // P2: 核利用率(主轮 = 长块)
194
+ uint32_t mBlk = (hs + baseM - 1) / baseM;
195
+ uint32_t totalBlk = mBlk * nBlockCnt;
196
+ float util = min(totalBlk, N_core) / (float)N_core;
197
+ if (util < utilThresh) continue;
198
+
199
+ // P4: 配平条件
200
+ float rho = max(R, 1.0f / R);
201
+ if (tail > 0 && tail < rho * hs) continue;
202
+
203
+ // 理论时间估算(计算 bound 示例)
204
+ float T = alpha * hs // T_fill
205
+ + (hc - 1) * beta * hs // T_steady
206
+ + max(alpha * tail, beta * hs) // T_transition
207
+ + beta * tail; // T_drain
208
+
209
+ candidates.push_back({hs, hc, tail, tc, T, util});
210
+ }
211
+
212
+ // 按理论时间排序,取 Top-15
213
+ sort(candidates.begin(), candidates.end(),
214
+ [](auto& a, auto& b) { return a.estT < b.estT; });
215
+ int TOP_N = min(15, (int)candidates.size());
216
+ ```
217
+
218
+ > ⚠️ 理论时间仅为排序代理,**Top-N 候选须全部 msprof 实测**才能确定最优。host 代码须支持命令行指定 `longMSize` 以便逐一测试。
219
+
220
+ #### 通信后计算
221
+
222
+ ```cpp
223
+ // 1. 长短块切分(支持命令行指定 longMSize 以便 Top-N 候选实测)
224
+ if (longMSizeArg > 0) {
225
+ longMSize = longMSizeArg; // 命令行指定(搜索算法输出)
226
+ longBlockCnt = m / longMSize;
227
+ shortMSize = m % longMSize;
228
+ shortBlockCnt = (shortMSize > 0) ? 1 : 0;
229
+ tileCnt = longBlockCnt + shortBlockCnt;
230
+ } else {
231
+ longMSize = 512; // 默认值(应替换为搜索算法结果)
232
+ longBlockCnt = m / longMSize;
233
+ shortMSize = m % longMSize;
234
+ shortBlockCnt = (shortMSize > 0) ? 1 : 0;
235
+ tileCnt = longBlockCnt + shortBlockCnt;
236
+ }
237
+ // shortBlockPos 由执行顺序 × Bound 类型决定(详见分析层策略矩阵)
238
+
239
+ // 2. 各块独立计算 matmul tiling
240
+ tilingEngine.GetTilingData(longMSize, n, ka, false, true, longQbmmTilingData); // 长块
241
+ if (shortBlockCnt > 0) {
242
+ tilingEngine.GetTilingData(shortMSize, n, ka, false, true, shortQbmmTilingData); // 短块
243
+ }
244
+
245
+ // 3. launchCoreNum 取长块和短块的最大值
246
+ launchCoreNum = max(longQbmmTilingData.usedCoreNum, shortQbmmTilingData.usedCoreNum);
247
+ // local tiling 生成详见 local_matmul_design.md
248
+ ```
249
+
250
+ #### 计算后通信
251
+
252
+ ```cpp
253
+ // 1. 长短块切分(支持命令行指定 longMSize 或均匀切分)
254
+ if (longMSizeArg > 0) {
255
+ longMSize = longMSizeArg;
256
+ longBlockCnt = m / longMSize;
257
+ shortMSize = m % longMSize;
258
+ shortBlockCnt = (shortMSize > 0) ? 1 : 0;
259
+ tileCnt = longBlockCnt + shortBlockCnt;
260
+ } else {
261
+ longMSize = m / tileCnt; // 均匀切分(无短块)
262
+ longBlockCnt = tileCnt;
263
+ shortMSize = 0;
264
+ shortBlockCnt = 0;
265
+ }
266
+ // shortBlockPos 由执行顺序 × Bound 类型决定(详见分析层策略矩阵)
267
+
268
+ // 2. 各块独立计算 matmul tiling
269
+ tilingEngine.GetTilingData(longMSize, np, k, remoteBatch, mmLong); // 长块
270
+ if (shortBlockCnt > 0) {
271
+ tilingEngine.GetTilingData(shortMSize, np, k, remoteBatch, mmShort); // 短块
272
+ }
273
+ // local tiling 生成详见 local_matmul_design.md
274
+ ```
275
+
276
+ ## 4. 核心计算循环
277
+
278
+ ### 4.1 通信后计算 — AIC 远程计算主循环
279
+
280
+ ```cpp
281
+ // AllToAllMatmul: AIC 端 MatmulProcess()
282
+ // LocalMatmulProcess() 已在前置执行(详见 local_matmul_design.md)
283
+ for (int32_t mLoopIdx = 0; mLoopIdx < tileCnt_; ++mLoopIdx) {
284
+ // 判断当前块是长块还是短块(由 shortBlockPos 决定顺序)
285
+ bool isLong = shortBlockPos_ // 0=front, 1=back
286
+ ? (mLoopIdx < longBlockCnt_) // 短块在后: 前 longBlockCnt 个是长块
287
+ : (mLoopIdx >= shortBlockCnt_); // 短块在前: 后 longBlockCnt 个是长块
288
+
289
+ const QuantMatmulTilingData* curTile = isLong
290
+ ? &tilingData_->longQbmmTilingData // 长块
291
+ : &tilingData_->shortQbmmTilingData; // 短块
292
+
293
+ SetupParams(curTile, mLoopIdx, params, mode);
294
+
295
+ uint64_t mOffset = CalcMOffset(mLoopIdx); // 按 shortBlockPos 计算实际偏移
296
+ uint32_t curMSize = GetCurMSize(mLoopIdx); // 长块或短块的 M 大小
297
+
298
+ // 更新地址偏移
299
+ params.mmadParams.aGmAddr = allToAllComm_.GetDataAddrGm(mLoopIdx);
300
+ params.mmadParams.cGmAddr = cGm_ + mOffset * axisN_ * sizeof(CType);
301
+
302
+ CrossCoreWaitFlag<0x2, PIPE_MTE2>(mLoopIdx); // 等待 AIV 数据就绪
303
+ quantMatmulKernelImpl_(params); // 执行 matmul
304
+
305
+ // 长短块切换时,确保 FIX 流水完成后再进入下一个 tile
306
+ if (shortBlockCnt_ > 0 && mLoopIdx < tileCnt_ - 1) {
307
+ SetFlag<HardEvent::MTE1_MTE2>(MTE1_MTE2_EVENT_FLAG);
308
+ WaitFlag<HardEvent::MTE1_MTE2>(MTE1_MTE2_EVENT_FLAG);
309
+ SetFlag<HardEvent::M_MTE1>(0);
310
+ WaitFlag<HardEvent::M_MTE1>(0);
311
+ }
312
+ }
313
+ ```
314
+
315
+ ### 4.2 通信后计算 — AIV 通信主循环
316
+
317
+ ```cpp
318
+ // AllToAllMatmul: AIV 端 AllToAllProcess()
319
+ allToAllComm_.PutScaleToAllRanks(0, axisM_); // 先行发送全局 Scale
320
+
321
+ for (uint32_t mLoopIdx = 0; mLoopIdx < commTurn_; ++mLoopIdx) {
322
+ uint64_t curMSize = GetCurMSize(mLoopIdx); // 按 shortBlockPos 获取长块或短块 M 大小
323
+ uint64_t mOffset = CalcMOffset(mLoopIdx); // 按 shortBlockPos 计算偏移
324
+
325
+ allToAllComm_.PutToAllRanks(mOffset, curMSize, mLoopIdx); // 分发当前块
326
+ CrossCoreSetFlag<0x2, PIPE_MTE3>(mLoopIdx); // 通知 AIC 数据就绪
327
+ }
328
+ ```
329
+
330
+ ### 4.3 计算后通信 — AIC 计算主循环
331
+
332
+ ```cpp
333
+ // MatmulAllToAll: AIC 端 MatmulProcess()
334
+ for (uint32_t tid = 0; tid < tileCnt_; ++tid) {
335
+ // 判断当前块是长块还是短块(由 shortBlockPos 决定顺序)
336
+ bool isLong = shortBlockPos_ // 0=front, 1=back
337
+ ? (tid < longBlockCnt_) // 短块在后: 前 longBlockCnt 个是长块
338
+ : (tid >= shortBlockCnt_); // 短块在前: 后 longBlockCnt 个是长块
339
+
340
+ const auto& curMmTile = isLong ? tilingData_->mmLong : tilingData_->mmShort;
341
+ uint32_t curTileM = GetCurTileM(tid); // 按 shortBlockPos 获取长块或短块 M 大小
342
+
343
+ SetupParams(curMmTile, remoteBatchSize, ..., param);
344
+ param.skipMmadInit = (tid > 0); // 首块后跳过初始化
345
+
346
+ gemmKernel_(param); // 执行 QBMM 计算
347
+ allToAllComm_.NotifyComputeComplete(tid); // 通知 AIV 计算完成
348
+
349
+ // 指针推进(按实际 tileM)
350
+ aCur += curTileM * aByteStrideK_;
351
+ cSelfCur += curTileM * cByteStrideN_;
352
+ }
353
+ ```
354
+
355
+ ### 4.4 计算后通信 — AIV 通信主循环
356
+
357
+ ```cpp
358
+ // MatmulAllToAll: AIV 端 AllToAllProcess()
359
+ for (uint32_t tid = 0; tid < tileCnt_; ++tid) {
360
+ allToAllComm_.WaitComputeComplete(tid); // 等待 AIC 完成当前 tile
361
+ aclshmemx_barrier_all_vec(); // 所有 rank AIV 对齐
362
+ uint32_t curTileM = GetCurTileM(tid);
363
+ uint64_t mElemOffset = CalcMOffset(tid);
364
+ allToAllComm_.AlltoAll(tid, curTileM, mElemOffset, rankSize_);
365
+ }
366
+ allToAllComm_.QuietAll();
367
+ ```
368
+
369
+ ## 5. 优化的关键修改点
370
+
371
+ | # | 修改点 | 改造前 | 改造后 | 说明 |
372
+ |---|--------|--------|--------|------|
373
+ | 1 | TilingData | 均匀 blockM + blockCount | longBlockCnt/longMSize + shortBlockCnt/shortMSize + shortBlockPos | 长短块 + 短块位置 |
374
+ | 2 | Matmul Tiling | 单一 tiling data | 长块/短块各有独立 tiling data | 不同 M 大小需不同 L1/L0 切分 |
375
+ | 3 | Host 侧 Tiling 计算 | 均匀切分 M | longMSize 切分 + 余数 short + 两组 tiling | 需先做 Bound 判定确定 longMSize |
376
+ | 4 | Kernel 主循环 | 单循环统一 tiling | 按 shortBlockPos 判断长/短块选择 tiling data | `isLong = shortBlockPos ? (tid<longBlockCnt) : (tid>=shortBlockCnt)` |
377
+ | 5 | AIC/AIV 分离 | 通信计算串行 | AIV 通信 + AIC 计算 + CrossCore 事件同步 | 通信与计算流水掩盖 |
378
+ | 6 | 长短块切换同步 | 无 | MTE1_MTE2 + M_MTE1 事件同步 | 确保 FIX 流水完成后再切换 tiling |
379
+
380
+ ## 6. 注意事项 / 约束
381
+
382
+ ### 6.1 TilingData 打印前置
383
+
384
+ 实施前**必须**确保 host 代码打印 baseM/baseN/usedCoreNum 等 tiling 参数(见 §3.0)。这些参数是搜索算法计算核利用率和推导搜索范围的输入。缺少 TilingData 数据时不得进行 longMSize 选择——不得凭经验取固定值(如 512)替代系统搜索。
385
+
386
+ ### 6.2 Bound 判定前置
387
+
388
+ 长短块 `longMSize` 的选择依赖 Bound 类型判定。实施前**必须**先通过隔离测试法(注释通信或计算 process,tileCnt=1 下测试)确定 Bound 类型和 R 值。
389
+
390
+ ### 6.3 系统搜索(禁止仅取经验值)
391
+
392
+ longMSize 必须通过搜索算法(§3.2)在配平可行域内系统遍历候选解,四条剪枝规则(尾块下限 128、核利用率 ≥ 80%/50%、tileCnt 范围、配平条件)过滤后取 Top-N 候选 msprof 实测。**禁止**只取 1-2 个经验值(如 longMSize=512)不做搜索就交付。
393
+
394
+ ### 6.4 Mac 利用率下限
395
+
396
+ 短块 M 维大小不能无限小——必须保证一定的 Mac 利用率。否则计算膨胀会抵消通算掩盖的收益。
397
+
398
+ - 计算 Bound:短块通信耗时需最小化(shortMSize 可适当小)
399
+ - 通信 Bound:短块计算耗时需最小化但保 Mac 利用率下限
400
+
401
+ ### 6.5 长短块切换的流水同步
402
+
403
+ 当 `shortBlockCnt > 0` 时,长块和短块使用不同的 tiling data,需要在块切换时确保 FIX 流水完成输出写入后再进入下一个 tile,避免 mmadOp 重新 Init 时冲突:
404
+
405
+ ```cpp
406
+ if (shortBlockCnt_ > 0 && mLoopIdx < tileCnt_ - 1) {
407
+ SetFlag<HardEvent::MTE1_MTE2>(MTE1_MTE2_EVENT_FLAG);
408
+ WaitFlag<HardEvent::MTE1_MTE2>(MTE1_MTE2_EVENT_FLAG);
409
+ SetFlag<HardEvent::M_MTE1>(0);
410
+ WaitFlag<HardEvent::M_MTE1>(0);
411
+ }
412
+ ```
413
+
414
+ ### 6.6 膨胀最小化
415
+
416
+ 切分会导致计算膨胀(流水中断、用核不满)和通信膨胀(头开销、带宽下降)。应优先最小化**瓶颈方**的膨胀:
417
+
418
+ | Bound 类型 | 最小化优先级 |
419
+ |-----------|------------|
420
+ | 计算 Bound | 最小化 matmul 膨胀 |
421
+ | 通信 Bound | 最小化通信膨胀 |
422
+ | 相近 | 综合平衡,以端到端整体最优为目标 |
423
+
424
+ ### 6.7 launchCoreNum 取最大值
425
+
426
+ 长块和短块的 usedCoreNum 可能不同,launchCoreNum 需取两者的最大值,确保所有 tile 都有足够的核可用。
427
+
428
+ ### 6.8 偏移与 M 大小自适应计算
429
+
430
+ kernel 侧的 `GetCurMSize` 和 `CalcMOffset` 需根据 `shortBlockPos` 判断当前块是长块还是短块:
431
+
432
+ ```cpp
433
+ uint32_t GetCurMSize(uint32_t tid) {
434
+ bool isLong = shortBlockPos_ ? (tid < longBlockCnt_) : (tid >= shortBlockCnt_);
435
+ return isLong ? longMSize_ : shortMSize_;
436
+ }
437
+
438
+ uint64_t CalcMOffset(uint32_t tid) {
439
+ // 短块在前: 前 shortBlockCnt 个是短块,之后是长块
440
+ if (shortBlockPos_ == 0) {
441
+ if (tid < shortBlockCnt_) return tid * shortMSize_;
442
+ return shortBlockCnt_ * shortMSize_ + (tid - shortBlockCnt_) * longMSize_;
443
+ }
444
+ // 短块在后: 前 longBlockCnt 个是长块,之后是短块
445
+ if (tid < longBlockCnt_) return tid * longMSize_;
446
+ return longBlockCnt_ * longMSize_ + (tid - longBlockCnt_) * shortMSize_;
447
+ }
448
+ ```
449
+
450
+ ### 6.9 host 代码须支持命令行参数指定 longMSize(实施约束)
451
+
452
+ MC² 流水配平方案实施时,host 代码**必须**支持通过命令行参数指定 `longMSize`,以便主 agent 对 Top-N 候选逐一 msprof 实测。首选候选(Rank 1)为默认值,其余候选通过命令行参数切换。**禁止将 longMSize 硬编码为单一值。**
453
+
454
+ 参考 §3.2 的 host 侧参数计算代码示例。
455
+
456
+ ## 7. 实施常见问题与解决方案
457
+
458
+ | 问题 | 根因 | 解决方案 |
459
+ |------|------|---------|
460
+ | 短块计算耗时过长,掩盖率下降 | shortMSize 过大 | 调整 longMSize 使 shortMSize 更小,或增加 longBlockCnt |
461
+ | 短块 Mac 利用率过低 | shortMSize 过小 | 保证 shortMSize ≥ baseM 的下限,或调整 longMSize 使余数更大 |
462
+ | 长短块切换时 FIX 流水冲突 | 未在切换点做事件同步 | 添加 MTE1_MTE2 + M_MTE1 事件同步 |
463
+ | 通信膨胀过大 | 切分次数过多、单次通信数据量小 | 减少 tileCnt,增大 longMSize |
464
+
465
+ ## 8. 选型决策
466
+
467
+ | 条件 | 推荐策略 |
468
+ |------|---------|
469
+ | 纯通信算子(无计算融合) | 不适用,走常规通信优化 |
470
+ | MC² 通算融合 + 计算 Bound | longMSize 取较大值,短块放 drain 端 |
471
+ | MC² 通算融合 + 通信 Bound | longMSize 适中,短块放 fill 端,尽量小但保 Mac |
472
+ | MC² 通算融合 + 相近 | 充分切分,最小粒度保 Mac 利用率 |
473
+ | M 不能被 longMSize 整除 | shortBlockCnt=1,shortMSize=余数,短块独立 tiling |
474
+ | 需优化本 rank 数据计算 | 叠加 [local_matmul 策略](local_matmul_design.md) |
475
+
476
+ ## 9. Top-N 候选实测验证
477
+
478
+ 搜索算法输出 Top-N(默认 15)个候选切分方案,须全部通过 msprof 实测验证后选最优。
479
+
480
+ ### 9.1 实施流程
481
+
482
+ ```
483
+ 1. 搜索算法输出 Top-N 候选(含 hs, hc, tail, tc, estT, util)
484
+ 2. host 代码支持命令行参数指定 longMSize
485
+ 3. 对每个候选 hs 值运行 demo + msprof 采集 aiv_time
486
+ 4. 按实测 aiv_time 排序,选最优作为最终方案
487
+ 5. 在《性能调优报告》中列出 Top-N 候选的对比表
488
+ ```
489
+
490
+ ### 9.2 候选对比表格式
491
+
492
+ ```markdown
493
+ | Rank | longMSize | longBlockCnt | shortMSize | tileCnt | 核利用率 | 理论T(μs) | 实测aiv(μs) | 备注 |
494
+ |------|-----------|-------------|------------|---------|---------|----------|------------|------|
495
+ | 1 | 512 | 4 | 256 | 5 | 100% | 45.2 | 48.3 | 最优 |
496
+ | 2 | 576 | 3 | 272 | 4 | 100% | 46.1 | 47.5 | 实测更优 |
497
+ | 3 | 448 | 5 | 128 | 6 | 94% | 47.8 | 52.1 | |
498
+ | 4 | 384 | 6 | 0 | 6 | 88% | 48.5 | 55.3 | 无短块 |
499
+ | 5 | 640 | 3 | 0 | 3 | 100% | 49.2 | 51.0 | 无短块 |
500
+ ```
501
+
502
+ > 注意:理论排序(Rank)与实测排序可能不一致——理论模型未考虑计算膨胀和通信膨胀的精确量。实测 aiv_time 为最终择优依据。