已合并
解决issue 253 254 255 #1847
jcmrn0930创建于 13 天前
解决issue 253 254 255 #1847
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 jcmrn0930 的贡献)13 天前 关联了issue:【缺陷报告】数组索引越界 - 文件compare.h - 函数CompareScalarExtend - 行号394,【缺陷报告】数组索引越界 - 文件compare.h - 函数CompareExtend - 行号660,【缺陷报告】除零错误 - 文件cast.h - 函数CastExtendWithMaskMode - 行号170
atomgit-bot
13 天前 评论:
13 天前 评论:
变更摘要
该 PR 用于解决 issue #253、#254、#255,主要针对 CastExtend 与 Compare/CompareScalar 系列 API 在边界场景下的缺陷进行修复,并补充相应单元测试。核心改动包括:修复 autofuse/ascendc/api/cast.h 中 CastExtendWithOneTransferWithMaskMode 的变量遮蔽问题,使 dtype 大小变量正确赋值到外层作用域;修复 autofuse/ascendc/api/compare.h 中 CompareScalarExtend 与 CompareExtend 尾部小块处理路径的错误缓冲区索引(src_tmp[cnt] → src_tmp[0]);同时在 test_cast.cpp、test_compare.cpp 中新增覆盖 padded last dim、small tail 等边界条件的测试用例。
主要改动
- 修复
cast.h变量遮蔽问题: 在CastExtendWithOneTransferWithMaskMode中,max_dtype_size_between_src_and_mid与max_dtype_size_between_mid_and_dst原先被重复声明为局部变量导致外层同名变量未被赋值,现改为直接给外层变量赋值,保证后续CastExtendWithMaskMode调用使用正确的 dtype 大小参数。 - 修复
compare.h缓冲区索引错误: 在CompareScalarExtend与CompareExtend的尾部数据处理分支(left_cnt不足一个 block)中,将数据源索引由src_tmp[cnt]修正为src_tmp[0],与上方实际执行DataCopy写入的目标位置一致,避免读到未初始化数据。 - 新增 cast 边界测试: 在
test_cast.cpp中新增Int64ToHalfWithPaddedLastDim用例,通过CastExtendWithMaskModeCalc验证int64_t转half且末维按 block 对齐(stride 为ONE_BLK_SIZE)时的转换正确性。 - 新增 compare 边界测试: 在
test_compare.cpp中新增Compare_Eq_float_float_with_small_tail与Compare_Eq_input_tensor_float_output_float_with_small_tail两个用例,覆盖浮点数据比较时尾部不足一个 block(small tail)的场景,分别验证标量比较与张量比较路径。


不准确?
atomgit-bot
13 天前 评论:
13 天前 评论:
此处折叠了88条消息 查看更多
2 天前 添加了label:lgtm
yangyongqiang
2 天前 评论:
2 天前 评论:
/approve


2 天前 添加了label:approved
2 天前 合入了pull request
Pull Request
描述
解决issue 253 254 255
修复 Autofuse AscendC API 在尾块 Compare 和 Cast 场景中的两类问题:
CompareScalarExtend和CompareExtend处理不足一个 256B 块的尾块时,数据复制到src_tmp[0]后错误使用累计偏移cnt访问临时缓冲,可能导致越界访问。现统一从src_tmp[0]读取尾块数据。CastExtendWithOneTransferWithMaskMode在int64_t与half转换分支中重新声明了外层变量,导致传入的 dtype size 保持为 0,进而触发整数除零。现改为对外层变量赋值。int64_t -> halfCast 回归用例。变更类型
请选择本次引入的变更类型:
关联的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 的说明。