已开启
fix(math): 修复 add/sub/mul 静态检查发现的实现与交付缺陷 #2
hahaha22创建于 9月21日
fix(math): 修复 add/sub/mul 静态检查发现的实现与交付缺陷 #2
已开启
hahaha22创建于 9月21日
hahaha22成员
9月21日

背景

基于 CannbotHarness ascendc-operator-validation 静态检查(commit 3d155126f,84 项检查 × 3 算子)发现的实锤缺陷修复,共 4 个提交。

修复内容

fix(add)

  • InferDataTypeForAdd 增加失败分支:原先对无法类型提升的组合(如 string 混合)无条件返回 GRAPH_SUCCESS,输出 DT_UNDEFINED 仍判成功,与接口资料承诺的报错语义不符;现返回 GRAPH_FAILED 并记录日志。
  • 修正 CheckDtype 诊断文案复制粘贴错误:第二处 "x2 is float and x2 is float16" 应为 x1。
  • COMPLEX64/32 host 调度模板与内核 complex 实例化的等价关系补充注释(静态检查曾误判为整数加法,实际内核按 complex64/complex32 实例化执行 Vec::Add,构建产物 Add_COMPLEX32/64 已验证)。

fix(sub)

  • CheckInplace 错误码修复:声明返回 aclnnStatus 但错误路径 return false,隐式转为 0(== ACLNN_SUCCESS),导致空指针与广播失败检查被击穿(CHECK_RET(ret == ACLNN_SUCCESS, ret) 恒通过);改为返回 ACLNN_ERR_PARAM_NULLPTR / ACLNN_ERR_PARAM_INVALID,与 add 的 Inplace 实现对齐。
  • 补齐图模式 InferDataType 推导:REG_OP(Sub) 声明了 14 种 dtype 但未注册任何 InferDataType 回调;新增 sub_graph_infer.cpp,x1/x2 dtype 不一致时在推导阶段报错(arch35 tiling 强校验三者同 dtype,混合输入原先只能延迟到 tiling 阶段失败或依赖框架默认行为)。

fix(mul)

  • 移除未交付的 arch22 编译配置:CMakeLists 声明 ascend310p/ascend910_93/ascend910b 映射 arch22 tiling 目录,但 op_host 无 arch22 目录,这些产品构建必然失败;op_host 注册与二进制仅覆盖 ascend950/mc62/ascend350。

docs(add,sub,mul)

  • README 与 aclnn 接口文档的产品支持表与实际交付对齐:Atlas A2/A3 训练推理系列、Atlas 200I/500 A2、推理系列、训练系列改为不支持(对应 ascend910b/910_93/310p/310/910 均未注册)。若后续需支持这些产品,应交付对应 SoC 注册与二进制并同步恢复声明。

验证

  • bash build.sh --pkg --soc=ascend950 --ops=add,sub,mul -j16 构建通过,产出 cann-ops-math-custom_linux-aarch64.run;
  • 修改/新增的 add_graph_infer.cpp、sub_graph_infer.cpp、aclnn_sub.cpp、add_tiling_arch35.cpp 均编译通过;
  • Add_COMPLEX32/COMPLEX64 内核二进制正常产出。

遗留说明

  • Add 的 DT_STRING 注册无 kernel(README 已声明仅为 TF 兼容)与 GEIR 图侧 910b/910_93/910 未注册问题未在本 PR 处理(涉及产品决策:移除注册 vs 交付实现);
  • 其余 P2 级发现(文档约束声明缺失等约 80 项)见检查报告,可后续分批处理。
likedislike
合并受阻