已关闭
fix(a2a3): TConcatImpl isAligned 路径 src1 非对齐时 padding 污染 dst #544
wangrunfa创建于  25 天前关闭于  17 天前
wangrunfa
wangrunfa
25 天前 创建

问题描述

TConcatImpl 的 isAligned 路径中,pto_copy_ubuf_to_ubuf 使用 ceil 对齐的 block 长度拷贝 src1 数据。当 validCol1 * sizeof(T) 不是 32 字节对齐时(如 int8 + validCol1=16),会多拷贝 src1 的 padding 垃圾值到 dst 的 padding 区域,导致全量比较失败。

复现条件

  • 数据类型 int8,validCol0 对齐(如 32),validCol1 非 32B 对齐(如 16)
  • dstTileH > vRows 时 padding 区域被污染

错误模式

dst row: [src0 valid (32)] [src1 valid (16)] [src1 padding 垃圾 (16)]
                                          ↑ 应该是 0,但被 src1 padding 污染

影响范围

  • include/pto/npu/a2a3/TConcat.hpp 的 TConcatImpl 函数 isAligned 分支
  • 仅影响 validCol0 对齐且 validCol1 不对齐的场景

修复方案

  1. TConcat.hpp: isAligned 路径 copy src1 后,添加 dst padding 清零逻辑(scalar pipe + pipeline sync)
  2. main.cpp: kernel 启动前用 memset + aclrtMemcpy + aclrtSynchronizeStream 清零 dst 设备内存
  3. 新增 5 条 ST 用例覆盖 int8、非对齐列、dstTileH ≠ srcTileH 场景

测试结果

全部 14 条 TCONCAT ST 用例 NPU 板端通过,max diff = 0。

likedislike
wangrunfawangrunfa
25 天前 添加了label:bug
wangrunfawangrunfa
25 天前 修改了issue 的描述
Zzoujiangjiang成员
24 天前 将 wangrunfa 设为负责人
Zzhangjian_hz11成员
17 天前 issue状态由 进行中 改变为 已完成
Zzhangjian_hz11成员
17 天前 关闭了 issue
CANN-robotCANN-robot成员
17 天前 添加了label:resolved