已关闭
[Requirement|需求建议]: 【社区任务】新增 experimental Gcd Ascend C 算子 #2190
~~灏创建于  7月9日关闭于  7月20日
~~灏
~~灏
7月9日 创建

一、背景信息 (必填)

社区任务第二阶段需要在 cann/ops-math 中提交 Gcd 算子源码实现。该实现新增 experimental/math/gcd,提供 aclnnGcd ACLNN 直调入口,对 selfother 执行逐元素最大公约数计算,输出 shape 为 broadcast 后结果。

当前实现覆盖 ND、rank 1-8、broadcast、非连续输入/输出,以及 float32float16bfloat16int8uint8int16int32int64。浮点有限值按向 0 截断后的整数语义计算 Gcd,并按需要 cast 回输出 dtype;混合 dtype 由 ACLNN wrapper 按 promote/cast 规则转内部 same-dtype 计算。

二、价值/作用 (必填)

  • 补齐 Gcd 在 A2/A3 上的 experimental Ascend C 实现与 ACLNN 直调入口。
  • 支持训练和推理场景中常见的 broadcast、mixed dtype、非连续 tensor 输入。
  • 提供本地复验脚本和自验证文档,便于评审侧复跑正确性与性能证据。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

通过 experimental/math/gcd 下的 ACLNN 直调入口 aclnnGcd 使能,构建后生成 experimental package。仓库内提供 experimental/math/gcd/examples/run_60cases.sh 作为本地复验入口。

3.2 总体设计
3.2.1 算子支持的数据类型

支持 float32float16bfloat16int8uint8int16int32int64。混合 dtype 输入由 wrapper 按 PromoteType(self, other) 转内部 same-dtype Gcd,结果按输出要求 cast。

3.2.2 host侧设计

host tiling 位于 experimental/math/gcd/op_host/gcd_tiling.cpp,生成 rank、broadcast 后 shape、两路输入 stride、输出元素数和多核切分信息。stride 为 0 表示该维度 broadcast 复用同一输入元素;blockDim 按输出 storage word 数选择。

3.2.3 kernel侧设计

kernel 位于 experimental/math/gcd/op_kernel/gcd.cppexperimental/math/gcd/op_kernel/gcd.h。kernel 侧使用 GM scalar broadcast 计算,不物化 broadcast 输入;dense contiguous same-shape 场景走线性 GM 地址快路径,存在 broadcast stride 时走通用 offset cursor 路径。小幅值输入使用小质因数分解路径,大幅值保留 Euclid modulo 路径。

3.3 支持硬件

Atlas A2/A3;当前配置覆盖 ascend910bascend910_93

3.4 算子约束限制

  • 输入 shape 需要满足合法 broadcast 关系。
  • rank 支持 1-8。
  • 浮点输入仅覆盖有限值向 0 截断后的 Gcd 语义;NaN/Inf 不属于当前有效输入域。
  • 被测计算路径不调用 Python reference、PyTorch/torch_npu 等价 Gcd、官方/vendor Gcd、CANN TBE Gcd 或 CPU fallback。

💡 备注(选填)

本地复验入口:bash experimental/math/gcd/examples/run_60cases.sh。当前提交记录的通过标志为 ALL_LOCAL_GCD_CASES_PASSED cases=105;自验证文档记录 60 个 public_v1 case 正确性 60/60 PASSED,TBE-anchor kernel_vs_kernel geomean 11.2246x、min 1.1284x。

likedislike
~~灏~~灏
7月9日 添加了label:requirement
~~灏~~灏
7月9日 关联了pull request:feat(gcd): add experimental Ascend C Gcd operator
~~灏
~~灏
7月9日 评论:
陈思
陈思成员
7月10日 评论:

/assign @Morikunn

likedislike
CANN-robotCANN-robot成员
7月10日 将 Morikunn 设为负责人
Ffulltower成员
7月15日 修改标题为 “[Requirement|需求建议]: 【社区任务】新增 experimental Gcd Ascend C 算子”,原标题为“[Requirement|需求建议]: 新增 experimental Gcd Ascend C 算子”
CANN-robotCANN-robot成员
7月20日 关闭了 issue
CANN-robotCANN-robot成员
7月20日 添加了label:resolved