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,268 @@
1
+ # Tail Block / Data Alignment 优化设计
2
+
3
+ ## 1. 优化目标
4
+
5
+ 在 Convolution、Pooling、Gather 等算子中,输入数据量往往不能被核心数或 tile 大小整除,产生尾块(tail block)。Naive 实现采用固定 tile 处理,导致尾块访问越界、数据竞争或负载不均衡。
6
+
7
+ 本优化通过双轨制计算、向量化尾块处理、多维度 Tiling 尾块分离等手段,确保在所有场景下实现近完美的负载均衡和正确的边界处理。
8
+
9
+ | 指标 | naive | optimized | 收益 |
10
+ |------|-------|-----------|------|
11
+ | 尾块处理 | 简单截断,可能越界 | 双轨制 norm/tail 核分离 | 避免数据竞争和越界访问 |
12
+ | 尾块计算 | 标量循环处理 | GatherMask 向量化处理 | 一次处理 64 个元素,提升 4-8 倍 |
13
+ | 多核负载 | 尾核空闲或超载 | 动态 costLimit + 容忍度机制 | 非整除场景性能提升 10-30% |
14
+ | 内存对齐 | 未考虑对齐 | 32B/64B 对齐 + DataCopyPad | 避免非对齐访问性能损失 |
15
+
16
+
17
+ ## 2. 架构概览
18
+
19
+ ### 2.1 存储层级与数据流
20
+
21
+ Tail Block 处理的数据流:输入数据经 MTE2 从 GM 搬入 UB/L1,分为正常块(normBlock)和尾块(tailBlock)。正常核处理 `defaultUbFactor` 整数倍的数据量,尾核处理剩余数据量。尾块使用 GatherMask 向量化处理或 DataCopyPad 对齐填充,结果经 MTE3 写回 GM,多核竞争场景使用 AtomicAdd 避免数据竞争。
22
+
23
+ ### 2.2 双轨制计算模型
24
+
25
+ Host 侧将数据分为正常核(normCore)和尾核(tailCore)两组:
26
+ - **正常核**:处理 `defaultUbFactor` 整数倍的数据量
27
+ - **尾核**:处理剩余数据量,单独计算尾块循环次数和尾块大小
28
+
29
+ Kernel 侧根据 `blockIdx_` 判断自己是正常核还是尾核,选择对应的循环参数。
30
+
31
+ ### 2.3 事件同步模型
32
+
33
+ | 事件类型 | 含义 | 用途 |
34
+ |---------|------|------|
35
+ | `MTE2_V` | MTE2 搬运完成 → 允许 Vector 读取 | 主数据 tile 就绪 |
36
+ | `V_MTE3` | Vector 完成 → 允许 MTE3 写回 | 尾块计算完成,可写 GM |
37
+ | `PIPE_V` | Vector 管道屏障 | 向量化指令间数据依赖 |
38
+
39
+ ## 3. 关键参数配置
40
+
41
+ ```cpp
42
+ // Host 侧 TilingData
43
+ struct TailBlockTiling {
44
+ uint32_t normBlockLoop; // 正常核循环次数
45
+ uint32_t normBlockTailLoopSize; // 正常核最后循环大小
46
+ uint32_t tailBlockLoop; // 尾核循环次数
47
+ uint32_t tailBlockTailLoopSize; // 尾核最后循环大小
48
+ uint32_t defaultValueUsedCoreNum; // 正常核数量
49
+ uint32_t defaultUbFactor; // 默认 UB 处理粒度
50
+ };
51
+ ```
52
+
53
+ ### 3.1 Tile 大小选取原则
54
+
55
+ | 参数 | 典型值 | 说明 |
56
+ |------|--------|------|
57
+ | `defaultUbFactor` | 64 / 128 / 256 | 向量化处理粒度,需对齐 Vector 单元宽度 |
58
+ | `alignCoef` | 32B / 64B | 数据类型相关对齐系数(FP16=32B, FP32=64B) |
59
+
60
+ **Ascend 对齐约束**:
61
+
62
+ - Global Memory 访问需 32B 对齐
63
+ - Vector 指令最优访问粒度为 32B(FP16)或 64B(FP32)
64
+ - Cube 矩阵乘需 16x16 或 32x32 对齐
65
+
66
+ ```cpp
67
+ // 对齐计算
68
+ uint32_t numPerBlock = ONE_BLK_SIZE / sizeof(T); // 32B / sizeof(T)
69
+ uint32_t alignedSize = (size + numPerBlock - 1) / numPerBlock * numPerBlock;
70
+ ```
71
+
72
+ ### 3.2 内存预算
73
+
74
+ 尾块处理需要额外的 pattern buffer(用于 GatherMask)和索引 buffer:
75
+ - `tmpPattern` buffer:约 64B(uint32_t/uint16_t pattern)
76
+ - `indexBuf` buffer:6 个索引 × tile 大小(用于 adaptive pooling)
77
+
78
+ ## 4. 核心计算循环
79
+
80
+ ### 4.1 naive 版本(优化前)
81
+
82
+ ```cpp
83
+ // 固定 tile 处理,无尾块特殊处理
84
+ for (uint32_t i = 0; i < this->innerLoops; i++) {
85
+ CopyIn(i);
86
+ Compute(i);
87
+ CopyOut(i);
88
+ }
89
+ // 问题:最后一 tile 可能越界;尾核负载不均
90
+ ```
91
+
92
+ ### 4.2 optimized 版本(优化后):双轨制尾块处理
93
+
94
+ ```cpp
95
+ // Host 侧:计算 norm/tail 核参数
96
+ normBlockLoop_ = Ops::Base::CeilDiv(normCoreHandleDefaultValues_, defaultUbFactor_);
97
+ normBlockTailLoopSize_ = normCoreHandleDefaultValues_ - defaultUbFactor_ * (normBlockLoop_ - 1);
98
+ tailBlockLoop_ = Ops::Base::CeilDiv(tailCoreHandleDefaultValues, defaultUbFactor_);
99
+ tailBlockTailLoopSize_ = tailCoreHandleDefaultValues - defaultUbFactor_ * (tailBlockLoop_ - 1);
100
+
101
+ // Kernel 侧:根据 blockIdx 选择参数
102
+ loop_ = tilingData_.normBlockLoop;
103
+ tailLoopSize_ = tilingData_.normBlockTailLoopSize;
104
+ if (blockIdx_ == tilingData_.defaultValueUsedCoreNum - 1) {
105
+ loop_ = tilingData_.tailBlockLoop;
106
+ tailLoopSize_ = tilingData_.tailBlockTailLoopSize;
107
+ }
108
+
109
+ // 主循环
110
+ for (uint32_t i = 0; i < loop_; i++) {
111
+ bool isLastLoop = (i == loop_ - 1);
112
+ uint32_t currentTileSize = isLastLoop ? tailLoopSize_ : defaultUbFactor_;
113
+
114
+ // 使用 DataCopyPad 处理非对齐尾块
115
+ if (isLastLoop && currentTileSize != defaultUbFactor_) {
116
+ DataCopyExtParams copyParams{1, static_cast<uint32_t>(currentTileSize * sizeof(T)), 0, 0, 0};
117
+ DataCopyPadExtParams<T> padParams{false, 0, 0, 0};
118
+ DataCopyPad(dataLocal, inTensorsGM[...], copyParams, padParams);
119
+ } else {
120
+ DataCopy(dataLocal, inTensorsGM[...], currentTileSize);
121
+ }
122
+
123
+ Compute(dataLocal, currentTileSize);
124
+ CopyOut(dataLocal, currentTileSize);
125
+ }
126
+ ```
127
+
128
+ ### 4.3 GatherMask 向量化尾块处理
129
+
130
+ ```cpp
131
+ // 对于最后一个输出点的尾块,使用 GatherMask 进行数据重排
132
+ if constexpr (std::is_same_v<T, float>) {
133
+ LocalTensor<uint32_t> bufPattern = tmpPattern.Get<uint32_t>();
134
+ int32_t preLeftShift = numPerBlock + lastLeftShift;
135
+ bufPattern.SetValue(0, (1u << preLeftShift) - (1u << lastLeftShift));
136
+ GatherMask(outputLocal[gatherOffset], outputLocal[gatherOffset],
137
+ bufPattern, true, mask, {1, 1, 8, 8}, rsvdCnt);
138
+ }
139
+ // 避免 atomic 操作开销,正确处理尾块数据布局
140
+ ```
141
+
142
+ ### 4.4 非对齐数据的原子操作处理
143
+
144
+ ```cpp
145
+ // 针对数据非 32B 对齐的情况,使用 AtomicAdd 避免数据竞争
146
+ uint64_t mask0 = (1ul << numPerBlock) - (1ul << validDataLen);
147
+ uint64_t mask[2] = {mask0, 0};
148
+ Duplicate<T>(outputLocal, 0, mask, 1, 1, 1);
149
+ SetAtomicAdd<T>();
150
+ DataCopy(outputGlobal[offset], outputLocal, cTailAlign);
151
+ SetAtomicNone();
152
+ ```
153
+
154
+ ## 5. 从 naive 到 tail_block 的关键修改点
155
+
156
+ | 修改项 | naive(优化前) | tail_block(优化后) |
157
+ |--------|---------------|---------------------|
158
+ | 核类型 | 所有核处理相同数据量 | 双轨制:normCore + tailCore |
159
+ | 尾块处理 | 简单截断或越界访问 | GatherMask 向量化 / DataCopyPad 对齐 |
160
+ | 数据竞争 | 无保护,可能写冲突 | AtomicAdd / 边界跳过 |
161
+ | 负载均衡 | 固定分配 | 动态 costLimit + 容忍度机制 |
162
+ | 内存对齐 | 未考虑 | 32B/64B 对齐 + padding |
163
+ | 索引计算 | 运行时除法/取模 | IndexBuffer 预计算复用 |
164
+
165
+ ## 6. 注意事项 / 约束
166
+
167
+ 1. **GatherMask 的 pattern buffer 类型**。float 类型用 uint32_t pattern,half/bfloat16_t 用 uint16_t pattern。
168
+
169
+ 2. **AtomicAdd 的性能开销**。虽然保证正确性,但 atomic 操作有一定性能损失,优先使用 GatherMask 避免竞争。
170
+
171
+ 3. **尾块大小必须 > 0**。若尾块大小为 0,该核应直接返回,避免空循环。
172
+
173
+ 4. **多维度 Tiling 的尾块**。每个维度(Channel、Spatial、Batch)都需独立计算尾块参数。
174
+
175
+ 5. **重叠检测**。Adaptive Pooling 中 kernel 可能重叠,需检测并设置 `isOverLap` 标志,使用 atomic add 保证正确性。
176
+
177
+ 6. **对齐填充的数据正确性**。SkipPad 策略需确保 padding 区域的 0 不会被错误计入后续计算(如方差)。
178
+
179
+ 7. **32B 对齐是硬性要求**。未对齐的 GM 访问可能导致硬件异常或性能下降。
180
+
181
+ ## 7. 实施常见问题与解决方案
182
+
183
+ ### Q1: 尾核处理量远小于正常核,导致尾核很快完成但需等待正常核
184
+ **A**: 使用容忍度机制(tolerance ratio),允许轻微超载以减少碎片。`costLimit` 动态计算为"剩余总代价 / 剩余核数"。
185
+
186
+ ### Q2: GatherMask 的 pattern 计算错误导致数据重排异常
187
+ **A**: 确保 `preLeftShift` 和 `lastLeftShift` 计算正确,pattern 值为 `(1u << preLeftShift) - (1u << lastLeftShift)`。
188
+
189
+ ### Q3: DataCopyPad 的 padding 值污染后续计算
190
+ **A**: 使用 `SkipPadSubMean` 等策略跳过 padding 区域,或在计算前用 `Duplicate` 填充 padding 区域为中性值(如 0 或 MASK_VALUE)。
191
+
192
+ ### Q4: 多核场景下尾块原子加导致结果非确定性
193
+ **A**: 使用确定性模式(deterministic mode),反向处理并检测边界索引冲突,跳过冲突索引由前一个核处理。
194
+
195
+ ## 8. 场景用例
196
+
197
+ ### 8.1 各算子族实例
198
+
199
+ **Elementwise** `[1000, 128]`, tileRows=256,尾块 232 行,策略 1:
200
+
201
+ ```cpp
202
+ uint32_t loopCount = (rows + tileRows - 1) / tileRows;
203
+ for (uint32_t loop = 0; loop < loopCount; loop++) {
204
+ uint32_t curRows = (loop == loopCount - 1)
205
+ ? (rows - loop * tileRows) : tileRows;
206
+ uint32_t curLen = curRows * cols;
207
+ DataCopy(xLocal, xGm[loop * tileRows * cols], curLen);
208
+ Adds(yLocal, xLocal, 1.0f, curLen);
209
+ DataCopy(yGm[loop * tileRows * cols], yLocal, curLen);
210
+ }
211
+ ```
212
+
213
+ **MatMul** `M=1023`, blockM=128,尾块 127 行,策略 2+1:
214
+
215
+ ```cpp
216
+ // Host:双轨制分核
217
+ uint32_t mPerCore = CeilDiv(M, coreNum);
218
+ // Kernel:根据 blockIdx 确定 M 范围
219
+ uint32_t localM = (blockIdx < coreNum - 1) ? mPerCore : M - blockIdx * mPerCore;
220
+ uint32_t loopCount = (localM + blockM - 1) / blockM;
221
+ for (uint32_t loop = 0; loop < loopCount; loop++) {
222
+ uint32_t curM = (loop == loopCount - 1) ? (localM - loop * blockM) : blockM;
223
+ }
224
+ ```
225
+
226
+ **FlashAttention** `seqLen=1025`, tileSeq=1024,尾块 1 行,策略 1+3:
227
+
228
+ ```cpp
229
+ uint32_t kvLoopCount = (kvSeqLen + kvTileSize - 1) / kvTileSize;
230
+ for (uint32_t kvLoop = 0; kvLoop < kvLoopCount; kvLoop++) {
231
+ uint32_t curKvLen = (kvLoop == kvLoopCount - 1)
232
+ ? (kvSeqLen - kvLoop * kvTileSize) : kvTileSize;
233
+ if (curKvLen % 16 != 0) { // Cube 输入需对齐
234
+ DataCopyPad(kLocal, kGm[...], copyParams, padParams);
235
+ }
236
+ if (isCausal && qLoop == kvLoopCount - 1) {
237
+ ApplyCausalMaskPartial(..., curKvLen); // 尾块 causal mask
238
+ }
239
+ }
240
+ ```
241
+
242
+ ---
243
+
244
+ ## 9. 选型决策与自检清单
245
+
246
+ ### 9.1 选型决策
247
+
248
+ ```
249
+ if (算子包含迭代循环 && 数据量不能被 tile 大小整除):
250
+ → 启用 tail_block 优化
251
+ → 计算 normBlockLoop / tailBlockLoop
252
+ → 尾块使用 DataCopyPad 或 GatherMask
253
+ → 多核场景使用 AtomicAdd 或确定性模式
254
+ else:
255
+ → 标准 tile 处理即可
256
+ ```
257
+
258
+ ### 9.2 自检清单
259
+
260
+ - [ ] Host 侧正确计算 normBlockLoop / tailBlockLoop / normBlockTailLoopSize / tailBlockTailLoopSize
261
+ - [ ] Kernel 侧根据 blockIdx_ 正确选择 norm/tail 参数
262
+ - [ ] 尾块大小为 0 时核直接返回
263
+ - [ ] DataCopyPad 参数正确(blockCount, blockLen, srcStride, dstStride)
264
+ - [ ] GatherMask pattern 类型与数据类型匹配(float→uint32_t, half→uint16_t)
265
+ - [ ] 32B/64B 对齐约束满足
266
+ - [ ] AtomicAdd 在 SetAtomicAdd / SetAtomicNone 配对内使用
267
+ - [ ] 确定性模式下反向处理和边界检测正确
268
+ - [ ] 精度校验通过:与 naive 实现对比,误差 < 1e-5(FP32)或 < 1e-3(FP16)
@@ -0,0 +1,38 @@
1
+ # timing_harness — 计时口径货架
2
+
3
+ > snapshot.py `--kernel-avg-us` 的第一生产者。此前的状态:口径纪律只在
4
+ > ops-collect SKILL.md 计时口径表(文字),无自带 benchmark 的工程要靠
5
+ > agent 手写计时代码——短 kernel launch 开销掩盖收益是最高频的坑。
6
+ > 本目录把「warmup 剔除 + 稳态 ≥3 取中位 + 多 launch 单 event」从纪律变成拷模板。
7
+
8
+ ## 模板清单
9
+
10
+ | 模板 | 适用 | 产物 |
11
+ |------|------|------|
12
+ | [`timing_harness_aclrt_event.cpp`](timing_harness_aclrt_event.cpp) | C++ Kernel 直调工程(无自带 benchmark 时的标配) | `result.json`(opstune.timing/1.0:kernel_avg_us + p50/p95/max + 逐轮值) |
13
+ | [`timing_harness_torch_event.py`](timing_harness_torch_event.py) | torch_npu 侧(torch.ops 调用形态 / torch 工程对标) | 同上 |
14
+
15
+ ## 使用纪律(模板拷贝纪律同款:直接拷贝 + 最小适配)
16
+
17
+ 1. 拷模板入工程(`test/` 或根目录),只改 `[MODIFY]` 标注点
18
+ (被测调用 + 设备/链接),**计时结构(warmup/repeat/多 launch 单 event/取中位)
19
+ 不许改**——改了口径,前后对比全部失效;
20
+ 2. 输入输出分配放 `setup()`(循环外),`run_once()` 只留 launch;
21
+ 3. `warmup/repeat` 是 HARD 口径字段:与 scope.json 一致;噪声带内复测时
22
+ repeat 翻倍并**同步重采基线**(delta_compare 会拒绝单侧口径漂移);
23
+ 4. 产物 `result.json` 的数值直接喂 snapshot.py:
24
+ `--kernel-avg-us <avg> --timing-method event --kernel-p50-us ... --kernel-p95-us ...`。
25
+
26
+ ## 何时不用本货架
27
+
28
+ - 工程自带正式 benchmark → 视为正式口径,按优先级采信(ops-collect 计时口径表第 1 行);
29
+ - 长 kernel(ms 级)无 event 设施 → 允许 Task Duration 作基线,
30
+ `--timing-method msprof_task_duration` 并在报告注明(表第 3 行);
31
+ - torch_npu.profiler 路径 → 见 tool-routing 决策树⑤(schedule 固定 5/5)。
32
+
33
+ ## 复制目录带入优化副本(perf-implementer 联动)
34
+
35
+ perf-implementer「复制目录」步骤把本 harness 视为**测量设施**带入优化副本
36
+ (非优化变量)——基线与优化侧同一 harness、同一 warmup/repeat,口径两侧同源;
37
+ 对照 ops-collect SKILL.md「允许在产物目录工程副本补 aclrtEvent harness
38
+ (属测量设施而非优化变量),原基线源码先备份」。
@@ -0,0 +1,199 @@
1
+ // ----------------------------------------------------------------------------------------------------------
2
+ // Copyright (c) 2026 Huawei Technologies Co., Ltd.
3
+ // This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4
+ // CANN Open Software License Agreement Version 2.0 (the "License").
5
+ // Please refer to the License for details. You may not use this file except in compliance with the License.
6
+ // THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7
+ // INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8
+ // See LICENSE in the root of the software repository for the full text of the License.
9
+ // ----------------------------------------------------------------------------------------------------------
10
+
11
+ // timing_harness_aclrt_event.cpp — 短 kernel 计时模板(aclrtEvent 多 launch 单 event)
12
+ //
13
+ // 对应:(计时 harness 货架);ops-collect SKILL.md 计时口径表
14
+ // 「短 kernel(µs 级)launch 开销掩盖收益:stream 内多 launch 单 event 对计时」的
15
+ // 可拷贝实现。snapshot.py --kernel-avg-us 的第一生产者。
16
+ //
17
+ // 结构(固定,禁改动语义):
18
+ // warmup 轮剔除(默认 5,冷跑与稳态实测可差 25%)→ 稳态 repeat ≥3 轮
19
+ // → 每轮 event 差值 → 取中位数(对离群轮稳健)。p50/p95/max 一并产出,
20
+ // 直接对齐 snapshot.py 可选分布字段(抖动诊断的数据源)。
21
+ //
22
+ // 集成方式(模板拷贝纪律:直接拷贝 + 最小适配,两处 [MODIFY]):
23
+ // 1. 把本文件拷入算子工程(如 test/ 或根目录);
24
+ // 2. [MODIFY-1] 替换 RUN_ONCE 为被测 kernel 的一次完整调用
25
+ // (含全部输入输出分配与初始化——分配留在循环外,只计时 launch+执行);
26
+ // 3. [MODIFY-2] 按 CMake 链接 aclrt / ascendcl;
27
+ // 4. 编译运行,result.json 即可直接喂 snapshot.py。
28
+ //
29
+ // 产物契约(opstune.timing/1.0):kernel_avg_us = 稳态中位数;分布字段 p50/p95/max。
30
+
31
+ #include <acl/acl.h>
32
+ #include <algorithm>
33
+ #include <chrono>
34
+ #include <cstdio>
35
+ #include <cstring>
36
+ #include <fstream>
37
+ #include <sstream>
38
+ #include <string>
39
+ #include <vector>
40
+
41
+ namespace {
42
+
43
+ constexpr int32_t kDeviceId = 0; // [MODIFY-2] 目标设备
44
+ constexpr int kWarmupDefault = 5; // 固定 warmup 剔除(口径字段,须与 scope.json 一致)
45
+ constexpr int kRepeatDefault = 20; // 稳态轮数(口径字段;噪声带内复测时翻倍并同步重采基线)
46
+
47
+ // ---------------------------------------------------------------------------
48
+ // [MODIFY-1] 被测算子的一次完整调用:替换为真实的 kernel launch。
49
+ // 输入输出张量的分配与初始化应放在 setup()(循环外),此处只保留 launch,
50
+ // 否则计时里混入 malloc/初始化,口径失效。
51
+ // ---------------------------------------------------------------------------
52
+ struct BenchContext {
53
+ aclrtStream stream = nullptr;
54
+ // 示例占位:int8_t *devIn, *devOut; size_t inBytes, outBytes;
55
+ };
56
+
57
+ bool setup(BenchContext& ctx)
58
+ {
59
+ // 示例形态(按算子实际 shape/dtype 修改):
60
+ // aclrtMalloc(&ctx.devIn, ctx.inBytes, ACL_MEM_MALLOC_HUGE_FIRST);
61
+ // ... 初始化输入(host→device 拷贝)...
62
+ (void)ctx;
63
+ return true;
64
+ }
65
+
66
+ bool run_once(BenchContext& ctx)
67
+ {
68
+ // 示例形态:
69
+ // return RunKernelLaunch(ctx.devIn, ctx.devOut, shape, ctx.stream) == 0;
70
+ (void)ctx;
71
+ return true;
72
+ }
73
+
74
+ void teardown(BenchContext& ctx)
75
+ {
76
+ // 示例形态:aclrtFree(ctx.devIn); ...
77
+ (void)ctx;
78
+ }
79
+
80
+ double median(std::vector<double> v)
81
+ {
82
+ if (v.empty())
83
+ return 0.0;
84
+ std::sort(v.begin(), v.end());
85
+ size_t n = v.size();
86
+ return (n % 2 == 1) ? v[n / 2] : (v[n / 2 - 1] + v[n / 2]) / 2.0;
87
+ }
88
+
89
+ double pct(std::vector<double>& v, double p)
90
+ {
91
+ if (v.empty())
92
+ return 0.0;
93
+ std::sort(v.begin(), v.end());
94
+ size_t idx = static_cast<size_t>(p * (v.size() - 1) + 0.5);
95
+ return v[idx];
96
+ }
97
+
98
+ } // namespace
99
+
100
+ int main(int argc, char** argv)
101
+ {
102
+ int warmup = kWarmupDefault, repeat = kRepeatDefault;
103
+ const char* outPath = nullptr; // 必填 --output(结果路径由调用方指定)
104
+ for (int i = 1; i + 1 < argc; ++i) {
105
+ if (!std::strcmp(argv[i], "--warmup"))
106
+ warmup = std::atoi(argv[i + 1]);
107
+ if (!std::strcmp(argv[i], "--repeat"))
108
+ repeat = std::atoi(argv[i + 1]);
109
+ if (!std::strcmp(argv[i], "--output"))
110
+ outPath = argv[i + 1];
111
+ }
112
+ if (outPath == nullptr) {
113
+ std::fprintf(stderr, "ERROR: --output <path> 必填(结果 JSON 路径由调用方指定)\n");
114
+ return 1;
115
+ }
116
+ if (repeat < 3) {
117
+ std::fprintf(stderr, "ERROR: repeat >= 3(稳态采样下限,SKILL.md 计时口径)\n");
118
+ return 1;
119
+ }
120
+
121
+ if (aclInit(nullptr) != ACL_SUCCESS) { /* 已初始化场景(宿主先 aclInit)容忍 */
122
+ }
123
+ ACL_CHECK(aclrtSetDevice(kDeviceId));
124
+ BenchContext ctx;
125
+ ACL_CHECK(aclrtCreateStream(&ctx.stream));
126
+ if (!setup(ctx)) {
127
+ std::fprintf(stderr, "ERROR: setup 失败(检查输入分配/初始化)\n");
128
+ return 1;
129
+ }
130
+
131
+ // ---- warmup 轮(剔除冷跑:首次含初始化与缓存预热)----
132
+ for (int i = 0; i < warmup; ++i) {
133
+ if (!run_once(ctx)) {
134
+ std::fprintf(stderr, "ERROR: warmup run 失败\n");
135
+ return 1;
136
+ }
137
+ }
138
+ ACL_CHECK(aclrtSynchronizeStream(ctx.stream));
139
+
140
+ // ---- 稳态轮:多 launch 单 event 对计时(短 kernel:单 launch 的 event 分辨率
141
+ // 与 launch 开销都会掩盖收益;一轮 = N 次 launch 用首尾 event 差值 / N)----
142
+ constexpr int kLaunchPerRound = 10; // 每轮内 launch 数(按 kernel 时长调整:总时长 ≥ 100us 为宜)
143
+ std::vector<double> perLaunchUs;
144
+ aclrtEvent evStart, evEnd;
145
+ ACL_CHECK(aclrtCreateEvent(&evStart));
146
+ ACL_CHECK(aclrtCreateEvent(&evEnd));
147
+ for (int r = 0; r < repeat; ++r) {
148
+ ACL_CHECK(aclrtRecordEvent(evStart, ctx.stream));
149
+ for (int i = 0; i < kLaunchPerRound; ++i) {
150
+ if (!run_once(ctx)) {
151
+ std::fprintf(stderr, "ERROR: steady run 失败\n");
152
+ return 1;
153
+ }
154
+ }
155
+ ACL_CHECK(aclrtRecordEvent(evEnd, ctx.stream));
156
+ ACL_CHECK(aclrtSynchronizeStream(ctx.stream));
157
+ float ms = 0.0f;
158
+ ACL_CHECK(aclrtEventElapsedTime(&ms, evStart, evEnd));
159
+ perLaunchUs.push_back(static_cast<double>(ms) * 1000.0 / kLaunchPerRound);
160
+ }
161
+ ACL_CHECK(aclrtDestroyEvent(evStart));
162
+ ACL_CHECK(aclrtDestroyEvent(evEnd));
163
+
164
+ // ---- 统计与落盘(opstune.timing/1.0;直接对齐 snapshot.py 输入字段)----
165
+ std::vector<double> sorted = perLaunchUs;
166
+ const double p50 = median(perLaunchUs);
167
+ const double p95 = pct(sorted, 0.95);
168
+ const double maxv = sorted.back();
169
+ const double avg = p50; // 口径:kernel_avg_us = 稳态中位数(对离群轮稳健)
170
+
171
+ std::ostringstream os;
172
+ os << "{\n"
173
+ << " \"schema\": \"opstune.timing/1.0\",\n"
174
+ << " \"timing_method\": \"event\",\n"
175
+ << " \"harness\": \"aclrtEvent multi-launch single-pair\",\n"
176
+ << " \"launch_per_round\": " << kLaunchPerRound << ",\n"
177
+ << " \"warmup\": " << warmup << ",\n"
178
+ << " \"repeat\": " << repeat << ",\n"
179
+ << " \"kernel_avg_us\": " << avg << ",\n"
180
+ << " \"kernel_p50_us\": " << p50 << ",\n"
181
+ << " \"kernel_p95_us\": " << p95 << ",\n"
182
+ << " \"kernel_max_us\": " << maxv << ",\n"
183
+ << " \"per_round_us\": [";
184
+ for (size_t i = 0; i < perLaunchUs.size(); ++i) {
185
+ os << (i ? ", " : "") << perLaunchUs[i];
186
+ }
187
+ os << "]\n}\n";
188
+ std::ofstream f(outPath);
189
+ f << os.str();
190
+ std::printf(
191
+ "kernel_avg_us(p50)=%.3f p95=%.3f max=%.3f (warmup=%d repeat=%d × %d launch)\n", avg, p95, maxv, warmup,
192
+ repeat, kLaunchPerRound);
193
+ std::printf("→ %s(喂 snapshot.py:--kernel-avg-us %.3f --timing-method event ...)\n", outPath, avg);
194
+
195
+ teardown(ctx);
196
+ ACL_CHECK(aclrtDestroyStream(ctx.stream));
197
+ ACL_CHECK(aclrtResetDevice(kDeviceId));
198
+ return 0;
199
+ }
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env python3
2
+ # ----------------------------------------------------------------------------------------------------------
3
+ # Copyright (c) 2026 Huawei Technologies Co., Ltd.
4
+ # This program is free software, you can redistribute it and/or modify it under the terms and conditions of
5
+ # CANN Open Software License Agreement Version 2.0 (the "License").
6
+ # Please refer to the License for details. You may not use this file except in compliance with the License.
7
+ # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
8
+ # INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
9
+ # See LICENSE in the root of the software repository for the full text of the License.
10
+ # ----------------------------------------------------------------------------------------------------------
11
+ # timing_harness_torch_event.py — torch_npu 侧 event 计时模板(短 kernel 多 launch 单 event)
12
+ #
13
+ # 对应:timing_harness/index.md 的 torch 形态。
14
+ # 与 C++ 模板同一结构:warmup 剔除 → 稳态 repeat ≥3 → 每轮 N 次 launch 用首尾
15
+ # event 差值 / N → 取中位;p50/p95/max 一并产出(snapshot.py 分布字段数据源)。
16
+ #
17
+ # 集成方式(模板拷贝纪律:直接拷贝 + 最小适配,仅 [MODIFY] 一处):
18
+ # 1. 拷入 torch 工程测试目录;
19
+ # 2. [MODIFY] run_once() 替换为被测调用(torch.ops.npu.xxx / torch.nn.functional.xxx);
20
+ # 3. python3 timing_harness_torch_event.py --warmup 5 --repeat 20 --output result.json
21
+ #
22
+ # 产物契约:opstune.timing/1.0(与 C++ 模板同 schema,字段同名同义)。
23
+
24
+ import argparse
25
+ import json
26
+ import statistics
27
+ from pathlib import Path
28
+
29
+ SCHEMA = "opstune.timing/1.0"
30
+
31
+
32
+ # ---------------------------------------------------------------------------
33
+ # [MODIFY] 被测算子的一次完整调用:替换为真实的 torch 调用。
34
+ # 张量分配与初始化放 setup_tensors()(循环外),此处只留调用——
35
+ # 否则计时混入 malloc/初始化,口径失效。
36
+ # ---------------------------------------------------------------------------
37
+ def setup_tensors(device: str):
38
+ """示例形态(按算子实际输入修改):
39
+ import torch, torch_npu
40
+ x = torch.randn(8448, 4096, dtype=torch.float16, device=device)
41
+ return (x,)
42
+ """
43
+ return ()
44
+
45
+
46
+ def run_once(tensors) -> None:
47
+ """示例形态:
48
+ torch.ops.npu.gelu(x) # 或 F.gelu(x) 对标原生
49
+ """
50
+ _ = tensors
51
+
52
+
53
+ def main() -> int:
54
+ ap = argparse.ArgumentParser(
55
+ description="torch_npu event 计时(短 kernel 多 launch 单 event)"
56
+ )
57
+ ap.add_argument("--warmup", type=int, default=5)
58
+ ap.add_argument("--repeat", type=int, default=20)
59
+ ap.add_argument(
60
+ "--launch-per-round",
61
+ type=int,
62
+ default=10,
63
+ help="每轮 launch 数(总时长 ≥100us 为宜;短 kernel 摊薄 launch 开销)",
64
+ )
65
+ ap.add_argument("--device", default="npu:0")
66
+ ap.add_argument("--output", required=True, help="结果 JSON 路径(由调用方指定)")
67
+ args = ap.parse_args()
68
+ if args.repeat < 3:
69
+ print("ERROR: repeat >= 3(稳态采样下限,ops-collect 计时口径表)", flush=True)
70
+ return 1
71
+
72
+ import torch # noqa: F401 (模板运行环境:torch + torch_npu)
73
+ import torch_npu # noqa: F401
74
+
75
+ dev = torch.device(args.device)
76
+ tensors = setup_tensors(dev)
77
+
78
+ # ---- warmup 轮(剔除冷跑:首次含初始化与缓存预热,实测可差 25%)----
79
+ for _ in range(args.warmup):
80
+ run_once(tensors)
81
+ torch.npu.synchronize()
82
+
83
+ # ---- 稳态轮:多 launch 单 event 对(Event 记时在 device 侧,不含 host 抖动)----
84
+ per_round_us: list[float] = []
85
+ ev_start = torch.npu.Event(enable_timing=True)
86
+ ev_end = torch.npu.Event(enable_timing=True)
87
+ for _ in range(args.repeat):
88
+ ev_start.record()
89
+ for _ in range(args.launch_per_round):
90
+ run_once(tensors)
91
+ ev_end.record()
92
+ torch.npu.synchronize()
93
+ per_round_us.append(
94
+ ev_start.elapsed_time(ev_end) * 1000.0 / args.launch_per_round
95
+ )
96
+
97
+ p50 = statistics.median(per_round_us)
98
+ srt = sorted(per_round_us)
99
+ p95 = srt[min(int(0.95 * (len(srt) - 1) + 0.5), len(srt) - 1)]
100
+ mx = srt[-1]
101
+
102
+ result = {
103
+ "schema": SCHEMA,
104
+ "timing_method": "event",
105
+ "harness": "torch_npu.Event multi-launch single-pair",
106
+ "launch_per_round": args.launch_per_round,
107
+ "warmup": args.warmup,
108
+ "repeat": args.repeat,
109
+ "kernel_avg_us": round(p50, 3), # 口径:kernel_avg_us = 稳态中位数
110
+ "kernel_p50_us": round(p50, 3),
111
+ "kernel_p95_us": round(p95, 3),
112
+ "kernel_max_us": round(mx, 3),
113
+ "per_round_us": [round(v, 3) for v in per_round_us],
114
+ }
115
+ out = Path(args.output)
116
+ out.write_text(
117
+ json.dumps(result, indent=2, ensure_ascii=False) + "\n", encoding="utf-8"
118
+ )
119
+ print(
120
+ f"kernel_avg_us(p50)={p50:.3f} p95={p95:.3f} max={mx:.3f}"
121
+ f" (warmup={args.warmup} repeat={args.repeat} × {args.launch_per_round} launch)"
122
+ )
123
+ print(
124
+ f"→ {out}(喂 snapshot.py:--kernel-avg-us {p50:.3f} --timing-method event ...)"
125
+ )
126
+ return 0
127
+
128
+
129
+ if __name__ == "__main__":
130
+ raise SystemExit(main())