已关闭
[Requirement|需求建议]: im2col、matrix_diag、roll、grouped_bias_add_grad、reduce_var、reduce_std_v2 六个算子新增 ascend960dt 平台支持 #3614
liaohuming创建于  9 天前关闭于  9 天前
liaohuming
liaohuming成员
9 天前 创建

一、背景信息 (必填)

ops-math 仓库的 im2col、matrix_diag、roll、grouped_bias_add_grad、reduce_var、reduce_std_v2 六个算子此前已支持 ascend910b/ascend910_93/ascend310p/ascend950/ascend350 等平台,尚未支持 ascend960dt 平台。本需求为上述六个算子新增 ascend960dt 平台支持,使其可在 Ascend960DT 芯片上完成编译与调用。

二、价值/作用 (必填)

补齐六个基础算子(2 个转换类 + 4 个数学类)在 ascend960dt 新平台上的覆盖。

三、设计方案 (必填)

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

aclnn 接口直调:通过 op_api 复用现有实现,使 aclnnIm2col / aclnnRoll / aclnnGroupedBiasAddGrad / aclnnVar(aclnnVarMean)/ aclnnStd 接口在 ascend960dt 平台可用。
其中 matrix_diag 无 aclnn API(仓内无 op_api 目录),仅提供 kernel / geir 通路。

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

六个算子在 ascend960dt 上沿用各自既有的 dtype 支持列表(格式统一为 ND):

3.2.2 host侧设计
  1. 算子定义(op_host):各算子定义文件(im2col_def.cpp、matrix_diag_def.cpp、roll_def.cpp、grouped_bias_add_grad_def.cpp、reduce_var_def.cpp、reduce_std_v2_def.cpp)新增一行 this->AICore().AddConfig("ascend960dt", <config>);,复用与 ascend950/ascend350 相同的 aicore config(grouped_bias_add_grad 复用 config950)。
  2. 编译配置(CMakeLists.txt):各算子 CMakeLists.txt 的 SUPPORT_COMPUTE_UNIT 增加 "ascend960dt",SUPPORT_TILING_DIR 对应增加 "arch35"(tiling 目录沿用 arch35,无新增目录)。
  3. 二进制编译配置:新增 op_host/config/ascend960dt/ 目录:
    • *_binary.json:六个算子各一份(im2col / matrix_diag / roll / grouped_bias_add_grad / reduce_std_v2 / reduce_var)。
    • *_simplified_key.ini:五个(matrix_diag 无),内容为 [OpName] + default=0(即 simplified_key_mode=0)。
  4. ascendc_config.json(scripts/kernel/binary_config/):六个算子的 compute_units 增加 ascend960dt,并同步补充 ascend960dt 的 compile_options:
    • ReduceVar / ReduceStdV2:["-mllvm -trunc-to-buildin-type-only", "-mllvm -cce-aicore-dcci-before-kernel-end=false"]
    • MatrixDiag / Im2col / GroupedBiasAddGrad:["-mllvm -cce-aicore-dcci-before-kernel-end=false"]
    • Roll:无 compile_options(auto_sync=false)
  5. 平台判定适配(matrix_diag):matrix_diag_tiling_arch35.cpp 的 TilingPrepare4MatrixDiag 中,isAscendC 判定由 Ops::Base::IsRegbaseSocVersion(context) 扩展为 IsRegbaseSocVersion(context) || PlatformAscendC(platformInfo).GetCurNpuArch() == NpuArch::DAV_9201,使 ascend960dt 走 AscendC tiling 分支。
  6. UT 同步:grouped_bias_add_grad 的 tiling UT(tests/ut/op_host/arch35/test_grouped_bias_add_grad_tiling.cpp)同步更新预期 tilingKey(CUT_G_MODE 67108865 → 134217729、CUT_H_MODE 33554433 → 67108865;INT64 groupIdx 603979777 → 1207959553),并做 clang-format 整改。
3.2.3 kernel侧设计

六个算子均沿用现有 arch35 kernel 实现,无 kernel 源码改动(本次提交未触及 op_kernel/)。ascend960dt 复用与 ascend950/ascend350 相同的 kernel 二进制编译产物生成路径,仅通过配置层新增平台支持。

3.3 支持硬件

Ascend960DT(SOC: Ascend960DT_968B7,NpuArch: DAV_9201。

3.4 算子约束限制

💡 备注(选填)

likedislike
liaohumingliaohuming成员
9 天前 添加了label:requirement
liaohumingliaohuming成员
9 天前 将 liaohuming 设为负责人
CANN-robotCANN-robot成员
9 天前 关闭了 issue
CANN-robotCANN-robot成员
9 天前 添加了label:resolved