已合并
add GradientAcc membar #8382
add GradientAcc membar #8382
已合并
liuchuangdev创建于 8月7日
liuchuangdev成员
8月7日

描述

修复 MaxPoolGradWithArgmaxV3 NCHW 标量 kernel(arch35)在固定输入下偶发出现的精度错误。

根因

max_pool_grad_with_argmax_v3_nchw_scalar.h 中,输出缓冲 yLocal 被 Vector(清零/类型转换)、Scalar(标量累加)、MTE(DMA 拷贝) 三种执行单元交错访问。原实现仅用 SetFlag/WaitFlag 同步了 DMA 相关事件(MTE2_S/S_MTE3),缺少 Vector ↔ Scalar 之间的内存有序性保证:

  • Duplicate(yLocal, 0)(Vector 清零)完成后,标量累加立即 GetValue 读 yLocal,可能读到 UB 中未清零的旧值;
  • 非 float(fp16/bf16)时,标量累加写 yLocal 后,结尾 Vector Cast 读 yLocal 做类型转换,可能读到部分累加结果。

由于以上竞争依赖硬件流水线时序,同输入多次运行结果不同(偶发)。

修复方法

在关键执行单元边界补充精准的硬事件同步(与同算子族 arch35 实现一致,如 pool_3d_common、adaptive_avg_pool3d_grad):

  1. 在标量累加(写 yLocal)前加 V_S(Vector→Scalar)事件,确保 Vector 清零完成后 Scalar 才读 yLocal;
  2. 在非 float 的 Vector Cast 前加 S_V(Scalar→Vector)事件,确保标量累加完成后再做类型转换。

不改动任何计算逻辑与坐标索引。

关联的Issue

#4642

测试

问题用例测试、冒烟测试

文档更新

无。

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liuchuangdev 的贡献)
Lliuchuangdev成员
8月7日 创建了 pull request,commit e85c9365
atomgit-bot
atomgit-bot
8月7日 评论:

变更摘要

此 PR 在 GradientAcc 模板函数中新增了一条 LocalMemBar 内存屏障指令,用于确保在向量存储(VEC_STORE)与向量加载(VEC_LOAD)之间的内存访问顺序正确,防止后续 DataCopyGather 操作因乱序访问而读到过时数据。

主要改动

  • 在 GradientAcc 中添加向量级内存屏障:于 pooling/pool_grad_common/op_kernel/arch35/max_pool_grad_with_argmax_base_common.h 的 GradientAcc 函数内,在 DataCopyGather 调用之前新增 MicroAPI::LocalMemBar<MicroAPI::MemType::VEC_STORE, MicroAPI::MemType::VEC_LOAD>(),确保此前的向量存储操作全部完成后再执行后续的向量加载,避免数据竞争。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月7日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月7日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月7日 评论:

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
pooling ✅ 黄迪, 汤平川 (2/2) ✅ 汤平川, 黄迪 (2/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
此处折叠了59条消息 查看更多
CANN-robotCANN-robot成员
8月10日 添加了label:approved
TangPC
TangPC成员
8月10日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
8月10日 添加了label:lgtm
CANN-robotCANN-robot成员
8月10日 关闭了关联的issue
CANN-robotCANN-robot成员
8月10日 合入了pull request