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,141 @@
1
+ # FA 族设计:三通道 Roofline(基本块 Bq/Bk 选取)
2
+
3
+ > **来源(蒸馏)**:Ascend C Tiling 设计方法论·FlashAttention Roofline 分册。
4
+ > 本文是 FA 基本块选取的**推导方法论**——禁止凭经验选取 Bq/Bk。
5
+
6
+ ## 1 为什么 FA 需要专门的 Roofline 模型
7
+
8
+ FA 是 mix kernel(AIC 算 GEMM + AIV 算 softmax,跨核 stage 化),性能瓶颈
9
+ **不能用单一 AI 概括**。三个独立吞吐通道各自可能成为瓶颈:
10
+
11
+ 1. **Cube 算力**(AIC 的 Mmad 吞吐)
12
+ 2. **HBM 带宽**(K/V/Q/O 的 GM 加载与写回)
13
+ 3. **跨核/片上吞吐**(AIV softmax 吞吐 + Cube↔Vector 片上握手 + O_acc streaming)
14
+
15
+ > ⚠️ **常见建模错误**:把片上跨核握手(S/P/PV 的 L0C↔UB↔L1 movement)与 HBM
16
+ > 加载混进同一个 AI 分母,再用「混合带宽」求单一 AI。这会把 AI 人为封顶在
17
+ > `D/sizeof(T)`,让人误以为 FA 永远到不了 compute-bound,同时掩盖真正的第三
18
+ > 瓶颈(AIV/片上吞吐——mix kernel 最常见瓶颈)。**三通道各自独立建模,
19
+ > 性能 = min(三 ceiling),瓶颈 = 限制项。**
20
+
21
+ ## 2 GQA 多头合并:mEff
22
+
23
+ FA 类 Mmad 的有效 m 维不是 Bq 本身:
24
+
25
+ ```
26
+ mEff = Bq × curG
27
+ ```
28
+
29
+ curG = 同一 kvHead 下合并到一个 task 的 qHead 数(≤ G = Hq/Hkv)。
30
+
31
+ - **Prefill**(Sq 大):Bq 够大,mEff 主要受 L0A 容量约束,curG 可能 < G
32
+ - **Decode**(Sq=1):Bq=1,`mEff = curG`,应最大化 curG = G
33
+
34
+ **mEff 是 FA Roofline 的核心自变量**——同时决定 AI 与三通道相对松紧。
35
+ (GQA 合并本身是不变量 I2:同 kvHead 的 G 个 qHead 必须同 task,禁止拆 G 个
36
+ task 各自重复搬 KV——KV 重复搬运 G 次,MTE2/L1 利用率塌陷。)
37
+
38
+ ## 3 三通道模型
39
+
40
+ ### 3.1 通道 2:HBM(主 Roofline)
41
+
42
+ 单 task 遍历全 Sk 的流量与算量:
43
+
44
+ ```
45
+ FLOPs_total = 4 × mEff × Sk × D # C1 与 C2 两个 GEMM
46
+ Bytes_HBM ≈ 2 × Sk × D × sizeof(T) # K/V 加载(主导,Sk ≫ mEff 时)
47
+ + 2 × mEff × D × sizeof(acc) × (Sk/Bk) # O_acc streaming(仅 streaming 模式)
48
+
49
+ AI_HBM ≈ 2·mEff / sizeof(T) # 忽略 streaming 项的清晰上界
50
+ ridge_HBM = Peak_CUBE_FLOPS / Peak_HBM_BW
51
+ AI_HBM < ridge_HBM → HBM-bound 可能
52
+ ```
53
+
54
+ (峰值参数从 soc-spec.yaml 取,不硬编码。)
55
+
56
+ **关键结论**:
57
+ - **AI_HBM ∝ mEff**(不封顶在 D/sizeof(T));
58
+ - **Decode(mEff=G)的 AI ∝ G**——GQA group 合并是提升 decode AI 的唯一杠杆;
59
+ - **Bk 经 O_acc streaming 项影响 AI**:streaming 模式增大 Bk 减少 O_acc 往返
60
+ (Sk/Bk 次);非 streaming(O_acc 驻 UB)Bk 对 AI 无直接影响。
61
+
62
+ **causal 的影响不在 AI**:完全 mask 的 tile 被跳过,FLOPs 与 K/V 加载**同比例
63
+ 减少**(平均有效 KV ≈ Sk/2),Sk 在 AI 推导中约掉 → AI ≈ 不变。causal 真正
64
+ 影响**绝对耗时与核间负载均衡**(见 mixed_kernel 文档 §多核切分)。
65
+
66
+ ### 3.2 通道 3:跨核/片上吞吐(AIV-bound 校核)
67
+
68
+ 若 AIV 端吞吐 < AIC 端,即使 HBM 与 Cube 都不饱和,算子仍被 AIV 拖住。
69
+
70
+ ```
71
+ T_AIC(tile) ≈ FLOPs(tile) / (Peak_CUBE × cube_util)
72
+ T_AIV(tile) ≈ softmax_ops(mEff·Bk) / AIV_vector_throughput
73
+ + onchip_bytes(mEff·Bk + mEff·D) / Peak_onchip_BW
74
+
75
+ cross-core-bound ⟺ T_AIV > T_AIC
76
+ ```
77
+
78
+ AIV 端每 tile 工作量:softmax over `[mEff, Bk]`(ReduceMax/Exp/ReduceSum ∝
79
+ mEff·Bk)+ 片上握手 movement(S: L0C→UB `mEff×Bk`;P: UB→L1 `mEff×Bk`;
80
+ PV: L0C→UB `mEff×D`——不占 HBM,占片上 SRAM 带宽)。
81
+
82
+ **主杠杆**:提 AIC:AIV 比(`__mix__(1,2)` → 更多 AIV);减握手粒度、
83
+ per-stage 同步、双缓冲让 AIC/AIV 重叠;减 PipeBarrier 冗余(<30%)。
84
+
85
+ ### 3.3 通道 1:Cube 算力
86
+
87
+ ```
88
+ Perf_compute = Peak_CUBE_FLOPS × cube_util
89
+ ```
90
+
91
+ cube_util 主要由 Mmad m/n/k 对齐到 16 的倍数决定。
92
+
93
+ ### 3.4 三通道取 min
94
+
95
+ | 区制 | 判据 | 主杠杆 |
96
+ |------|------|--------|
97
+ | Compute-bound | AI_HBM ≥ ridge 且 AIC 吞吐最低 | Mmad 对齐、Cube/Vector 重叠、减 PipeBarrier |
98
+ | HBM-bound | AI_HBM < ridge 且 HBM 吞吐最低 | 增大 mEff(∝AI)、Q 驻 L1、增大 Bk 减 O_acc 往返 |
99
+ | Cross-core-bound | T_AIV > T_AIC | 提 AIC:AIV 比、减握手粒度、双缓冲、减 PipeBarrier |
100
+
101
+ 常见 D 档位、mEff 较小时通常先撞 **HBM-bound 或 cross-core-bound**;增大 mEff
102
+ 提升 AI 后可能转入 compute-bound 或 cross-core-bound。
103
+
104
+ ## 4 基本块选取要点(推导,不照抄)
105
+
106
+ - **K_BASE 尽量取到 D**(L0A/L0B 容量允许时):`K_BASE = D` 单次 k-pass 完成
107
+ Mmad;K_BASE 越小 k-pass 次数越多,每次带 SetFlag/WaitFlag/PipeBarrier 同步
108
+ 开销——**选 K_BASE 必须代入 k-pass 次数评估同步开销**;
109
+ - **M_BASE / N 轴步进**:L1/L0 单槽容量约束下取尽量大(减分块循环次数),
110
+ 上界由容量校验公式给出(运行时 `GetCoreMemSize` 查询,禁硬编码);
111
+ - 初始试验值:`K_BASE=D`、M/N 步进取容量允许的最大 16 倍数,按实测调整;
112
+ - **Bk**:streaming UB 模式下优先增大(减 O_acc 往返);受 softmax 状态 buffer
113
+ 与握手 slot 容量约束。
114
+
115
+ ## 5 量化 FA 的 AI 修正(MX 类)
116
+
117
+ MX 类(mxfp8/mxfp4)块量化格式 scale 必须沿被消费 matmul 的 **reduction
118
+ (K-mmad)轴**量化(硬件硬约束:"data must be consecutive over the reduction
119
+ dimension"):
120
+
121
+ | 张量 | 被消费 matmul | K-mmad 轴 | scale 量化轴 |
122
+ |------|-------------|----------|------------|
123
+ | Q | Q·Kᵀ | D | D |
124
+ | K | Q·Kᵀ | D | D |
125
+ | P(kernel 内构造) | P·V | S_k | S_k |
126
+ | V | P·V | S_k | **S_k(不是 BSND innermost 的 D!)** |
127
+
128
+ **反直觉陷阱**:V 在 BSND `[B, Sk, Hkv, D]` 下 D 是 innermost 连续维度,按
129
+ 「沿连续维度量化」直觉会得 V scale 沿 D——与 PV Mmad 的 K-mmad=S_k 不兼容,
130
+ 业界标准沿 S_k。**违反后果:Mmad ScaleB 轴错位 → 输出 NaN/inf**(直接非数,
131
+ 不是漂移)。
132
+
133
+ ## 6 与本仓工具链的联动
134
+
135
+ - 三通道的 Peak 参数:`ops-verdict/references/soc-spec.yaml`(逐字段溯源);
136
+ - 上板后区制验证:verdict 命中规则 ↔ 区制对照表见 [guide.md](guide.md);
137
+ `mte2_active_bw_pct_of_peak`(facts_bridge 产出)直接服务 HBM 通道判定;
138
+ overlap_pct(trace_bubble 产出,需 A5 PipeTimeline/仿真)服务 cross-core
139
+ 通道判定;
140
+ - 候选参数探索:容量约束消费 soc-spec(与 tiling_candidates.py 同款容量
141
+ 预算思路,FA 专用基本块推导按本文 §4)。
@@ -0,0 +1,87 @@
1
+ # FA 族指南(guide)——FlashAttention 类算子调优入口
2
+
3
+ > **来源(蒸馏)**:内容整理自 Ascend C Tiling 设计方法论·FlashAttention 分册
4
+ > 四层方法论(patterns / foundation / design / subfamilies,约 2000 行)+
5
+ > 业界 Attention 设计实践(CATLASS 路径与标杆
6
+ > 对齐)——台账残留项的先期知识就位(真实 FA 工程接入时方法论文档已可用,
7
+ > 实战案例仍按无同型降级策略沉淀)。
8
+
9
+ ## 族特点
10
+
11
+ FA(FlashAttention)类 = 分块化、不显式实例化 attention score 矩阵的 attention
12
+ 计算族:Q/K/V 三输入,计算图 **Q·Kᵀ → softmax → ·V** 两段 GEMM + 中间 online
13
+ softmax(FA-2),沿 KV 维度分块流式累积,不在显存构建完整 `[Sq, Sk]` 矩阵。
14
+
15
+ **与其它族的本质差异**(决定不能套用 reduction/elementwise/matmul 模式):
16
+
17
+ | 维度 | FA 类 | 其它族 |
18
+ |------|------|--------|
19
+ | Kernel 类型 | `__mix__(N, M)` AIC+AIV 协同(典型 `__mix__(1,2)`) | 多数纯 vector / 纯 cube |
20
+ | 计算流 | 跨核 stage 化(Cube 算 GEMM,Vector 算 softmax) | 单核内完成 |
21
+ | 跨 KV 分块状态 | 必须在线 softmax 累积(max/sum/O_acc) | 多数无在线状态 |
22
+ | 任务维度 | s2(KV 分块)**禁入**任务分发维度 | 多数所有维度可分发 |
23
+
24
+ **禁止**:`__vector__`(AIV_ONLY)做 FA 类——纯 Vector 实现 GEMM 性能比 Cube 低
25
+ 10-100×;仅 MVP 调试阶段可临时做精度基线。
26
+
27
+ ## 判定规则映射(verdict 命中 → 本族机制)
28
+
29
+ FA 是 mix kernel,瓶颈形态跨 L1/L2/L3 三层,本仓 verdict 的消费方式:
30
+
31
+ | verdict 命中 | FA 场景解读 | 深入文档 |
32
+ |-------------|------------|---------|
33
+ | L1_MTE2_BOUND(真饱和) | K/V 加载带宽主导(HBM-bound 区制) | [fa_roofline_design.md](fa_roofline_design.md)(增大 mEff 提升 AI) |
34
+ | L1_LATENCY_SYNC_SUSPECT / 串行指纹 | AIC/AIV 握手未流水化(cross-core-bound 前兆) | [fa_mixed_kernel_design.md](fa_mixed_kernel_design.md)(流水编排) |
35
+ | L1_VEC_BOUND | AIV softmax 吞吐主导(cross-core-bound) | 同上(提 AIC:AIV 比 / 减握手粒度) |
36
+ | L1_CUBE_BOUND | Mmad 对齐/利用率问题(compute-bound) | fa_roofline(Mmad 对齐杠杆) |
37
+ | L2_UNDERUTILIZATION / CORE_TAIL | causal 负载不均 / task 维度构造问题 | fa_mixed_kernel(多核切分与均衡) |
38
+
39
+ > 注意:L3 MC² 规则不适用于单卡 FA;多卡 FA(sequence parallel)按 MC² 场景
40
+ > 单独判定。**片上跨核握手不是 MTE2 带宽**——roofline 三通道模型见专文,
41
+ > 禁止把握手流量混进 HBM AI 分母。
42
+
43
+ ## 调优路由(按性能区制)
44
+
45
+ 三通道 Roofline 判定([fa_roofline_design.md](fa_roofline_design.md))出区制后:
46
+
47
+ | 区制 | 主杠杆 |
48
+ |------|--------|
49
+ | HBM-bound | 增大 mEff(∝AI);Q 驻 L1;增大 Bk 减少 O_acc streaming 往返 |
50
+ | Compute-bound | Mmad m/n/k 对齐 16;Cube/Vector 重叠;减 PipeBarrier |
51
+ | Cross-core-bound | 提 AIC:AIV 比(如 `__mix__(1,2)`→更多 AIV);per-stage 同步;双缓冲重叠;减 PipeBarrier |
52
+
53
+ ## 标杆对齐(对照业界 Attention 设计实践)
54
+
55
+ | 标杆 | 位置 | 用途 |
56
+ |------|------|------|
57
+ | `aclnnFlashAttentionScore` | CANN op_api 文档 | 底层标杆:语义/dtype/layout/scale/mask 权威 |
58
+ | `torch_npu.npu_fusion_attention` | torch_npu op-plugin | Python 标杆:可直接 NPU 实测对比 |
59
+
60
+ 关键映射陷阱(蒸馏):
61
+ - **seqlen 约定不同**:npu 标杆 `actual_seq_qlen/kvlen` 是**累加和**,内核常为
62
+ per-batch 原始长度——host 必须做差分转换;
63
+ - **mask 语义**:`atten_mask 1=不参与`;causal(sparse_mode 2/3)须压缩下三角
64
+ `[2048,2048]` 否则 tiling 报 161001;
65
+ - **scale**:默认 `1/√D`;标杆传自定义 scale 时 host 须覆盖 TilingData;
66
+ - dropout/pse/sink/inner_precise 等字段不在前向调优范围,静默继承 = 语义错误。
67
+
68
+ ## 文档结构
69
+
70
+ | 文档 | 内容 |
71
+ |------|------|
72
+ | 本 guide | 族定位 / 判定映射 / 调优路由 / 标杆对齐 |
73
+ | [fa_roofline_design.md](fa_roofline_design.md) | 三通道 Roofline(mEff/AI 推导 / 区制判定 / causal 与量化修正) |
74
+ | [fa_mixed_kernel_design.md](fa_mixed_kernel_design.md) | mix kernel 设计(数据流四阶段 / 不变量 I1-I5 / 流水编排 / 跨核同步 / softmax 实现陷阱) |
75
+
76
+ ## 模板状态(如实标注)
77
+
78
+ 本族**无可拷贝代码模板**(模板数 0)——Ascend C 路径无完整 FA 参考实现
79
+ (asc-devkit 仅有 mix 融合示例 + SoftmaxFlashV2 building block 可作基线验证);
80
+ CATLASS 路径的整经验证核函数(`FAInferKernel`)在 参考实现 工程资产内,
81
+ 不在本仓。实施时按 [fa_mixed_kernel_design.md](fa_mixed_kernel_design.md) 的
82
+ 设计节点推进 + 无同型降级策略(验证强度↑)。
83
+
84
+ ## 知识缺口
85
+
86
+ 实战案例(E 级)待首个真实 FA 工程接入后沉淀:发现本 guide 未覆盖场景 →
87
+ `ops-mechanism/scripts/log_gap.py --family fa --kind family_missing --note "<场景>"`。
@@ -0,0 +1,56 @@
1
+ {
2
+ "schema": "opstune.knowledge-gaps/1.0",
3
+ "description": "ops-family 知识缺口计数落盘(SKILL.md 承诺的「未收录返回并计数上报」的载体)。Agent/人工在路由时发现族未收录/族内文档为骨架时追加 gap 条目;每季度由缺口感知回路(27-4)读取排产。",
4
+ "gaps": [
5
+ {
6
+ "family": "fa",
7
+ "kind": "family_missing",
8
+ "note": "FlashAttention 族无专项文档(SKILL.md 已标 ❌ 已知缺口)。部分解决(2026-10-15):方法论三篇已蒸馏(guide/roofline/mix-kernel,源自 参考实现 四层方法论)——设计参考就位;货架代码与 E 级实战案例仍缺(无同型降级策略执行中)",
9
+ "first_seen": "2026-10-14",
10
+ "count": 0,
11
+ "resolved": "partial",
12
+ "resolved_at": "2026-10-15"
13
+ },
14
+ {
15
+ "family": "elementwise",
16
+ "kind": "guide_missing",
17
+ "note": "无 guide.md(仅 index + 2 篇设计文档),模板数为 0。已解决(2026-10-15):guide.md 路由层已补,模板货架已补(templates/add_custom 可裁剪工程模板 ×5,源自 Kernel 直调工程模板)",
18
+ "first_seen": "2026-10-14",
19
+ "resolved": true,
20
+ "resolved_at": "2026-10-15",
21
+ "count": 0
22
+ },
23
+ {
24
+ "family": "sort",
25
+ "kind": "guide_skeleton",
26
+ "note": "guide 4 行;radix_sort.md 实质。已解决(2026-10-15):guide 蒸馏为 M-way 归并三 Pattern 决策树 + Pattern C 四阶段架构(源自 Ascend C Tiling 设计方法论·sort 分册)",
27
+ "first_seen": "2026-10-14",
28
+ "count": 0,
29
+ "resolved": true,
30
+ "resolved_at": "2026-10-15"
31
+ },
32
+ {
33
+ "family": "simt",
34
+ "kind": "guide_skeleton",
35
+ "note": "guide 4 行;optimization-guide 实质。已解决(2026-10-15):guide 蒸馏为 VF 三件套范式 + 共享内存/多核同步 + verdict 映射(源自 参考实现 13 篇)",
36
+ "first_seen": "2026-10-14",
37
+ "count": 0,
38
+ "resolved": true,
39
+ "resolved_at": "2026-10-15"
40
+ },
41
+ {
42
+ "family": "matmul",
43
+ "kind": "no_shelf_code",
44
+ "note": "六策略均为设计文档,无可拷贝模板(族表已改标「设计参考(无货架代码)」)",
45
+ "first_seen": "2026-10-14",
46
+ "count": 0
47
+ },
48
+ {
49
+ "family": "mc2",
50
+ "kind": "no_shelf_code",
51
+ "note": "3 策略均为设计文档,无可拷贝模板(族表已改标「设计参考(无货架代码)」)",
52
+ "first_seen": "2026-10-14",
53
+ "count": 0
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,14 @@
1
+ # MatMul 类算子性能优化策略索引
2
+
3
+ 按策略类型查找对应的适用场景与详细设计文档。
4
+
5
+ 适用于 `matmul` 族所有变体:`matmul`、`matmul_mxfp4`、`matmul_a16w16`、`batch_matmul`、`matmul_all_reduce` 等。
6
+
7
+ | 策略 | 适用场景 | 核心手段 | 详细文档 |
8
+ |------|---------|---------|---------|
9
+ | **pingpong** | 所有 matmul(基线,其它优化的默认前置) | L1/L0 双缓冲 + MTE2/MTE1/Fixpipe 事件同步流水化;`L1_BUFFER_NUM` 取满足 L1 预算的最大整数 | [pingpong_design.md](pingpong_design.md) |
10
+ | **swat** | MN 够并行(`totalBlockCnt > aicNum` 数倍)但存在尾碎片负载不均 | 机制 A Serpentine 行窗口(B 侧复用 + 流式带宽)/ 机制 B 尾块合并 / 机制 C 末轮二维再切分 | [swat_design.md](swat_design.md) |
11
+ | **streamk** | MN 欠并行(`totalBlockCnt < aicNum`)+ 长 K(≥ 2048),或 baseM/N 已到 CUBE 粒度下限的 MN 不整除情形 | SK / DP+SK 两子模式:切 K 到空闲核,AIV 从 workspace 归约 | [streamk_design.md](streamk_design.md) |
12
+ | **fullload**(A-Full-Load / B-Full-Load) | 有"小侧矩阵"(一侧 ≤ L1/2)+ 对侧循环次数 `T ≥ 2` + 真 MTE2 bound | 小侧矩阵 + 随路 Scale 一次性驻留 L1,消除对侧循环中的重复 GM→L1 搬运 | [fullload_design.md](fullload_design.md) |
13
+ | **scale_coalescing** | 假 MTE2 bound(MTE2 busy 高但带宽利用率 < 70%)+ 存在 < 20 KB 的 scale / bias / LUT 小块 | `scaleKL1 = SCALE_L1_BUFFER_NUM × kL1`,把 K 向 `baseK` 切碎的小块合并成一次大 MTE2 | [scale_coalescing_design.md](scale_coalescing_design.md) |
14
+ | **mte2_preload** | pingpong 已开 + 各流水 busy ≤ 70%(准无 bound)+ 流水图可见 MTE2_PING/PONG 间 gap + `kL1TileNum ≥ 2` | Kernel 主循环改造为「段 1 首轮 PING / 段 2 预取 PONG / 段 3 消费」三段结构;零 TilingData 数值改动 | [mte2_preload_design.md](mte2_preload_design.md) |
@@ -0,0 +1,344 @@
1
+ # matmul 减少重复载入(A-Full-Load / B-Full-Load)优化设计
2
+
3
+ ## 1. 优化目标
4
+
5
+ 针对 matmul 族(含量化变体 `matmul_mxfp4`、`matmul_mxfp8` 等)在 **"一侧矩阵小 + 对侧循环次数 ≥ 2"** 场景下的 **真 MTE2 bound**:把**小侧矩阵(A 或 B,含随路 Scale)从"每轮流式搬入"改为"一次性驻留 L1"**,消除小侧矩阵在对侧循环中的重复 GM→L1 搬运,等效把 MTE2 总字节数压缩 `(T-1)/T`(`T` 为对侧循环次数)。
6
+
7
+ 典型收益:`T = 5` 时 MTE2 总字节下降约 **16%–20%**,Task 总时间下降 **5%–15%**(对应 matmul MXFP4 `M=128, K=4096, N=81920` 实测 `183.87μs → 170.07μs`,约 **−7.5%**)。
8
+
9
+ > **驻留层定位**:A-Full-Load / B-Full-Load 位于 **分支层(SWAT ↔ StreamK)之下、增强层(小数据块合并载入)之上** 的**驻留层**选型。与 StreamK 互斥;可与 SWAT 机制 A/B/C、pingpong 双缓冲、小数据块合并载入**叠加**。
10
+
11
+ ---
12
+
13
+ ## 2. 架构概览
14
+
15
+ ### 2.1 未优化路径(每 `kL1` 轮都重复搬 A / B)
16
+
17
+ 以 A-Full-Load 的反例为例(B-Full-Load 对称),单核在 N 方向有 `T = N_{pc} / baseN` 轮对侧循环:
18
+
19
+ ```
20
+ for n_iter in range(T): # N 向外层(对侧循环)
21
+ for iter0 in range(kL1Iter): # K 向内层
22
+ MTE2: GM → L1 A[baseM, kL1] ~ 32 KB ✔ 够大,但被重复搬 T 次
23
+ MTE2: GM → L1 B[kL1, baseN] ~ 32 KB ✔ 够大,每轮内容不同
24
+ MTE2: GM → L1 scaleA[kL1] ~ 2 KB ✘ 小且重复 T 次
25
+ MTE2: GM → L1 scaleB[kL1] ~ 2 KB ✘ 小,每轮内容不同
26
+ MTE1: L1 → L0 + CUBE
27
+ ```
28
+
29
+ **冗余量**:A 与 scaleA 每轮都搬,`T − 1` 份是完全冗余的字节流。当 `baseM × K × dtype_A ≤ L1/2` 时物理上可以"一次性装入 L1 再复用 T 次"。
30
+
31
+ ### 2.2 优化路径(A-Full-Load:A + scaleA 一次性驻留 L1)
32
+
33
+ ```
34
+ # 初始化阶段(n_iter=0, iter0=0)
35
+ MTE2: GM → L1 A[baseM, K_full] # 一次性搬全量 A(驻留)
36
+ MTE2: GM → L1 scaleA[baseM, K_full/32] # 一次性搬全量 scaleA(驻留)
37
+
38
+ for n_iter in range(T):
39
+ for iter0 in range(kL1Iter):
40
+ # A 已驻留 L1,跳过搬运
41
+ MTE2: GM → L1 B[kL1, baseN] # 每轮搬(不变)
42
+ MTE2: GM → L1 scaleB[kL1] # 每轮搬(不变;若同时叠加合并载入则合并)
43
+ MTE1: L1 → L0 # A 侧按 iter0 × kL1 偏移切片取
44
+ CUBE
45
+ ```
46
+
47
+ B-Full-Load 为对称情形:B 与 scaleB 一次驻留,A 与 scaleA 每轮流式搬入。
48
+
49
+ ### 2.3 L1 布局(A-Full-Load,与 pingpong 布局解耦)
50
+
51
+ ```
52
+ L1 地址空间 (L1_SIZE = 524 KB) ← 以 A-Full-Load 为例
53
+ ┌───────────────────────────────────────────────────────────────────────────────┐
54
+ │ B_ping │ B_pong │ scaleB_ping │ scaleB_pong │ A_full │ scaleA_full │ (reserved)│
55
+ │ (kL1) │ (kL1) │ (scaleKL1) │ (scaleKL1) │ (fullK)│ (fullK/32) │ │
56
+ └───────────────────────────────────────────────────────────────────────────────┘
57
+ ↑ ↑
58
+ B 侧每 iter0 轮换 A 侧全量驻留(只在 n_iter=0, iter0=0 搬一次)
59
+ ```
60
+
61
+ 关键点:
62
+ - A 的 L1 区长度为 `baseM × Align(K, c0) × sizeof(dtype_A)`(A 全量占位)
63
+ - scaleA 的 L1 区长度为 `baseM × CeilDiv(K, 32) × sizeof(dtype_scale)`
64
+ - B 侧仍保留 pingpong(`bL1OneBuffer × l1BufNum`)与 B scale 双缓冲(`scaleBL1OneBuffer × SCALE_BUFFER_NUM`)
65
+ - A 侧只需 1 份(驻留期间不覆盖,无需 pingpong)
66
+
67
+ A-Full-Load 的 L1 偏移计算核心语句:
68
+
69
+ ```cpp
70
+ // A-Full-Load:A 一份驻留;B 仍 pingpong
71
+ aL1OneBuffer_ = (mAlign * kAlign) >> 1; // 全量 A
72
+ scaleAL1OneBuffer_ = baseM_ * CeilDiv(k_, MXFP_DIVISOR_SIZE_LOCAL) * MXFP_MULTI_BASE_SIZE_LOCAL;
73
+ l1BufferAOffset_[0] = bL1OneBuffer_ * (l1BufNum_ >> 1) + scaleBL1OneBuffer_; // A 在 B pingpong 之后
74
+ l1BufferScaleAOffset_[0] = l1BufferAOffset_[0] + aL1OneBuffer_; // scaleA 紧跟 A
75
+ ```
76
+
77
+ ### 2.4 事件同步模型(A-Full-Load)
78
+
79
+ 在 pingpong 事件模型(`pingpong_design.md` §2.3)基础上:
80
+
81
+ | 事件类型 | A-Full-Load 下的用途 |
82
+ |---------|---------------------|
83
+ | `MTE1_MTE2(l1BufId)`(B 的 L1 pingpong 事件) | B / scaleB 仍逐轮 pingpong 释放 |
84
+ | `MTE1_MTE2(SCALE_BUFFER_FLAG_0/1)`(scaleB 独立 pingpong) | scaleB 的 pingpong 周期不变 |
85
+ | **A 侧 pingpong 事件** | **取消**:A 全量驻留,整个 `operator()` 生命周期内不覆盖,不需要 MTE1→MTE2 释放事件;首次 MTE2 完成后仅需 `MTE2→MTE1` 就绪信号,后续每轮直接读 |
86
+
87
+ 关键约束:**A / scaleA 的 MTE2 只在 `abL1LoopCnt_ == 0`(即本次 `operator()` 的第一轮)发**,后续 `T × kL1Iter` 次内层循环都**跳过 A / scaleA 的 MTE2**,直接从驻留的 L1 区按 `iter0 × kL1` 偏移取数进 L0。
88
+
89
+ ---
90
+
91
+ ## 3. 关键参数配置
92
+
93
+ ```cpp
94
+ constexpr uint32_t BASE_M = 128; // A-Full-Load:通常 baseM 较小
95
+ constexpr uint32_t BASE_N = 512;
96
+ constexpr uint32_t BASE_K = 128;
97
+ constexpr uint32_t PINGPONG_NUM = 2; // B 的 L1 pingpong 仍为 2
98
+ constexpr uint32_t L1_BUFFER_NUM = 2; // B 的 K 覆盖倍数(沿用 pingpong)
99
+ constexpr uint32_t M_TAIL_TILE = 1; // *** 本优化强约束 *** A 全载下 M 尾禁止再切
100
+ constexpr uint32_t N_TAIL_TILE = 1; // 与 M_TAIL_TILE 对称,若叠加 SWAT 机制 C 可放开
101
+
102
+ // Host Tiling
103
+ params.l1Params.kL1 = BASE_K * L1_BUFFER_NUM;
104
+ params.l1Params.scaleKL1 = BASE_K * L1_BUFFER_NUM; // 与 B 侧 scale 保持对齐;若叠加合并载入则改为 SCALE_L1_BUFFER_NUM × BASE_K
105
+ params.l1Params.l1BufNum = PINGPONG_NUM;
106
+ params.schParams.mTailTile = M_TAIL_TILE; // A-Full-Load 强制 1
107
+ params.schParams.nTailTile = N_TAIL_TILE;
108
+ ```
109
+
110
+ ### 3.1 必选开关字段(Host→Device)
111
+
112
+ | 字段 | A-Full-Load | B-Full-Load | SWAT 基线 | 作用 |
113
+ |------|-------------|-------------|-----------|------|
114
+ | `isAFullLoad` | **true** | false | false | Kernel 侧据此选择 `BlockMmadMxAFullLoad` 模板 |
115
+ | `isBFullLoad` | false | **true** | false | Kernel 侧据此选择 `BlockMmadMxBFullLoad` 模板(对称扩展) |
116
+ | `stepKa` | `CeilDiv(K, baseK)` | 由剩余 L1 反推 | 2 的幂 ≤ 4 | A 全载下 A 侧一次覆盖全 K |
117
+ | `stepKb` | 由剩余 L1 反推 | `CeilDiv(K, baseK)` | 2 的幂 ≤ 4 | 对称 |
118
+ | `scaleFactorA` | 1 | 由剩余 L1 反推 | 由 `_cal_scale_factors` 搜索 | scaleA 是否一次全载 |
119
+ | `scaleFactorB` | 由剩余 L1 反推 | 1 | 同上 | scaleB 是否一次全载 |
120
+ | `mTailTile` | **1** | SWAT 基线值 | 由 `_calc_tail_basic_block` 搜索 | A 全载禁止 M 尾再切,避免重新引入重复搬运 |
121
+ | `nTailTile` | SWAT 基线值 | **1** | 同上 | 对称 |
122
+
123
+ > **强校验**:`isAFullLoad` 与 `isBFullLoad` **互斥**,同时为 true 属 Tiling 错误;Kernel 侧应 static_assert 或运行期检查。
124
+
125
+ ### 3.2 L1 预算不等式(A-Full-Load,硬约束)
126
+
127
+ $$
128
+ \underbrace{\mathrm{baseM} \cdot \mathrm{Align}(K, c_0) \cdot |\mathrm{dtype}_A|}_{A\ \text{全载驻留}}
129
+ \;+\;
130
+ \underbrace{\mathrm{baseM} \cdot \mathrm{CeilDiv}(K, 32) \cdot |\mathrm{dtype}_{scale}|}_{scaleA\ \text{全载驻留}}
131
+ \;+\;
132
+ \underbrace{(\mathrm{baseN} \cdot \mathrm{kL1} \cdot |\mathrm{dtype}_B|) \cdot l1BufNum}_{B\ \text{流式} + pingpong}
133
+ \;+\;
134
+ \underbrace{\mathrm{baseN} \cdot \mathrm{CeilDiv}(\mathrm{scaleKL1}, 32) \cdot 2}_{scaleB\ pingpong}
135
+ \;\le\; L_1\ (524288\ B)
136
+ $$
137
+
138
+ 溢出时按 `stepKb` 从大到小收缩(`_get_depth_b1_a_full_load`);收缩到 `stepKb=1` 仍溢出 → 本优化不可用,回退 SWAT。
139
+
140
+ B-Full-Load 对称:把 A/B、baseM/baseN、dtype_A/dtype_B 同步镜像。
141
+
142
+ ---
143
+
144
+ ## 4. 关键代码实施点
145
+
146
+ 本节给出从 SWAT / 小数据块合并载入基线演进到 A-Full-Load 需要改的**六处**,涉及 Host launcher 与 `BlockMmad` 模板两个文件:
147
+
148
+ ### 4.1 Host launcher:选择 A-Full-Load 版本的 BlockMmad 模板
149
+
150
+ ```cpp
151
+ using BlockScheduler = Block::QuantMatmulMxLastRoundTileBalanceScheduler;
152
+ // 核心切换:用 A-Full-Load 版本的 BlockMmad
153
+ using BlockMmadT = Block::BlockMmadMxAFullLoad<AType, BType, CType>;
154
+ using QuantMatmulKernelImpl = Kernel::QuantMatmulMxKernelBaseImpl<ProblemShape, BlockMmadT, BlockScheduler>;
155
+
156
+ // Tiling 参数:M_TAIL_TILE / N_TAIL_TILE 强制 1(见 §3.1)
157
+ constexpr uint32_t M_TAIL_TILE = 1;
158
+ constexpr uint32_t N_TAIL_TILE = 1;
159
+ params.schParams.mTailTile = M_TAIL_TILE;
160
+ params.schParams.nTailTile = N_TAIL_TILE;
161
+ ```
162
+
163
+ B-Full-Load:把 `BlockMmadMxAFullLoad` 替换为 `BlockMmadMxBFullLoad`(当前 tutorial 未提供,按 §3.4 对称实现),`mTailTile / nTailTile` 互换。
164
+
165
+ ### 4.2 BlockMmad::Init:按全载大小重算 L1 偏移
166
+
167
+ ```cpp
168
+ // 以 A-Full-Load 为例:BlockMmad::Init
169
+ uint64_t mAlign = Align(baseM_, BLOCK_CUBE);
170
+ uint64_t kAlign = Align(k_, MXFP_DIVISOR_SIZE_LOCAL);
171
+ aL1OneBuffer_ = (mAlign * kAlign) >> 1; // A 全量驻留
172
+ scaleAL1OneBuffer_ = baseM_ * CeilDiv(k_, MXFP_DIVISOR_SIZE_LOCAL) * MXFP_MULTI_BASE_SIZE_LOCAL;
173
+ bL1OneBuffer_ = (baseN_ * kL1_) >> 1; // B 仍按 kL1 流式
174
+ scaleBL1OneBuffer_ = baseN_ * CeilDiv(kL1_, MXFP_DIVISOR_SIZE_LOCAL) * MXFP_MULTI_BASE_SIZE_LOCAL;
175
+
176
+ // L1 布局:B pingpong → scaleB pingpong → A 驻留 → scaleA 驻留
177
+ l1BufferAOffset_[0] = bL1OneBuffer_ * (l1BufNum_ >> 1) + scaleBL1OneBuffer_;
178
+ l1BufferScaleAOffset_[0] = l1BufferAOffset_[0] + aL1OneBuffer_;
179
+ for (int32_t bufferId = 0; bufferId < l1BufNum_; bufferId++) {
180
+ l1BufferBOffset_[bufferId] = bL1OneBuffer_ * (bufferId >> 1);
181
+ }
182
+ for (int32_t bufferId = 0; bufferId < SCALE_BUFFER_NUM; bufferId++) {
183
+ l1BufferScaleBOffset_[bufferId] = l1BufferBOffset_[bufferId] + bL1OneBuffer_ * (l1BufNum_ >> 1);
184
+ }
185
+ ```
186
+
187
+ ### 4.3 BlockMmad::operator():A / scaleA 仅在首轮搬运
188
+
189
+ ```cpp
190
+ // A-Full-Load:BlockMmad::operator() 主循环
191
+ for (uint64_t iter0 = 0; iter0 < kL1Iter_; ++iter0) {
192
+ // B 每轮搬(不变)
193
+ AscendC::Te::Copy(copyGM2L1, tensorBL1, gmBlockB);
194
+ AscendC::Te::Copy(CopyScaleGM2L1, tensorScaleBL1Buf, gmBlockScaleB);
195
+
196
+ // *** A / scaleA 只在第一轮搬 ***
197
+ if (abL1LoopCnt_ < kL1Iter_) { // 等价于 abL1LoopCnt_ == iter0,首轮覆盖全 K
198
+ auto gmBlockA = gmA(AscendC::Te::MakeCoord(0, kL1Offset),
199
+ AscendC::Te::MakeShape(curM, curGmAKL1));
200
+ AscendC::Te::Copy(copyGM2L1, tensorBlockAL1, gmBlockA);
201
+ }
202
+ if (abL1LoopCnt_ == 0) { // scaleA 只在首轮搬一次全量
203
+ auto gmBlockScaleA = gmScaleA(
204
+ AscendC::Te::MakeCoord(0, 0),
205
+ AscendC::Te::MakeShape(curM, CeilDiv(k_, MXFP_DIVISOR_SIZE_LOCAL) * MXFP_MULTI_BASE_SIZE_LOCAL));
206
+ AscendC::Te::Copy(CopyScaleGM2L1, tensorScaleAL1, gmBlockScaleA);
207
+ }
208
+
209
+ // IterateL0:A 侧从驻留的 tensorBlockAL1 切 kL0Offset 片给 L0
210
+ IterateL0(tensorBlockAL1, tensorBlockScaleAL1, tensorBL1, tensorBlockScaleBL1,
211
+ curM, curN, curGmBKL1, curPadKL1, iter0, tensorL0C);
212
+
213
+ abL1LoopCnt_++;
214
+ }
215
+ ```
216
+
217
+ **关键点**:
218
+ - `abL1LoopCnt_` 跨 `operator()` 调用不重置(类成员),所以只有整个 kernel 生命周期的首次调用才发 `scaleA` MTE2;A 每次 `operator()` 在首个 K 段仍会搬一次(但本次 `operator()` 内不再重复)
219
+ - B-Full-Load 对称:`abL1LoopCnt_` 约束改为"B 在首个 K 段搬一次,scaleB 跨生命周期只搬一次"
220
+
221
+ ### 4.4 scaleA 从全量 L1 驻留区按 iter0 切片取 L0
222
+
223
+ ```cpp
224
+ auto tensorBlockScaleAL1 = tensorScaleAL1(
225
+ AscendC::Te::MakeCoord(0, iter0 * CeilDiv(kL1_, MXFP_DIVISOR_SIZE_LOCAL) * MXFP_MULTI_BASE_SIZE_LOCAL),
226
+ AscendC::Te::MakeShape(curM, CeilDiv(kL1_, MXFP_DIVISOR_SIZE_LOCAL) * MXFP_MULTI_BASE_SIZE_LOCAL));
227
+ ```
228
+
229
+ **漏加 `iter0 × CeilDiv(kL1_, 32) × 2` 偏移会导致精度错误**(所有 K 段使用同一段 scaleA 反量化)。与"小数据块合并载入"中 `scaleKL1IterOffset` 偏移机制同构。
230
+
231
+ ### 4.5 去掉 A 侧 pingpong 释放事件
232
+
233
+ ```cpp
234
+ // 基线 SWAT:A 每轮都发
235
+ AscendC::SetFlag<AscendC::HardEvent::MTE1_MTE2>(l1BufId); // A 与 B 共用 l1BufId
236
+
237
+ // A-Full-Load:只发 B 的释放事件;A 驻留期间不释放
238
+ AscendC::SetFlag<AscendC::HardEvent::MTE1_MTE2>(l1BufId); // B 侧(不变)
239
+ AscendC::SetFlag<AscendC::HardEvent::MTE1_MTE2>(SCALE_BUFFER_FLAG_0 + scaleL1BufId); // scaleB 侧(不变)
240
+ // 不发 A/scaleA 的 MTE1→MTE2 释放(L1 驻留永不覆写)
241
+ ```
242
+
243
+ **漏掉这一改动会导致 A 被错误覆写**(pingpong 事件仍在发,下一轮 MTE2 可能把 A 区写花)。
244
+
245
+ ### 4.6 CMakeLists.txt:新增 launcher 目标
246
+
247
+ ```cmake
248
+ ascend_add_executable(matmul_tutorial_mxfp4_a_fullload
249
+ matmul_tutorial_mxfp4_a_fullload.cpp
250
+ )
251
+ ```
252
+
253
+ B-Full-Load 需新增 `BlockMmadMxBFullLoad` 模板 + `matmul_tutorial_mxfp4_b_fullload.cpp` launcher。
254
+
255
+ ---
256
+
257
+ ## 5. 适用场景与适用性校验
258
+
259
+ ### 5.1 典型 Shape 特征(由策略专家判定)
260
+
261
+ | 维度 | 条件 | 说明 |
262
+ |------|------|------|
263
+ | 小侧容量 | `baseM × Align(K, c0) × dtype_A ≤ L1/2`(A 全载);对称 B 全载 | L1 能装下,且预留 ≥ 1/2 L1 给对侧 pingpong |
264
+ | 对侧循环次数 | `T = N_{pc} / baseN ≥ 2`(A 全载);对称 B 全载 | T=1 时小侧本来就只搬 1 次,收益为 0 |
265
+ | 多核排布 | A 全载:`mBlockCnt ≤ WINDOW_LEN(=4)` 且 `aicNum % mBlockCnt == 0` 且 `totalBlockCnt > aicNum` | 不然多核重复持有全载块、L1 浪费 |
266
+ | MTE2 健康度 | 对侧流式 Bytes ≥ 20 KB(非"假 MTE2 bound") | 小数据块密集场景需叠加合并载入,不可单用全载 |
267
+ | 分支 | 未走 StreamK | StreamK 已把 K 切给多核,"全载"语义失效 |
268
+
269
+ **典型场景举例**:
270
+
271
+ | Shape (M, K, N) | 判定结果 | 理由 |
272
+ |----|----|----|
273
+ | `[128, 4096, 81920]` MXFP4, aicNum=32 | **A-Full-Load** | `baseM=128`,A 侧 256 KB 可驻 L1;`T_A = 81920/(32·512) = 5` |
274
+ | `[81920, 4096, 128]` MXFP4, aicNum=32 | **B-Full-Load** | N=128 小,B 侧同上;`T_B = 5` |
275
+ | `[1024, 4096, 1024]` MXFP4 | SWAT(不开全载) | 两侧都 2 MB > L1/2 |
276
+ | `[128, 512, 81920]` MXFP4 | SWAT 或合并载入(不开全载) | A 侧仅 32 KB 确可驻,但 `kL1Iter = 512/(2·128) = 2` 偏少,叠加合并载入更稳妥 |
277
+
278
+ ### 5.2 不适用的情形(禁用条件)
279
+
280
+ - 两侧矩阵都 `> L1/2` → 物理不可行
281
+ - 对侧循环次数 `T = 1` → 小侧本来只搬 1 次,收益 = 0
282
+ - 多核排布不满足 `mBlockCnt ≤ WINDOW_LEN + aicNum % mBlockCnt == 0` → 会造成多核重复驻留
283
+ - CUBE bound 而非 MTE2 bound → 瓶颈不在搬运,全载反而可能拖慢(L1 分配不均)
284
+ - **已启用 StreamK** → StreamK 切 K 分段,workspace 归约取代 L1 驻留
285
+
286
+ ### 5.3 与其他优化的关系
287
+
288
+ | 叠加对象 | 兼容性 | 说明 |
289
+ |---------|-------|------|
290
+ | pingpong 双缓冲(`pingpong_design.md`) | ✅ **强兼容** | 全载只改小侧 L1 布局;对侧仍保留 pingpong |
291
+ | SWAT 负载均衡(`swat_design.md`) | ✅ 兼容 | SWAT 改调度不动 K 方向 L1 分配;机制 C 下 `mTailTile/nTailTile` 会被全载强制为 1 |
292
+ | 小数据块合并载入(`scale_coalescing_design.md`) | ✅ 兼容(**推荐叠加**) | 全载消除"小侧矩阵的重复搬运",合并载入压缩"对侧 scale 的小数据块";两者正交 |
293
+ | StreamK(`streamk_design.md`) | ❌ **互斥** | StreamK 已把 K 切给多核独立累加,"驻留"语义失效 |
294
+
295
+ **叠加顺序**:`分核(SWAT 或 StreamK)→ 全载(A/B-Full-Load)→ 合并载入(scale coalescing)`。
296
+
297
+ ---
298
+
299
+ ## 6. 常见问题与解决方案
300
+
301
+ | 问题 | 现象 | 解决 |
302
+ |------|------|------|
303
+ | **精度错误(最常见)** | 输出 C 局部偏离 golden,尾部 K 段错得更严重 | 检查 §4.4 的 `tensorBlockScaleAL1` 切片偏移 `iter0 × CeilDiv(kL1_, 32) × 2` 是否正确;核对 A 侧 L0 拷贝的 `MakeCoord(0, kL0Offset)` 是否沿用 iter0 * kL1 + kL0Offset 相对驻留 buffer 的偏移 |
304
+ | **L1 溢出** | 编译期或运行期 L1 overflow | 按 §3.2 L1 预算公式收缩 `stepKb`;收缩到 1 仍溢出 → 放弃全载,回 SWAT |
305
+ | **A 数据被覆写** | 精度错误集中在 N 方向第 2 轮之后 | 检查 §4.5 A / scaleA 的 `SetFlag<MTE1_MTE2>` 是否正确去掉;检查 `abL1LoopCnt_` 是否跨 `operator()` 调用正确累加 |
306
+ | **全载后性能反而劣化** | MTE2 时间下降有限甚至上升 | 检查 MTE2 子类型是否误判为"真 bound"(实际为"假 bound + 小数据块密集",需叠加合并载入);或 `T < 2` 导致全载无收益 |
307
+ | **`mTailTile` 未强制 1** | A 全载 + `mTailTile=2`,M 尾重新被切为两段 | Host Tiling 层强制 `params.schParams.mTailTile = 1`(A 全载)/ `nTailTile = 1`(B 全载) |
308
+ | **`isAFullLoad` 与 Kernel 模板不匹配** | Tiling 开 `isAFullLoad=true` 但 Kernel 仍实例化 `BlockMmadMxSwat` → A 仍每轮搬 | 按 §4.1 在 Host launcher 显式选择 `BlockMmadMxAFullLoad` 模板;或 Kernel 侧按 `isAFullLoad` 做 runtime 分派 |
309
+
310
+ ---
311
+
312
+ ## 7. 预期收益
313
+
314
+ | 指标 | 优化前(SWAT 基线) | 优化后(A-Full-Load) | 变化 |
315
+ |------|------|------|------|
316
+ | A / scaleA MTE2 搬运次数(单核) | `T × kL1Iter` | `kL1Iter`(只首轮) | **÷ T** |
317
+ | MTE2 总字节(单核) | `Bytes_total^{nl}` | `Bytes_total^{nl} − (T−1) × (Bytes_A + Bytes_scaleA)` | **下降 `(T−1)/T × Bytes_side / Bytes_total`** |
318
+ | MTE2 段时间(`[128, 4096, 81920]` MXFP4) | — | — | **−7.5%** |
319
+ | Task 总时间(同上) | 183.87 μs | 170.07 μs | **−7.5%** |
320
+ | MTE2 带宽利用率 | `≥ 85%`(真 bound) | `≥ 85%`(仍高,但 MTE2 总 cycle 下降) | 基本持平 |
321
+
322
+ 典型收益区间:**5%–15% 端到端 Task 时间缩短**。`T` 越大(对侧 N / M 越长)、小侧 Bytes 占总 MTE2 字节比例越高时收益越大。
323
+
324
+ ---
325
+
326
+ ## 8. 泛化:不止 A 矩阵 —— 减少重复载入的一般化
327
+
328
+ 本优化的一般化原则是:**识别"跨循环内容不变"的数据流,将其从"每轮搬入"改为"一次驻留"**。除了 A/B 矩阵及随路 Scale,任何满足"容量 ≤ L1 可用空间 + 跨外层循环只读 + 跨外层循环内容一致"的数据都可套同一模板。
329
+
330
+ | 场景 | 可驻留对象 | 驻留条件 | 收益来源 |
331
+ |------|-------------|---------|---------|
332
+ | 带 Scale 的量化 matmul(MXFP4/MXFP8) | A + scaleA(或 B + scaleB) | 见 §5.1 | 本文主体 |
333
+ | matmul with bias(小 bias 向量) | bias N 或 M 向量 | `N × sizeof(bias_dtype) ≤ L1_REMAIN`,且 bias 在 K 向不变 | 1%–5%,次要 |
334
+ | GroupMatmul / MoE 专家权重的 routing LUT | 每组的 expert-routing 表 | 单组 LUT < 1 KB 且跨组不变 | 2%–5%(LUT 访问频繁场景) |
335
+ | Attention 的 mask / pos_embed | 共享 mask 小张量 | `mask_size < L1_REMAIN` 且跨 batch 不变 | 视 K 循环次数 |
336
+ | DeepSeek-V3 / MLA 的持久化 KV 片段 | KV cache 的共享 head | 单 head 可驻 L1 且跨 query 头不变 | 5%–10% |
337
+
338
+ **共用判定条件**:
339
+ 1. 容量:驻留数据 ≤ 可用 L1 空间(预留 ≥ 1/2 给流式对侧)
340
+ 2. 对侧循环:`T ≥ 2`
341
+ 3. 内容不变:跨外层循环只读或内容完全一致
342
+ 4. 分支:非 StreamK
343
+
344
+ 策略专家在输出方案时,**应按该算子实际的"可驻留侧"识别具体字段**,不要只按 A/B 矩阵模板照搬。