ops-tune-workbench-plugin 0.0.0-stage → 0.0.1-beta.2

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 (183) hide show
  1. package/NOTICE.md +14 -0
  2. package/README.md +39 -2
  3. package/cordis.patch.yml +20 -0
  4. package/lib/client.js +4253 -0
  5. package/lib/host.js +2518 -0
  6. package/package.json +53 -4
  7. package/skills/tool-ops-tune/INSTALL.md +52 -0
  8. package/skills/tool-ops-tune/README.md +167 -0
  9. package/skills/tool-ops-tune/SKILL.md +93 -0
  10. package/skills/tool-ops-tune/agent/AGENTS.md +195 -0
  11. package/skills/tool-ops-tune/agent/agents/perf-implementer.md +68 -0
  12. package/skills/tool-ops-tune/agent/agents/perf-reviewer.md +86 -0
  13. package/skills/tool-ops-tune/agent/workflows/task-prompts.md +362 -0
  14. package/skills/tool-ops-tune/agent/workflows/troubleshooting.md +43 -0
  15. package/skills/tool-ops-tune/docs/figures/opstune-architecture.png +0 -0
  16. package/skills/tool-ops-tune/docs/figures/opstune-architecture.svg +253 -0
  17. package/skills/tool-ops-tune/docs/ops-tune-design.md +404 -0
  18. package/skills/tool-ops-tune/docs//347/224/250/344/276/213/346/236/204/345/273/272.md +714 -0
  19. package/skills/tool-ops-tune/docs//347/237/245/350/257/206/345/272/223/350/247/204/350/214/203.md +103 -0
  20. package/skills/tool-ops-tune/evals/evals.json +242 -0
  21. package/skills/tool-ops-tune/ops-collect/SKILL.md +146 -0
  22. package/skills/tool-ops-tune/ops-collect/references/tool-routing.md +86 -0
  23. package/skills/tool-ops-tune/ops-collect/scripts/collect_board.sh +444 -0
  24. package/skills/tool-ops-tune/ops-collect/scripts/collect_cases.py +368 -0
  25. package/skills/tool-ops-tune/ops-collect/scripts/collect_sim.sh +134 -0
  26. package/skills/tool-ops-tune/ops-collect/scripts/csv_to_db.py +314 -0
  27. package/skills/tool-ops-tune/ops-collect/scripts/db_bench.py +545 -0
  28. package/skills/tool-ops-tune/ops-collect/scripts/facts_bridge.py +1063 -0
  29. package/skills/tool-ops-tune/ops-collect/scripts/isolation_test.py +454 -0
  30. package/skills/tool-ops-tune/ops-collect/scripts/jsonl_to_cases.py +163 -0
  31. package/skills/tool-ops-tune/ops-family/SKILL.md +76 -0
  32. package/skills/tool-ops-tune/ops-family/references/broadcast/advanced_tiling.md +92 -0
  33. package/skills/tool-ops-tune/ops-family/references/broadcast/broadcast_design.md +160 -0
  34. package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_kernel.cpp +126 -0
  35. package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_tiling.cpp +144 -0
  36. package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_tiling_common.h +401 -0
  37. package/skills/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_kernel.cpp +107 -0
  38. package/skills/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_tiling.cpp +64 -0
  39. package/skills/tool-ops-tune/ops-family/references/broadcast/datacopypad_design.md +46 -0
  40. package/skills/tool-ops-tune/ops-family/references/broadcast/guide.md +14 -0
  41. package/skills/tool-ops-tune/ops-family/references/broadcast/nddma_design.md +53 -0
  42. package/skills/tool-ops-tune/ops-family/references/broadcast/onedim_design.md +114 -0
  43. package/skills/tool-ops-tune/ops-family/references/broadcast/ub_broadcast_design.md +67 -0
  44. package/skills/tool-ops-tune/ops-family/references/common/datacopy_optimization_design.md +351 -0
  45. package/skills/tool-ops-tune/ops-family/references/common/index.md +9 -0
  46. package/skills/tool-ops-tune/ops-family/references/common/tail_block_design.md +268 -0
  47. package/skills/tool-ops-tune/ops-family/references/common/timing_harness/index.md +38 -0
  48. package/skills/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_aclrt_event.cpp +199 -0
  49. package/skills/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_torch_event.py +130 -0
  50. package/skills/tool-ops-tune/ops-family/references/common/ub_resident_design.md +342 -0
  51. package/skills/tool-ops-tune/ops-family/references/conversion/guide.md +69 -0
  52. package/skills/tool-ops-tune/ops-family/references/conversion/index.md +4 -0
  53. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_base.template +81 -0
  54. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_big_dim.template +217 -0
  55. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_one_axis.template +336 -0
  56. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_two_axis.template +781 -0
  57. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_n_last.template +340 -0
  58. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_small_shape.template +321 -0
  59. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_tensor_move.template +102 -0
  60. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd.template +480 -0
  61. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd_021axis.template +533 -0
  62. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_with_gather.template +688 -0
  63. package/skills/tool-ops-tune/ops-family/references/conversion/templates/transpose_tiling_data.template +192 -0
  64. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_big_dim.md +220 -0
  65. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_cut_one_axis.md +175 -0
  66. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_cut_two_axis.md +177 -0
  67. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_fusion_design.md +398 -0
  68. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_gather.md +191 -0
  69. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_n_last.md +276 -0
  70. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_small_shape.md +315 -0
  71. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_tensor_move.md +203 -0
  72. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md +176 -0
  73. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md +206 -0
  74. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md +179 -0
  75. package/skills/tool-ops-tune/ops-family/references/elementwise/double_buffer_design.md +288 -0
  76. package/skills/tool-ops-tune/ops-family/references/elementwise/guide.md +46 -0
  77. package/skills/tool-ops-tune/ops-family/references/elementwise/index.md +10 -0
  78. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/CMakeLists.txt +131 -0
  79. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/README.md +55 -0
  80. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/add_custom_torch.cpp +80 -0
  81. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/ops.h +23 -0
  82. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/register.cpp +30 -0
  83. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/add_custom.asc +149 -0
  84. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/data_utils.h +97 -0
  85. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_kernel.asc +136 -0
  86. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_tiling.h +31 -0
  87. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/run.sh +86 -0
  88. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/gen_data.py +70 -0
  89. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/golden.py +34 -0
  90. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/test_torch.py +99 -0
  91. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/verify_result.py +56 -0
  92. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/usage_guide.md +61 -0
  93. package/skills/tool-ops-tune/ops-family/references/elementwise/vector_efficiency_design.md +203 -0
  94. package/skills/tool-ops-tune/ops-family/references/fa/fa_mixed_kernel_design.md +174 -0
  95. package/skills/tool-ops-tune/ops-family/references/fa/fa_roofline_design.md +141 -0
  96. package/skills/tool-ops-tune/ops-family/references/fa/guide.md +87 -0
  97. package/skills/tool-ops-tune/ops-family/references/knowledge_gaps.json +56 -0
  98. package/skills/tool-ops-tune/ops-family/references/matmul/best-practices-guide.md +14 -0
  99. package/skills/tool-ops-tune/ops-family/references/matmul/fullload_design.md +344 -0
  100. package/skills/tool-ops-tune/ops-family/references/matmul/guide.md +52 -0
  101. package/skills/tool-ops-tune/ops-family/references/matmul/mte2_preload_design.md +320 -0
  102. package/skills/tool-ops-tune/ops-family/references/matmul/pingpong_design.md +254 -0
  103. package/skills/tool-ops-tune/ops-family/references/matmul/scale_coalescing_design.md +282 -0
  104. package/skills/tool-ops-tune/ops-family/references/matmul/streamk_design.md +374 -0
  105. package/skills/tool-ops-tune/ops-family/references/matmul/swat_design.md +423 -0
  106. package/skills/tool-ops-tune/ops-family/references/matmul/templates/matmul_basic_blaze.template +165 -0
  107. package/skills/tool-ops-tune/ops-family/references/matmul/templates/usage_guide.md +29 -0
  108. package/skills/tool-ops-tune/ops-family/references/mc2/best-practices-guide.md +43 -0
  109. package/skills/tool-ops-tune/ops-family/references/mc2/guide.md +42 -0
  110. package/skills/tool-ops-tune/ops-family/references/mc2/local_matmul_design.md +130 -0
  111. package/skills/tool-ops-tune/ops-family/references/mc2/pipeline_balancing_design.md +502 -0
  112. package/skills/tool-ops-tune/ops-family/references/reduce/guide.md +178 -0
  113. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template +75 -0
  114. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_full_load.template +429 -0
  115. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_recompute.template +485 -0
  116. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_small_r.template +348 -0
  117. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_full_load.template +574 -0
  118. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_online.template +324 -0
  119. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_recompute.template +436 -0
  120. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_base.template +950 -0
  121. package/skills/tool-ops-tune/ops-family/references/reduce/templates/fused_attention_online_softmax_design.md +428 -0
  122. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_full_load.md +137 -0
  123. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_recompute.md +135 -0
  124. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_small_r.md +122 -0
  125. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_full_load.md +144 -0
  126. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_online.md +185 -0
  127. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_recompute.md +163 -0
  128. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling.template +460 -0
  129. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling_data.template +278 -0
  130. package/skills/tool-ops-tune/ops-family/references/reduce/templates/state_resident_design.md +337 -0
  131. package/skills/tool-ops-tune/ops-family/references/reduce/templates/usage_guide.md +253 -0
  132. package/skills/tool-ops-tune/ops-family/references/scalar/coding_principles.md +476 -0
  133. package/skills/tool-ops-tune/ops-family/references/scalar/conv_scalar.md +163 -0
  134. package/skills/tool-ops-tune/ops-family/references/scalar/guide.md +30 -0
  135. package/skills/tool-ops-tune/ops-family/references/simt/guide.md +91 -0
  136. package/skills/tool-ops-tune/ops-family/references/simt/optimization-guide.md +110 -0
  137. package/skills/tool-ops-tune/ops-family/references/sort/guide.md +83 -0
  138. package/skills/tool-ops-tune/ops-family/references/sort/radix_sort.md +354 -0
  139. package/skills/tool-ops-tune/ops-family/scripts/family_asset_audit.py +68 -0
  140. package/skills/tool-ops-tune/ops-family/scripts/tiling_candidates.py +419 -0
  141. package/skills/tool-ops-tune/ops-mechanism/SKILL.md +23 -0
  142. package/skills/tool-ops-tune/ops-mechanism/cases/ascendc/case_groupedmatmul_pipeline.md +23 -0
  143. package/skills/tool-ops-tune/ops-mechanism/cases/ascendc/case_triton_atomic_revert.md +19 -0
  144. package/skills/tool-ops-tune/ops-mechanism/cases/mc2/case_mc2_fusion.md +19 -0
  145. package/skills/tool-ops-tune/ops-mechanism/references/optimize/api-usage.md +70 -0
  146. package/skills/tool-ops-tune/ops-mechanism/references/optimize/ascendc-regbase-vf.md +45 -0
  147. package/skills/tool-ops-tune/ops-mechanism/references/optimize/ascendc-tiling.md +51 -0
  148. package/skills/tool-ops-tune/ops-mechanism/references/optimize/data-copy.md +67 -0
  149. package/skills/tool-ops-tune/ops-mechanism/references/optimize/index.md +45 -0
  150. package/skills/tool-ops-tune/ops-mechanism/references/optimize/mc2-balancing.md +77 -0
  151. package/skills/tool-ops-tune/ops-mechanism/references/optimize/mc2.md +103 -0
  152. package/skills/tool-ops-tune/ops-mechanism/references/optimize/memory-hierarchy.md +40 -0
  153. package/skills/tool-ops-tune/ops-mechanism/references/optimize/pipeline.md +95 -0
  154. package/skills/tool-ops-tune/ops-mechanism/scripts/case_backfill.py +170 -0
  155. package/skills/tool-ops-tune/ops-mechanism/scripts/log_gap.py +145 -0
  156. package/skills/tool-ops-tune/ops-mechanism/scripts/mc2_search.py +367 -0
  157. package/skills/tool-ops-tune/ops-report/SKILL.md +77 -0
  158. package/skills/tool-ops-tune/ops-verdict/evals/run_evals.py +837 -0
  159. package/skills/tool-ops-tune/ops-verdict/evals/smoke/install-hooks.sh +65 -0
  160. package/skills/tool-ops-tune/ops-verdict/evals/smoke/run_smoke.sh +405 -0
  161. package/skills/tool-ops-tune/ops-verdict/fixtures/core_tail_a5.csv +25 -0
  162. package/skills/tool-ops-tune/ops-verdict/fixtures/few_cores_a5.csv +5 -0
  163. package/skills/tool-ops-tune/ops-verdict/fixtures/mte2_bound_a2.csv +17 -0
  164. package/skills/tool-ops-tune/ops-verdict/fixtures/multi_kernel_mix_a5.csv +7 -0
  165. package/skills/tool-ops-tune/ops-verdict/fixtures/no_bound_a5.csv +9 -0
  166. package/skills/tool-ops-tune/ops-verdict/fixtures/serial_no_overlap_a2.csv +9 -0
  167. package/skills/tool-ops-tune/ops-verdict/fixtures/vec_bound_a5.csv +9 -0
  168. package/skills/tool-ops-tune/ops-verdict/references/io-contracts.md +94 -0
  169. package/skills/tool-ops-tune/ops-verdict/references/rule-schema.md +130 -0
  170. package/skills/tool-ops-tune/ops-verdict/references/scope-schema.md +61 -0
  171. package/skills/tool-ops-tune/ops-verdict/references/soc-spec.yaml +140 -0
  172. package/skills/tool-ops-tune/ops-verdict/rules/L0-instruction.yaml +67 -0
  173. package/skills/tool-ops-tune/ops-verdict/rules/L1-single-core.yaml +316 -0
  174. package/skills/tool-ops-tune/ops-verdict/rules/L2-inter-core.yaml +173 -0
  175. package/skills/tool-ops-tune/ops-verdict/rules/L3-inter-card.yaml +156 -0
  176. package/skills/tool-ops-tune/ops-verdict/scripts/batch_pipeline.py +444 -0
  177. package/skills/tool-ops-tune/ops-verdict/scripts/calibrate.py +249 -0
  178. package/skills/tool-ops-tune/ops-verdict/scripts/delta_compare.py +244 -0
  179. package/skills/tool-ops-tune/ops-verdict/scripts/render_html.py +274 -0
  180. package/skills/tool-ops-tune/ops-verdict/scripts/snapshot.py +200 -0
  181. package/skills/tool-ops-tune/ops-verdict/scripts/trace_bubble.py +331 -0
  182. package/skills/tool-ops-tune/ops-verdict/scripts/verdict.py +1072 -0
  183. package/skills/tool-ops-tune/scripts/diff_audit.py +281 -0
@@ -0,0 +1,94 @@
1
+ # 输入/输出数据契约(cases.csv / case_candidate / calibration_data)
2
+
3
+ > 三个此前无 schema 的数据契约(检视 F21):输入侧 cases.csv 只有「shape/dtype/attrs」
4
+ > 一句话;输出侧 case_candidate.json / calibration_data.json 只在 Step 5 被点名要求
5
+ > 产出。E 级回灌与校准回路(27 年两个核心回路)的输入格式由此定型,与现有 7 个
6
+ > 数据契约同一写法(对齐 USAGE.md §5 契约表)。
7
+
8
+ ## 1. cases.csv(输入:测试用例清单)
9
+
10
+ 最小字段(带表头的一行一 case;多余列允许,逐 case 透传进报告):
11
+
12
+ | 列 | 必需 | 类型 | 说明 |
13
+ |----|------|------|------|
14
+ | `case_id` | ✅ | string | 全局唯一(报告逐 case 追溯的锚点) |
15
+ | `shape` | ✅ | string | 如 `8448x4096`(多维用 x 分隔) |
16
+ | `dtype` | ✅ | string | `fp16` / `fp32` / `bf16` / … |
17
+ | `attrs` | — | string | 算子属性(如 `axis=-1,keepdim=true`;无属性留空) |
18
+ | `ref_impl` | — | string | 标杆调用描述(P0-1 标杆双路径:非空时 collect_cases.py 该 case 跑 system 变体;如 `aclnnGelu` / `torch.nn.functional.gelu`) |
19
+
20
+ ```csv
21
+ case_id,shape,dtype,attrs
22
+ c01,8448x4096,fp16,
23
+ c02,4096x4096,fp16,
24
+ c03,1024x1024,bf16,axis=-1,keepdim=true
25
+ ```
26
+
27
+ > >20 个 case 取前 20 并告知用户截断(A1 铁律);截断必须发生在读入侧,
28
+ > 不得静默丢弃。
29
+
30
+ ## 2. case_candidate.json(输出:E 级案例回灌条目)
31
+
32
+ Step 5 产出,回灌 ops-mechanism 案例库的候选(经评审后入库):
33
+
34
+ | 字段 | 必需 | 说明 |
35
+ |------|------|------|
36
+ | `schema` | ✅ | `opstune.case-candidate/1.0` |
37
+ | `operator` | ✅ | 算子名 |
38
+ | `scene_fingerprint` | ✅ | 口径指纹(soc/shape/dtype/cann_version…,取自 scope.json) |
39
+ | `bound_rule` | ✅ | 命中的 rule_id(证据绑定) |
40
+ | `mechanism` | ✅ | 实施的机制名 |
41
+ | `speedup_measured` | ✅ | 实测加速比(comparison.md 的 KEEP 轮) |
42
+ | `speedup_est` | ✅ | 候选方案卡的预估值(校准对照) |
43
+ | `precision` | ✅ | `pass`(fail 的轮次禁止产出条目) |
44
+ | `rollback_happened` | ✅ | bool(是否有回滚;回滚原因写入 notes) |
45
+ | `notes` | — | 适用边界 / 警示(如「仅 fp16 大 shape 验证」) |
46
+ | `generated_at` | ✅ | ISO 8601 |
47
+
48
+ ```json
49
+ {
50
+ "schema": "opstune.case-candidate/1.0",
51
+ "operator": "gelu",
52
+ "scene_fingerprint": {"soc": "a5", "shape": "8448x4096", "dtype": "fp16", "cann_version": "8.3.0"},
53
+ "bound_rule": "L1_VEC_BOUND",
54
+ "mechanism": "ub-fusion",
55
+ "speedup_measured": 1.53,
56
+ "speedup_est": [1.1, 1.3],
57
+ "precision": "pass",
58
+ "rollback_happened": false,
59
+ "notes": "cast-heavy 反证命中场景;仅 fp16 大 shape 验证",
60
+ "generated_at": "2026-10-14T12:00:00"
61
+ }
62
+ ```
63
+
64
+ ## 3. calibration_data.json(输出:预估-实测校准对照)
65
+
66
+ Step 5 产出,27-2 预估-实测校准回路的输入:
67
+
68
+ | 字段 | 必需 | 说明 |
69
+ |------|------|------|
70
+ | `schema` | ✅ | `opstune.calibration/1.0` |
71
+ | `operator` | ✅ | 算子名 |
72
+ | `entries[]` | ✅ | 每轮一条:`mechanism` / `bound_rule` / `speedup_est`(区间)/ `speedup_measured` / `verdict`(KEEP/REVERT/噪声带内)/ `round` |
73
+ | `generated_at` | ✅ | ISO 8601 |
74
+
75
+ ```json
76
+ {
77
+ "schema": "opstune.calibration/1.0",
78
+ "operator": "gelu",
79
+ "entries": [
80
+ {"round": 1, "mechanism": "ub-fusion", "bound_rule": "L1_VEC_BOUND",
81
+ "speedup_est": [1.1, 1.3], "speedup_measured": 1.53, "verdict": "KEEP"},
82
+ {"round": 2, "mechanism": "mte2-preload", "bound_rule": "L1_MTE2_BOUND",
83
+ "speedup_est": [1.2, 2.0], "speedup_measured": 0.98, "verdict": "REVERT"}
84
+ ],
85
+ "generated_at": "2026-10-14T12:00:00"
86
+ }
87
+ ```
88
+
89
+ ## 纪律
90
+
91
+ - 三个契约的示例文件必须通过各自 schema 校验(jsonschema 或等价手工断言);
92
+ - `speedup_measured` 只能来自 delta_compare 的 KEEP 轮(噪声带内/REVERT/精度 fail
93
+ 的数字禁止作为「实测收益」写入 case_candidate,但 REVERT 条目照常进 calibration
94
+ ——负样本是校准的输入)。
@@ -0,0 +1,130 @@
1
+ # 规则 Schema 规范(opstune.rules/1.0)
2
+
3
+ > 规则是判定引擎的唯一知识形态。每条规则 = 触发条件(指标+阈值)+ 反证 + 置信度 + 机制路由,
4
+ > 声明式 YAML 承载,`verdict.py` 解释执行。设计对标业界领先 GPU Profiling 工具 Guided Analysis 的
5
+ > 「规则-Section 绑定契约 + REQUIRED/OPTIONAL 分级」,阈值取自真机调优实践标定。
6
+
7
+ ## 顶层字段
8
+
9
+ ```yaml
10
+ schema: opstune.rules/1.0 # 固定
11
+ layer: L1 # L3 卡间 / L2 核间 / L1 单核 / L0 指令
12
+ title: 单核流水判定
13
+ soc: [a2, a3, a5] # 适用芯片域(过滤语义:不含目标 soc 则整包跳过)
14
+ requires_experiment: # (可选)实验数据前置(如 MC² 隔离测试)
15
+ kind: isolation_test
16
+ outputs: [t_comm_us, t_compute_us, m_rows]
17
+ metrics: { ... } # 指标词汇表(见下)
18
+ rules: [ ... ] # 规则列表
19
+ ```
20
+
21
+ ## 指标词汇表(metrics)
22
+
23
+ 规则-指标绑定契约的解析层。**规则只能引用词汇表中声明过的指标**——未声明的引用在加载
24
+ 时应视为配置错误。
25
+
26
+ ```yaml
27
+ metrics:
28
+ mte2_ratio: # 指标名(规则 condition 中引用)
29
+ source: pipe # pipe | scalar | derived
30
+ columns: [aic_mte2_ratio, aiv_mte2_ratio, ai_mte2_ratio, "Mte2Utilization(%)", ...]
31
+ normalize: ratio_to_pct # 0~1.5 视为比例 ×100(双版本字段口径兼容)
32
+ group: pipe # 参与主导 pipe 排序与串行指纹求和
33
+ mte2_active_bw_pct_of_peak:
34
+ source: scalar # 由调用方 --scalar 提供
35
+ r_value:
36
+ source: derived # 引擎内置计算(如 R = T_compute/T_comm)
37
+ ```
38
+
39
+ - `source: pipe`:从 PipeUtilization.csv 逐行取候选列(按序首个可解析者),per-row 取
40
+ aic/aiv 双列最大值,跨行算 mean/max 双统计。**判定用 mean,max 仅识别长尾**(单核峰值
41
+ 不代表全 kernel —— 实测纪律)。
42
+ - `source: scalar`:调用方提供(带宽百分比、物理核数、隔离测试值……)。缺失时引用它的
43
+ 规则按 REQUIRED/OPTIONAL 语义处理。
44
+ - `source: derived`:引擎衍生(`__max_pipe_mean`、`__pipe_sum_mean`、`__tail_ratio`、
45
+ `__imbalance_pct`、`__two_cluster_gap_pct`、`r_value`、`__mte2_pollution_gap`、
46
+ `dominant_time_us`、`__occupancy_pct`、`__head_overhead_pct` 等)。
47
+
48
+ **加载校验(机制化,违规启动即 exit 3)**:`verdict.py` 加载规则包后强制校验——
49
+
50
+ | # | 校验 | 说明 |
51
+ |---|------|------|
52
+ | V1 | 引用完整性 | condition / watch / counter_evidence / severity / metrics_required 引用的指标必须在词汇表或 derived 白名单内——**未声明的引用是配置错误**(不是运行时静默 unevaluated) |
53
+ | V2 | 路由目标存在 | `routing.on_hit` 的 disable_rule 目标必须存在于规则宇宙(本次加载包 + 同目录其余规则包;disable 语义是跨包的) |
54
+ | V3 | 区间无重叠 | 同一指标的多条档位类规则(如 L3 R 值五档)区间不得重叠——同一值双命中即矛盾 |
55
+ | V4 | optional 语义 | **`metrics_optional` 仅用于反证;condition 中引用的指标必须 required**。引擎对 condition 内任何 None 一律 INSUFFICIENT_DATA(三值逻辑),不存在「可选指标缺失时跳过该叶子继续求值」的降级机制——把 optional 指标写进 condition 的规则永远无法 HIT |
56
+
57
+ ## 规则字段
58
+
59
+ ```yaml
60
+ - id: L1_MTE2_BOUND # 全局唯一(跨包路由引用,如 disable_rule)
61
+ name: MTE2 搬入瓶颈 # 人读名
62
+ priority: 10 # 升序求值(数字小先评估)
63
+ parent: L1_MEMORY_SATURATION # (预留)DAG 父节点,M2 启用权重传播
64
+ threshold_source: "[msprof-doc] >80% 直接判 / 最大且 >70%"
65
+ metrics_required: [mte2_ratio] # 绑定契约:缺失 → SKIPPED(不触发不误报)
66
+ metrics_optional: [mte2_active_bw_pct_of_peak] # 缺失 → 反证标 unevaluated;禁止进 condition(V4)
67
+ condition: # 触发条件(三值逻辑:True/False/None=证据不足)
68
+ any:
69
+ - {metric: mte2_ratio, agg: mean, op: gt, value: 80}
70
+ - all:
71
+ - {metric: mte2_ratio, agg: mean, op: gt, value: 70}
72
+ - {metric: mte2_ratio, agg: rank, op: eq, value: 1} # rank=1 即「8 pipe 中占比最大」
73
+ watch: # 未达判定线的观察档(NOT_HIT 时提示)
74
+ condition: {metric: mte2_ratio, agg: mean, op: gt, value: 50}
75
+ note: MTE2 占比 50~70%,暂非主导,已具备搬运优化价值
76
+ severity: # 分档:critical / moderate / light
77
+ metric: mte2_ratio # 按指标值分档(或 default: light)
78
+ bands: [{min: 85, level: critical, note: ...}, {min: 70, level: moderate}]
79
+ default: light
80
+ counter_evidence: # 反证条目(防误判的第二道闸)
81
+ - id: true-bandwidth-saturation
82
+ condition: {metric: mte2_active_bw_pct_of_peak, agg: value, op: gt, value: 80}
83
+ note: active_bw 已达理论 80%+:真带宽饱和,优化方向是数据量/复用而非搬运组织
84
+ action: annotate # annotate(记录)| reroute(改道机制,M2)
85
+ confidence: high # high / medium / low(规则级先验)
86
+ speedup_range: [1.2, 2.0] # 预估加速比区间(机制路由排序依据;校准闭环回写)
87
+ speedup_source: "🟡 首期标定值"
88
+ mechanism_refs: # 机制路由入口(ops-mechanism 内文档路径)
89
+ - ops-mechanism:references/optimize/data-copy.md
90
+ routing: # (可选)命中副作用
91
+ on_hit: [disable_rule, L1_MTE2_BOUND] # 禁用指定规则(跨包生效)
92
+ reroute_to: ops-mechanism:references/optimize/mc2.md
93
+ ```
94
+
95
+ ## 条件语义(三值逻辑)
96
+
97
+ | 节点 | True | False | None(证据不足) |
98
+ |------|------|-------|----------------|
99
+ | `all: [...]` | 全部 True | 任一 False | 有 None 无 False |
100
+ | `any: [...]` | 任一 True | 全部 False | 有 None 无 True |
101
+
102
+ - **None 不冒充 False**:条件无法评估时规则置 `INSUFFICIENT_DATA` 并提示补采,绝不因
103
+ 数据缺失而判「无 bound」。
104
+ - `value` 支持复合引用:`{metric: time_mean_us, factor: 1.25}`(另一指标 × 系数)。
105
+ - `op` 集合:`gt / gte / lt / lte / eq / between [lo,hi] / gt_ratio / lt_ratio`。
106
+
107
+ ## 路由副作用
108
+
109
+ `routing.on_hit` 在命中时生效(按 priority 顺序,跨规则包传播):
110
+
111
+ - `disable_rule`:禁用后续同批规则 —— 用例:`L3_MTE2_POLLUTED` 命中后禁用
112
+ `L1_MTE2_BOUND`(MTE2 ratio 被通信等待污染,单核访存优化无效,改道通信掩盖策略)。
113
+ - `reroute_to`:改写 finding 的机制路由目标(M2 启用 DAG 权重传播后扩展为 GLOBAL/LOCAL
114
+ 加速比语义,对标 NCU 父子规则)。
115
+
116
+ ## 扩展流程(贡献一条新规则)
117
+
118
+ 1. 在对应层规则包 YAML 追加规则(阈值必须带 `threshold_source`;无来源实测支撑的标 🟡)。
119
+ 2. 在 `fixtures/` 造已知答案的输入(CSV 或标量),在 `evals/run_evals.py` 加断言用例
120
+ (正例 + 至少一个反例/边界)。
121
+ 3. `python3 evals/run_evals.py` 全绿 → 合入。
122
+ 4. 知识组评审:阈值来源、soc 适用域、反证完整性(缺反证的 BOUND 类规则不允许合入)。
123
+
124
+ ## 纪律(实测教训沉淀)
125
+
126
+ - **判定只出自规则**:任何「看起来像 bound」但不在规则库中的结论,Agent 不得输出为判定,
127
+ 只能作为 `INSUFFICIENT_DATA` 下的假设并注明缺失指标。
128
+ - **阈值不可无源合入**:`threshold_source` 为空或 🟡 的规则在评审中降级为 watch 档。
129
+ - **跨芯片域**:规则包 `soc` 过滤是硬边界;A2/A3/A5 阈值差异通过分包或(M2)规则内
130
+ soc 覆写承载,禁止静默复用。
@@ -0,0 +1,61 @@
1
+ # scope.json 契约(opstune.scope/1.0)
2
+
3
+ > Phase 0「意图与边界」的输出载体,调优计划的口径真源。字段名与
4
+ > `snapshot.py` / `delta_compare.py` 的 HARD_KEYS **严格同名同义**——口径互锁
5
+ > (12 HARD + 2 机制变量)的上游真源,不同执行者生成的 scope.json 不再漂移。
6
+
7
+ ## 字段清单
8
+
9
+ | 字段 | 来源 | 说明 |
10
+ |------|------|------|
11
+ | `schema` | 固定 | `opstune.scope/1.0` |
12
+ | `operator` | Phase 0 | 算子名(人读) |
13
+ | `op` | HARD | 与 snapshot `--op` 同义(口径指纹字段) |
14
+ | `soc` | HARD | `a2` / `a3` / `a5` |
15
+ | `mode` | HARD | `board` / `sim` |
16
+ | `timing_method` | HARD | 五选一:`event` / `sim` / `msprof` / `msprof_task_duration` / `profiler_summary` |
17
+ | `baseline_kind` | HARD | `system`(对标系统算子)/ `self_before_after`(自前后对比) |
18
+ | `cann_version` | HARD | CANN 版本号 |
19
+ | `device_id` | HARD | 采集设备 ID |
20
+ | `shape` | HARD | 代表 case 的 shape |
21
+ | `dtype` | HARD | 数据类型 |
22
+ | `format` | HARD | `ND` / `NZ` / … |
23
+ | `warmup` | HARD | 冷跑剔除轮数 |
24
+ | `repeat` | HARD | 稳态采样轮数 |
25
+ | `tiling_key` | 机制变量 | 优化本身可能改变(WARN 级记录) |
26
+ | `block_dim` | 机制变量 | 同上 |
27
+ | `scene` | Phase 0 | `single` / `mc2` / `fa` / `regression` / `qa`(场景分类判据见 task-prompts Step 0) |
28
+ | `cases_csv` | 输入 | 测试用例文件路径 |
29
+ | `code_dir` | 输入 | 算子源码目录 |
30
+ | `performance_goal` | 输入 | 性能目标(可为 null) |
31
+ | `max_rounds` | 输入 | 轮数上限 |
32
+ | `precision_gate` | Phase 0 预检 | `{total, pass, fail, tolerance}`——fail≠0 禁止进入调优 |
33
+ | `generated_at` | 生成时间 | ISO 8601 |
34
+
35
+ ## 最小示例
36
+
37
+ ```json
38
+ {
39
+ "schema": "opstune.scope/1.0",
40
+ "operator": "gelu",
41
+ "op": "gelu", "soc": "a5", "mode": "board",
42
+ "timing_method": "event", "baseline_kind": "self_before_after",
43
+ "cann_version": "8.3.0", "device_id": "0",
44
+ "shape": "8448x4096", "dtype": "fp16", "format": "ND",
45
+ "warmup": 5, "repeat": 20,
46
+ "tiling_key": null, "block_dim": null,
47
+ "scene": "single",
48
+ "cases_csv": "cases/gelu_cases.csv",
49
+ "code_dir": "/path/to/gelu_project",
50
+ "performance_goal": "kernel_avg_us < 100",
51
+ "max_rounds": 1,
52
+ "precision_gate": {"total": 12, "pass": 12, "fail": 0, "tolerance": "工程现有 ut 容差"},
53
+ "generated_at": "2026-10-14T12:00:00"
54
+ }
55
+ ```
56
+
57
+ ## 纪律
58
+
59
+ - 12 HARD 字段与 `delta_compare.py` 的 `HARD_KEYS` 一一对应:任一变化必须重建基线
60
+ (跨口径比较禁令,A4 铁律)。
61
+ - `precision_gate.fail != 0` 的 scope 禁止进入 Step 1(第一道精度门禁)。
@@ -0,0 +1,140 @@
1
+ # soc-spec.yaml — SoC 峰值标尺表(REVIEW2 G3 / 整改 P0-3)
2
+ #
3
+ # 目的:「还差多远」的客观标尺。MTE2 真假 bound 二分(data-copy.md 公式需要 GM 峰值
4
+ # 带宽)与 NEAR_LIMIT 停止决策的第二证据源(距峰值 X% 读数)此前无可计算来源——本表补上。
5
+ #
6
+ # 溯源纪律(与规则包 threshold_source 同款):
7
+ # [cann-ini] 本机 CANN 安装 platform_config/*.ini 静态配置(结构参数真源;
8
+ # 采集于 CANN 9.0.0 aarch64-linux,2026-10-15)
9
+ # [npu-arch-guide] npu-arch SKILL 架构指南(算力公式推导 / 公开资料与经验值)
10
+ # [cann-bench] cann-bench 仓 t_hw 模型元数据(950DT 4.1 / 950PR 1.65 TB/s 口径)
11
+ # [tuning-practice] 一线调优实践实测
12
+ # 🟡 未实测标定(首期工程标定值)——判定引用时须在报告携带该标志
13
+ #
14
+ # 单位:gm_bw_gbps = GB/s;*_tflops = TFLOPS(FMA 计 2 FLOP);容量 KB/MB/GB 二进制口径。
15
+ # 消费方:
16
+ # verdict.py --soc-spec active_bw 占峰值换算(反证标量)+ 距峰值读数
17
+ # facts_bridge.py(ops-collect)峰值换算(mte2_active_bw_pct_of_peak 等)
18
+ # tiling_candidates.py(ops-family)核数 / UB / L1 / L0 容量约束
19
+ # 使用规则:reference 为判定默认值;调用方知道实际 SKU 时应从 skus 解析精确值
20
+ # (npu-smi 型号 → skus.sku 匹配)。本表不搬用其他工具的 910B 峰值表(训练卡口径
21
+ # 来源不同,数值仅作交叉验证:910B3 fp16 294.91 与本表公式推导一致)。
22
+ schema: opstune.soc-spec/1.0
23
+
24
+ socs:
25
+ a2:
26
+ name: Ascend910B(Atlas A2 训练/推理)
27
+ arch: DAV_2201
28
+ skus: # 调用方按实际 SKU 解析;reference 为典型口径
29
+ - {sku: Ascend910B1, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1850, cube_fp16_tflops: 363.8, l2_mb: 192, memory_gb: 64, source: "[cann-ini] Ascend910B1.ini"}
30
+ - {sku: Ascend910B2, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1800, cube_fp16_tflops: 353.9, l2_mb: 192, memory_gb: 64, source: "[cann-ini] Ascend910B2.ini"}
31
+ - {sku: Ascend910B2C, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1800, cube_fp16_tflops: 353.9, l2_mb: 192, memory_gb: null, source: "[cann-ini] Ascend910B2C.ini"}
32
+ - {sku: Ascend910B3, ai_core_cnt: 20, vector_core_cnt: 40, freq_mhz: 1800, cube_fp16_tflops: 294.9, l2_mb: 192, memory_gb: 64, source: "[cann-ini] Ascend910B3.ini(本仓开发机实测设备,npu-smi 25.5.0)"}
33
+ - {sku: Ascend910B4, ai_core_cnt: 20, vector_core_cnt: 40, freq_mhz: 1500, cube_fp16_tflops: 245.8, l2_mb: 96, memory_gb: 32, source: "[cann-ini] Ascend910B4.ini"}
34
+ buffer: # 同架构子型号一致 [cann-ini]
35
+ l1_kb: 512
36
+ l0a_kb: 64
37
+ l0b_kb: 64
38
+ l0c_kb: 128
39
+ ub_kb: 192
40
+ bt_kb: 1
41
+ sparsity_42: true # [cann-ini] sparsity=1(支持 4:2 稀疏)
42
+ reference: # 判定默认参考值(典型口径 = 910B2)
43
+ ai_core_cnt: {value: 24, source: "[cann-ini] B1/B2;B3/B4 为 20(按 skus 解析实际值)"}
44
+ vector_core_cnt: {value: 48, source: "[cann-ini] B1/B2;B3/B4 为 40"}
45
+ gm_bw_gbps:
46
+ value: 1600
47
+ source: "[npu-arch-guide] 公开资料/经验值"
48
+ verified: false
49
+ note: "🟡 未实测标定;上板标定后回写。与 [cann-bench] 的 950PR 读带宽 1.65 TB/s
50
+ 属不同芯片,未互证"
51
+ cube_peak_tflops:
52
+ fp16: {value: 353.9, source: "[npu-arch-guide] 4096×24×1800×2/1e6"}
53
+ bf16: {value: 353.9, source: "[npu-arch-guide] Cube bf16 与 fp16 同速率"}
54
+ int8: {value: 707.8, source: "[cann-ini DtypeMKN 16,32,16] = fp16 × 2"}
55
+ int4: {value: 1415.6, source: "[cann-ini DtypeMKN 16,64,16] = fp16 × 4"}
56
+ fp32: {value: null, note: "HF32 通路速率未标定 🟡"}
57
+ fp8: {value: null, note: "A2 不支持"}
58
+ vector_peak_tflops:
59
+ fp16: {value: 22, source: "[npu-arch-guide] 🟡 公开资料/经验值", verified: false}
60
+ fp32: {value: null, note: "未标定 🟡"}
61
+ head_overhead_us:
62
+ value: 21
63
+ source: "[tuning-practice] A2 满核头开销 ~20-21us 实测"
64
+ derived_formula:
65
+ cube_fp16_tflops: "4096 × ai_core_cnt × freq_mhz × 2 / 1e6"
66
+
67
+ a3:
68
+ name: Ascend910_93(Atlas A3 训练/推理)
69
+ arch: DAV_2201
70
+ note: 与 a2 同为 DAV_2201——buffer / DtypeMKN / 峰值公式与 a2 一致;差异在 SKU 裁剪。
71
+ skus:
72
+ - {sku: Ascend910_9362, ai_core_cnt: 20, vector_core_cnt: 40, freq_mhz: 1500, cube_fp16_tflops: 245.8, l2_mb: 168, memory_gb: null, source: "[cann-ini] Ascend910_9362.ini"}
73
+ - {sku: Ascend910_9372, ai_core_cnt: 20, vector_core_cnt: 40, freq_mhz: 1800, cube_fp16_tflops: 294.9, l2_mb: 192, memory_gb: null, source: "[cann-ini] Ascend910_9372.ini"}
74
+ - {sku: Ascend910_9381, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1800, cube_fp16_tflops: 353.9, l2_mb: 192, memory_gb: 64, source: "[cann-ini] Ascend910_9381.ini"}
75
+ - {sku: Ascend910_9382, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1800, cube_fp16_tflops: 353.9, l2_mb: 192, memory_gb: null, source: "[cann-ini] Ascend910_9382.ini"}
76
+ - {sku: Ascend910_9391, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1850, cube_fp16_tflops: 363.8, l2_mb: 192, memory_gb: 64, source: "[cann-ini] Ascend910_9391.ini"}
77
+ - {sku: Ascend910_9392, ai_core_cnt: 24, vector_core_cnt: 48, freq_mhz: 1850, cube_fp16_tflops: 363.8, l2_mb: 192, memory_gb: null, source: "[cann-ini] Ascend910_9392.ini"}
78
+ buffer: {l1_kb: 512, l0a_kb: 64, l0b_kb: 64, l0c_kb: 128, ub_kb: 192, bt_kb: 1}
79
+ sparsity_42: true
80
+ reference:
81
+ ai_core_cnt: {value: 24, source: "[cann-ini] 典型 SKU(93_81/82);20 核变体见 skus"}
82
+ vector_core_cnt: {value: 48, source: "[cann-ini] 同上"}
83
+ gm_bw_gbps:
84
+ value: 1600
85
+ source: "沿用 a2 参考值(同 DAV_2201)"
86
+ verified: false
87
+ note: "🟡 未单独标定——a3 与 a2 结构同源,暂共用标尺;上板标定后独立回写"
88
+ cube_peak_tflops:
89
+ fp16: {value: 353.9, source: "[npu-arch-guide] 4096×24×1800×2/1e6(典型 24 核 @1800)"}
90
+ bf16: {value: 353.9, source: "同 fp16"}
91
+ int8: {value: 707.8, source: "[cann-ini DtypeMKN] fp16 × 2"}
92
+ int4: {value: 1415.6, source: "[cann-ini DtypeMKN] fp16 × 4"}
93
+ fp32: {value: null, note: "HF32 未标定 🟡"}
94
+ fp8: {value: null, note: "A3 不支持"}
95
+ vector_peak_tflops:
96
+ fp16: {value: 22, source: "[npu-arch-guide] 🟡(同 a2 口径)", verified: false}
97
+ head_overhead_us: {value: 21, source: "[tuning-practice] 同 a2 口径(未单独标定 🟡)"}
98
+ derived_formula:
99
+ cube_fp16_tflops: "4096 × ai_core_cnt × freq_mhz × 2 / 1e6"
100
+
101
+ a5:
102
+ name: Ascend950(Atlas A5:950DT 训练 / 950PR 推理)
103
+ arch: DAV_3510
104
+ skus:
105
+ - {sku: Ascend950PR_957b, ai_core_cnt: 28, vector_core_cnt: 56, freq_mhz: 1650, cube_fp16_tflops: 378.5, l2_mb: 112, memory_gb: 112, source: "[cann-ini] Ascend950PR_957b.ini(PCIE 典型)"}
106
+ - {sku: Ascend950PR_9589, ai_core_cnt: 32, vector_core_cnt: 64, freq_mhz: 1650, cube_fp16_tflops: 432.5, l2_mb: 128, memory_gb: 128, source: "[cann-ini] Ascend950PR_9589.ini(Server 典型)"}
107
+ - {sku: Ascend950PR_9599, ai_core_cnt: 36, vector_core_cnt: 72, freq_mhz: 1800, cube_fp16_tflops: 530.8, l2_mb: 128, memory_gb: 128, source: "[cann-ini] Ascend950PR_9599.ini"}
108
+ - {sku: Ascend950DT_950x, ai_core_cnt: 8, vector_core_cnt: 16, freq_mhz: 1650, cube_fp16_tflops: 108.1, l2_mb: 32, memory_gb: 24, source: "[cann-ini] Ascend950DT_950x.ini(Decode 卡)"}
109
+ buffer: # 同架构子型号一致 [cann-ini]
110
+ l1_kb: 512
111
+ l0a_kb: 64
112
+ l0b_kb: 64
113
+ l0c_kb: 256
114
+ ub_kb: 248
115
+ bt_kb: 4
116
+ sparsity_42: false # [cann-ini] sparsity=0(不再支持 4:2)
117
+ reference: # 判定默认参考值(典型口径 = 950PR PCIE 957b)
118
+ ai_core_cnt: {value: 28, source: "[cann-ini] 957b;Server 9589 为 32 / 9599 为 36(按 skus 解析)"}
119
+ vector_core_cnt: {value: 56, source: "[cann-ini] 957b;9589 为 64 / 9599 为 72"}
120
+ gm_bw_gbps:
121
+ value: 1400
122
+ source: "[npu-arch-guide] 950PR PCIE 公开资料/经验值"
123
+ verified: false
124
+ note: "🟡 未实测标定。[cann-bench] t_hw 模型采用 1.65 TB/s(读带宽口径)、950DT
125
+ 4.1 TB/s——两源未对齐,本表取保守值 1400;上板标定后回写。
126
+ 勘误:L2 规则包旧注释「A5 约 48 AIV/28 AIC」与 ini 不符
127
+ (957b 实为 56 AIV / 28 AIC),以本表为准"
128
+ cube_peak_tflops:
129
+ fp16: {value: 378.5, source: "[npu-arch-guide] 4096×28×1650×2/1e6"}
130
+ bf16: {value: 378.5, source: "同 fp16"}
131
+ int8: {value: 757.0, source: "[cann-ini DtypeMKN 16,32,16] = fp16 × 2"}
132
+ fp8: {value: 757.0, source: "[cann-ini DtypeMKN DT_FLOAT8_E4M3FN 16,32,16] = fp16 × 2"}
133
+ mxfp4: {value: 1514.0, source: "[npu-arch-guide] Server 口径比例(= fp16 × 4)🟡"}
134
+ fp32: {value: null, note: "HF32 通路未标定 🟡"}
135
+ vector_peak_tflops:
136
+ fp16: {value: 47, source: "[npu-arch-guide] 950PR PCIE 🟡 公开资料/经验值(基准 23.7T × 双发 2)", verified: false}
137
+ fp32: {value: null, note: "未标定 🟡"}
138
+ head_overhead_us: {value: null, note: "A5 头开销参考值未实测标定 🟡(待首个真实调优沉淀)"}
139
+ derived_formula:
140
+ cube_fp16_tflops: "4096 × ai_core_cnt × freq_mhz × 2 / 1e6"
@@ -0,0 +1,67 @@
1
+ # L0 指令/源码层判定规则包:PC 采样 stall 枚举(A5 PcSampling / 仿真)
2
+ #
3
+ # 阈值来源:
4
+ # [tuning-practice] 无 Roofline 产物时不得推断 Roofline Bound
5
+ # [msprof-doc] icache_miss_rate >15% 需关注(msprof 官方文档口径)
6
+ # M2 阶段扩展:SIMT/VF 档(divergence_stack_spill / register_bank_conflict / warp_level_sync)
7
+ schema: opstune.rules/1.0
8
+ layer: L0
9
+ title: 指令级判定(PC 采样 / 仿真)
10
+ soc: [a2, a3, a5]
11
+
12
+ metrics:
13
+ icache_miss_rate:
14
+ source: scalar
15
+ description: ICache 缺失率(PipeUtilization ai*_icache_miss_rate)
16
+ top_stall_pct:
17
+ source: scalar
18
+ description: PC 采样 top stall 枚举占比
19
+ l2_hit_rate:
20
+ source: scalar
21
+ description: L2Cache.csv ai*_total_hit_rate(%)
22
+
23
+ rules:
24
+ - id: L0_ICACHE_MISS
25
+ name: ICache 缺失率高
26
+ priority: 10
27
+ threshold_source: "[msprof-doc] >15% 需关注"
28
+ metrics_required: [icache_miss_rate]
29
+ metrics_optional: []
30
+ condition: {metric: icache_miss_rate, agg: value, op: gt, value: 15}
31
+ severity: {default: moderate}
32
+ confidence: medium
33
+ speedup_range: [1.0, 1.1]
34
+ speedup_source: 🟡 首期标定值
35
+ mechanism_refs:
36
+ - ops-mechanism:references/optimize/api-usage.md
37
+
38
+ - id: L0_L2_LOW_HIT
39
+ name: L2 命中率低
40
+ priority: 20
41
+ threshold_source: "[tuning-practice] ai*_total_hit_rate <50%"
42
+ metrics_required: [l2_hit_rate]
43
+ metrics_optional: []
44
+ condition:
45
+ all:
46
+ - {metric: l2_hit_rate, agg: value, op: gte, value: 0}
47
+ - {metric: l2_hit_rate, agg: value, op: lt, value: 50}
48
+ severity: {default: moderate}
49
+ confidence: medium
50
+ speedup_range: [1.1, 1.4]
51
+ speedup_source: "[tuning-practice] L2 CacheMode 方法,🟡 待校准"
52
+ mechanism_refs:
53
+ - ops-mechanism:references/optimize/memory-hierarchy.md
54
+
55
+ - id: L0_STALL_DOMINANT
56
+ name: stall 主因枚举(占位,M2 启用)
57
+ priority: 30
58
+ threshold_source: 🟡 PcSampling 字段口径 M1 末期标定
59
+ metrics_required: [top_stall_pct]
60
+ metrics_optional: []
61
+ condition: {metric: top_stall_pct, agg: value, op: gt, value: 40}
62
+ severity: {default: moderate}
63
+ confidence: low
64
+ speedup_range: [1.0, 1.2]
65
+ speedup_source: 🟡 待标定
66
+ mechanism_refs:
67
+ - ops-mechanism:references/optimize/pipeline.md