Pull Request已成功合入, 合并人@CANN-robot
(感谢 huohuo_wangyan 的贡献)以下是根据您提交的修改文件推荐的Reviewer和Committer序列,需各模块评审通过后方可合入
| Module List | Reviewers | Committers |
|---|---|---|
| */*/op_api/*.h | lileizheng, liu-wei, wangyongguang, yu-xinjie62, chaotang233 | tang-lei01, wangyongguang |
| repo-cann/ops-nn | lileizheng, liu-wei, wangyongguang, yu-xinjie62, chaotang233 | crystalhu, tangweiwei2, chenqi317, liubo75 |


🔵 source code change are detected, tasks labels is removed in this pull request!


compile


流水线任务触发成功,任务链接 [94c1812370df460d85f3774b2339b691]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ❌ FAILED | >>>>> | |
| anti_virus | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| API_Check | 🔄 running | >>>>> | |
| UT_Test_ophost | ⏳ waiting | ||
| UT_Test_opapi | ⏳ waiting | ||
| UT_Test_kernel | ⏳ waiting | ||
| Smoke_A900 | ⏳ waiting | >>>>> |


问题/功能描述
本次PR为昇腾AI处理器算子库新增并完善了多个池化反向传播算子,主要包括 aclnnAdaptiveMaxPool2dBackward、aclnnAdaptiveMaxPool3dBackward 和 aclnnMaxPool3dWithArgmaxBackward,解决了相关神经网络层在训练时梯度无法正确回传的问题。同时,对已有算子的构建配置、内核实现、文档及测试进行了大规模重构、优化与维护,旨在提升代码复用性、可维护性、文档准确性及测试覆盖度。
修改方案描述
实现方案涵盖多个层面:1) 新增算子实现:通过两段式接口(获取工作空间与执行)实现了上述反向传播算子,包含严格的参数校验、张量格式转换及智能选择底层计算内核等逻辑。2) 代码重构与优化:对 AdaptiveMaxPool3DGrad 和 MaxPool3DGradWithArgmax 等算子的内核及分片(Tiling)实现进行了深度重构,通过引入公共函数库和模板基类(如 pool_3d_common)大幅消除了代码重复,统一了计算逻辑,并修复了输出维度计算、缓冲区初始化等潜在缺陷。3) 文档与构建完善:全面更新了相关算子的API文档,细化了产品支持列表,补充了结构化参数说明和完整调用示例;简化了多个项目的CMake构建逻辑,提升了构建的清晰度和可维护性。4) 测试增强:修正了测试代码中的路径与变量错误,新增了针对重叠模式等边界场景的单元测试,提升了测试的健壮性和覆盖率。


魔数与常量: 代码中直接使用了魔数1作为SetScheduleMode的参数,缺乏明确的含义说明。在代码检视的上下文中,虽然只关注第199行的改动,但结合前后代码分析,SetScheduleMode(1)中的参数1是一个硬编码的魔法数字,没有定义为有意义的常量。这降低了代码的可读性和可维护性,其他开发者难以理解参数1的具体含义。
问题类型: 魔数与常量
文件路径: pooling/adaptive_max_pool3d_grad/op_host/adaptive_max_pool3d_grad_normal_tiling.cpp
行号: 199
问题代码:
context_->SetScheduleMode(1);
修改建议:
将魔法数字1定义为有意义的常量,例如:constexpr int SCHEDULE_MODE_NORMAL = 1; 并在调用时使用该常量:context_->SetScheduleMode(SCHEDULE_MODE_NORMAL);。同时建议添加注释说明该调度模式的具体含义。
此评论由代码审查工具自动生成


代码结构与可维护性: 头文件包含路径使用相对路径 '../pool_3d_common/arch32/max_pool3d_grad_scatter_overlap_unified.h',这种依赖关系不够清晰,且当文件目录结构发生变化时容易导致编译错误。相对路径增加了模块间的耦合度。
问题类型: 代码结构与可维护性
文件路径: pooling/adaptive_max_pool3d_grad/op_kernel/adaptive_max_pool3d_grad_scatter_overlap.h
行号: 19
问题代码:
#include "../pool_3d_common/arch32/max_pool3d_grad_scatter_overlap_unified.h"
修改建议:
1. 改为使用绝对路径或项目统一的包含路径策略。
2. 如果这是项目内的标准包含方式,建议添加注释说明这种包含关系的必要性。
3. 考虑将公共头文件放在统一的include目录下,使用 <> 包含。
此评论由代码审查工具自动生成


硬编码数据类型大小: 在CalculateRoundParams函数中,硬编码了DTYPE_LEN_B32作为比较条件。这种硬编码的魔法数字降低了代码的可读性和可维护性。如果未来需要支持其他数据类型大小,需要修改这里的硬编码值。
问题类型: 硬编码数据类型大小
文件路径: pooling/pool_3d_common/op_host/arch32/max_pool3d_grad_tiling_common.h
行号: 199
问题代码:
if (params.xDtypeSize != DTYPE_LEN_B32 && isOverLap) {
修改建议:
将DTYPE_LEN_B32定义为有意义的常量名,或者使用枚举或配置方式管理数据类型大小。更好的做法是提供一个数据类型到大小的映射表。
此评论由代码审查工具自动生成


文件结尾缺少换行符: 文件最后一行缺少换行符(No newline at end of file)。虽然这不是功能性问题,但不符合POSIX标准,某些工具(如diff、编译器)可能会产生警告。
问题类型: 文件结尾缺少换行符
文件路径: pooling/pool_3d_common/op_host/arch32/max_pool3d_grad_tiling_common.h
行号: 230
问题代码:
} // namespace optiling
#endif // OPS_BUILD_IN_OP_TILING_RUNTIME_MAX_POOL3D_GRAD_SCATTER_TILING_TEMPLATE_H
修改建议:
在文件末尾添加一个换行符。这是良好的编码习惯,可以避免一些工具的不必要警告。
此评论由代码审查工具自动生成


类型一致性: 常量定义中混合使用了uint32_t和size_t类型,缺乏一致性。X_INDEX、GRAD_INDEX、ARGMAX_INDEX使用uint32_t,而KSIZE_ATTR_INDEX等使用size_t。虽然这些常量都用于索引,但类型不一致可能在某些平台上导致隐式类型转换问题。
问题类型: 类型一致性
文件路径: pooling/pool_3d_common/op_host/arch32/max_pool3d_grad_tiling_constants.h
行号: 21
问题代码:
constexpr uint32_t X_INDEX = 0;
constexpr uint32_t GRAD_INDEX = 1;
constexpr uint32_t ARGMAX_INDEX = 2;
constexpr size_t KSIZE_ATTR_INDEX = 0U;
修改建议:
统一使用size_t类型定义所有索引常量,因为size_t专门用于表示对象大小和数组索引,更适合索引场景
此评论由代码审查工具自动生成


常量定义不精确: MAX_INT32常量定义为2147483647,但实际INT32_MAX应该是2147483647。虽然数值相同,但使用标准库中的INT32_MAX或std::numeric_limits<int32_t>::max()更清晰、更可移植。
问题类型: 常量定义不精确
文件路径: pooling/pool_3d_common/op_host/arch32/max_pool3d_grad_tiling_constants.h
行号: 40
问题代码:
constexpr uint64_t MAX_INT32 = 2147483647;
修改建议:
建议使用标准库定义:'constexpr int32_t MAX_INT32 = std::numeric_limits<int32_t>::max();' 或 '#include <cstdint>'后使用INT32_MAX
此评论由代码审查工具自动生成


逻辑运算与副作用: 条件判断中使用(self->params_.ncCnt - 1UL),当ncCnt为0时,减法会下溢(因为是无符号整数),导致比较结果异常。
问题类型: 逻辑运算与副作用
文件路径: pooling/pool_3d_common/op_kernel/arch32/max_pool3d_grad_common.h
行号: 214
问题代码:
self->block_.ncShape =
self->block_.ncCntIndex >= (self->params_.ncCnt - 1UL) ?
self->params_.ncTail : self->params_.baseNc;
修改建议:
1. 添加对ncCnt为0的特殊情况处理。2. 或者确保ncCnt至少为1。3. 修改条件判断逻辑,例如:self->block_.ncCntIndex + 1 >= self->params_.ncCnt
此评论由代码审查工具自动生成


注释错误: 第56行注释“h方向base矩阵个数”重复了两次,且第57行也注释为“h方向base矩阵个数”,这可能是笔误。根据变量名 params_.doCnt 和 params_.hoCnt,应该分别是 d 方向和 h 方向。
问题类型: 注释错误
文件路径: pooling/pool_3d_common/op_kernel/arch32/max_pool3d_grad_scatter_base_template.h
行号: 56
问题代码:
params_.doCnt = tiling->doCnt; // h方向base矩阵个数
params_.hoCnt = tiling->hoCnt; // h方向base矩阵个数
修改建议:
修正注释:params_.doCnt 应为“d方向base矩阵个数”,params_.hoCnt 应为“h方向base矩阵个数”。
此评论由代码审查工具自动生成


compile


流水线任务触发成功,任务链接 [5ffb16c1910d4397b41337d213069e5f]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ❌ FAILED | >>>>> | |
| anti_virus | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| API_Check | ✅ SUCCESS | >>>>> | |
| UT_Test_ophost | ⚪ ABORTED | ||
| UT_Test_opapi | ⚪ ABORTED | ||
| UT_Test_kernel | ⚪ ABORTED | ||
| Smoke_A900 | ⚪ ABORTED | >>>>> |
[2026-01-19 20:19:41] CI执行失败


compile


流水线任务触发成功,任务链接 [7dca4150461b473c8e762505f4dea9af]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| anti_virus | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| API_Check | ⚠️ WARNING | >>>>> | |
| UT_Test_ophost | ✅ SUCCESS | ||
| UT_Test_opapi | ✅ SUCCESS | ||
| UT_Test_kernel | ✅ SUCCESS | ||
| Smoke_A900 | ✅ SUCCESS | >>>>> | >>>>> |
[2026-01-21 08:40:49] CI执行结束


/approve


/lgtm


Review Guide
This Pull-Request Passes Review.
Committers who wrote a comment of /approve are: crystalhu, wangyongguang.
Reviewers who wrote a comment of /lgtm are: wangyongguang, crystalhu, zhangyuxiang0119.


描述
关联的Issue
测试
文档更新
类型标签