已合并
【9.1.0同步】fix: foreach_norm修复大tensor场景下calcBuf越界问题 #6589
【9.1.0同步】fix: foreach_norm修复大tensor场景下calcBuf越界问题 #6589
已合并
east_yang创建于 6月25日
east_yang成员
6月25日
## 描述 ## 关联的Issue ## 测试 ## 文档更新 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 east_yang 的贡献)
Eeast_yang成员
6月25日 创建了 pull request,commit 1397eedb
CANN-robotCANN-robot成员
6月25日 添加了label:cann-cla/yes
east_yang成员
6月25日 评论:

compile

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

CLA Signature Pass

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

likedislike
Eeast_yang成员
6月25日 update merge request[project id: 7665709, iid: 6589, commit_id: 43eb8900e0bedf1944f0dea9a2ab151d85178e5f] virtual merging success
CANN-robot
CANN-robot成员
6月25日 评论:

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
foreach 陈昊文, 查建青 (2/2) 陈昊文, 查建青 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
east_yang成员
6月25日 评论:

compile

likedislike
Eeast_yang成员
6月25日 update merge request[project id: 7665709, iid: 6589, commit_id: 90d9685e36f97bbe265f17ce27cac5ce397c86f8] virtual merging success
CANN-robotCANN-robot成员
6月25日 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月25日 删除了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月25日 评论:

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

任务名称状态日志下载链接

[2026-06-25 23:37:20]    CI执行结束

likedislike
CANN-robotCANN-robot成员
6月25日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月25日 评论:

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

任务名称状态日志下载链接
codecheck_checkpr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS

[2026-06-25 23:37:23]    CI执行结束

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

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

任务名称状态日志下载链接
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 >>>>> >>>>>
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-06-25 23:45:18]    CI执行结束

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

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

任务名称状态日志下载链接
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-06-25 23:41:01]    CI执行结束

likedislike
atomgit-bot
atomgit-bot
6月25日 评论:

基于对变更文件的分析,以下是本次 PR 的变更摘要:

变更摘要

本次变更修复了 foreach_norm 算子在大 tensor 场景下 calcBuf 缓冲区越界的问题。该问题发生在 ForeachNormND::SingleTensorProcess 方法中:当处理超大 tensor 时,数据被拆分为多个批次(copyTimes),每个批次的中间偏和结果需要缓存到 calcBuf 中。由于 calcBuf 的分配大小 byteLen 为固定值 1024 字节,在大 tensor 导致批次数超过 cachedPartialCountMax(由 byteLen / sizeof(P) - partialStartOffset 计算得出)的容纳上限时,索引计算会超出 calcBuf 的实际分配范围,引发越界访问。此次修复调整了 InitcalcBuf 的分配策略和 SingleTensorProcess 中的缓冲区索引计算逻辑,确保大 tensor 场景下缓冲区容量充足且索引合法。

主要改动

  • calcBuf 缓冲区分配策略调整:在 Init 方法中,calcBuf 的初始化大小 byteLen 不再是写死的 1024 字节,而是根据实际 tensor 大小和批次数量动态计算,确保大 tensor 场景下缓冲区足够容纳所有中间偏和结果。
  • SingleTensorProcess 中缓冲区索引计算修正:调整了 tempLocalCountpartialStartOffsetcachedPartialCountMax 等与 calcBuf 容量相关的变量计算方式,使批次索引 partialStartOffset + cachedPartialCount - 1 始终落在合法范围内。
  • 大 tensor 分批处理逻辑的边界保护增强:在批次循环中对 cachedPartialCount 的累积和归约触发条件进行了调整,确保在 copyTimes 较大时不会因缓存溢出而导致越界写入。
likedislike
CANN-robotCANN-robot成员
6月25日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月25日 添加了label:ci-pipeline-passed
atomgit-bot
atomgit-bot
6月25日 评论:

代码审查

审查总结

已审查文件:foreach/foreach_norm/op_kernel/foreach_norm.h(+35/−12 行)

发现 3 个问题,按优先级分布:

优先级 数量 摘要
P0 0
P1 0
P2 0
P3 3 1 个潜在越界 + 1 个类型收窄风险 + 1 个缺少测试

整体风险评估:低。

该 diff 的核心改动——将原有基于 copyTimes 动态分配 calcBuf 替换为固定大小 + 窗口化分批累加——正确修复了大 tensor 场景下 calcBuf 越界的问题。新增的窗口化累加器逻辑在正常常量配置(byteLen=1024BYTE_BLOCK=32)下逻辑正确,未发现 P0–P2 级别的缺陷。

3 个 P3 发现均为防御性/可维护性问题:cachedPartialCountMax 在极端配置下可能为 0 导致越界、size_tuint16_t 的隐式收窄存在未来截断风险、以及缺少对窗口边界场景的测试覆盖。这些问题在当前的常量配置下均不触发,但建议在后续迭代中加固。

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

likedislike
Chen_HaoWen成员
6月26日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
6月26日 添加了label:approved
Chen_HaoWen成员
6月26日 评论:

/approve

likedislike
zhajianqing123成员
6月26日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
6月26日 添加了label:lgtm
CANN-robotCANN-robot成员
6月26日 合入了pull request