已合并
maxPoolGrad simd模板 #4252
liuchuangdev创建于 4月27日
maxPoolGrad simd模板 #4252
已合并
liuchuangdev创建于 4月27日
liuchuangdev成员
4月27日

描述

一、功能概述

1.1 背景

MaxPoolGrad算子是深度学习中常用的反向传播算子,用于计算池化操作的梯度。针对不同的kernel大小和输入shape,需要不同的计算策略以实现最优性能:

  • 小kernel场景:需要高向量化利用率,批量处理减少循环开销
  • 大kernel场景:需要支持kernel分割,避免UB溢出
  • 通用场景:需要支持多种数据格式(NCHW/NHWC)和索引类型(int32/int64)

传统单模式实现难以兼顾所有场景的性能需求,因此设计了SIMD多模式模板系统

1.2 核心特性

本PR实现了完整的SIMD模板系统,包含以下核心特性:

特性 描述 技术优势
三种Kernel模式 SmallKernel、BigKernel、SIMT 自动适配不同场景,性能最优
编译期模板选择 ASCENDC_TPL机制 零运行时开销,编译期确定实现路径
多数据格式支持 NCHW/NHWC双格式 覆盖主流框架需求(PyTorch/TensorFlow)
多索引类型支持 int32/int64双类型 兼容不同argmax精度需求
边界检查控制 IS_CHECK_RANGE开关 针对不同场景优化性能
向量API优化 MicroAPI批量处理 高向量化利用率,减少指令数

二、代码结构

2.1 文件组织

pooling/max_pool_grad/
├── op_kernel/
│   ├── max_pool_grad.cpp                    # 主Kernel模板入口
│   ├── arch35/
│   │   ├── max_pool_grad_struct.h           # 模板参数定义(ASCENDC_TPL)
│   │   ├── max_pool_grad_simt.h             # SIMT模式实现
│   │   ├── max_pool_grad_nchw_small_kernel.h  # SmallKernel模式实现
│   │   ├── max_pool_grad_nchw_big_kernel.h    # BigKernel模式实现
│   │   ├── max_pool_grad_nchw_backward_base.h # Backward公共基类
│   │   └── max_pool_grad_simt.h             # SIMT通用实现
│   └── pool_grad_common/
│       └── arch35/
│           ├── max_pool_grad_with_argmax_base_common.h  # 公共函数(Gather/Scatter)
│           └── max_pool_grad_nchw_scatter_common.h      # Scatter处理实现
├── op_host/
│   └── arch35/
│       ├── max_pool_grad_tiling.cpp         # Tiling实现(选择Kernel模式)
│       └── max_pool_grad_tiling_simt.cpp    # SIMT专用Tiling
├── tests/
│   ├── ut/
│   │   └ op_host/
│   │       └── test_max_pool_grad_tiling.cpp  # Tiling UT测试
│   └── st/
│       └── test_max_pool_grad_st.py          # ST性能测试
└── docs/
    ├── max_pool_grad_doc.md                  # 算子文档
    └── max_pool_grad_simd_template_pr.md     # 本PR文档

2.2 关键类关系图

┌────────────────────────────────────────────┐
│         max_pool_grad<模板参数>             │
│         - KERNEL_MODE                       │
│         - FORMAT                            │
│         - INDICES_DTYPE                     │
│         - IS_CHECK_RANGE                    │
└────────────────────────────────────────────┘
                    ↓ if constexpr
    ┌───────────────┼───────────────┐
    ↓               ↓               ↓
┌─────────┐   ┌─────────┐   ┌─────────┐
│SmallKernel│ │BigKernel │ │  SIMT   │
│  Mode    │ │  Mode    │ │  Mode   │
└─────────┘   └─────────┘   └─────────┘
    ↓               ↓               ↓
┌─────────────────────────────────────────────┐
│  MaxPoolGradNCHWBackwardBase(公共基类)    │
│  - BackwardCompute(Scatter处理)           │
│  - CopyInGrad / CopyOut                    │
│  - ScalarCompute(Tiling计算)              │
└─────────────────────────────────────────────┘

关联的Issue

#2276

测试

基本功能测试,通路测试,冒烟测试,改动算子门槛回归、门槛测试、性能测试

文档更新

新增pooling/max_pool_grad/op_graph/max_pool_grad_proto.h包含接口brief

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liuchuangdev 的贡献)
Lliuchuangdev成员
4月27日 创建了 pull request,commit 43d817ac
CANN-robot
CANN-robot成员
4月27日 评论:

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
pooling 陈琦, 周奇龙 (2/2) 陈琦, 周奇龙 (2/1)
repo-cann/ops-nn 陈琦, 周奇龙 (2/2) 陈琦, 周奇龙 (2/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
CANN-robotCANN-robot成员
4月27日 添加了label:cann-cla/yes
CANN-robotCANN-robot成员
4月27日 将crystalhu,yangyang016,fanqirui,zhou-qilong,chenqi317,liubo75,tangweiwei2,zhangyuxiang0119,wangyongguang,zhang-wu设为评审人
CANN-robotCANN-robot成员
4月27日 将crystalhu,yangyang016,fanqirui,zhou-qilong,chenqi317,liubo75,tangweiwei2,zhangyuxiang0119,wangyongguang,zhang-wu设为审查人
此处折叠了133条消息 查看更多
Lliuchuangdev成员
4月28日 解决了最后一个问题
chenqi317成员
4月28日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
4月28日 添加了label:lgtm
CANN-robot
CANN-robot成员
4月28日 评论:

Review Guide

This pull-request passes review.
Committers who wrote a comment of /approve are: 周奇龙, 陈琦.
Reviewers who wrote a comment of /lgtm are: 周奇龙, 陈琦.

likedislike
CANN-robotCANN-robot成员
4月28日 合入了pull request