| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
maxpoograd网络用例性能优化 Co-authored-by: CANN Developer<developer@cann.com> # message auto-generated for no-merge-commit merge: !4469 merge opt_perf into master maxpoograd网络用例性能优化 Created-by: liuchuangdev Commit-by: CANN Developer Merged-by: cann-robot Description: ## 描述 # max_pool_grad 算子性能优化 ## 概述 本 PR 针对 max_pool_grad 算子进行性能优化,主要包括: 1. 使用 FastDiv(magic number division)替代 Div 指令,提升除法运算性能 2. 添加 identity 优化路径(ksize=1 && stride=1 时直接拷贝) 3. 优化部分冗余计算逻辑 ## 修改详情 ### 1. 新增 FastDiv 函数 在 pool_grad_common/op_kernel/arch35/max_pool_grad_nchw_scatter_common.h 新增以下函数: | 函数名 | 说明 | |-------|------| | IndexConvNchwFastDiv | 使用 FastDiv 进行索引转换 | | DoSingleNCNchwFastDiv | 单行处理 FastDiv 版本(int32 only) | | DoMulNCNchwFastDiv | 多行处理 FastDiv 版本(int32 only) | | ConvertIndexInt32FastDiv | 索引转换 FastDiv 版本(int32 only) | | ConvertIndexNcInt32FastDiv | NC 维度索引转换 FastDiv 版本(int32 only) | **说明**:新增函数仅支持 int32 类型,模板参数简化为 <T1, IS_CHECK_RANGE>。 ### 2. Identity 优化路径 修改 max_pool_grad_nchw_small_kernel.h: - 新增 IdentityCopyGradToOutput() 函数 - Process() 中判断 ksize==1 && stride==1 时跳过 Forward/Backward 计算,直接拷贝 cpp if (isIdentity) { Base::CopyInGrad(); IdentityCopyGradToOutput(); // 直接拷贝 Base::CopyOut(); } else { // 原有流程 } ## 性能收益 - FastDiv 替代 Div:除法运算性能提升约 2-3 倍 - Identity 优化:ksize=1 && stride=1 场景跳过 max 计算,性能显著提升 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#2684](https://gitcode.com/cann/ops-nn/issues/2684) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 基本功能回归、性能测试、门槛测试、冒烟测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!4469 | 2 个月前 |