Closed
[Bug-Report|缺陷反馈]: 长尾算子质量加固-space_to_batch: 补充 BF16 支持、入参/溢出校验与 golden/UT 覆盖,修正 README 批次映射 #4456
gylAdd on  6 days agoClosed at  1 day ago
gyl
gylCollaborators
6 days ago Create

一、问题描述 (必填)

长尾算子 SpaceToBatch(conversion/space_to_batch)在质量加固过程中发现以下缺陷与风险,需补齐:

  1. 数据类型覆盖不全:算子定义/IR 仅注册 9 种数据类型,缺少 BFLOAT16,README 与 proto 注释也未包含 BF16。
  2. 入参校验缺失:
    • Tiling 未校验输入 x 各维度必须为正,零长度维会进入后续计算;
    • InferShape 未校验 paddings 元素个数必须为 2×2;
    • InferShape 未校验 H/W padding 后能否被 block_size 整除,可能输出错误 shape。
  3. 整数溢出风险:Tiling/InferShape 中 H_padded、W_padded、输出 N 等加乘直接运算,超大 shape/padding 会溢出;Kernel 中 totalCount/perCoreCount/索引使用 uint32,大 shape 下可能截断。
  4. Kernel 边界处理:perCoreCount 为 0 时未提前返回。
  5. 文档错误:README 坐标映射公式有误(n=n_out/(bsbs)、bh=(n_out%(bsbs))/bs、bw=n_out%bs),与实际“batch 维变化最快”的语义不符;应为 n=n_out%N、rem=n_out/N、bh=rem/bs、bw=rem%bs。
  6. 测试覆盖不足:golden 仅 numpy 实现,缺少 TF 对齐与 dtype 覆盖;UT 缺少零 N/H/C 维用例。

二、环境信息 (可选)

• 昇腾硬件型号:Ascend 950(arch35)
• CANN版本:待补充
• 操作系统:待补充
• 其他相关软件版本:待补充

三、重现步骤 (可选)

  1. 编译并安装 conversion/space_to_batch 算子。
  2. 构造 x 含 0 维(如 {1,0,4,8})、paddings 元素个数非 4、或 H_padded 不能被 block_size 整除的用例。
  3. 调用 Tiling / InferShape 或 aclnn 接口。

四、预期结果 (可选)

  • 非法输入(0 维、paddings 非[2,2]、不可整除、溢出)在 Tiling/InferShape 阶段明确报错并返回失败,不产生错误 shape 或越界访问。
  • x 支持 BFLOAT16,输出 dtype 与 x 一致。
  • 大 shape 下索引不因 uint32 截断,结果正确。
  • README 坐标映射与 kernel 实现一致。

💡 备注(选填)
本次修改涉及:

  • op_host/arch35/space_to_batch_tiling.cpp:新增维度正数校验与加法/乘法溢出保护、perCoreCount 零值校验;
  • op_host/space_to_batch_infershape.cpp:paddings [2,2] 校验、维度正数校验、溢出保护、整除校验;
  • op_host/space_to_batch_def.cpp、op_graph/space_to_batch_proto.h、README.md:新增 BFLOAT16;
  • op_kernel/arch35/space_to_batch.h:索引 uint32→uint64、perCoreCount 零值提前返回;
  • README.md:修正输出批次映射公式与约束说明;
  • examples/test_geir_space_to_batch.cpp:文件二进制读写、错误处理与资源释放;
  • tests/assets/golden.py:TF 优先 + Torch fallback,补充 spec/third_party/tolerance;
  • tests/ut/op_host/arch35/test_space_to_batch_tiling.cpp:新增零 N/H/C 维失败用例。
likedislike
gylgylCollaborators
6 days ago Added label: bug-report
gyl
gylCollaborators
6 days ago Comments:

/assign @guyunlong1

likedislike
CANN-robotCANN-robotCollaborators
6 days ago Assign guyunlong1 as responsible person
gylgylCollaborators
6 days ago Associated pull request
CANN-robotCANN-robotCollaborators
1 day ago Close issue
CANN-robotCANN-robotCollaborators
1 day ago changed custom state from 进行中 to 已完成
CANN-robotCANN-robotCollaborators
1 day ago Added label: resolved