已合并
bug fix: experimental 构建报错 'multiple definition of `ops::op_impl_register_infershape_ZerosLike` + gen_compile_option.sh awk 重复告警 #3516
zhaohujie创建于 6月24日
bug fix: experimental 构建报错 'multiple definition of `ops::op_impl_register_infershape_ZerosLike` + gen_compile_option.sh awk 重复告警 #3516
已合并
zhaohujie创建于 6月24日
zhaohujie
zhaohujie
6月24日

描述

修复 bash build.sh --experimental --soc=ascend910b 实验构建及 isin_part_v1 示例冒烟的三个问题:

1. 链接报 multiple definition of 'ops::op_impl_register_infershape_ZerosLike'

  • 原因:experimental/math/isin_part_v1DEPENDENCIES 中含 zero_op--experimental 下实验目录无 zero_opadd_dependent_ops 回退到主线 math/zero_op——它本身也是一套 ZerosLike 实现(IMPL_OP_INFERSHAPE(ZerosLike)),与实验自包含算子 experimental/conversion/zeros_like 同时编入 ophost_math_infer_obj,宏展开的全局符号 ops::op_impl_register_infershape_ZerosLike 重复定义,ophost_math 链接失败。
  • 方法:见问题 3 —— 直接移除 isin_part_v1 全部冗余 DEPENDENCIES(含 zero_op),从根上消除重复注册。

2. 构建过程中 awk: line 2: syntax error at or near , 大量重复

  • 原因:scripts/util/gen_compile_option.sh 两处 awk 使用了三参数 match($0, regex, arr)(gawk 扩展语法)。系统 awk 为 mawk(无 gawk)时第三个参数无法解析;脚本对全部算子列表循环、每算子执行两次该 awk,故报错大量重复。属构建脚本可移植性问题,与算子实现无关;不中断构建,但会刷屏并静默丢弃 ascendc_config.json 中逐算子的 compile_options
  • 方法:改写为可移植写法——两参数 match() 配合 RSTART/RLENGTH + substr()。语义与原 gawk 版本一致,同时兼容 mawk 与 gawk。
  • 涉及文件:scripts/util/gen_compile_option.sh

3. isin_part_v1 run_example 冒烟失败(编译 int64_t→const aclTensor*,及运行期 255

  • 原因:该示例为非常规的 aclnnCat→Sort→Cast→IsinPartV1 多算子流水(experimental/math 中唯一一个驱动 4 个算子的示例)。其一,示例把 elementsNumint64_t 传入,而算子定义中 elementsNum 是 INT32 张量输入,生成的 aclnn 形参为 const aclTensor*,编译失败;其二,该流水迫使 Cat/Sort/Cast 被打入逐算子自定义包,其中 AscendC 版实验 Cast(无 DSL _pattern)破坏了 aclnnSort 内部 Cast 的标准 tiling 路径,运行期返回 255。isin_part_v1 自身并不使用这些依赖。
  • 方法:按实验算子示例惯例(参见其它 experimental/math 算子,示例仅校验自身算子)将示例改为自包含——直接构造 value/index/elementsNum(单元素 INT32 张量)三个输入,仅调用 aclnnIsinPartV1;同时移除 CMakeLists.txt 中全部冗余 DEPENDENCIES。如此既修复编译错误,又不再触碰存在缺陷的实验 Cast,并顺带解决问题 1 的重复定义。
  • 涉及文件:experimental/math/isin_part_v1/CMakeLists.txtexperimental/math/isin_part_v1/examples/test_aclnn_isin_part_v1.cpp

关联的Issue

https://gitcode.com/cann/ops-math/issues/2036

测试

  • 链接验证:以全量算子集编译 ophost_math 链接成功;实际链接命令 link.txtzeros_like_infershape.cpp.o 仅剩 1 个(实验 conversion/zeros_like),主线 math/zero_op 同名目标已不在链接行(修复前 ld returned 1)。
  • 示例端到端(Ascend910B 实跑)bash build.sh --experimental --pkg --ops=isin_part_v1 --vendor_name=experimental 构建出的自定义包仅含 IsinPartV1run_example isin_part_v1 eager cust 编译/链接通过并在 NPU 上成功执行,输出 [1, 1, 0, 1, 1](等价 isin([1,1,4,1,1], [0,1,2,3])),execute samples success返回码 0(修复前为编译 返回码 1 / 运行 返回码 255)。
  • 脚本验证bash -n scripts/util/gen_compile_option.sh 通过;对 ascendc_config.json 真实条目(如 SignbitAdaptiveAvgPool3d)验证两处 awk 输出与原 gawk 版本一致;样例算子对实跑脚本 syntax error 数量为 0。
  • 复核 scripts/ 下无其他 gawk 专属用法(三参数 match(,,)gensub)残留。

文档更新

无。

类型标签

Related Roadmap: https://gitcode.com/cann/ops-math/issues/1259

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhaohujie 的贡献)
zhaohujiezhaohujie
6月24日 创建了 pull request,commit 366445d0
zhaohujiezhaohujie
6月24日 关联了issue:[Bug-Report|缺陷反馈]: bash build.sh --experimental 报错
CANN-robotCANN-robot成员
6月24日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
6月24日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
experimental 查建青, 宋恺, 王林木 (3/2) 查建青, 宋恺 (2/1)
repo-cann/ops-math 宋恺, 王林木 (2/2) 宋恺 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

zhaohujie, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
zhaohujie
zhaohujie
6月24日 评论:

compile

likedislike
此处折叠了53条消息 查看更多
CANN-robotCANN-robot成员
6月29日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月29日 添加了label:ci-pipeline-passed
CANN-robotCANN-robot成员
6月29日 关闭了关联的issue
CANN-robotCANN-robot成员
6月29日 合入了pull request
Ssunday成员
7月2日 修改了pull request 的描述