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,89 @@
1
+ ---
2
+ type: Case
3
+ title: 同步诊断:保护区域、条件路径与缓冲回收
4
+ description: 通过同步代码分析示例,区分保护区域混用、条件路径漏通知与缓冲回收过晚,指导当前工程验证。
5
+ tags: [同步, Buffer, 条件路径, 生命周期]
6
+ ---
7
+
8
+ # 同步诊断:保护区域、条件路径与缓冲回收
9
+
10
+ 这组代码分析示例说明三类同步问题:保护区域混用、条件路径漏通知、缓冲回收过晚。用于选择排查方法,具体写法仍需按当前产品和工程验证。
11
+
12
+ ## 什么时候借用这些案例
13
+
14
+ Set/Wait 看似配对,仍出现旧 tile、某个输出分支异常、条件卡死或多轮才失败时,先区分下面三条调查分叉。下面通过三种同步代码关系选择验证方法;它们用于提出待验证的候选,具体 event/flag 语义和修复效果须在当前版本、架构与工程中确认。
15
+
16
+ | 当前观察 | 可能原因 | 先检查什么 |
17
+ |---|---|---|
18
+ | 只在多输出并存时异常 | 同步对象绑定错区域;临时 buffer 覆盖;输出地址/索引错误 | 各输出的最后写者、首次读者、真实 region、event 方向和申请身份 |
19
+ | 特定条件或首尾轮卡住 | 发布路径被跳过;合法跨轮等待;参与核提前退出 | 初始化、条件成立/不成立、首尾轮各自的等待与发布路径 |
20
+ | 首轮正常、复用 slot 后异常 | 数据就绪等待缺失;回收等待太晚;bias/索引绑定错误 | 同一 slot 上上一轮最后一次读取与本轮首次重写的先后关系 |
21
+
22
+ 区域账本和路径账本分别见 [Buffer 生命周期、绑定与别名](../mechanisms/buffer-lifetime-alias.md)、[多核分区、所有权与核间协同](../mechanisms/multicore-ownership.md);依赖类型与 API 分流见 [流水同步与数据可见性](../mechanisms/pipeline-sync-visibility.md)。只展开与当前症状有关的分叉。
23
+
24
+ ## A. 多条输出路径共用同步对象
25
+
26
+ 修复前的 attention 输出使用 `stage2OutBuf`,LSE 输出使用 `commonTBuf`,两条路径共用 `mte3ToVId[0]`。LSE 的 `V_MTE3` Set/Wait 还引用这个按 `MTE3_V` 申请的变量。修复同时做了三件事:
27
+
28
+ 1. attention 与 LSE 分别申请并使用各自的两个方向 event;
29
+ 2. LSE 的 `V_MTE3` 使用对应方向申请的 `vToMte3LseOutId`;
30
+ 3. LSE 改用独立 `lseBuf/lseUb`,离开通用临时区。
31
+
32
+ 这支持同时检查“事件与数据路径的绑定”及“临时区复用”,不能把整份修复简化为改一个 event 名称。不同依赖类型下数字 ID 恰好相等也不自动是错误;核对的是申请类型、使用方向与生命周期。
33
+
34
+ 当前任务可先为两个输出填出各自的 `(物理根/基址, offset, 有效范围, generation)`,再追到 event 的申请、初始化、发布、等待和复用点。区分实验可按证据选择:
35
+
36
+ - 只隔离一条输出的事件身份,保持数据区域与算法不变;若跨输出通知混用被消除而内容仍错,继续查临时区。
37
+ - 只隔离可疑临时区,保持事件关系不变;若错误随最后写者或槽位复用消失,支持覆盖候选,但需排除同时改变对齐或越界落点的混杂。
38
+ - 两条输出分别运行与同时运行,给输出使用不同哨兵模式;若异常完全不随二者交叠变化,降低事件共享候选的优先级,回查 producer 内容和输出地址。
39
+
40
+ 若两项隔离都需要才能恢复,分别检查中间 region 和通知顺序,允许组合缺陷。没有完整读写上下文时,“共用 event”只能是候选;已串行、无重叠且生命周期闭合的共享不能仅因名称相同被判错。
41
+
42
+ ## B. 装载可跳过,但后续仍需要发布
43
+
44
+ 在 Conv3D 的条件装载路径中,装载操作可以被跳过,但协作方仍可能等待通知。
45
+
46
+ `ReduceKCloseL0PingPong`、`ReduceKOpenL0APingPong` 和 `ReduceKOpenL0BPingPong` 中,修复将 `DmaSyncSet` 或 group/weight 等 `*SyncSet` 从可跳过的 AL0/BL0 装载条件内部移到条件之后。装载分支不执行,不代表与它协作的后续搬运等待也被跳过。这是路径闭合问题,不能直接概括成“缺一条 barrier”。
47
+
48
+ 在当前工程列出至少两条路径:装载条件成立;装载条件不成立。对每条路径记录:等待者是否仍可达、等待的 region/轮次/方向是什么、哪个步骤证明可发布,以及初始化或其它路径是否已提供对应通知。
49
+
50
+ - 若条件为假时等待仍发生,且找不到对应发布,支持条件遗漏;可只调整这条通知的条件或位置,再比较同一路径是否越过原等待点,保留条件成立路径作为 control。
51
+ - 若条件为假时生产、消费和等待都跳过,条件发布可能完全合法;不应机械地外移。
52
+ - 若等待依赖上一轮回收,先补首轮 seed、跨轮映射和尾轮收尾;不要把当前轮没有前置 Set 当成遗漏。
53
+
54
+ 移动 Set 前还要确认它表达的就绪或释放条件已经满足,避免用过早通知把死锁改成读旧值。不能把这份实现中的 `*SyncSet` 调用位置当作其它版本、其它协作路径的 API 规则。
55
+
56
+ ## C. 写入后再等回收,已无法保护这次重写
57
+
58
+ bias 缓冲复用时,应分别检查上一轮消费结束和本轮搬入完成的通知。以下只分析这条局部依赖;跨核、跨卡同步需要另外验证。
59
+
60
+ 目标文件的修复把 `WaitFlag<V_MTE2>(eventUbBiasVMTE2List[ubListId])` 从下游位置移到 `copyGmToUbBias` 之前,并放入 `ptrBias != nullptr` 分支。写后仍发布 `MTE2_V`。结合初始化、消费者和 `ubListId` 轮转上下文,可以分出两条不同的依赖:
61
+
62
+ ```text
63
+ 上一轮 V 消费完 slot r → 回收通知 → 本轮 MTE2 可重写 slot r
64
+ 本轮 MTE2 写完 slot r → 就绪通知 → 本轮 V 可读取 slot r
65
+ ```
66
+
67
+ 半精度/bfloat16 bias 在 Cast 后发布回收;另一条 dtype 路径在广播加法消费后发布回收,因此最后读者应按实际 dtype 展开。首轮由 `InitFlag` 提供初始可写通知;收尾函数等待各 slot 的回收。
68
+
69
+ 当前工程若怀疑覆盖,可只把回收等待放到被保护的写入之前,记录复用 slot 的最后读者与新写者。预测是旧一轮消费不再读到新 bias,而 producer→consumer 就绪通知仍完整。若读写确无时间重叠,或错值仍精确等于另一个绑定的参数,降低回收候选,转查数据绑定与内容。
70
+
71
+ 对照应包括有/无 bias、不同消费分支、一个 tile 与足以重复使用 slot 的多个 tile。无 bias 时不可凭空等待一个不会产生的消费通知;只有一轮不发生复用的通过,也不能证明回收关系正确。具体实现是否需要显式等待、是否已由 queue/框架保证,须按当前版本及代码路径核实。
72
+
73
+ ## 防止误报的最小对照
74
+
75
+ 以下索引与循环对照用于检验候选能否成立,不能单凭静态形态判定设备故障。
76
+
77
+ | 对照 | 正确的调查结论 |
78
+ |---|---|
79
+ | 同一个 index 变量后来从另一 loop index 重新赋值 | 分开追踪两次赋值;若两个 loop 值均为 1,仅凭重绑定不能证明运行地址不同 |
80
+ | 同一 buffer 根上写 `idx * TILE`,读 `(idx - 1) * TILE` | region 不同是地址线索;还需核对 generation、环形复用及真实 producer/consumer,不能只看根变量 |
81
+ | 多输出 bundle 使用不同 loop 派生地址,同步只使用其中一个 | 逐输出追踪;未展开完整 consumer/Wait 时,仅能产生错配候选 |
82
+ | 非负整型索引的 `idx & 3` 与 `idx % 4` | 该范围内可等价;文本不同不能作为错配证据,不能泛化到任意模数或负有符号索引 |
83
+ | 循环前 seed Set;每轮先 Wait、搬运后 Set;循环后 Wait | 可以消费上一轮通知并闭合收尾;首轮、每轮与尾轮均可达时,“Wait 在 Set 前”不是死锁证据 |
84
+
85
+ 最后一例使用核内 `MTE3_MTE2` event;它不证明跨核通知的作用域或参与集合。宏、alias、类型转换、有效范围和循环边界无法展开时,保留 UNKNOWN 并补地址/轮次观察。静态 finding 可被证据否定,静态零告警也不能替代这些关系的验证。
86
+
87
+ ## 回到当前任务验证
88
+
89
+ 选择与候选有关的首轮、重复复用、尾轮、条件真/假、参与核与输出分支回归;保留原失败输入和重复运行。用最小依赖修复验证首个分叉是否消失,撤销诊断用全局停顿或临时隔离,再检查精度、挂起、资源回收和产物采用。若多项修改同时生效,分别保留中间证据,结论只覆盖实际执行的路径。
@@ -0,0 +1,30 @@
1
+ ---
2
+ type: Case
3
+ title: 尾块有效区与旧状态:先证明本轮写入
4
+ description: 通过状态模型检查本轮有效区是否实际写入,区分尾块未写、读取范围错误与跨 tile 旧状态。
5
+ tags: [尾块, 有效区, 旧状态, 状态模型]
6
+ ---
7
+
8
+ # 尾块有效区与旧状态:先证明本轮写入
9
+
10
+ 最后一个 tile、最后一个 core 或条件分支后才出现旧值、零值或前一轮图样时,先把问题写成“本轮 producer 是否向消费者要读的有效 region 写过值”。本页用状态模型说明排查方法,实际接口行为按当前产品和版本核对。
11
+
12
+ ## 从症状建立竞争候选
13
+
14
+ 冻结当前 shape、分派、输入、产物身份和首个失配坐标,再记录该坐标所属 `(core, row, tile, stage)`、逻辑有效区和物理 padding。把生产边和消费边展开到 `(物理根/基址, offset, 有效范围, generation)`:若本轮 producer 写入不足以覆盖 consumer 的首次读,则同步文本是否配对不能解释内容正确性。
15
+
16
+ 尾块异常至少有四个竞争候选:Host 与 Kernel 对有效长度不一致;mask、搬出长度或地址把无效 lane 当成结果;本轮零工作量或跳过分支没有写目标 region,消费者读到了上一 generation;以及 buffer 在消费者结束前已被复用。它们可同时出现,因此不要用“加一条 Wait 后变好”合并结论。
17
+
18
+ 一个有限状态模型给出可复现的触发器:前一完整物理 tile 为 `[1, 2, 3, 4]`,本轮只产生两个有效值 `[10, 20]`。模型中的写后物理区为 `[10, 20, 3, 4]`,所以逻辑 consumer 应以 `valid=2` 得到 sum `30`、mean `15`;若错误地把整个物理 tile 都读进来,则得到 sum `37`、mean `37/4`。这不是设备内存或某个 DataCopy 的观察,而是把“本轮只写有效前缀”和“消费者误读整块”分开的精确有限对照。
19
+
20
+ ## 两个互斥的最小路径
21
+
22
+ 选择同一地址、同一输入和同一同步对象,只改变使 producer 做最小合法正工作或零工作/跳过的当前谓词。每次在 producer 前后记录目标有效区的值和 generation,并在 consumer 的第一次读前保存同一 region。正工作路径更新正确有效区而零工作路径不更新时,支持“未写本轮 region”;两条路径均已写却仍从边界开始错误时,转查 mask、地址映射或生命周期。
23
+
24
+ 对无效 lane 另设探针:使有效 lane 和 padding 的标识不同,再按当前输出约定只比较有效区。上例将后两个物理位置置零时,全范围 sum 恰好也为 `30`,会掩盖 sum 的错误;但全范围 mean 仍为 `15/2`,不等于逻辑 mean `15`。置成 `[100, 200]` 时,错误全范围 mean 变成 `165/2`。因此仅填零且一个 sum 通过不足以证明有效区正确;若当前算子约定允许中性 padding,它能否成为实现的一部分仍取决于约定,而 mean 必须使用实际 valid count。物理 padding 本身不是数学输出。
25
+
26
+ ## 对照与否证
27
+
28
+ 一 tile、恰好整除、余一个元素和最大合法尾块必须成对运行;同时保留一个会复用 slot 的多 tile control。若只在多 tile 才出现前一轮的标识,优先审计 slot 的最后读者与下一次写入;若单 tile 的尾块已错而 region 从未复用,优先审计有效长度和地址。改变 tile 大小、核数或 buffer 数会同时改变分派和调度,只能作为候选实验,不能单独确认 UB 容量或同步根因。
29
+
30
+ 修复应只让实际 producer 覆盖本轮有效 region,或让消费者只读取约定允许的有效区;随后回放原失败、边界两侧、连续重复、不同 core 所有权和实际会复用 slot 的路径。无法观察到地址、循环谓词或产物采用时,保留 `UNKNOWN`,不把稳定的旧值图样写成已确认根因。
@@ -0,0 +1,73 @@
1
+ ---
2
+ type: Case
3
+ title: GRU bias:参考归约次序、尾列与修复后的漏写
4
+ description: 历史 GRU bias 归约案例,区分参考求和次序、主尾列分派及修复中新引入的可变计数漏写。
5
+ tags: [GRU, 归约, 尾列, 可变计数]
6
+ ---
7
+
8
+ # GRU bias:参考归约次序、尾列与修复后的漏写
9
+
10
+ 适合在“逐元素输出正常,bias 归约失败”“有限值指标正常,NaN/Inf 却失配”或“改归约后只剩规律性尾区错误”时阅读。p2 与 p3 的原始问题属于同一个归约顺序根因族;下文的计数副作用发生在另一次 Agent 修复中,不属于原始案例的第二个根因。
11
+
12
+ ## 实际计算链与观察边界
13
+
14
+ ThnnFusedGruCellGrad 的输入为 `[B,H]` 的 grad_hy 和 `[B,5H]` 的 storage,后者包含 r、z、n、hx、hn。逐元素计算采用 FP32:
15
+
16
+ ```text
17
+ gin = go*(1-z)*(1-n*n)
18
+ gig = go*(hx-n)*(1-z)*z
19
+ grg = gin*hn*(1-r)*r
20
+ ghn = gin*r
21
+ ig = concat(grg, gig, gin)
22
+ hg = concat(grg, gig, ghn)
23
+ ```
24
+
25
+ 输出 0/1/2 分别为按目标 dtype 输出的 ig、hg 和 `go*z`。启用 bias 时,输出 3/4 分别沿 batch 维对未收窄的 FP32 ig、hg 求和,完成后才转换到目标 dtype;关闭 bias 时为空输出。
26
+
27
+ 因此输出 0–2 正常是优先调查 bias 支路的线索,不足以单独证明归约入口完全相同。特别是 FP16/BF16 输出,收窄会掩盖上游 FP32 差异;局部对照应检查未收窄值,而不是重新累加输出文件。
28
+
29
+ ## 两种表象,共用一个原始根因
30
+
31
+ 失败实现先做 chunk 内 `ReduceSum(RA)`,再做主尾配对和缓存树合并;group 路径还要经过 workspace partial 和第二阶段归约。参考代码则对连续 `(B,3H)` FP32 张量执行 CPU `sum(dim=0)`。双方参与元素相同,不保证中间舍入和溢出位置相同。
32
+
33
+ | 案例 | 主要现象 | 有区分力的观察 |
34
+ | --- | --- | --- |
35
+ | p2 | 普通有限 FP32 输入,4 行公开失败集中在两个 bias;接近零的结果容易放大相对误差 | 比较未收窄输入、参考次序模型和设备的分块树;只换 FP64 不能证明满足原 FP32 reference |
36
+ | p3 | 极值与低精度输入,bias 的 NaN/Inf 类别或位置失配 | 逐坐标分类,追踪首次溢出;公开 L0_030 的 bias 曾各有两个 NaN/-Inf 位置互换,有限值误差为零但没有可比较的有限元素 |
37
+
38
+ 有限输入经过不同加法树,也可能分别得到 finite、Inf 或 NaN,机理见[顺序与溢出](../mechanisms/special-values.md#有限输入的归约顺序也会改变非有限类别)。两例历史原始输出在各自两次回放中稳定;这支持确定性数值路径调查,但不凭稳定性单独排除地址、状态或同步。
39
+
40
+ ## 主列通过后,尾列仍可能采用另一棵树
41
+
42
+ p3 尾列细化时记录的参考环境为 PyTorch 2.9.0+cpu、AVX2、单线程;设备记录为 CANN 9.0.0、Ascend950PR_9589、dav-3510、Kernel 直调。该参考环境的向量外归约在 `floor(3H/32)*32` 之前使用主列 cascade,后续列使用四路交错 `row_sum`;32 来自该路径的四路调度和 8 个 FP32 lanes,不是 NPU 的通用对齐要求。
43
+
44
+ 初版 p3 参考修复保留 batch 顺序并实现四层 cascade,公开集达到 595/595,但看护集仍为 17/20,剩余三行仅 input bias 的非有限类别失配。补齐尾列交错链、各链的 cascade、余数追加和最终合并次序后,历史记录为公开 595/595、看护 20/20。这个反例说明“用了四层 cascade”还不足以证明复现了整个 reference。
45
+
46
+ 从失败输出列反推路径时,保留原矩阵宽度与 stride。GRU 的两个 bias 各自是 `[3H]`,六个内部 segment 的逻辑列为 `(segment % 3)*H + aOff + col`;不能把 hidden bias 当作一个宽度为 `6H` 的参考张量继续累计列号。抽出单列再调用框架 sum 也可能改变参考路径,具体对照见[分层归约与主尾列分派](../mechanisms/accumulation-order.md#框架参考的分层归约与主尾列分派)。
47
+
48
+ 历史最终参考方案采用单行 R tile、关闭 group,并在设备端完成所需次序。这证明一种方案在记录范围内有效,不证明必须串行整个算子,也不提供性能合格结论。公开需求规定 FP32 归约和特殊值匹配,但未逐项写出该 CPU 结合树;固定 oracle 的实现依赖应由评测维护者确认,不能升级为 GRU 数学定义或自行修改测试的理由。
49
+
50
+ ## 修复过程中的另一种机制:可变计数污染后续输出
51
+
52
+ 另一次 p3 修复曾在 CPU 归约模型上通过大量非有限类别对照,设备端却出现新的整段漏写。`FinalBiasVfImpl` 在 input bias 尾段直接调用 `UpdateMask<float>(aLen)`,而后面的 hidden bias 段仍需要这个有效长度。该 API 消耗引用参数后,后续段看到的是零。
53
+
54
+ 在公开 L1_455 的修复快照中,`H=1743`,最后一个列块为 `aOff=1728, aLen=15`,每块容量为 64。前两个 input bias 段正常;第三段跨过参考主尾边界,在生成尾 mask 时消耗了 aLen;随后的三个 hidden bias 段均跳过写出。因此预测漏写位置为:
55
+
56
+ ```text
57
+ [1728,1743) [3471,3486) [5214,5229)
58
+ ```
59
+
60
+ 这三个半开区间共 45 个位置,与该次保存的设备失配索引逐个一致。原始版本在同一用例仅有另一个位置失配;修复后的错误分布已经改变,不能继续只拟合求和树。
61
+
62
+ 同一候选的清零循环还在 `UpdateMask(remaining)` 后再次手工扣减一轮。按该快照的控制流和每轮 64 个 FP32 元素推算,3840 个缓存元素只覆盖了 1920 个;这是独立的初始化缺口,不能把它未经干预验证地称为全部 45 个错误的原因。
63
+
64
+ 保留跨段不变的有效长度,各段使用独立 remaining,并核对清零和写出覆盖,见[可变计数机制](../mechanisms/tiling-tail-state.md#可变计数被消费后续输出漏写与清零不完整)。上述定位由候选源码、API 语义和已存设备日志支持;修正该 Agent 候选后的完整 NPU 回归未记录,不能称为该候选已修复通过。
65
+
66
+ ## 怎样缩短下一次调查
67
+
68
+ 1. 先按输出区分逐元素、归约和写回支路;保存一组可复验失败,不必等全套测试结束才分析已经取得的错误。
69
+ 2. 从固定参考源码推导层级和主尾分派,用会区分候选的长度、列边界和有限/极值输入核对;避免将“16 行块顺序累加”外推到所有 B。
70
+ 3. 将通过的局部算术模型落实到设备时,核对相同输入、层级更新、余数、初始化、可变计数和写出范围。若错误结构变化,先检查新增 diff。
71
+ 4. 保存当前修改、实际通过范围与未决项,再运行必要回归;可复现挂起与数值超差分别报告,基线也挂起不证明候选已完整通过。
72
+
73
+ 历史最终参考补丁的两轮结果为 p2 公开 28/28、看护 20/20,p3 公开 595/595、看护 20/20;相应原始版本分别为公开 24/28、592/595,看护均为 4/20。这些是固定环境的既有设备记录,不是本次知识整理重新运行的结果,也不能证明更新后的 Skill 成功率已提升。
@@ -0,0 +1,34 @@
1
+ ---
2
+ okf_version: "0.2"
3
+ ---
4
+
5
+ # 故障模式与案例
6
+
7
+ 本目录沉淀容易出现精度异常的机制、算子特有风险和历史诊断经验。结合实际计算链、标记的敏感点与失败现象,查阅相关经验,形成有依据的候选并开展低成本验证;不必等到已有可疑区间才使用。
8
+
9
+ 系统定位取得新观察后,再针对异常环节核对相关经验。现象相似不等于根因相同,使用时检查当前输入、源码与环境是否满足适用条件。
10
+
11
+ | 入口 | 什么时候读 |
12
+ | --- | --- |
13
+ | [通用故障模式](mechanisms/index.md) | 计算链涉及类型转换、累加、地址、缓冲复用、同步、尾块等敏感点,核对常见错误机制及触发条件 |
14
+ | [算子特有风险](operators/index.md) | 根据算子族识别容易出错的计算阶段及诊断经验 |
15
+ | [历史案例](cases/index.md) | 对照具体输入、错误现象与排查过程,借鉴关键观察和验证方式 |
16
+
17
+ ## 按症状选择检查
18
+
19
+ 下表将常见残差直接连到正文。选择与当前计算链吻合的入口,复用已有输入做一项有区分力的检查;不必遍读所有页面。相同症状可能有不同根因,检查结果再决定是否转向。
20
+
21
+ | 当前症状或计算结构 | 相关章节 | 可先做的检查 |
22
+ | --- | --- | --- |
23
+ | Log/Atanh 近零误差突增,输出变零 | [近零逐步对照](mechanisms/accumulation-order.md#atanh-近零的逐步对照) | 保存 `x`、舍入后的 `1±x` 和输出,区分输入量化、加法吞没与函数近似 |
24
+ | 加入多项式分支后,极大有限输入反而出 NaN | [未选分支与乘零混合](mechanisms/special-values.md#未选分支也可能污染结果) | 分别保存两支的类别,检查未选支路是否先溢出,再经乘零传播 |
25
+ | Exp/Cosh 稳定改写后,只剩有限/Inf 交界失配 | [分类边界映射](mechanisms/special-values.md#有限与-inf-分类边界) | 在实际输入 dtype 的相邻可表示值上比较变换、Exp 和最终乘法 |
26
+ | 分块 Norm 局部正常,合并统计或分母错误 | [状态更新时序](operators/normalization.md#统计状态的原地更新时序)、[迭代预算](operators/normalization.md#倒数与开方的迭代预算) | 用两个不等长、均值不同的块核对旧/新状态;统计正确后再查近似分母 |
27
+ | 自适应平均池化在矩形、非整除或维度 1 上失败 | [小窗口对照](operators/reduction.md#自适应平均池化的小窗口对照) | 手列一个输出的半开窗口、坐标、count 与累加 dtype,先核对一个窗口 |
28
+ | Softplus 首 repeat 正常、后段重复,或极负区小量归零 | [按残余症状查案例](operators/softplus-v2-grad.md#按残余症状进入案例) | 分别进入已有 repeat/mask 或 subnormal 支路,比较具体 lane 与首次归零步骤 |
29
+ | SIMT/RegBase 等一条实现修好,另一 shape/dtype 仍失败 | [跨实现操作例](mechanisms/algorithm-parameter-contract.md#跨实现的小量放大对照) | 将同一数值条件对应到各可达实现,核对真实分派与各自中间量 |
30
+ | 融合算子逐元素通过、只有 bias 超差,或主尾列类别分叉 | [GRU bias 案例](cases/thnn-fused-gru-bias-reduction.md) | 保留归约前未收窄值,核对当前参考的求和语义、主尾列与合并层级 |
31
+
32
+ GRU 等历史案例先匹配当前需求与参考版本;要求已改变时,借鉴观察方法,不照搬旧求和树。修复后出现新的分段漏写时,再查[可变计数副作用](mechanisms/tiling-tail-state.md#可变计数被消费后续输出漏写与清零不完整)。
33
+
34
+ 快速验证的范围与退出条件见 [SKILL.md 阶段 3](../../SKILL.md#阶段-3定位问题与验证根因),实验及系统定位的操作方法见 [diagnosis](../diagnosis/index.md)。接口参数与产品支持使用 `ascendc-api-knowledge-query`,算子实现示例使用 `knowledge-query` 查询;经验中的 CANN/NPU 或输入条件只覆盖正文明确说明的范围。
@@ -0,0 +1,108 @@
1
+ ---
2
+ type: Mechanism
3
+ title: 累加、归约顺序与消减
4
+ description: 通过归约树、主尾列与近零函数的逐步对照,区分累加顺序、消减和小增量吞没。
5
+ tags: [归约, 累加顺序, 消减, Atanh, Log]
6
+ ---
7
+
8
+ # 累加、归约顺序与消减
9
+
10
+ 误差随归约长度、tiling 或核数变化时,优先区分累加 dtype、分组顺序、尾块参与和跨核合并;同时记录输出尺度的变化。归一化曲线可辅助解释形态,不代替项目判据,也不能仅据曲线变平认定实现无误或阈值有错。
11
+
12
+ ## 确认比较目标
13
+
14
+ 按[比较与验收](../../diagnosis/baseline.md#数值相等与逐位一致)确认当前输出要求容差、数值相等还是逐位一致。最终位一致不自动要求内部归约树相同;项目明确规定求值顺序时,再核对该要求。
15
+
16
+ 查看当前相关节点的输入与累加 dtype、归约范围、输出 Cast 和 reference。FP32 累加改善但仍失败,只支持该干预与现象相关;残差还可能来自输入微差传播、求值顺序、中间收窄、参与集合或路径联动。即使残差仍随长度增长,也不能直接指定其来源。复用已有对照,按下面的局部比较选择下一项检查,避免重复尝试升精度。
17
+
18
+ 逐元素在阈值内不代表归约输入完全相同。需要区分输入微差传播与归约新增差异时,保留未收窄的实际归约输入 `x_obs` 和可信参考输入 `x_ref`:用已确认语义的同一独立参考 `R` 比较 `actual`、`R(x_obs)` 与 `R(x_ref)`。只比较前两项不能量化输入传播,也不能直接回查为上游原因;对照方法见[逐层分析](../../diagnosis/progressive-error-analysis.md#区分传播与新增偏差)。
19
+
20
+ 按某种分块顺序模拟的 `M` 与 actual 吻合,表示该候选能复现当前观察,不自动证明实际实现正确或残余必为固有舍入。高精度实数和是另一项数学观察;项目规定 FP32 求值顺序时,它不自动成为项目局部参考。先核对实际参与集、路径与参考语义,再解释差异。
21
+
22
+ ## 判断归约顺序是否相关
23
+
24
+ 浮点加法不满足结合律,元素集合相同也可能因分组不同而产生位差。根据疑点选择观察:
25
+
26
+ | 当前疑点 | 有用的观察或对照 |
27
+ | --- | --- |
28
+ | 局部树、split 或尾块 | 比较相关边界前后的长度和每级配对,检查尾部元素是否参与 |
29
+ | 分块或跨核合并 | 区分 chunk 内归约、partial 存储 dtype 和最终合并;局部结果正确不代表完整合并正确 |
30
+ | 消减或特殊值传播 | 选择对顺序敏感的输入,追踪首次差异;必要时查[特殊值](special-values.md) |
31
+
32
+ 怀疑 pairwise 顺序,或项目要求复现该顺序时,从实际 reference 查 leaf、split、对齐与取整方式,不能仅凭 `n/2` 或库名推断。具体 CANN 重载的归约层级与支持条件使用 `ascendc-api-knowledge-query` 查询。
33
+
34
+ ## 框架参考的分层归约与主尾列分派
35
+
36
+ 逐元素输出正常、只有 sum/bias 超差,或者主列修复后只剩尾列失败时,检查参考实现自身的分派。`sum(axis=0)` 不足以描述实际加法次序;相同的归约长度也可能因未归约维宽度、stride、CPU SIMD 分派和线程划分而采用不同路径。
37
+
38
+ 先保留生成 golden 时的框架版本、设备、实际 CPU capability、线程数,以及归约输入的原始 shape/stride/dtype。Agent 本机的 CPU 或编译器检测值不能代替生成参考值的进程。源码可用时,直接沿该版本的分派条件和循环推导,再用少量对抗输入核对;反复拟合随机输出容易把局部规律当成完整算法。
39
+
40
+ 以 [PyTorch 2.9.0 的 SumKernel](https://github.com/pytorch/pytorch/blob/v2.9.0/aten/src/ATen/native/cpu/SumKernel.cpp) 为一个具体例子:对连续 FP32 矩阵沿非连续的 batch 轴求和,`vectorized_outer_sum` 在主列调用 `multi_row_sum`,剩余向量列和标量列调用 `row_sum`。以下只描述这条源码路径,不是所有 `torch.sum` 或 NPU ReduceSum 的规则。
41
+
42
+ | 路径 | 实际次序中容易漏掉的部分 |
43
+ | --- | --- |
44
+ | `multi_row_sum` | 四层 FP32 accumulator 从 `+0` 初始化;正长度 `N` 的步长为 `2^max(4, floor(ceil(log2(N))/4))`。低层满块向高层累加并清零,末尾不足一块留在低层,最后按低层到高层合并 |
45
+ | `row_sum` | 先将完整的四行组按 `row % 4` 拆成四条交错链,对长度 `floor(N/4)` 的链分别执行上述 cascade;空链保持零初值。各链层级合并完成后,剩余 `N % 4` 行依次追加到第 0 链,最后依次合并第 1、2、3 链 |
46
+ | 主列与尾列边界 | 在上述向量外归约路径中,主列宽度是 `4 * V` 的整数倍,`V` 是参考进程实际使用的 FP32 SIMD lanes;参考宽度为 `C` 时,边界为 `floor(C/(4*V))*(4*V)`。不满足该分派条件时,应另查实际路径 |
47
+
48
+ 即使步长为 16,“每 16 行求和,再顺序累加所有 partial”也只实现了一部分层级:跨过 256、4096 等层级时,进位、清零和最终合并可能改变结果;更大归约长度还会改变步长。尾列也不是简单将所有行按模 4 分配到底,余数追加时机需要单独核对。
49
+
50
+ ### 能区分路径的低成本实验
51
+
52
+ 1. 固定同一列的 FP32 输入字节,比较实际 reference、按源码实现的主列/尾列模型与当前设备归约;高精度实数和另列为数学观察。逐步 FP32 舍入不可只在最后模拟一次。
53
+ 2. 按真实步长 `S` 选择 `S-1/S/S+1`、`S²` 附近和带不完整组的长度;按真实主尾边界选择相邻列。只覆盖当前候选会分叉的边界,无需枚举全部 `B×H`。
54
+ 3. 将相同数据复制到主列和尾列,保留整张矩阵的 shape/stride,再比较两列结果。另做原矩阵求和后取列与先抽取列再求和的对照;抽列、转置或 `.contiguous()` 可能改变参考分派,后者不能自动充当原节点的局部 oracle。
55
+
56
+ 下面的 FP32 示例同时假定输入能以 FP32 存储、相关加法按 FP32 舍入。输入 dtype 与累加 dtype 分别核对:只把 FP16 累加器改成 FP32,不会扩大 FP16 入口的可表示范围,`2^25` 不能原样用作有限 FP16 输入。先按实际入口量化、解码,再计算各顺序的预测;有意改成 FP32 输入时,说明它与原失败的范围差异。FP16 局部对照可参考[归约小窗口](../operators/reduction.md#自适应平均池化的小窗口对照),按当前允许域和所需区分力选值、长度或观察面。
57
+
58
+ 一个可手算的区分输入是 `A=2^25`,某列沿 batch 为 `[A,1,-A,1,A,1,-A,1]`。在每步 FP32 最近偶数舍入、步长至少 16 的上述模型中,主列结果为 `1`,四路交错尾列结果为 `2`,精确实数和为 `4`。它说明“主尾列不同”和“更接近实数和”是不同观察;这是数值模型,不是特定 NPU 的实测结果。
59
+
60
+ ### 处置边界
61
+
62
+ 当前验收若要求与固定 reference 对齐,修复需覆盖实际触发的层级、主尾列、余数、输出 Cast 和合并阶段。可以并行处理互相独立的输出列;把归约轴重新切成任意 partial 再合并,仍可能改变目标次序。单行 tile、关闭 group 或更高精度累加是可选对照或特定实现方案,不能因一次通过就推广为通用修复,也不能忽略性能和 UB 代价。
63
+
64
+ 需求仅规定 FP32 求和,而固定 oracle 的特殊值规则事实上要求某种结合树时,保留这个可复现的要求差异,交由评测维护者确认;调试期间继续使用原判据,不擅自更换 golden、清洗特殊值或放宽阈值。案例及主列修复后的尾列反例见 [GRU bias 归约](../cases/thnn-fused-gru-bias-reduction.md),溢出分叉见[特殊值中的归约顺序](special-values.md#有限输入的归约顺序也会改变非有限类别)。
65
+
66
+ ## 二叉树不等于按量级排序
67
+
68
+ 二分规定的是索引配对,不会自动把相近量级放在一起。例如令 `A=2^25`,每次加法按 FP32 最近偶数舍入:
69
+
70
+ | 输入顺序 | 左折叠 `((x0+x1)+x2)+x3` | 半区折叠 `(x0+x2)+(x1+x3)` | 精确实数和 |
71
+ |---|---:|---:|---:|
72
+ | `[A,1,-A,1]` | `1` | `2` | `2` |
73
+ | `[A,-A,1,1]` | `2` | `0` | `2` |
74
+
75
+ 同一树形在两组输入中分别改善和放大误差。这个模型不代表某个 NPU API 的执行顺序;用于当前定位时,应检查实际配对和中间 dtype 是否能解释观察。
76
+
77
+ ## 选择实验与回归范围
78
+
79
+ 可从正负大数夹小数、强消减、全同号或长度边界中选择能区分候选的输入。保持参与元素集合可比,单独改变累加 dtype、分块或合并顺序;怀疑尾块时增加完整块对照。
80
+
81
+ 修改共享归约函数或路由后,按实际受影响的调用方选择代表性回归。路由边界应有实现或资源条件依据;一个失败长度不足以确定整段输入都要改路由。`volatile` 或融合、展开开关可用于观察编译行为的影响,不能仅凭开关变化断定实际舍入顺序。
82
+
83
+ 对 count 重载,可由 dtype 计算每个 256B repeat 的元素数,核对 full repeats 和 tail;mask/repeat 重载则核对 mask、repeatTime 与 stride,避免混用两种调用方式。
84
+
85
+ ## 小增量吞没与量级扫描
86
+
87
+ 对 `log(1+x)`,比较 `s = round_dtype(1 + x)` 与 `y = log(s)`。若 `s` 已等于 `1`,信息在加法处丢失,扩大下游 dtype 不能恢复;若 `x` 更早已量化,还需区分输入量化与加法吞没。
88
+
89
+ 在正负两侧扫描邻近量级,找出 `1+x` 首次不再舍入为 `1` 的边界。阈值由实际 dtype、模式和位模式确定,不照搬常量。稳定公式或补偿算法的采用,仍以项目语义和目标 API 支持为准。
90
+
91
+ ### Atanh 近零的逐步对照
92
+
93
+ 若 Kernel 使用 `0.5 * log((1+x)/(1-x))` 或两项 Log 相减,先展开实际的 Add/Sub、Div、Log 和缩放,不直接把整条链当作一次高精度 Atanh。下面是保留 normal 值、逐步 FP32 最近偶数舍入的数值模型,不是某个 NPU API 的实测结论:
94
+
95
+ | 输入 | `round_fp32(1+x)` | `round_fp32(1-x)` | 对数比值链 | 高精度数学参考 |
96
+ | --- | --- | --- | --- | --- |
97
+ | `x=2^-26` | `1` | `1` | `0` | 约为 `x`,非零 |
98
+ | `x=-2^-26` | `1` | `1` | `0` | 约为 `x`,非零 |
99
+
100
+ 这里的 `x` 本身是 normal,信息在加减处已消失;不能把最终为零直接归为 FTZ。另选使 `1±x` 已可区分的普通量级对照,保存相同输入字节、`1±x`、比值和 Log 输出,找出首个分叉。实际实现若用两项 Log 相减,就保存那条链,不换模型来拟合结果。
101
+
102
+ 参考必须使用实际输入 dtype 量化后的 `x`,并先核对当前验收是否包含近零区。奇次展开或 `log1p` 风格的表达式可作为约定允许时的候选,截断误差、切换范围、特殊值和目标 API 支持需要分别确定;本例的输入不充当生产阈值。更早发生 FP16 桥接时,先查[升精度位置](../cases/fp16-promotion-boundary.md)。
103
+
104
+ ## 判断结果
105
+
106
+ 顺序或 dtype 的改变能按预测解释误差变化时,才支持相应候选;单个样例改善不能独自确认根因。
107
+
108
+ 若单块正确、partial 合并后才错,可查[Partial 统计合并](../cases/partial-statistics-merge.md),区分不等长状态、空 partial 和合并公式问题。
@@ -0,0 +1,118 @@
1
+ ---
2
+ type: Mechanism
3
+ title: 算法公式、常量与参数槽位
4
+ description: 核对公式、槽位与分段判据,区分重结合和临界中间值的类别分叉,并检查跨后端小量放大。
5
+ tags: [算法公式, 参数槽位, 分支, 浮点语义, SIMT, RegBase]
6
+ ---
7
+
8
+ # 算法公式、常量与参数槽位
9
+
10
+ 输出等于某个中间量、分支恒不触发、不同 dtype 路径出现完全不同症状,或 SIMD VF 编译无告警但全域失配时,优先核对公式和参数槽位。类型相同的裸指针、重复缓冲和复制出的调用点会让位置错配逃过编译检查。
11
+
12
+ ## 公式与槽位表
13
+
14
+ 先画当前实现实际执行的逐步公式,不用“数学等价”跳过浮点顺序。再为每个调用点列出:形参位置、实参变量、逻辑角色、dtype、地址/槽位、生产者、最后写入点和消费者。CopyOut 的源槽位必须单独列,不能假设它随 VF 输出角色自动变化。
15
+
16
+ 遇到 VF 时先按当前版本 API 文档确认 SIMD、SIMT 或混合调用模型与执行域,再跨调用文件和定义文件完成账本。寄存器、mask 和标量实参在调用点可能缺少类型语义提示;编译成功只能证明语法和静态约束通过,不能证明实参顺序、读写方向、有效 lane、UB 接力槽位或 helper 执行域兼容。
17
+
18
+ ## 乘除重结合的有限精度分叉
19
+
20
+ 遇到 `a*(b/c)` 与 `(a*b)/c` 的改写时,把两条链分别按目标 dtype 展开,不能只写实数域等式:
21
+
22
+ ```text
23
+ q = round_D(b / c)
24
+ y_A = round_D(a * q)
25
+
26
+ p = round_D(a * b)
27
+ y_B = round_D(p / c)
28
+ ```
29
+
30
+ 两条链的中间舍入、overflow、underflow 和非法运算位置不同;最终数值接近也不能证明位级约定相同。有限值的舍入差也可能超过较紧容差,是否失败要按实际比较器计算,不能只在逐位约定时检查。先冻结目标舍入模式、FTZ/subnormal 行为、是否融合以及 NaN 比较规则,再构造能让中间数值类别分叉的 trigger。以下是 IEEE binary32、逐操作 round-to-nearest-even 且保留 subnormal 时的通用区分输入;`Fmax=0x1.fffffep+127`,`minSub=0x1p-149`:
31
+
32
+ | 目标 | `(a,b,c)` | `a*(b/c)` | `(a*b)/c` |
33
+ |---|---|---|---|
34
+ | 中间乘法 overflow | `(Fmax, 2, 2)` | `Fmax` | `+Inf` |
35
+ | 中间除法 underflow | `(2^24, minSub, 2)` | `+0` | `2^-126` |
36
+ | overflow 后非法除法 | `(Fmax, 2, +Inf)` | `+0` | `NaN` |
37
+
38
+ 平台若启用 FTZ、采用其它舍入模式或把表达式融合,以上具体位模式可能改变;此时用目标 dtype 的 `nextafter`/位模式扫描生成满足同一分叉谓词的输入,而不是照搬常量。逐步保存 `q/p/y` 的数值类别和 bit pattern;signed zero 与 NaN payload 是否参与 bitwise 验收由当前约定的特殊值相等关系决定,不能从 `bitwise` 标签自行推导。由运算产生的 NaN payload 若无项目 oracle 或版本来源约束,保持 `UNKNOWN`,只把数值类别作为当前实验结论。
39
+
40
+ 有限/Inf 分叉也可能来自中间值的微小差异。以相同的 binary32 乘法为例,`2*(Fmax/2)` 为 `Fmax`,而 `2*nextafter(Fmax/2,+Inf)` 溢出;因此两个 Exp 实现即使都返回有限值,也可能经后续乘法形成类别差异。这里是算术示例,不预设某个设备 Exp 的误差。区分 Exp、乘除顺序和阈值分支时,核对实际分支及对应中间值;只看最终类别或阈值相关性不能把这些解释分成互斥项。
41
+
42
+ ### 先核对参考的实际行为
43
+
44
+ 任务已规定的 dtype 与求值顺序直接沿用。项目 golden 若调用框架 API,确认实际版本和 dtype,再从对应实现或小规模调用核对求值方式;若与明确要求不一致,记录需求与参考实现的冲突,不把明确要求改成另一种待选约定。数学文档写成乘某个比例,不足以证明内部先算该比例;自建的“稳定版 golden”也不能替代项目 reference。
45
+
46
+ 区分输入应让两个候选给出不同的类别或数值预测,再配普通量级对照;仅在两条链都有限且接近的样本上回归,无法排除重结合问题。某个溢出 trigger 超出合法域,只排除了该输入作为失败证据,不能据此宣称其余域内安全;仍按当前疑点检查合法域内的有限舍入差或其它分叉。若 reference 允许中间溢出,有限结果不自动更符合验收要求;任务确实只规定高精度 reference 与容差时,按该要求判断,不强制复刻未被要求的中间顺序。一个实际漏查例见[Softplus 浮点语义支路](../cases/softplus-v2-grad-family.md#支路-c浮点语义而不是实数恒等式)。
47
+
48
+ ## 分段与稳定公式的跨实现一致性
49
+
50
+ 同一分段或稳定公式若由 SIMT、SIMD、RegBase 等并列实现,它们都应满足同一公式的定义;一条路径修复或通过不足以外推其它路径。分别审计各实现的分段谓词、常量、逐操作顺序与 dtype/舍入点,再按当前约定覆盖普通域、分段边界、深尾及适用的特殊值。没有 visible case 的实现仍须判断其是否可达;不可达或无法确认时保留 `UNVERIFIED`,不把某个后端的结果写成跨实现结论。
51
+
52
+ 修改影响多条公式实现时,选择能暴露同类差异的输入检查相关路径。普通输入通过不能说明深尾、分段边界或特殊值也正确;按实际影响补充代表性对照。
53
+
54
+ 若某条路径的公式修复后来因编译器、资源或回归问题被撤销、换写或改成路由替代,撤销前的验证不再证明最终实现。重新核对最终谓词和操作链,并把同一分段/深尾 trigger 回放到最终仍可达的每条实现;路由替代只证明该配置走向了合规实现,不证明被绕开的实现本身正确。
55
+
56
+ ### 跨实现的小量放大对照
57
+
58
+ 门控、sigmoid 或其他指数链在一条后端修好后,用同一数值条件核对另一条可达实现,而不是只搜索相同常量是否出现。先从实际 Host 条件确定各自的 shape/dtype/可选输入,再填写一张小表:
59
+
60
+ | 实现 | 实际触发条件与分派证据 | 相关数值链 | 当前结果 |
61
+ | --- | --- | --- | --- |
62
+ | 路径 A,如 SIMT | 从当前 tiling/dispatch 读取,运行时核对 | Exp、缩放、恢复与输出消费 | 已确认的输入与误差,或未验证 |
63
+ | 路径 B,如 RegBase | 独立核对,不由路径 A 推断 | 对应公式及各步 dtype/舍入 | 单独记录,不能沿用 A 的通过结果 |
64
+
65
+ 例如只考察 FP32 子表达式 `y=a*sigmoid(g)`,在合法域允许时选 `g=-100、a=2^100`,并配普通量级 `g=-4`。若某条实现先将极小 sigmoid 因子归零,大系数相乘也无法恢复;更高精度数学结果仍非零。保存 `g`、因子、放大前后值,区分“产生时归零”与后续搬运/消费。这里不预设 Exp/FTZ 行为,也不将此子表达式替代整个 SwiGLU 梯度 oracle。
66
+
67
+ 两条路径可能需要不同的合法 shape,无法在同一 shape 强制切换时,保留同一局部数值分布并说明布局/归约等差异。最终各自回到原分派、正式输出和比较器;临时强制后端只是一项诊断对照。小量的分阶段检查见[特殊值与窄带放大](special-values.md#次正规数与窄带放大)。
68
+
69
+ ## 小量级输入与稳定公式边界
70
+
71
+ 遇到 `log(1+x)` 等结构,记录实现真正执行的 `s = round_dtype(1+x)`、`y = log(s)`,不要用实数域等价式替代逐操作链。保存 `x`、`s`、`y` 的值与位模式;若 `x` 或 `s` 已在窄 dtype 中丢失信息,后续扩大 dtype 不能恢复。先用量级扫描定位首次分叉,再判断问题属于输入量化、加法吞没还是后续函数近似。
72
+
73
+ `log1p` 风格的稳定公式只有在算子 oracle、输入域和特殊值约定允许时才是候选。对照至少覆盖接近零的正负值、`+0/-0` 和普通量级输入;只有当前约定明确覆盖 `x=-1` 邻域时才测试该边界及两侧,否则将域外点记为 out-of-scope/UNKNOWN,不能用未定义输入裁决实现。比较中间位模式而不只看最终容差。具体 Log/稳定变体是否存在、支持哪些 dtype 与模式属于版本 API 强事实;应查询对应版本的官方文档,缺少权威证据时标为 UNKNOWN,而不是从旧案例或函数名推断。
74
+
75
+ ## GMM shape、offset 与 per-token 参数槽位
76
+
77
+ 第二组开始整体错位、某组输出像取了相邻组 weight,或每行误差倍率能匹配另一 token 的 scale 时查询本节。对每组把 `M_g/N_g/K_g` 的生产者、字段单位和消费者写入同一表;再分别列出 A/B/C、bias、channel scale、token scale 的 base/prefix/span。一个 `groupList` 值究竟是组大小还是累计边界必须由当前算子约定或实际 host 生产代码证明,不能仅凭变量名决定。
78
+
79
+ 若当前约定是把各组 token 行连续拼接,并为每个逻辑 token 提供一个 scale,则候选索引应显式写成:
80
+
81
+ ```text
82
+ token_base[g] = sum(M_h, h<g)
83
+ token_global(g, i) = token_base[g] + i
84
+ scale_used(g, i, j) = per_token_scale[token_global(g,i)] * channel_scale(g,j)
85
+ ```
86
+
87
+ 这是待验证的数据流公式,不是所有 GMM 的通用约定。固定 9.0.0 QuantGroupMatmul 样例确实使用累计 M offset 取得 per-token scale,当前 Matmul/Mmad 接口使用 `ascendc-api-knowledge-query` 核对;其它 GMM 若采用累计 groupList、per-group scale、per-block scale 或不同布局,应按其有依据的约定重建,缺证据保持 UNKNOWN。
88
+
89
+ 验证时为不同 group/token/column 赋予互不相同且可精确表示的 scale 哨兵,令单位基 Matmul 只激活一个 `(g,i,j)`,同时保存读取的 token index、scale 位模式、workspace 值和最终倍率。依次测试首行、组内末行、下一组首行、空组之后首行和尾组末行。若错值稳定等于相邻 token 的预测倍率,支持索引候选;若 Cube/workspace 已错,则该实验不能归因于 scale。把 channel scale 与 token scale 同时改成 1 只是一项组合观察,不能区分两条索引链。
90
+
91
+ group shape、offset、scale 角色与量化 dtype 必须由当前算法和布局约定确定;scale 哨兵与局部 oracle 只用于区分候选,不能决定广播 API 或实现常量。
92
+
93
+ ## 支持与反证
94
+
95
+ - 错值反解能稳定匹配“用了另一个操作数/常量/中间槽位”的预测,强烈支持参数约定候选。
96
+ - 只修正注释或变量名不改变输出,不能证明问题已修复;必须确认数据流和生成物变化。
97
+ - 形参与实参逐位一致时,转查公式顺序、初始化常量、分支谓词或上游值。
98
+ - 只在某个 tile 后出现旧槽位值时,同时检查 buffer 生命周期和跨 tile 状态。
99
+
100
+ ## 区分实验
101
+
102
+ 使用可区分的哨兵填充每个逻辑槽位,选择能让分支输出不同结果的最小输入。一次只交换一个实参、常量或 CopyOut 槽位,并预先计算预测输出;枚举所有调用点,包括 cast 与非 cast 路径。对公式顺序,在 CPU 上逐操作复现目标 dtype 和特殊值规则,不用高精度化简式代替。
103
+
104
+ 对每轮 VF 另核对有效 lane、tail mask、寄存器是否由本轮写全,以及分支判据读取的是原始语义量还是已被 clamp、cast 或覆盖的中间值。启发式静态审计只能排序嫌疑,最终仍以数据流和区分实验为准。
105
+
106
+ ## Clamp 与分支判据的数据流分叉
107
+
108
+ 当分支几乎恒定、只有阈值附近失败,或日志显示进入分支前同一槽位已经被 clamp/cast 覆盖时,查询本节。把一个变量名拆成至少三个语义角色:原始输入 `x_raw`、用于安全或近似计算的 `x_eval`,以及分支谓词实际读取的 `x_pred`。分别记录它们的槽位、最后写者、dtype 和位模式;同名复用不能代替这张数据流表。
109
+
110
+ 默认应保留原始语义量供约定定义的谓词读取。若实现先执行 `x_eval = clamp(x_raw, ...)`,又让后续谓词读取被覆盖的 `x_eval`,clamp 可能把原本位于阈值两侧的输入压到同一点,使条件恒真或恒假。但“分支必须读原始量”仍以算法 oracle 为前提:若公开语义明确规定对 clamp 后的量分支,则 `x_pred=x_eval` 可以正确;缺少该依据时将分支输入语义标为 `UNKNOWN`,不靠数值稳定性猜约定。
111
+
112
+ 区分实验同时选择谓词两侧的 trigger/control,并先确认两个分支在这些点的预测输出确实不同;若两支因舍入、饱和或特殊值处理得到同一位模式,该输入只有 `NO_DISCRIMINATION`,即使运行通过也不能排除谓词错误。一次只改变 `x_pred` 的来源,保持 clamp、公式顺序、dtype 和 CopyOut 不变,再检查分支选择、首个分叉点和最终输出是否符合事前预测。
113
+
114
+ 反例:极大输入下两条分支都舍入到同一有限值,用该点观察到“切换前后无差异”,不能反证分支读错。另一个反例是为避免函数域错误而由算法约定明确要求先 clamp 再判断;此时强制读取 `x_raw` 反而扩大了语义。正式修复应保留两个角色或使用不易混淆的槽位,不能只改变量名;案例中的 clamp 常量和触发阈值不作为通用事实。
115
+
116
+ ## 修复与回归
117
+
118
+ 修正受影响的调用点,清理诊断哨兵,让变量名和注释明确区分槽位角色。根据改动选择相关 dtype 路径、分支边界或 tile/writeback 用例;API 调用语法与参数支持仍查询官方文档。