Closed
[Bug-Report|缺陷反馈]: Acosh REG_OP dtype声明含未支持的COMPLEX32(UnaryDataType过度声明) #4196
dengguojieAdd on  10 days agoClosed at  9 days ago
dengguojieCollaborators
10 days ago Create

一、问题描述 (必填)

math/acosh/op_graph/acosh_proto.h 的 REG_OP(Acosh) 输入/输出使用泛用集合 TensorType::UnaryDataType(),该集合包含 DT_COMPLEX32。但 Acosh 的两个执行面均无 COMPLEX32 实现:

  • AICore注册面:op_host/acosh_def.cpp:26/:32 仅注册 {ge::DT_FLOAT, ge::DT_FLOAT16, ge::DT_BF16};
  • AICPU兜底面:op_kernel_aicpu/acosh_aicpu_def.cpp:19-20 仅注册 {ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_DOUBLE, ge::DT_COMPLEX64, ge::DT_COMPLEX128}。

即 COMPLEX32 属过度声明:图模式下 COMPLEX32 构图被 IR 接受(dtype 校验通过),但运行期无任何 impl 可执行,落到运行期才失败。

二、环境信息 (可选)

  • 昇腾硬件型号:ascend950(AICore arch35)
  • 复现仓库:cann/ops-math,math/acosh/op_graph/acosh_proto.h:35

三、重现步骤 (可选)

  1. 图模式构造 Acosh 算子,输入 x 指定 dtype=DT_COMPLEX32;
  2. IR dtype 校验通过(UnaryDataType 集合包含 COMPLEX32),构图成功;
  3. 运行期查执行面:AICore 注册表与 AICPU 兜底注册表均无 COMPLEX32,无 impl 可执行,运行期失败。

四、预期结果 (可选)

REG_OP 的 INPUT/OUTPUT dtype 声明应与实际执行面一致:改为显式枚举 AICore∪AICPU 执行面 6 dtype(DT_COMPLEX128, DT_COMPLEX64, DT_DOUBLE, DT_FLOAT, DT_FLOAT16, DT_BF16),COMPLEX32 在构图期(IR dtype 校验)即被拒绝,避免带病构图进入运行期才失败。

💡 备注:本算子注释中的 dtype 平铺列表(float16, float32, bfloat16, double, complex64, complex128)与本修正一致,无需改动。

likedislike
dengguojieCollaborators
10 days ago Comments:

修复进展更新:本 issue 对应的 REG_OP dtype 过度声明已修正,修复包含于 PR #6620(单 commit,最新 head d456a5b080220686164f3ccfaf865649a94c3992):

  • math/acosh/op_graph/acosh_proto.h:REG_OP(Acosh) 输入/输出 dtype 声明由泛用集合 TensorType::UnaryDataType() 改为显式枚举 6 dtype(COMPLEX128、COMPLEX64、DOUBLE、FLOAT、FLOAT16、BF16),去除 COMPLEX32 过度声明——AICore/AICPU 两面均无该 dtype,图模式 COMPLEX32 构图期即拒。

验证:GEIR 套 200/200 零退化 + aclnn 10/10 + supp 6/6(六 dtype 覆盖)。

因平台一 PR 一 issue 关联限制,本 issue 无法与 PR #6620 建立 linked 关联,请在 PR #6620 合并核验后手动关闭本 issue。
PR: https://gitcode.com/cann/ops-math/merge_requests/6620

likedislike
CANN-robotCANN-robotCollaborators
9 days ago Close issue
CANN-robotCANN-robotCollaborators
9 days ago Added label: resolved