已合并
解决issue 253 254 255 #1847
解决issue 253 254 255 #1847
已合并
jcmrn0930创建于 13 天前
jcmrn0930
13 天前

Pull Request

描述

解决issue 253 254 255
修复 Autofuse AscendC API 在尾块 Compare 和 Cast 场景中的两类问题:

  • CompareScalarExtendCompareExtend 处理不足一个 256B 块的尾块时,数据复制到 src_tmp[0] 后错误使用累计偏移 cnt 访问临时缓冲,可能导致越界访问。现统一从 src_tmp[0] 读取尾块数据。
  • CastExtendWithOneTransferWithMaskModeint64_thalf 转换分支中重新声明了外层变量,导致传入的 dtype size 保持为 0,进而触发整数除零。现改为对外层变量赋值。
  • 新增 Compare 小尾块及带 padding 的 int64_t -> half Cast 回归用例。

变更类型

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

关联的Issue

关联issue #253
关联issue #254
关联issue #255

如何测试

描述测试此变更的步骤和前提条件:
1.增量编译 AscendC API UT:cmake --build build --target test_ascendc_api -j 8
2.运行新增回归用例:./build/autofuse/tests/ut/ascendc/test_ascendc_api --gtest_filter='TestApiCompareUT.Compare_Eq_float_float_with_small_tail:TestApiCompareUT.Compare_Eq_input_tensor_float_output_float_with_small_tail:TestApiCast.Int64ToHalfWithPaddedLastDim'
测试结果:3 个用例全部通过。

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 jcmrn0930 的贡献)
Jjcmrn0930
13 天前 添加了label:enhancement
Jjcmrn0930
13 天前 创建了 pull request,commit 64608e1b
Jjcmrn0930
13 天前 关联了issue:【缺陷报告】数组索引越界 - 文件compare.h - 函数CompareScalarExtend - 行号394,【缺陷报告】数组索引越界 - 文件compare.h - 函数CompareExtend - 行号660,【缺陷报告】除零错误 - 文件cast.h - 函数CastExtendWithMaskMode - 行号170
atomgit-bot
atomgit-bot
13 天前 评论:

变更摘要

该 PR 用于解决 issue #253、#254、#255,主要针对 CastExtendCompare/CompareScalar 系列 API 在边界场景下的缺陷进行修复,并补充相应单元测试。核心改动包括:修复 autofuse/ascendc/api/cast.hCastExtendWithOneTransferWithMaskMode 的变量遮蔽问题,使 dtype 大小变量正确赋值到外层作用域;修复 autofuse/ascendc/api/compare.hCompareScalarExtendCompareExtend 尾部小块处理路径的错误缓冲区索引(src_tmp[cnt]src_tmp[0]);同时在 test_cast.cpptest_compare.cpp 中新增覆盖 padded last dim、small tail 等边界条件的测试用例。

主要改动

  • 修复 cast.h 变量遮蔽问题: 在 CastExtendWithOneTransferWithMaskMode 中,max_dtype_size_between_src_and_midmax_dtype_size_between_mid_and_dst 原先被重复声明为局部变量导致外层同名变量未被赋值,现改为直接给外层变量赋值,保证后续 CastExtendWithMaskMode 调用使用正确的 dtype 大小参数。
  • 修复 compare.h 缓冲区索引错误: 在 CompareScalarExtendCompareExtend 的尾部数据处理分支(left_cnt 不足一个 block)中,将数据源索引由 src_tmp[cnt] 修正为 src_tmp[0],与上方实际执行 DataCopy 写入的目标位置一致,避免读到未初始化数据。
  • 新增 cast 边界测试: 在 test_cast.cpp 中新增 Int64ToHalfWithPaddedLastDim 用例,通过 CastExtendWithMaskModeCalc 验证 int64_thalf 且末维按 block 对齐(stride 为 ONE_BLK_SIZE)时的转换正确性。
  • 新增 compare 边界测试: 在 test_compare.cpp 中新增 Compare_Eq_float_float_with_small_tailCompare_Eq_input_tensor_float_output_float_with_small_tail 两个用例,覆盖浮点数据比较时尾部不足一个 block(small tail)的场景,分别验证标量比较与张量比较路径。
likedislike
不准确?
atomgit-bot
atomgit-bot
13 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
此处折叠了88条消息 查看更多
shengnan成员
2 天前 评论:

/lgtm

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

/approve

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