| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[CANNBot]新增AvgPoolUpdate算子 Co-authored-by: wuchengwen_oh<wuchengwen4@huawei.com> # message auto-generated for no-merge-commit merge: !9206 merge add_avg_pool_update_v2 into master [CANNBot]新增AvgPoolUpdate算子 Created-by: wuchengwen_oh Commit-by: wuchengwen_oh Merged-by: cann-robot Description: ## 描述 新增AvgPoolUpdate算子,支持Ascend950 SIMT实现。 AvgPoolUpdate是AvgPool的融合辅助算子,在exclusive模式下精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),将求和池化结果除以该值得到精确平均值。 **算子公式**: - y = x1 / mean_matrix - mean_matrix[h,w] = mean_h * mean_w - mean_h = max(min(min(h*stride_h - pad_t + k_h, (H_out-1-h)*stride_h - pad_b + k_h), min(k_h, H_in)), 1) - mean_w = max(min(min(w*stride_w - pad_l + k_w, (W_out-1-w)*stride_w - pad_r + k_w), min(k_w, W_in)), 1) 其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。 **技术要点**: - SIMT Grid-Stride模式,每线程按步长迭代输出元素 - dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积) - 支持NCHW和NHWC两种data_format - 支持CALCULATED/VALID/SAME三种padding_mode - UB传参方案:标量参数通过UB传递到VF kernel - UintDiv快速除法替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径 - __builtin_*_overflow溢出保护,空shape和除零边界保护 - 输入校验与TBE对齐:data_format/padding_mode合法值、ksize/strides N/C==1、空shape拒绝 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5152 ## 测试 - 单算子编译验证通过(bash build.sh --pkg --soc=ascend950 --ops=avg_pool_update -j16) - host UT全部通过(tiling UT 9个 + infershape UT 3个 = 12个用例) - TTK上板测试通过(黑盒220条 + 白盒270条 + 网络6条 + stdesign L0 93条 + L1 515条) - run_example 32/32 passed ## 文档更新 - 新增 pooling/avg_pool_update/README.md - 更新 docs/zh/op_list.md 新增pooling/avg_pool_update条目 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ ] AI辅助编写 - [x] AI完全生成 人工审查:已完成 测试验证:已通过 合规检查:已完成 See merge request: cann/ops-nn!9206 | 12 天前 |