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,574 @@
1
+ /**
2
+ * Copyright (c) 2025 Huawei Technologies Co., Ltd.
3
+ * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4
+ * CANN Open Software License Agreement Version 2.0 (the "License").
5
+ * Please refer to the License for details. You may not use this file except in compliance with the License.
6
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7
+ * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8
+ * See LICENSE in the root of the software repository for the full text of the License.
9
+ */
10
+
11
+ /* !
12
+ * \file softmax_v2_ara_full_load.h
13
+ * \brief
14
+ */
15
+
16
+ #ifndef SOFTMAX_V2_ARA_FULL_LOAD_H
17
+ #define SOFTMAX_V2_ARA_FULL_LOAD_H
18
+
19
+ #include "kernel_tiling/kernel_tiling.h"
20
+
21
+ #include "kernel_operator.h"
22
+ #include "softmax_v2_base.h"
23
+
24
+ #ifndef INFINITY
25
+ #define INFINITY (__builtin_inff())
26
+ #endif
27
+
28
+ namespace SoftmaxV2Ops
29
+ {
30
+ using namespace AscendC;
31
+ using namespace AscendC::MicroAPI;
32
+
33
+ using AscendC::MicroAPI::LoadDist;
34
+ using AscendC::MicroAPI::MaskMergeMode;
35
+ using AscendC::MicroAPI::MaskReg;
36
+ using AscendC::MicroAPI::RegTensor;
37
+ using AscendC::MicroAPI::StoreDist;
38
+
39
+ constexpr int64_t SCALE_COEF_TWO = 2;
40
+ constexpr int64_t SCALE_COEF_FOUR = 4;
41
+ constexpr int64_t SCALE_COEF_EIGHT = 8;
42
+
43
+ constexpr int64_t BIN_ADD_THRES = 8;
44
+ constexpr int64_t BIN_ADD_PADDING = 1;
45
+
46
+ constexpr uint16_t ROW_ZERO = 0;
47
+ constexpr uint16_t ROW_ONE = 1;
48
+ constexpr uint16_t ROW_TWO = 2;
49
+ constexpr uint16_t ROW_THREE = 3;
50
+ constexpr uint16_t ROW_FOUR = 4;
51
+ constexpr uint16_t ROW_FIVE = 5;
52
+ constexpr uint16_t ROW_SIX = 6;
53
+ constexpr uint16_t ROW_SEVEN = 7;
54
+
55
+ constexpr uint32_t ROW_TWO_OFFSET = 2;
56
+ constexpr uint32_t ROW_THREE_OFFSET = 3;
57
+ constexpr uint32_t ROW_FOUR_OFFSET = 4;
58
+ constexpr uint32_t ROW_FIVE_OFFSET = 5;
59
+ constexpr uint32_t ROW_SIX_OFFSET = 6;
60
+ constexpr uint32_t ROW_SEVEN_OFFSET = 7;
61
+
62
+ template <typename T1, typename T2>
63
+ class SoftmaxV2ARA
64
+ {
65
+ static constexpr int32_t BUFFER_NUM = 2;
66
+ static constexpr int32_t BUFFER_DEPTH = 1;
67
+
68
+ static constexpr uint16_t VECTOR_LENGTH = GetVRegSize();
69
+ static constexpr uint32_t VL_FP32 = VECTOR_LENGTH / sizeof(float);
70
+ static constexpr int64_t BLOCK_SIZE = GetUbBlockSize();
71
+
72
+ public:
73
+ __aicore__ inline SoftmaxV2ARA(){};
74
+
75
+ __aicore__ inline SoftmaxV2ARA(const SoftmaxV2ARATilingData* tilingDataIn)
76
+ {
77
+ tilingData_ = tilingDataIn;
78
+ }
79
+
80
+ __aicore__ inline void Init(GM_ADDR x, GM_ADDR y, TPipe* pipeIn)
81
+ {
82
+ pipe_ = pipeIn;
83
+
84
+ xGm_.SetGlobalBuffer((__gm__ T1*)x);
85
+ yGm_.SetGlobalBuffer((__gm__ T2*)y);
86
+
87
+ int64_t xShapeLen = tilingData_->tileA0Len * tilingData_->totalRLen;
88
+ pipe_->InitBuffer(xQueue_, BUFFER_NUM, xShapeLen * sizeof(T1));
89
+ pipe_->InitBuffer(yQueue_, BUFFER_NUM, xShapeLen * sizeof(float));
90
+
91
+ pipe_->InitBuffer(xTmpBuf_,
92
+ tilingData_->tileA0Len * (tilingData_->totalRLen + BIN_ADD_PADDING) * sizeof(float));
93
+ pipe_->InitBuffer(xReduceBuf_, tilingData_->tileA0Len * sizeof(float));
94
+ }
95
+
96
+ __aicore__ inline void Process()
97
+ {
98
+ int64_t blockIdx = GetBlockIdx();
99
+ int64_t beginIdx = blockIdx * tilingData_->tilesPerCore;
100
+ int64_t endIdx = beginIdx + tilingData_->tilesPerCore;
101
+ endIdx = endIdx > tilingData_->totalTiles ? tilingData_->totalTiles : endIdx;
102
+
103
+ for (int64_t curIdx = beginIdx; curIdx < endIdx; curIdx++) {
104
+ int64_t curA0Idx = curIdx % tilingData_->a0Outer;
105
+ int64_t curA1Idx = curIdx / tilingData_->a0Outer;
106
+
107
+ uint32_t curTileA0Len =
108
+ curA0Idx == (tilingData_->a0Outer - 1) ? tilingData_->tileA0Tail : tilingData_->tileA0Len;
109
+
110
+ int64_t xOffset =
111
+ // a1 offset
112
+ curA1Idx * tilingData_->totalRLen * tilingData_->totalA0Len +
113
+ // a0 offset
114
+ curA0Idx * tilingData_->tileA0Len;
115
+
116
+ CopyInX(xOffset, tilingData_->totalRLen, curTileA0Len);
117
+ Compute(tilingData_->totalRLen, curTileA0Len);
118
+ CopyOutY(xOffset, tilingData_->totalRLen, curTileA0Len);
119
+ }
120
+ }
121
+
122
+ private:
123
+ __aicore__ inline void CopyInX(int64_t xGmOffset, int64_t curTileRLen, uint32_t curTileA0Len)
124
+ {
125
+ LocalTensor<T1> xLocal = xQueue_.AllocTensor<T1>();
126
+ DataCopyPadExtParams<T1> dataCopyPadExtParams;
127
+ dataCopyPadExtParams.isPad = false;
128
+ dataCopyPadExtParams.leftPadding = 0;
129
+ dataCopyPadExtParams.rightPadding = 0;
130
+ dataCopyPadExtParams.paddingValue = 0;
131
+ DataCopyExtParams copyInParams;
132
+ copyInParams.blockCount = curTileRLen;
133
+ copyInParams.blockLen = curTileA0Len * sizeof(T1);
134
+ copyInParams.srcStride = (tilingData_->totalA0Len - curTileA0Len) * sizeof(T1);
135
+ copyInParams.dstStride = (tilingData_->tileA0Len - curTileA0Len) * sizeof(T1) / BLOCK_SIZE;
136
+ DataCopyPad<T1, PaddingMode::Normal>(xLocal, xGm_[xGmOffset], copyInParams, dataCopyPadExtParams);
137
+ xQueue_.EnQue(xLocal);
138
+ }
139
+
140
+ __aicore__ inline void Compute(int64_t curTileRLen, uint32_t curTileA0Len)
141
+ {
142
+ LocalTensor<T1> x = xQueue_.DeQue<T1>();
143
+ __local_mem__ T1* xLocal = (__local_mem__ T1*)x.GetPhyAddr();
144
+
145
+ LocalTensor<float> xTmpTensor = xTmpBuf_.Get<float>();
146
+ __local_mem__ float* xTmpLocal = (__local_mem__ float*)xTmpTensor.GetPhyAddr();
147
+
148
+ uint16_t loopA0Num = ops::CeilDiv(curTileA0Len, VL_FP32);
149
+
150
+ VFShiftVector(xTmpLocal, xLocal, curTileRLen, curTileA0Len, loopA0Num);
151
+ xQueue_.FreeTensor<T1>(x);
152
+
153
+ LocalTensor<float> y = yQueue_.AllocTensor<float>();
154
+ __local_mem__ float* yLocal = (__local_mem__ float*)y.GetPhyAddr();
155
+
156
+ LocalTensor<float> xReduceTensor = xReduceBuf_.Get<float>();
157
+ __local_mem__ float* xReduceLocal = (__local_mem__ float*)xReduceTensor.GetPhyAddr();
158
+
159
+ VFReduceSum(xReduceLocal, xTmpLocal, yLocal, curTileRLen, curTileA0Len);
160
+
161
+ VFCalculateOutput(yLocal, xTmpLocal, xReduceLocal, curTileRLen, curTileA0Len, loopA0Num);
162
+
163
+ yQueue_.EnQue(y);
164
+ }
165
+
166
+ __aicore__ inline void VFShiftVector(__local_mem__ float* xTmpLocal, __local_mem__ T1* xLocal, uint16_t curTileRLen,
167
+ uint16_t curTileA0Len, uint16_t loopA0Num)
168
+ {
169
+ uint32_t tileA0Len = tilingData_->tileA0Len;
170
+ __VEC_SCOPE__
171
+ {
172
+ RegTensor<float> x;
173
+ RegTensor<float> maxReg;
174
+
175
+ MaskReg pregMask;
176
+ uint32_t sreg = curTileA0Len;
177
+
178
+ for (uint16_t k = 0; k < loopA0Num; k++) {
179
+ pregMask = UpdateMask<float>(sreg);
180
+ // get max
181
+ Duplicate(maxReg, static_cast<float>(-INFINITY), pregMask);
182
+ for (uint16_t i = 0; i < curTileRLen; i++) {
183
+ uint32_t xOffset = i * tileA0Len + k * VL_FP32;
184
+ // load x
185
+ LoadTensorForDtypeT1(xLocal, x, pregMask, xOffset);
186
+ Max(maxReg, maxReg, x, pregMask);
187
+ }
188
+ // shift vector
189
+ for (uint16_t i = 0; i < curTileRLen; i++) {
190
+ uint32_t xOffset1 = i * tileA0Len + k * VL_FP32;
191
+ LoadTensorForDtypeT1(xLocal, x, pregMask, xOffset1);
192
+ Sub(x, x, maxReg, pregMask);
193
+ Exp(x, x, pregMask);
194
+ DataCopy(((__local_mem__ float*)xTmpLocal) + xOffset1, x, pregMask);
195
+ }
196
+ }
197
+ }
198
+ }
199
+
200
+ __aicore__ inline void VFReduceSum(__local_mem__ float* xReduceLocal, __local_mem__ float* xTmpLocal,
201
+ __local_mem__ float* yInUb, uint16_t curTileRLen, uint16_t curTileA0Len)
202
+ {
203
+ if (tilingData_->totalRLen <= SCALE_COEF_TWO) {
204
+ SumRLessThan2(xTmpLocal, xReduceLocal, curTileA0Len);
205
+ } else if (tilingData_->totalRLen <= SCALE_COEF_FOUR) {
206
+ SumRLessThan4(xTmpLocal, xReduceLocal, curTileA0Len);
207
+ } else if (tilingData_->totalRLen <= SCALE_COEF_EIGHT) {
208
+ SumRLessThan8(xTmpLocal, xReduceLocal, curTileA0Len);
209
+ } else {
210
+ SumRMoreThan8(xTmpLocal, yInUb, xReduceLocal, curTileA0Len);
211
+ }
212
+ }
213
+
214
+ __aicore__ inline void SumRLessThan2(__local_mem__ float* xTmpLocal, __local_mem__ float* xReduceLocal,
215
+ uint32_t curTileA0Len)
216
+ {
217
+ uint32_t rStride = tilingData_->tileA0Len;
218
+ uint16_t rLoopCount = tilingData_->totalRLen;
219
+
220
+ uint16_t aLoopCount = ops::CeilDiv(curTileA0Len, VL_FP32);
221
+
222
+ __VEC_SCOPE__
223
+ {
224
+ RegTensor<float> xld;
225
+ RegTensor<float> sum;
226
+ MaskReg pregLoop;
227
+ uint32_t sreg0 = curTileA0Len;
228
+ for (uint16_t k = 0; k < aLoopCount; k++) {
229
+ pregLoop = UpdateMask<float>(sreg0);
230
+ Duplicate(sum, 0.0, pregLoop);
231
+ for (uint16_t i = 0; i < rLoopCount; i++) {
232
+ DataCopy(xld, ((__local_mem__ float*)xTmpLocal + i * rStride + k * VL_FP32));
233
+ Add(sum, sum, xld, pregLoop);
234
+ }
235
+ DataCopy(((__local_mem__ float*)xReduceLocal + k * VL_FP32), sum, pregLoop);
236
+ }
237
+ }
238
+ }
239
+
240
+ __aicore__ inline void SumRLessThan4(__local_mem__ float* xTmpLocal, __local_mem__ float* xReduceLocal,
241
+ uint32_t curTileA0Len)
242
+ {
243
+ uint32_t remainderOffset = SCALE_COEF_TWO * tilingData_->tileA0Len;
244
+ uint32_t aLength = tilingData_->tileA0Len;
245
+ uint32_t validNumInXUb = tilingData_->totalRLen * tilingData_->tileA0Len;
246
+
247
+ uint16_t remainderTailCount = tilingData_->totalRLen - SCALE_COEF_TWO;
248
+ uint32_t remainderTailOffset0 = (ROW_ZERO > remainderTailCount) ? validNumInXUb : remainderOffset;
249
+ uint32_t remainderTailOffset1 = (ROW_ONE > remainderTailCount) ? validNumInXUb : remainderOffset + aLength;
250
+
251
+ uint16_t aLoopCount = ops::CeilDiv(curTileA0Len, VL_FP32);
252
+ __VEC_SCOPE__
253
+ {
254
+ RegTensor<float> x1;
255
+ RegTensor<float> nextRow;
256
+ RegTensor<float> rem;
257
+ RegTensor<float> remNextRow;
258
+
259
+ MaskReg pregMain = CreateMask<float, MaskPattern::ALL>();
260
+ RegTensor<float> zero;
261
+ Duplicate(zero, 0.0, pregMain);
262
+
263
+ MaskReg pregLoop;
264
+ uint32_t sreg0 = curTileA0Len;
265
+ for (uint16_t k = 0; k < aLoopCount; k++) {
266
+ pregLoop = UpdateMask<float>(sreg0);
267
+ uint32_t aLoopOffset = k * VL_FP32;
268
+ DataCopy(((__local_mem__ float*)xTmpLocal + validNumInXUb + aLoopOffset), zero, pregLoop);
269
+ LocalMemBar<MemType::VEC_STORE, MemType::VEC_LOAD>();
270
+ TwoRowAddWithTail(x1, xTmpLocal, pregLoop, aLoopOffset, remainderTailOffset0 + aLoopOffset,
271
+ aLength + aLoopOffset, remainderTailOffset1 + aLoopOffset, rem, nextRow, remNextRow);
272
+ DataCopy(((__local_mem__ float*)xReduceLocal + aLoopOffset), x1, pregLoop);
273
+ }
274
+ }
275
+ }
276
+
277
+ __aicore__ inline void TwoRowAddWithTail(RegTensor<float>& dst, __local_mem__ float* input, MaskReg& preg,
278
+ uint32_t offset1, uint32_t offset2, uint32_t offset3, uint32_t offset4,
279
+ RegTensor<float>& rem, RegTensor<float>& nextRow,
280
+ RegTensor<float>& remNextRow)
281
+ {
282
+ DataCopy(dst, ((__local_mem__ float*)(input) + (offset1)));
283
+ DataCopy(rem, ((__local_mem__ float*)(input) + (offset2)));
284
+ Add(dst, dst, rem, preg);
285
+ DataCopy(nextRow, ((__local_mem__ float*)(input) + (offset3)));
286
+ DataCopy(remNextRow, ((__local_mem__ float*)(input) + (offset4)));
287
+ Add(nextRow, nextRow, remNextRow, preg);
288
+ Add(dst, dst, nextRow, preg);
289
+ }
290
+
291
+ __aicore__ inline void SumRLessThan8(__local_mem__ float* xTmpLocal, __local_mem__ float* xReduceLocal,
292
+ uint32_t curTileA0Len)
293
+ {
294
+ uint32_t remainderOffset = SCALE_COEF_FOUR * tilingData_->tileA0Len;
295
+ uint32_t aLength = tilingData_->tileA0Len;
296
+ uint32_t validNumInXUb = tilingData_->totalRLen * tilingData_->tileA0Len;
297
+
298
+ uint16_t remainderTailCount = tilingData_->totalRLen - SCALE_COEF_FOUR;
299
+ uint32_t remainderTailOffset0 = (ROW_ZERO > remainderTailCount) ? validNumInXUb : remainderOffset;
300
+ uint32_t remainderTailOffset1 = (ROW_ONE > remainderTailCount) ? validNumInXUb : remainderOffset + aLength;
301
+ uint32_t remainderTailOffset2 =
302
+ (ROW_TWO > remainderTailCount) ? validNumInXUb : remainderOffset + ROW_TWO_OFFSET * aLength;
303
+ uint32_t remainderTailOffset3 =
304
+ (ROW_THREE > remainderTailCount) ? validNumInXUb : remainderOffset + ROW_THREE_OFFSET * aLength;
305
+
306
+ uint16_t aLoopCount = ops::CeilDiv(curTileA0Len, VL_FP32);
307
+ __VEC_SCOPE__
308
+ {
309
+ RegTensor<float> x1;
310
+ RegTensor<float> x2;
311
+ RegTensor<float> nextRow;
312
+ RegTensor<float> rem;
313
+ RegTensor<float> remNextRow;
314
+
315
+ MaskReg pregMain = CreateMask<float, MaskPattern::ALL>();
316
+ RegTensor<float> zero;
317
+ Duplicate(zero, 0.0, pregMain);
318
+
319
+ MaskReg pregLoop;
320
+ uint32_t sreg0 = curTileA0Len;
321
+ for (uint16_t k = 0; k < aLoopCount; k++) {
322
+ pregLoop = UpdateMask<float>(sreg0);
323
+ uint32_t aLoopOffset = k * VL_FP32;
324
+ DataCopy(((__local_mem__ float*)xTmpLocal + validNumInXUb + aLoopOffset), zero, pregLoop);
325
+ LocalMemBar<MemType::VEC_STORE, MemType::VEC_LOAD>();
326
+ TwoRowAddWithTail(x1, xTmpLocal, pregLoop, aLoopOffset, remainderTailOffset0 + aLoopOffset,
327
+ aLength + aLoopOffset, remainderTailOffset1 + aLoopOffset, rem, nextRow, remNextRow);
328
+ TwoRowAddWithTail(x2, xTmpLocal, pregLoop, ROW_TWO_OFFSET * aLength + aLoopOffset,
329
+ remainderTailOffset2 + aLoopOffset, ROW_THREE_OFFSET * aLength + aLoopOffset,
330
+ remainderTailOffset3 + aLoopOffset, rem, nextRow, remNextRow);
331
+ Add(x1, x1, x2, pregLoop);
332
+ DataCopy(((__local_mem__ float*)xReduceLocal + aLoopOffset), x1, pregLoop);
333
+ }
334
+ }
335
+ }
336
+
337
+ __aicore__ inline void SumRMoreThan8(__local_mem__ float* xInUb, __local_mem__ float* yInUb,
338
+ __local_mem__ float* xReduceLocal, uint32_t curTileA0Len)
339
+ {
340
+ uint16_t remainderLoopCount = tilingData_->remainderLoopCount;
341
+ uint16_t remainderLoopCountTmp = remainderLoopCount - 1;
342
+ uint16_t quotientLoopCount = tilingData_->quotientLoopCount;
343
+
344
+ uint32_t remainderOffset = tilingData_->remainderOffset;
345
+ uint32_t baseLineOffset = tilingData_->baseLineOffset;
346
+ uint32_t aLength = tilingData_->tileA0Len;
347
+
348
+ uint16_t binaryAddKLoop = tilingData_->binaryAddK;
349
+ uint16_t binaryAddInnerLoop = tilingData_->binaryAddInnerLoop;
350
+ uint16_t binaryAddLastLoop = tilingData_->binaryAddLast;
351
+
352
+ uint32_t validNumInXUb = tilingData_->validNumInXUb;
353
+
354
+ uint16_t remainderTailCount = tilingData_->remainderTailCount;
355
+ uint32_t quotientTailOffset = tilingData_->quotientTailOffset;
356
+ uint32_t remainderTailOffset = tilingData_->remainderTailOffset;
357
+ uint32_t remainderTailOffset0 = tilingData_->remainderTailOffset0;
358
+ uint32_t remainderTailOffset1 = tilingData_->remainderTailOffset1;
359
+ uint32_t remainderTailOffset2 = tilingData_->remainderTailOffset2;
360
+ uint32_t remainderTailOffset3 = tilingData_->remainderTailOffset3;
361
+ uint32_t remainderTailOffset4 = tilingData_->remainderTailOffset4;
362
+ uint32_t remainderTailOffset5 = tilingData_->remainderTailOffset5;
363
+ uint32_t remainderTailOffset6 = tilingData_->remainderTailOffset6;
364
+ uint32_t remainderTailOffset7 = tilingData_->remainderTailOffset7;
365
+
366
+ uint16_t aLoopCount = ops::CeilDiv(curTileA0Len, VL_FP32);
367
+ __VEC_SCOPE__
368
+ {
369
+ RegTensor<float> x1;
370
+ RegTensor<float> x2;
371
+ RegTensor<float> x3;
372
+ RegTensor<float> x4;
373
+
374
+ RegTensor<float> nextRow;
375
+ RegTensor<float> rem;
376
+ RegTensor<float> remNextRow;
377
+
378
+ MaskReg pregMain = CreateMask<float, MaskPattern::ALL>();
379
+ RegTensor<float> zero;
380
+ Duplicate(zero, 0.0, pregMain);
381
+
382
+ MaskReg pregLoop;
383
+ uint32_t sreg0 = curTileA0Len;
384
+ for (uint16_t k = 0; k < aLoopCount; k++) {
385
+ pregLoop = UpdateMask<float>(sreg0);
386
+ uint32_t aLoopOffset = k * VL_FP32;
387
+ DataCopy(((__local_mem__ float*)xInUb + validNumInXUb + aLoopOffset), zero, pregLoop);
388
+ LocalMemBar<MemType::VEC_STORE, MemType::VEC_LOAD>();
389
+ // 前半部分与后半部分中,都为8行的部分
390
+ for (uint16_t i = 0; i < remainderLoopCountTmp; i++) {
391
+ uint32_t quotOffset = i * baseLineOffset + aLoopOffset;
392
+ uint32_t remOffset = i * baseLineOffset + remainderOffset + aLoopOffset;
393
+ TwoRowAddWithTail(x1, xInUb, pregLoop, quotOffset, remOffset, quotOffset + aLength,
394
+ remOffset + aLength, rem, nextRow, remNextRow);
395
+ TwoRowAddWithTail(x2, xInUb, pregLoop, quotOffset + ROW_TWO_OFFSET * aLength,
396
+ remOffset + ROW_TWO_OFFSET * aLength, quotOffset + ROW_THREE_OFFSET * aLength,
397
+ remOffset + ROW_THREE_OFFSET * aLength, rem, nextRow, remNextRow);
398
+ Add(x1, x1, x2, pregLoop);
399
+ TwoRowAddWithTail(x3, xInUb, pregLoop, quotOffset + ROW_FOUR_OFFSET * aLength,
400
+ remOffset + ROW_FOUR_OFFSET * aLength, quotOffset + ROW_FIVE_OFFSET * aLength,
401
+ remOffset + ROW_FIVE_OFFSET * aLength, rem, nextRow, remNextRow);
402
+ TwoRowAddWithTail(x4, xInUb, pregLoop, quotOffset + ROW_SIX_OFFSET * aLength,
403
+ remOffset + ROW_SIX_OFFSET * aLength, quotOffset + ROW_SEVEN_OFFSET * aLength,
404
+ remOffset + ROW_SEVEN_OFFSET * aLength, rem, nextRow, remNextRow);
405
+ Add(x3, x3, x4, pregLoop);
406
+ Add(x1, x1, x3, pregLoop);
407
+ DataCopy(((__local_mem__ float*)yInUb + i * aLength + aLoopOffset), x1, pregLoop);
408
+ }
409
+ // 前半部分为8行,后半部分可能不足8行
410
+ {
411
+ TwoRowAddWithTail(x1, xInUb, pregLoop, quotientTailOffset + aLoopOffset,
412
+ remainderTailOffset0 + aLoopOffset, quotientTailOffset + aLength + aLoopOffset,
413
+ remainderTailOffset1 + aLoopOffset, rem, nextRow, remNextRow);
414
+ TwoRowAddWithTail(x2, xInUb, pregLoop, quotientTailOffset + ROW_TWO_OFFSET * aLength + aLoopOffset,
415
+ remainderTailOffset2 + aLoopOffset,
416
+ quotientTailOffset + ROW_THREE_OFFSET * aLength + aLoopOffset,
417
+ remainderTailOffset3 + aLoopOffset, rem, nextRow, remNextRow);
418
+ Add(x1, x1, x2, pregLoop);
419
+ TwoRowAddWithTail(x3, xInUb, pregLoop, quotientTailOffset + ROW_FOUR_OFFSET * aLength + aLoopOffset,
420
+ remainderTailOffset4 + aLoopOffset,
421
+ quotientTailOffset + ROW_FIVE_OFFSET * aLength + aLoopOffset,
422
+ remainderTailOffset5 + aLoopOffset, rem, nextRow, remNextRow);
423
+ TwoRowAddWithTail(x4, xInUb, pregLoop, quotientTailOffset + ROW_SIX_OFFSET * aLength + aLoopOffset,
424
+ remainderTailOffset6 + aLoopOffset,
425
+ quotientTailOffset + ROW_SEVEN_OFFSET * aLength + aLoopOffset,
426
+ remainderTailOffset7 + aLoopOffset, rem, nextRow, remNextRow);
427
+ Add(x3, x3, x4, pregLoop);
428
+ Add(x1, x1, x3, pregLoop);
429
+ DataCopy(((__local_mem__ float*)yInUb + (remainderLoopCount - 1) * aLength + aLoopOffset), x1,
430
+ pregLoop);
431
+ }
432
+ // 剩余的前半部分,一次for循环,处理8行
433
+ for (uint16_t i = 0; i < quotientLoopCount; i++) {
434
+ uint32_t baseOffset = (remainderLoopCount + i) * baseLineOffset + aLoopOffset;
435
+ TwoRowAdd(x1, xInUb, pregLoop, baseOffset, baseOffset + aLength, nextRow);
436
+ TwoRowAdd(x2, xInUb, pregLoop, baseOffset + ROW_TWO_OFFSET * aLength,
437
+ baseOffset + ROW_THREE_OFFSET * aLength, nextRow);
438
+ Add(x1, x1, x2, pregLoop);
439
+ TwoRowAdd(x3, xInUb, pregLoop, baseOffset + ROW_FOUR_OFFSET * aLength,
440
+ baseOffset + ROW_FIVE_OFFSET * aLength, nextRow);
441
+ TwoRowAdd(x4, xInUb, pregLoop, baseOffset + ROW_SIX_OFFSET * aLength,
442
+ baseOffset + ROW_SEVEN_OFFSET * aLength, nextRow);
443
+ Add(x3, x3, x4, pregLoop);
444
+ Add(x1, x1, x3, pregLoop);
445
+ DataCopy(((__local_mem__ float*)yInUb + (remainderLoopCount + i) * aLength + aLoopOffset), x1,
446
+ pregLoop);
447
+ }
448
+ LocalMemBar<MemType::VEC_STORE, MemType::VEC_LOAD>();
449
+ BinaryAddVF((__local_mem__ float*)yInUb, aLength, aLoopOffset, binaryAddKLoop, binaryAddInnerLoop,
450
+ binaryAddLastLoop, pregLoop, x1, x2, x3, x4);
451
+ DataCopy(x1, ((__local_mem__ float*)yInUb + aLoopOffset));
452
+ DataCopy(((__local_mem__ float*)xReduceLocal + aLoopOffset), x1, pregLoop);
453
+ }
454
+ }
455
+ }
456
+
457
+ __aicore__ inline void TwoRowAdd(RegTensor<float>& dst, __local_mem__ float* input, MaskReg& preg, uint32_t offset1,
458
+ uint32_t offset2, RegTensor<float>& nextRow)
459
+ {
460
+ DataCopy(dst, ((__local_mem__ float*)(input) + (offset1)));
461
+ DataCopy(nextRow, ((__local_mem__ float*)(input) + (offset2)));
462
+ Add(dst, dst, nextRow, preg);
463
+ }
464
+
465
+ __aicore__ inline void BinaryAddVF(__local_mem__ float* binaryAddTmpAddr, uint32_t rLoopStride, uint32_t offset,
466
+ uint16_t binaryAddKLoop, uint16_t binaryAddInnerLoop, uint16_t binaryAddLastLoop,
467
+ MaskReg& pregLoop, RegTensor<float>& x1, RegTensor<float>& x2,
468
+ RegTensor<float>& x3, RegTensor<float>& x4)
469
+ {
470
+ uint16_t curBinaryAddInnerLoop = binaryAddInnerLoop;
471
+ for (uint16_t i = 0; i < binaryAddKLoop; i++) {
472
+ curBinaryAddInnerLoop = curBinaryAddInnerLoop / ROW_FOUR_OFFSET;
473
+ for (uint16_t j = 0; j < curBinaryAddInnerLoop; j++) {
474
+ DataCopy(x1, ((__local_mem__ float*)binaryAddTmpAddr + (j * ROW_FOUR_OFFSET) * rLoopStride + offset));
475
+ DataCopy(x2,
476
+ ((__local_mem__ float*)binaryAddTmpAddr + (j * ROW_FOUR_OFFSET + 1) * rLoopStride + offset));
477
+ Add(x1, x1, x2, pregLoop);
478
+ DataCopy(x3, ((__local_mem__ float*)binaryAddTmpAddr +
479
+ (j * ROW_FOUR_OFFSET + ROW_TWO_OFFSET) * rLoopStride + offset));
480
+ DataCopy(x4, ((__local_mem__ float*)binaryAddTmpAddr +
481
+ (j * ROW_FOUR_OFFSET + ROW_THREE_OFFSET) * rLoopStride + offset));
482
+ Add(x3, x3, x4, pregLoop);
483
+ Add(x1, x1, x3, pregLoop);
484
+ DataCopy(((__local_mem__ float*)binaryAddTmpAddr + j * rLoopStride + offset), x1, pregLoop);
485
+ }
486
+ LocalMemBar<MemType::VEC_STORE, MemType::VEC_LOAD>();
487
+ }
488
+ for (uint16_t i = 0; i < binaryAddLastLoop; i++) {
489
+ DataCopy(x1, ((__local_mem__ float*)binaryAddTmpAddr + offset));
490
+ DataCopy(x2, ((__local_mem__ float*)binaryAddTmpAddr + rLoopStride + offset));
491
+ Add(x1, x1, x2, pregLoop);
492
+ DataCopy(((__local_mem__ float*)binaryAddTmpAddr + offset), x1, pregLoop);
493
+ LocalMemBar<MemType::VEC_STORE, MemType::VEC_LOAD>();
494
+ }
495
+ }
496
+
497
+ __aicore__ inline void VFCalculateOutput(__local_mem__ float* yLocal, __local_mem__ float* xTmpLocal,
498
+ __local_mem__ float* xReduceLocal, uint16_t curTileRLen,
499
+ uint16_t curTileA0Len, uint16_t loopA0Num)
500
+ {
501
+ uint32_t tileA0Len = tilingData_->tileA0Len;
502
+ __VEC_SCOPE__
503
+ {
504
+ RegTensor<float> xReg;
505
+ RegTensor<float> yReg;
506
+ RegTensor<float> sumReg;
507
+
508
+ MaskReg pregMask;
509
+ uint32_t sreg = curTileA0Len;
510
+
511
+ for (uint16_t k = 0; k < loopA0Num; k++) {
512
+ pregMask = UpdateMask<float>(sreg);
513
+ DataCopy<float, LoadDist::DIST_NORM>(sumReg, (__local_mem__ float*)xReduceLocal + k * VL_FP32);
514
+
515
+ for (uint16_t i = 0; i < curTileRLen; i++) {
516
+ uint32_t xOffset = i * tileA0Len + k * VL_FP32;
517
+
518
+ DataCopy<float, LoadDist::DIST_NORM>(xReg, (__local_mem__ float*)xTmpLocal + xOffset);
519
+ Div(yReg, xReg, sumReg, pregMask);
520
+
521
+ // copy out
522
+ if constexpr (IsSameType<T2, float>::value) {
523
+ DataCopy(((__local_mem__ float*)yLocal) + xOffset, yReg, pregMask);
524
+ } else { // fp16、bf16
525
+ RegTensor<T2> xFp16;
526
+ Cast<T2, float, castTraitFp32ToFp16>(xFp16, yReg, pregMask);
527
+ DataCopy<T2, StoreDist::DIST_PACK_B32>(((__local_mem__ T2*)yLocal) + xOffset, xFp16, pregMask);
528
+ }
529
+ }
530
+ }
531
+ }
532
+ }
533
+
534
+ __aicore__ inline void LoadTensorForDtypeT1(__local_mem__ T1* src, RegTensor<float>& dst, MaskReg& preg,
535
+ uint32_t offset)
536
+ {
537
+ if constexpr (IsSameType<T1, float>::value) {
538
+ DataCopy<float, LoadDist::DIST_NORM>(dst, (__local_mem__ float*)src + offset);
539
+ } else { // fp16、bf16
540
+ RegTensor<T1> xFp16;
541
+ DataCopy<T1, LoadDist::DIST_UNPACK_B16>(xFp16, ((__local_mem__ T1*)src + offset));
542
+ Cast<float, T1, castTraitFp16ToFp32>(dst, xFp16, preg);
543
+ }
544
+ }
545
+
546
+ __aicore__ inline void CopyOutY(int64_t yGmOffset, int64_t curTileRLen, uint32_t curTileA0Len)
547
+ {
548
+ LocalTensor<T2> y = yQueue_.DeQue<T2>();
549
+ DataCopyExtParams copyInParams;
550
+ copyInParams.blockCount = curTileRLen;
551
+ copyInParams.blockLen = curTileA0Len * sizeof(T2);
552
+ copyInParams.srcStride = (tilingData_->tileA0Len - curTileA0Len) * sizeof(T2) / BLOCK_SIZE;
553
+ copyInParams.dstStride = (tilingData_->totalA0Len - curTileA0Len) * sizeof(T2);
554
+ DataCopyPad<T2, PaddingMode::Normal>(yGm_[yGmOffset], y, copyInParams);
555
+ yQueue_.FreeTensor(y);
556
+ }
557
+
558
+ private:
559
+ const SoftmaxV2ARATilingData* tilingData_;
560
+
561
+ TPipe* pipe_;
562
+
563
+ TQue<QuePosition::VECIN, BUFFER_DEPTH> xQueue_;
564
+ TQue<QuePosition::VECOUT, BUFFER_DEPTH> yQueue_;
565
+
566
+ TBuf<TPosition::VECCALC> xTmpBuf_;
567
+ TBuf<TPosition::VECCALC> xReduceBuf_;
568
+
569
+ GlobalTensor<T2> yGm_;
570
+ GlobalTensor<T1> xGm_;
571
+ };
572
+ } // namespace SoftmaxV2Ops
573
+
574
+ #endif