已合并
feat(simd_vf_story): 新增 elemwise、reduce 范式样例与 SIMD VF 性能调优 README #314
feat(simd_vf_story): 新增 elemwise、reduce 范式样例与 SIMD VF 性能调优 README #314
已合并
TangPC创建于 6月17日
TangPC
TangPC成员
6月17日

描述

基于已有 broadcast 逻辑模式样例,新增 elemwise(逐元素 AXPY)与 reduce(max/sum,ar/ra 双轴)两类 SIMD VF 计算范式样例,并补齐一篇覆盖 broadcast / elemwise / reduce 三类范式的性能调优 README(1155 行),用 cannsim trace 数据解释“同一算法不同写法的快慢与根因”。同时重构 simd_vf_story/CMakeLists.txt:由“每个 case 一个子 CMakeLists”改为顶层按 */src 目录自动发现 case、逐 .asc 文件生成可执行 target,并删除已无用的 broadcast/CMakeLists.txt。

改动原因

simd_vf_story 此前只有 broadcast 逻辑模式样例,缺少“计算范式”维度(逐元素 / 归约)的可运行样例与系统化性能解释。开发者难以直观理解同一算法在 SIMD VF 内不同写法(baseline / 手写多累加器展开 / #pragma unroll / 二分折叠)的快慢差异与根因(throughput-bound vs latency-bound)。

改动方法

  • include/vf_common.h:抽出 16 个 .asc 共用的统一规格 [D0,D1]=[78,250](N=19500)、固定种子随机输入 GenInput、绝对/相对容差比对 VerifyAbs/VerifyRel、CHECK_ACL 宏。
  • elemwise(AXPY z=a*x+y):baseline / 手写 unroll×4 / #pragma unroll 4 三种写法;结论为 throughput-bound,baseline 已最优,展开几乎无差异(约 −2%~−3%)。
  • reduce:reduce_max 与 reduce_sum 各覆盖 ar(行内归约)/ ra(跨行归约)双轴,写法含 baseline / 多累加器 unroll / #pragma unroll,reduce_sum_ar 额外提供 binary 二分折叠;结论为 latency-bound,多累加器藏延迟最高 +51.9%、二分约 2×(+51.5%)。
  • CMakeLists.txt:函数 add_simd_vf_story_case 改为按 /src/*.asc GLOB,顶层按 */src 自动发现 case,保留 build/...// 输出布局;删除 broadcast/CMakeLists.txt。
  • 新增 README.md(1155 行)及 elemwise/reduce 的 SVG 配图。

关联的Issue

测试

  • 每个样例自带 host 侧 golden 校验:reduce_sum 用 double 累加 + 相对容差 |got-ref| ≤ 1e-3·(|ref|+1)、输入 [-1,1);reduce_max / elemwise 用绝对容差;运行末行打印 PASSED / FAILED。
  • 构建:cmake -S . -B build -DNPU_ARCH=dav-3510,支持单文件 target / 单 case target / 全量 simd_vf_story target。
  • 性能:cannsim record ... -s Ascend950 --gen-report 采集 trace,对比 VF count、PUSHQ VF cycles、MTE2/MTE3 sum_cycles、RVECEX 关键指令。

文档更新

  • 新增 simd_vf_story/README.md(1155 行,三部分:broadcast / elemwise / reduce)。
  • 新增 elemwise/images/elemwise.svg 与 reduce/images/{ar_vs_ra,binary_fold,dep_chain,latency_hiding}.svg。

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 TangPC 的贡献)
CANN-robotCANN-robot成员
6月17日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
6月17日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/cann-samples 王林木, zhangzijie (2/2) 王林木 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

pingchuantang, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
TangPC
TangPC成员
6月17日 评论:

compile

likedislike
CANN-robotCANN-robot成员
6月17日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月17日 评论:

流水线任务触发成功
任务链接 [be2f9108e5954b5db2562c1675fc5361][流水线指导]

任务名称状态日志下载链接
codecheck ❌ FAILED >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Check_pr ✅ SUCCESS
Compile_Ascend_X86_910c ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_910c ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950 ✅ SUCCESS >>>>> >>>>>
codecheck_codestyle ⚠️ WARNING >>>>>
precommit ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
likedislike
CANN-robotCANN-robot成员
6月17日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月17日 添加了label:ci-pipeline-failed
TangPC
TangPC成员
6月17日 评论:

compile#codecheck

likedislike
CANN-robotCANN-robot成员
6月17日 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
6月17日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月17日 评论:

流水线任务触发成功
任务链接 [b9b2eeb1c6464d7bb9923e853969dfd8][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Check_pr ✅ SUCCESS
Compile_Ascend_X86_910c ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_910c ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950 ✅ SUCCESS >>>>> >>>>>
codecheck_codestyle ⚠️ WARNING >>>>>
precommit ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>

[2026-06-17 11:44:19]    CI执行结束

likedislike
TangPCTangPC成员
6月17日 修改了pull request 的描述
TangPCTangPC成员
6月17日 修改了pull request 的描述
TangPCTangPC成员
6月17日 修改标题为 “feat(simd_vf_story): 新增 elemwise、reduce 范式样例与 SIMD VF 性能调优 README”,原标题为“feat(simd_vf_story): 新增 elemwise、reduce 样例及 SIMD VF 范式 README”
TangPCTangPC成员
6月17日 修改了pull request 的描述
CANN-robotCANN-robot成员
6月17日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月17日 添加了label:ci-pipeline-passed
zhangzijie成员
6月17日 评论:

/lgtm

likedislike
llimwang成员
6月17日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
6月17日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
6月17日 关闭了关联的issue
CANN-robotCANN-robot成员
6月17日 合入了pull request