已合并
修复avg_pool在divisorOverride为负数时,计算逻辑错误问题 #6931
klein8793创建于 7月2日
修复avg_pool在divisorOverride为负数时,计算逻辑错误问题 #6931
已合并
klein8793创建于 7月2日
klein8793
klein8793成员
7月2日

描述

修复avg_pool在divisorOverride为负数时,计算逻辑错误问题

关联的Issue

关联Issue #3816

测试

问题用例已回归通过,白盒测试、david冒烟、obp冒烟均已通过

文档更新

NA

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:

AI/Agent生成声明

  • AI辅助编写
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 klein8793 的贡献)
klein8793klein8793成员
7月2日 创建了 pull request,commit a3dba66a
CANN-robotCANN-robot成员
7月2日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月2日 评论:

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
** gcw_kUomxQ2l, 陈琦 (2/2) gcw_kUomxQ2l (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
klein8793
klein8793成员
7月2日 评论:

compile

likedislike
klein8793klein8793成员
7月2日 update merge request[project id: 7665709, iid: 6931, commit_id: f88042ab5a6bf6fa15ac24162099cf84e657c36d] virtual merging success
CANN-robotCANN-robot成员
7月2日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月2日 评论:

流水线任务触发成功
任务链接 [c9203a28e59d4378b533ec9460ffa7ac][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86_mobile_station ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_experimental ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950 ✅ SUCCESS >>>>> >>>>>
Compile_Pre ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-nn ✅ SUCCESS >>>>>
UT_Test_ophost ✅ SUCCESS
UT_Test_opapi ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
UT_Test_opgraph ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-02 19:33:15]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月2日 评论:

流水线任务触发成功
任务链接 [705b8a8ab5894f1782810610c3493c4b][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_style ✅ SUCCESS >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>
SCA ✅ SUCCESS >>>>>

[2026-07-02 19:27:52]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月2日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月2日 添加了label:ci-pipeline-passed
atomgit-bot
atomgit-bot
7月2日 评论:

变更摘要

该 PR 修复了 avg_pool 算子中当 divisorOverride 为负数时平均池化计算逻辑错误的问题。原代码中条件判断 tilingData_->divisorOverride > 0 仅在 divisorOverride 为正数时使用自定义除数,负数情况会落入错误的 else 分支,导致 mulsFactor_ 计算不正确。修改后将条件改为 tilingData_->divisorOverride(即非零判断),使得负数除数也能正确走 divisorOverride 分支,按 1.0f / divisorOverride 计算乘法因子。

主要改动

  • avg_pool_big_kernel.h 条件判断修正: 在 AvgPoolBigKernel<T>::CalcKernelSize 中,将 if (tilingData_->divisorOverride > 0) 改为 if (tilingData_->divisorOverride),使负数 divisorOverride 也能被识别为有效的自定义除数。
  • avg_pool_big_kernel_nhwc.h 条件判断修正: 在 AvgPoolNhwcBigKernel<T>::CalcKernelSize 中做了相同的修改,确保 NHWC 布局下的行为与 NCHW 布局保持一致。
likedislike
atomgit-bot
atomgit-bot
7月2日 评论:

代码审查

审查总结

优先级 数量
P0 0
P1 0
P2 2
P3 0

已审查文件清单

  • pooling/avg_pool/op_kernel/arch35/avg_pool_big_kernel.h — 1 个 P2 发现(第 141 行)
  • pooling/avg_pool/op_kernel/arch35/avg_pool_big_kernel_nhwc.h — 1 个 P2 发现(第 161 行)

总体风险评估:低风险。变更本身很小(仅两处比较运算符修改),目的是使 big kernel 对 divisorOverride 的判断与 SIMT kernel 及小 kernel tiling 保持一致(从 > 0 改为 truthiness / != 0)。这一致性修复是合理的,但暴露了一个系统级校验缺失:整个代码库均未在 host 侧校验 divisorOverride >= 0,若负数传入 kernel 端会导致输出被取反。旧代码在 big kernel 路径中通过 > 0 守卫避免了此问题,新代码移除了该守卫,将此路径与其他 kernel 路径对齐。建议在 host 侧 tiling 初始化阶段统一增加 divisorOverride >= 0 的校验。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
klein8793klein8793成员
7月3日 修改了pull request 的描述
chenqi317成员7月4日进行代码检视2
pooling/avg_pool/op_kernel/arch35/avg_pool_big_kernel.h
@@ -139,3 +139,3 @@
139139 curInOffset = curNc * inHW_ + curOriginIndex_;
140140 
141- if (tilingData_->divisorOverride > 0) {
141+ if (tilingData_->divisorOverride) {
chenqi3177月4日评论:

修改后 上下文逻辑不通顺

1、判断不为0 应该使用 if(xxx != 0)
2、修改后 第一个条件和最后一个esle 等价,但是逻辑不通 若最后一个else 不需要 请删掉

最后建议
if(xxx == 0) {
} else {

likedislike
klein8793
klein8793成员
7月6日 评论:
likedislike
klein8793klein8793成员
7月6日 解决了最后一个问题
chenqi317成员
7月6日 评论:

/lgtm
/approve

likedislike
liulun0308成员
7月6日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月6日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
7月6日 删除了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
7月6日 评论:

The following label is not ready.

ci-pipeline-passed: The ci-pipeline-passed label is expired. Please compile again.

likedislike
klein8793
klein8793成员
7月6日 评论:

/compile

likedislike
klein8793klein8793成员
7月6日 update merge request[project id: 7665709, iid: 6931, commit_id: cef60c89e7cfb5ef8d9472ec4fd3d67eab96055b] virtual merging success
CANN-robotCANN-robot成员
7月6日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [1396a2f304cf4820a4bc4f934a212a38][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86_mobile_station ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_experimental ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950 ✅ SUCCESS >>>>> >>>>>
Compile_Pre ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-nn ✅ SUCCESS >>>>>
UT_Test_ophost ✅ SUCCESS
UT_Test_opapi ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
UT_Test_opgraph ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-06 16:08:43]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [7bab7d958ae54e9b9b54b92050e30782][流水线指导]

任务名称状态日志下载链接
codecheck ❌ FAILED None
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_style ✅ SUCCESS >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>
SCA ✅ SUCCESS >>>>>
likedislike
CANN-robotCANN-robot成员
7月6日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月6日 添加了label:ci-pipeline-failed
klein8793
klein8793成员
7月6日 评论:

/compile

likedislike
klein8793klein8793成员
7月6日 update merge request[project id: 7665709, iid: 6931, commit_id: 0a5b72d38de52b420693366183dcb87e867ee270] virtual merging success
CANN-robotCANN-robot成员
7月6日 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
7月6日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [c5f4190dde4f4af5b44b02a2a3cf421d][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86_mobile_station ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_experimental ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_950 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_950 ✅ SUCCESS >>>>> >>>>>
Compile_Pre ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-nn ✅ SUCCESS >>>>>
UT_Test_ophost ✅ SUCCESS
UT_Test_opapi ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
UT_Test_opgraph ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-06 16:28:34]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [064ae06bf23e4cb7a05cfc689137d8ef][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_style ✅ SUCCESS >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>
SCA ✅ SUCCESS >>>>>

[2026-07-06 16:24:21]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月6日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月6日 添加了label:ci-pipeline-passed
CANN-robotCANN-robot成员
7月6日 关闭了关联的issue
CANN-robotCANN-robot成员
7月6日 合入了pull request
CANN-robot
CANN-robot成员
7月6日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike