已合并
修复tensor_equal某些场景下判断失效问题 #3910
m0_46386992创建于 7月8日
修复tensor_equal某些场景下判断失效问题 #3910
已合并
m0_46386992创建于 7月8日
m0_46386992
m0_46386992
7月8日

描述

修复tensor_equal在非int8的整型比较场景下的比较结果异常问题 & 修改算子图原型定义中将DT_INT16误写为DT_IN16的问题(关联issue https://gitcode.com/cann/ops-math/issues/2197)

根因分析

tensor_equal算子在整型模板下,会将其转化为uint8_t粒度进行比较,原有代码在CopyIn搬运数据过程中,对于GM offset的计算未同步调整,导致当整型长度大于8时,尾部元素无法参与比较,进而出现精度问题

变更内容

  1. 修改 算子图原型定义的笔误,将DT_IN16改为DT_INT16
  2. 在CopyIN取数过程中,纠正offset的计算,将offset 先乘 (SIZEOF(T) / SIZEOF(InputType))后再取数

测试

ST、冒烟测试通过

文档更新

不涉及

类型标签

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

变更摘要

此PR修复了 TensorEqualKernel::CopyIn 中因 GM 地址偏移计算错误导致 tensor_equal 在某些场景下判断失效的问题。当模板类型 TInputType 的字节大小不一致时,原先直接使用 offset 索引访问 inputXGm_inputYGm_ 会产生错误的全局内存地址,导致数据拷贝到错误的 Local Tensor 上,进而使相等性判断结果不正确。修复方案引入 gmOffset,通过 offset * (sizeof(T) / sizeof(InputType)) 对偏移量进行缩放,确保 DataCopyPad 从正确的 GM 地址读取数据。

主要改动

  • TensorEqualKernel<T>::CopyIn 中 GM 偏移计算修复:新增 gmOffset = offset * (sizeof(T) / sizeof(InputType)),并将 DataCopyPad 调用中的索引从 offset 替换为 gmOffset,解决当 TInputType 大小不同时 GM 地址计算错误导致的 tensor_equal 判断失效问题。
likedislike
atomgit-bot
atomgit-bot
7月8日 评论:

代码审查

✅ 未发现问题

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

CLA Signature Pass

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

likedislike
此处折叠了63条消息 查看更多
llimwang成员
7月13日 评论:

/approve

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

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
黄迪

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