已关闭
[Requirement|需求建议]: 新增 SIMD VF 计算范式(elemwise / reduce)样例与性能调优 README #208
TangPC创建于  6月17日关闭于  6月17日
TangPC
TangPC成员
6月17日 创建

一、背景信息 (必填)

cann-samples 的 simd_vf_story 已有 broadcast 逻辑模式样例,但缺少“计算范式”维度(逐元素 elemwise / 归约 reduce)的可运行教学样例与系统性能解释。开发者难以直观理解同一算法在 SIMD VF 内不同写法(baseline / 手写多累加器展开 / #pragma unroll / 二分折叠)的快慢差异与根因(throughput-bound vs latency-bound)。需补齐 elemwise、reduce 两类范式样例 + 一篇用 cannsim trace 量化对比的 README。

二、价值/作用 (必填)

  • 提供可直接 cmake 构建、运行(自带 host golden 校验)、cannsim 打点复现的最小样例,覆盖 elemwise AXPY 与 reduce_max / reduce_sum 的 ar / ra 双轴。
  • 用 trace 指标(VF count、PUSHQ VF cycles、MTE2/MTE3、RVECEX 关键指令)解释“为什么这么写更快”,沉淀 SIMD VF 优化方法论:throughput-bound 不必过度展开;latency-bound 串行步数减不掉用多累加器藏延迟、可结合(求和)则二分减步数。
  • 应用场景:AscendC SIMD VF / MicroAPI 算子开发者的性能调优入门与范式参考。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

不涉及 Aclnn 直调 / PyTorch 训练等框架使能。样例为 standalone 可执行程序:.asc(COMPILE_LANGUAGE:ASC,--npu-arch + -O3)经 cmake 构建为单可执行文件,直接运行并由 host 侧 golden 校验,cannsim record 采集 trace。

3.2 总体设计
3.2.1 算子支持的数据类型

float(FP32)。统一形状 [D0,D1]=[78,250],N=19500(见 include/vf_common.h)。

3.2.2 host侧设计

vf_common.h 统一:固定种子(mt19937 seed=0)随机输入 GenInput、绝对容差 VerifyAbs(max/elemwise)、相对容差 VerifyRel(sum,rtol=1e-3)、CHECK_ACL 错误检查宏;各 .asc 的 main 就地计算 golden 并打印 PASSED / FAILED。

3.2.3 kernel侧设计

MicroAPI 放在 simd_vf 函数,for 按 VL(64 lane) 推进、迭代变量 uint16_t、循环内禁分支,经 asc_vf_call 从 kernel 侧调起;三段式 CopyIn→Compute→CopyOut(TQue VECIN/VECOUT),单核单 tile、depth=1 不开 DoubleBuffer。

  • elemwise:baseline / 手写 unroll×4 / #pragma unroll 4。
  • reduce:reduce_max、reduce_sum 各 ar / ra 轴,写法 baseline / 多累加器 unroll / pragma;reduce_sum_ar 增加 binary 二分折叠。
3.3 支持硬件

NPU_ARCH=dav-3510(CMakeLists SUPPORTED_NPU_ARCHS);profiling 平台 Ascend950(cannsim record -s Ascend950)。

3.4 算子约束限制

样例为定尺寸教学用例:固定 [78,250]、单核单 tile、不开 DoubleBuffer,改规格需改 vf_common.h 常量;仅 float。reduce 关键约定:跨块折叠(ar)必须 mask MERGING,ar 轴非对齐散出需 StoreUnAlign / StoreUnAlignPost 成对。

💡 备注(选填)
关联 PR:https://gitcode.com/cann/cann-samples/pull/314

likedislike
TangPCTangPC成员
6月17日 添加了label:requirement
TangPC
TangPC成员
6月17日 评论:
likedislike
CANN-robotCANN-robot成员
6月17日 将 pingchuantang 设为负责人
CANN-robotCANN-robot成员
6月17日 关闭了 issue
CANN-robotCANN-robot成员
6月17日 添加了label:resolved