已开启
[Requirement|需求建议]: 新增AvgPoolUpdate算子支持Ascend950 #5152
吴成文创建于  21 天前
吴成文
吴成文成员
21 天前 创建

Backgroud(背景信息)

AvgPool算子在exclusive模式下需要精确计算池化窗口实际覆盖的有效元素个数(mean_matrix),然后将求和池化结果除以该值得到精确平均值。当前Ascend950缺少该算子的SIMT实现,导致包含AvgPool+exclusive的模型在950上无法正确执行。

算子计算公式:

  • y = x1 / mean_matrix
  • mean_matrix[h,w] = mean_h * mean_w

其中x1为求和池化输出,x2为原始输入feature map(仅用于获取输入空间尺寸,不参与数值计算)。

Origin(信息来源)

AscendC SIMT算子开发团队需求,基于TensorFlow AvgPool算子的exclusive模式语义,在Ascend950上实现SIMT版本的AvgPoolUpdate辅助算子。

Benefit / Necessity(价值/作用)

  1. 支持包含AvgPool+exclusive模式的模型在Ascend950上正确执行
  2. 补全950 SIMT算子库的pooling类算子覆盖
  3. 使用Grid-Stride SIMT模式实现,充分利用950的vector core并行能力
  4. 支持CALCULATED/VALID/SAME三种padding模式,覆盖主流框架调用场景

Design(设计方案)

  • 计算模式:SIMT Grid-Stride,每线程按步长迭代输出元素
  • dtype支持:x1/y ∈ {FP16, FP32},x2 ∈ {INT4, INT8, FP16, FP32}(8组笛卡尔积)
  • data_format:支持NCHW和NHWC
  • padding_mode:CALCULATED/VALID/SAME
  • UB传参:标量参数通过UB传递到VF kernel
  • 快速除法:UintDiv替代硬件%和/,IDX_T模板按totalNum范围选择32/64位路径
  • 溢出保护:_builtin*_overflow检查所有关键运算
  • 边界保护:空tensor(totalNum==0)、除零保护(mean>=1)
likedislike
吴成文吴成文成员
21 天前 添加了label:requirement
吴成文吴成文成员
21 天前 关联了pull request:[CANNBot]AvgPoolUpdate算子支持Ascend950
吴成文吴成文成员
21 天前 将 wuchengwen_oh 设为负责人
吴成文吴成文成员
21 天前 关联了pull request:[CANNBot]AvgPoolUpdate算子支持Ascend950
吴成文吴成文成员
21 天前 关联了pull request:[CANNBot]新增NPUClearFloatStatus与AvgPoolUpdate算子支持Ascend950