已合并
fix: 修复 Gather 回绕及 BrcInline/Cast/Concat 截断(#256 #258 #259 #260) #1862
fix: 修复 Gather 回绕及 BrcInline/Cast/Concat 截断(#256 #258 #259 #260) #1862
已合并
m0_56712298创建于 8月28日
m0_56712298
m0_56712298
8月28日

Pull Request

描述

修复 v35 AscendC DataCopySimdSimt 在目的地址未按 32 字节对齐时的无符号长度回绕问题。

  • padding 分支仅复制 min(length, padding_elements) 个实际元素。
  • 当 length <= padding_elements 时完成实际元素复制后直接返回,避免无符号减法回绕。
  • 新增边界行为单元测试,校验目标元素正确且缓冲区其余元素未被写入。

同时修复 Issue #258 中 BrcInline repeat stride 的 uint8_t 截断问题。

  • repeat stride 超过 255 blocks 时回退到已有 counter 路径。
  • 可表示范围内继续使用 repeat 快路径。
  • 新增策略回归测试,验证两个外层位置均由 counter 路径处理。

同时修复 Issue #259 中 Cast repeat stride 的 uint8_t 截断问题。

  • 先以 uint32_t 计算输入、输出 repeat stride,避免窄化后再判断。
  • 任一 repeat stride 超过 255 blocks 时,按行调用已有普通 Cast 路径。
  • 可表示范围内继续使用 repeat 快路径。
  • 新增大输出 stride 回归测试,校验两行输出位置及 padding 区域未被额外写入。

同时修复 Issue #260 中 Concat tail mask 的 uint16_t 截断问题。

  • 以 uint32_t 保存 32 位 tail mask,避免写入 mask word 前丢失高 16 位。
  • 新增 GenMaskReg 高位保留回归测试,直接校验 8 个 uint32_t mask word。

变更类型

请选择本次引入的变更类型:

关联的Issue

GitCode 每个 PR 仅允许正式关联一个 Issue,因此保留原 #256 的正式关联,并在此记录 #258、#259、#260。

如何测试

描述测试此变更的步骤和前提条件:

  1. cmake --build build --target test_ascendc_api_v35 -j 8:通过。
  2. test_ascendc_api_v35 --gtest_filter=TestApiGather.DataCopySimdSimtSmallLengthWithinPadding --gtest_brief=1:1/1 通过。
  3. test_ascendc_api_v35 --gtest_brief=1:352/352 通过。
  4. bash scripts/oat_check.sh:#256 的三个变更文件检查通过。
  5. test_ascendc_api --gtest_filter=TestApiBroInline.*:15/15 通过。
  6. bash scripts/oat_check.sh autofuse/ascendc/api/brc_inline_api.h autofuse/tests/ut/ascendc/api/test_brc_inline_api.cpp:#258 的两个变更文件检查通过。
  7. test_ascendc_api --gtest_filter=TestApiCast.LargeDstRepeatStrideFallsBackToLoop:1/1 通过。
  8. test_ascendc_api --gtest_filter='*Cast*':43/43 通过。
  9. test_ascendc_api:456/456 通过。
  10. bash scripts/oat_check.sh autofuse/ascendc/api/cast.h autofuse/tests/ut/ascendc/api/test_cast.cpp:#259 的两个变更文件检查通过。
  11. cmake --build build --target test_ascendc_api_v35 -j 8:#260 增量编译通过。
  12. test_ascendc_api_v35 --gtest_filter='RegbaseApiConcatTest.*':2/2 通过。
  13. bash scripts/oat_check.sh autofuse/v35/ascendc/api_regbase/concat.h autofuse/tests/v35/ut/ascendc/api_regbase/test_concat.cpp:#260 的两个变更文件检查通过。

核对清单

其他信息

本次 PR 包含 #256、#258、#259 和 #260 四个独立 fix: commit,不涉及 API/ABI、图改写、构建交付或运行时接口变更。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 m0_56712298 的贡献)
m0_56712298m0_56712298
8月28日 创建了 pull request,commit d6923a63
m0_56712298m0_56712298
8月28日 关联了issue:【缺陷报告】整数溢出(含上溢出/下溢出) - 文件gather.h - 函数DataCopySimdSimt - 行号484,【缺陷报告】数据类型截断 - 文件brc_inline_api.h - 函数BinaryBrcInlineApiWithTwoVectorizedAxis - 行号43,【缺陷报告】数据类型截断 - 文件cast.h - 函数CastExtendWithMaskMode - 行号134,【缺陷报告】数据类型截断 - 文件concat.h - 函数GenMaskReg - 行号256
atomgit-bot
atomgit-bot
8月28日 评论:

变更摘要

本 PR 集中修复 AscendC 算子 API 的四个缺陷(#256、#258、#259、#260):一是修复 v35 DataCopySimdSimt 在目的地址未按 32 字节对齐时,padding 分支的无符号长度回绕问题;二是修复 BrcInline 与 Cast 的 repeat stride 经 uint8_t 窄化导致的截断问题;三是修复 Concat 的 GenMaskReg tail mask 经 uint16_t 窄化导致的高 16 位丢失问题。四个修复均为纯代码级 bug 修复,不涉及 API/ABI、图改写或运行时接口变更,并各自补充了针对性的单元/回归测试。

主要改动

  • 修复 Gather 未对齐 padding 分支的无符号回绕:DataCopySimdSimt 的 padding 分支改为仅复制 min(length, padding_elements) 个实际元素;当 length <= padding_elements 时复制完成后直接返回,否则先推进 dst_p/src_p 并扣减 length,避免无符号减法回绕导致异常行为。
  • 修复 BrcInline repeat stride 截断:BinaryBrcInlineApiWithTwoVectorizedAxis 先以 int64_t 计算 repeat_stride_in_blocks,当超出 255 blocks 时回退到既有 counter 循环路径,可表示范围内才窄化为 uint8_t 继续走 repeat 快路径。
  • 修复 Cast repeat stride 截断:CastExtendWithMaskMode 先以 uint32_t 计算输入、输出 repeat stride,任一超过 MAX_REPEAT_TIMES 时按行调用普通 AscendC::Cast 路径,可表示范围内再窄化为 uint8_t。
  • 修复 Concat tail mask 高 16 位丢失:GenMaskReg 将 tail_mask 由 uint16_t 改为 uint32_t,避免写入 mask word 前高 16 位被截断。
  • 新增回归测试:新增 test_gather.cpp(未对齐小长度场景,校验目标元素正确且缓冲区其余元素未被写入),并在 test_brc_inline_api.cpp、test_cast.cpp、test_concat.cpp 中新增用例,分别校验 counter 路径回退、两行输出位置及 padding 区域未额外写入、8 个 uint32_t mask word 的高位保留。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月28日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月28日 添加了label:stat/needs-squash
此处折叠了78条消息 查看更多
wangxiaotian995成员
26 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
26 天前 添加了label:lgtm
yangyongqiang
yangyongqiang成员
25 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
25 天前 添加了label:approved
CANN-robotCANN-robot成员
25 天前 合入了pull request