Closed
[Bug-Report|缺陷反馈]: Concat SIMT 模板 0 维 tensor tiling 除零,pure_copy 行批次超 uint16 致 blockCount 截断丢行 #4630
zhanglei842Add on 1 day agoClosed at 1 day ago
1 day ago Added label: bug-report
1 day ago Associated pull request
1 day ago Modify description of issue
1 day ago Close issue
1 day ago changed custom state from 待办的 to 已完成
1 day ago Added label: resolved
一、问题描述 (必填)
Concat 算子存在两处缺陷:
SIMT 模板 tiling 除零崩溃:
IsEnableUsedSimt(conversion/concat/op_host/arch35/concat_tiling_arch35.cpp)遍历tensorListDim1时直接执行maxDim1 / minDim1。当输入列表中存在 dim1 为 0 的 tensor(0 维/空 tensor)时,host 侧整数除零,tiling 进程异常终止,算子无法正常编译下发。pure_copy 路径 blockCount 截断丢行:
OneAxisConcatPureCopy::ProcessSingleTensor(conversion/concat/op_kernel/arch35/one_axis_concat_pure_copy.h)中rowFactor = bufferSize / colFactor,bufferSize为 UB 容量按 dtypeSize 折算的元素数(concat_tiling_arch35.cpp:1414)。当totalCols极小(如 dim1=1)时rowFactor可超过 65535,而CopyInSingleTensor/CopyOutSingleTensor下发DataCopyPad的blockCount(copyInParam_/copyOutParam)为 uint16,超限的copyRows被截断(如 65536→0),实际拷贝行数不足,输出静默丢行、结果错误。二、环境信息 (可选)
代码变更位于 arch35 专属代码路径(
op_host/arch35、op_kernel/arch35),未指定特定硬件/CANN 版本。三、重现步骤 (可选)
IsEnableUsedSimt内maxDim1 / minDim1除零,host 进程异常;bufferSize / totalCols > 65535),blockCount(uint16)截断,DataCopyPad实际拷贝行数不足,输出丢行。四、预期结果 (可选)
💡 备注:修复见关联 PR:
IsEnableUsedSimt循环内新增minDim1 == 0时提前return false,禁用 SIMT 模板规避除零;ProcessSingleTensor中新增rowFactor > UINT16_MAX时钳制为UINT16_MAX(blockCount 为 uint16),保证批次行数不越界。