已合并
A5 support MseLoss MaxPoolWithArgmaxV3 MaxPoolGradWithArgmaxV3 #533
TangPC创建于 2025年12月29日
A5 support MseLoss MaxPoolWithArgmaxV3 MaxPoolGradWithArgmaxV3 #533
已合并
TangPC创建于 2025年12月29日
TangPC
TangPC成员
2025年12月29日

描述

关联的Issue

测试

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 TangPC 的贡献)
CANN-robot
CANN-robot成员
2025年12月29日 评论:

Thank your for your pull-request.

The full list of commands accepted by me can be found at here.

You can get sig-info at here

likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

以下是根据您提交的修改文件推荐的Reviewer和Committer序列,需各模块评审通过后方可合入

Module List Reviewers Committers
sig-ops-nn zhang-wu, zhou-qilong, lileizheng, liu-wei, wangyongguang crystalhu, tangweiwei2, chenqi317, liubo75
likedislike
CANN-robotCANN-robot成员
2025年12月29日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
2025年12月29日 评论:

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

likedislike
TangPC
TangPC成员
2025年12月29日 评论:

compile

likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

🔵 ops-nn pipeline is running. Please wait a moment... (Link 2054)

likedislike
CANN-robotCANN-robot成员
2025年12月29日 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
2025年12月29日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
2025年12月29日 添加了label:ci-pipeline-failed
TangPCTangPC成员
2025年12月29日 强制推送  1 个提交:056f877d-A5 support MseLoss MaxPoolWithArgmaxV3 MaxPoolGradWithArgmaxV3
CANN-robot
CANN-robot成员
2025年12月29日 评论:

以下是根据您提交的修改文件推荐的Reviewer和Committer序列,需各模块评审通过后方可合入

Module List Reviewers Committers
sig-ops-nn fanqirui, lileizheng, zhangyuxiang0119, FelixTang7, zhang-wu tangweiwei2, chenqi317, liubo75, crystalhu
likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

CLA Signature Pass

Thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

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

likedislike
CANN-robotCANN-robot成员
2025年12月29日 删除了label:ci-pipeline-failed
CANN-robot
CANN-robot成员
2025年12月29日 评论:
CANN-robot
CANN-robot成员
2025年12月29日 评论:
CANN-robot
CANN-robot成员
2025年12月29日 评论:

问题/功能描述

本次PR主要完成了两项核心工作。首先,为昇腾AI处理器新增了MseLoss(均方误差损失)算子的完整实现,包括图算子定义、形状推断、Tiling策略及内核实现,解决了该基础损失函数在特定硬件架构(如ascend910_95/arch35)上缺失支持的问题,并支持多种数据类型(FP16/FP32/BF16)和规约模式(none/sum/mean)。其次,新增了MaxPoolWithArgmaxV3MaxPoolGradWithArgmaxV3两个池化算子的完整实现,包括算子定义、Tiling策略、内核实现及单元测试,解决了带最大位置索引的最大池化及其反向传播操作在昇腾平台上的功能与性能优化需求。此外,还对相关算子的构建配置、文档和版权声明进行了重构、更新和修正。

修改方案描述

针对MseLoss算子,新增了图算子定义、形状推断、Tiling实现(针对arch35架构)以及基于DAG模板的计算内核,并重构了CMake构建配置以支持特定芯片架构,同时更新了产品支持文档和API文档。针对两个池化算子,新增了完整的算子定义、形状/类型推断、针对NCHW/NHWC格式及不同场景(如大卷积核、多核并行)的Tiling策略、AscendC内核实现(包括向量化、标量、SIMT等多种模式)以及全面的单元测试。此外,统一了相关文件的版权声明格式,修正了文档中的笔误,并调整了测试代码的头文件引用路径以确保编译正确。所有实现均遵循了项目的安全编码规范,进行了充分的参数校验和错误处理。

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
loss/mse_loss/op_graph/mse_loss_proto.h
@@ -0,0 +26,4 @@
26+ * @li label: An ND Tensor of dtype float16, float32 or bfloat16.\n
27+ *
28+ * @par Attributes:
29+ * reduction:An optional str from sum, none, mean, Defaults to "mean".\n
CANN-robot
CANN-robot2025年12月29日评论:

代码结构与可维护性: 属性'reduction'的注释描述中缺少空格,格式不规范。注释中写为'reduction:An optional str',冒号后应有一个空格。虽然不影响功能,但影响代码的可读性和规范性。

问题类型: 代码结构与可维护性
文件路径: loss/mse_loss/op_graph/mse_loss_proto.h
行号: 29
问题代码:

 * reduction:An optional str from sum, none, mean, Defaults to "mean".\n

修改建议:

在冒号后添加空格,修改为'reduction: An optional str from sum, none, mean, Defaults to "mean".',保持代码注释格式的一致性。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
loss/mse_loss/op_graph/mse_loss_proto.h
@@ -0,0 +8,4 @@
8+ * See LICENSE in the root of the software repository for the full text of the License.
9+ */
10+ 
11+/*!
CANN-robot
CANN-robot2025年12月29日评论:

文档/注释不一致: 文件头注释中的文件名与实际文件名不一致。注释中描述的文件名为 'nn_norm_ops.h',但实际文件名是 'mse_loss_proto.h'。这种不一致可能导致开发者混淆,影响代码的可读性和维护性。

问题类型: 文档/注释不一致
文件路径: loss/mse_loss/op_graph/mse_loss_proto.h
行号: 11
问题代码:

/*!
 * \file nn_norm_ops.h
 * \brief
 */

修改建议:

将文件头注释中的文件名更新为实际文件名 'mse_loss_proto.h',以保持一致性。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
loss/mse_loss/op_graph/mse_loss_proto.h
@@ -0,0 +12,4 @@
12+ * \file nn_norm_ops.h
13+ * \brief
14+ */
15+#ifndef OPS_BUILT_IN_OP_PROTO_INC_NN_NORM_OPS_H_
CANN-robot
CANN-robot2025年12月29日评论:

宏定义命名冲突风险: 头文件保护宏的命名 'OPS_BUILT_IN_OP_PROTO_INC_NN_NORM_OPS_H_' 与注释中提到的文件名 'nn_norm_ops.h' 相关,但与当前实际文件名 'mse_loss_proto.h' 不符。这可能导致不同头文件使用相同宏定义的风险,引发编译错误或包含错误版本的头文件。

问题类型: 宏定义命名冲突风险
文件路径: loss/mse_loss/op_graph/mse_loss_proto.h
行号: 15
问题代码:

#ifndef OPS_BUILT_IN_OP_PROTO_INC_NN_NORM_OPS_H_
#define OPS_BUILT_IN_OP_PROTO_INC_NN_NORM_OPS_H_

修改建议:

将头文件保护宏的命名更新为与实际文件名一致,例如改为 'OPS_BUILT_IN_OP_PROTO_INC_MSE_LOSS_PROTO_H_'。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
loss/mse_loss/op_host/arch35/mse_loss_tiling.cpp
@@ -0,0 +37,4 @@
37+ auto inputDesc = context->GetInputDesc(0);
38+ OP_CHECK_NULL_WITH_CONTEXT(context, inputDesc);
39+ ge::DataType dataType = inputDesc->GetDataType();
40+ std::vector<gert::Shape> dimShapes = {oriShape};
CANN-robot
CANN-robot2025年12月29日评论:

代码结构与可维护性: 第40行创建的dimShapes向量在初始化后从未使用。该向量包含oriShape,但后续代码没有引用dimShapes。这是一个无用的变量定义,增加了不必要的内存分配和代码复杂度。

问题类型: 代码结构与可维护性
文件路径: loss/mse_loss/op_host/arch35/mse_loss_tiling.cpp
行号: 40
问题代码:

std::vector<gert::Shape> dimShapes = {oriShape};

修改建议:

删除未使用的dimShapes变量定义,或者如果该变量是为未来功能预留,应添加注释说明。考虑到这是新添加的代码,很可能是不必要的残留代码,建议直接删除。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
loss/mse_loss/op_host/arch35/mse_loss_tiling_arch35.cpp
@@ -0,0 +104,4 @@
104+ key.ReduceTiling.patternID, key.ReduceTiling.loopARCount, key.ReduceTiling.loopInnerARCount, tilingKey,
105+ key.Reduction, key.Dtype);
106+ if (static_cast<int32_t>(this->reduction) < 1) {
107+ size_t* currentWorkspace = tilingContext->GetWorkspaceSizes(1);
CANN-robot
CANN-robot2025年12月29日评论:

潜在的空指针解引用: 第108行size_t* currentWorkspace = tilingContext->GetWorkspaceSizes(1);获取workspace大小数组指针,然后直接通过currentWorkspace[0]赋值。如果GetWorkspaceSizes返回空指针,这里会导致未定义行为。虽然GetWorkspaceSizes可能保证在参数有效时返回非空指针,但缺乏明确的文档说明,存在风险。

问题类型: 潜在的空指针解引用
文件路径: loss/mse_loss/op_host/arch35/mse_loss_tiling_arch35.cpp
行号: 107
问题代码:

size_t* currentWorkspace = tilingContext->GetWorkspaceSizes(1);
currentWorkspace[0] = static_cast<size_t>(ASCEND_WORKSPACE);

修改建议:

添加对GetWorkspaceSizes返回值的空指针检查,或者查阅相关文档确认其行为。如果无法确认,建议添加检查:
size_t* currentWorkspace = tilingContext->GetWorkspaceSizes(1);
if (currentWorkspace != nullptr) {
    currentWorkspace[0] = static_cast<size_t>(ASCEND_WORKSPACE);
}

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_nhwc_tiling.cpp
@@ -0,0 +310,4 @@
310+ }
311+ splitData.cOutputInner = bestSplit * baseData.proDataNumInOneBeatT2;
312+ return;
313+ }
CANN-robot
CANN-robot2025年12月29日评论:

代码结构与可维护性: 在SplitUnalignHWC函数第314行有一个多余的return语句,该函数在第312行已经有一个return,第314行的return永远不会执行,属于死代码。

问题类型: 代码结构与可维护性
文件路径: pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_nhwc_tiling.cpp
行号: 313
问题代码:

    }
    return;
}

修改建议:

删除第314行多余的return语句。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_nhwc_tiling.cpp
@@ -0,0 +21,4 @@
21+static constexpr int64_t FLOAT32_SIZE = 4;
22+static constexpr int64_t INT32_SIZE = 4;
23+static constexpr int64_t INT64_SIZE = 8;
24+static constexpr int64_t UB_RESVERVED_SIZE = 1024;
CANN-robot
CANN-robot2025年12月29日评论:

代码结构与可维护性: 第24行常量UB_RESVERVED_SIZE拼写错误,应该是UB_RESERVED_SIZE。虽然这不影响功能,但影响代码可读性和维护性。

问题类型: 代码结构与可维护性
文件路径: pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_nhwc_tiling.cpp
行号: 24
问题代码:

static constexpr int64_t UB_RESVERVED_SIZE = 1024;

修改建议:

将UB_RESVERVED_SIZE更正为UB_RESERVED_SIZE。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_nhwc_tiling.cpp
@@ -0,0 +310,4 @@
310+ }
311+ splitData.cOutputInner = bestSplit * baseData.proDataNumInOneBeatT2;
312+ return;
313+ }
CANN-robot
CANN-robot2025年12月29日评论:

冗余代码: 在 'SplitUnalignHWC' 函数的末尾,第314行有一个多余的 'return;' 语句。因为第312行已经有一个 'return;',所以第314行的 'return;' 永远不会被执行,是死代码。

问题类型: 冗余代码
文件路径: pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_nhwc_tiling.cpp
行号: 313
问题代码:

    }
    return;
}

修改建议:

删除第314行的冗余 'return;' 语句。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_tiling_base.cpp
@@ -0,0 +206,4 @@
206+ 
207+ const char* inputFormatPtr = runtimeAttrs->GetAttrPointer<char>(ATTR_INDEX_FORMAT);
208+ OP_CHECK_NULL_WITH_CONTEXT(context_, inputFormatPtr);
209+ if (strncmp(inputFormatPtr, "NCHW", sizeof("NCHW") / sizeof(char)) == 0) {
CANN-robot
CANN-robot2025年12月29日评论:

字符串比较问题: 第209行使用strncmp比较字符串,但sizeof("NCHW")/sizeof(char)计算的是5(包括空字符),而strncmp应该比较4个字符。这可能导致错误匹配。

问题类型: 字符串比较问题
文件路径: pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_tiling_base.cpp
行号: 209
问题代码:

    if (strncmp(inputFormatPtr, "NCHW", sizeof("NCHW") / sizeof(char)) == 0) {

修改建议:

建议使用strncmp(inputFormatPtr, "NCHW", 4) == 0,或者使用strcmp如果确定字符串以空字符结尾。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_tiling_base.h
@@ -0,0 +87,4 @@
87+ ge::graphStatus PostTiling() override;
88+ void PrintInputData() const;
89+ 
90+public:
CANN-robot
CANN-robot2025年12月29日评论:

代码结构与可维护性: 类MaxPoolGradWithArgmaxV3BaseTiling将inputData和hardwareData声明为public成员变量,这破坏了封装性。外部代码可以直接修改这些内部状态,可能导致对象处于不一致的状态。

问题类型: 代码结构与可维护性
文件路径: pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_tiling_base.h
行号: 90
问题代码:

public:
    MaxPoolGradWithArgmaxV3InputInfo inputData;
    MaxPoolGradWithArgmaxV3HardwareInfo hardwareData;

修改建议:

将这些成员变量改为private或protected,并提供必要的getter/setter函数来控制访问。如果确实需要公开访问,请添加注释说明理由。

此评论由代码审查工具自动生成

likedislike
CANN-robot
CANN-robot成员2025年12月29日进行代码检视1
pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_tiling_base.h
@@ -0,0 +13,4 @@
13+ * \brief
14+ */
15+ 
16+#ifndef AIR_CXX_RUNTIME_V2_OP_IMPL_MAX_POOL_GRAD_WITH_AGRMAX_V3_TILING_BASE_H_
CANN-robot
CANN-robot2025年12月29日评论:

代码结构与可维护性: 头文件保护宏名称中存在拼写错误:'AGRMAX'应为'ARGMAX'。这可能导致头文件保护失效,因为其他文件中可能使用正确的拼写。

问题类型: 代码结构与可维护性
文件路径: pooling/max_pool_grad_with_argmax_v3/op_host/arch35/max_pool_grad_with_argmax_v3_tiling_base.h
行号: 16
问题代码:

#ifndef AIR_CXX_RUNTIME_V2_OP_IMPL_MAX_POOL_GRAD_WITH_AGRMAX_V3_TILING_BASE_H_
#define AIR_CXX_RUNTIME_V2_OP_IMPL_MAX_POOL_GRAD_WITH_AGRMAX_V3_TILING_BASE_H_

修改建议:

将保护宏中的'AGRMAX'更正为'ARGMAX',确保与文件名和功能描述一致。

此评论由代码审查工具自动生成

likedislike
TangPC
TangPC成员
2025年12月29日 评论:

compile

likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

🔵 ops-nn pipeline is running. Please wait a moment... (Link 2065)

likedislike
CANN-robotCANN-robot成员
2025年12月29日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
2025年12月29日 评论:
Check Name Build Result Log Report Package Link
Anti Virus ✅ PASS >>> N/A
Codescan ✅ PASS >>> N/A
Code_Check ✅ PASS >>> N/A
likedislike
CANN-robotCANN-robot成员
2025年12月29日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
2025年12月29日 添加了label:ci-pipeline-failed
TangPC
TangPC成员
2025年12月29日 评论:

compile

likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

🔵 ops-nn pipeline is running. Please wait a moment... (Link 2074)
🔵 Already succeed task list is: [Anti_Virus, Check_pr, Code_Check, Codescan, Compile_Ascend_ARM, Compile_Ascend_ARM-single, Compile_Ascend_X86, UT_Test_kernel, check-commit-message, download-business-code], will not be build again this time !

likedislike
CANN-robotCANN-robot成员
2025年12月29日 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
2025年12月29日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
2025年12月29日 评论:
Check Name Build Result Log Report Package Link
CI_Ascend_Ops-Nn_Compile SUCCESS #2074 >>>
check-commit-message SUCCESS >>>
download-business-code SUCCESS >>>
Compile_Ascend_X86 SUCCESS >>> >>>
Compile_Ascend_ARM SUCCESS >>> >>>
Compile_Ascend_ARM-single SUCCESS >>> >>>
UT_Test_ophost SUCCESS >>>
UT_Test_opapi SUCCESS >>>
UT_Test_kernel SUCCESS >>>
Smoke_Test_A900 SUCCESS >>>
likedislike
CANN-robotCANN-robot成员
2025年12月29日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
2025年12月29日 添加了label:ci-pipeline-passed
wangyu_ai
2025年12月29日 评论:

/lgtm

likedislike
於欣洁成员
2025年12月29日 评论:

/approve

likedislike
sunday成员
2025年12月29日 评论:

/lgtm
/approve

likedislike
TangPC
TangPC成员
2025年12月29日 评论:

/check-pr

likedislike
CANN-robot
CANN-robot成员
2025年12月29日 评论:

The following labels are not ready.

lgtm: Please wait for reviewers to review the code.

approved: Please wait for committers to review the code.

likedislike
liubo75成员
2025年12月29日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
2025年12月29日 添加了label:lgtmapproved
CANN-robot
CANN-robot成员
2025年12月29日 评论:

Review Guide

This Pull-Request Passes Review.
Committers who writed a comment of /approve are: liubo75.
Reviewers who writed a comment of /lgtm are: yu-xinjie62, zhou-qilong, liubo75.

likedislike
CANN-robotCANN-robot成员
2025年12月29日 合入了pull request