已关闭
[Requirement|需求建议]: 新增 SIMD VF 计算范式(elemwise / reduce)样例与性能调优 README #208
TangPC创建于 6月17日关闭于 6月17日
6月17日 添加了label:requirement
TangPC
6月17日 评论:
6月17日 评论:
/assign @pingchuantang


6月17日 将 pingchuantang 设为负责人
6月17日 关闭了 issue
6月17日 添加了label:resolved
/assign @pingchuantang


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