算子注册方式正在从 AddConfig("<socVersion>") 迁移到 ArchConfigHelper::AddConfigByArch(Ops::Base::DAV_xxx)(npuArch 注册)。但 ops-math 仓库构建与 CI 侧的“算子是否支持某芯片”判定仍只识别 AddConfig("<socVersion>"),导致仅用 AddConfigByArch 注册的算子被误判为不支持当前芯片,影响 tiling 目录收集、ops-info 生成、CI 算子筛选、本地自检与 cannsim 选算子。
AddConfig("<socVersion>")
ArchConfigHelper::AddConfigByArch(Ops::Base::DAV_xxx)
AddConfigByArch
使构建与 CI 流程在不改动算子代码的前提下识别 npuArch 注册方式,保证 npuarch 整改后的算子不会在编译、打包、分组、自检与仿真环节被漏选/漏测;同时保留对旧 COMPUTE_UNIT/NPU_ARCH 写法的兼容,改造可渐进推进。
COMPUTE_UNIT
NPU_ARCH
在现有的 socVersion↔npuArch 映射(cmake/soc_arch_variables.cmake 的 ASCEND_ALL_COMPUTE_UNIT / SOC_TO_ARCH_VALUES)基础上,为各构建/CI 环节补一份同名映射与 arch 识别逻辑,并统一采用“先按 npuArch 匹配、未命中再回退 socVersion”的策略。
cmake/soc_arch_variables.cmake
ASCEND_ALL_COMPUTE_UNIT
SOC_TO_ARCH_VALUES
不涉及算子调用框架,属于构建系统(CMake)与 CI 脚本(Python / Bash)适配;改动随仓库构建流程生效,算子侧无需额外配置。
cmake/func.cmake
add_all_modules_sources
TILING_DIR
cmake/gen_ops_info.cmake
check_op_supported
AddConfigByArch ... <ARCH_UPPER>
MODULE_EXT
get_npu_arch_by_soc_version
scripts/ci/gen_ci_cmd.py
SOC_TO_ARCH
soc_to_arch()
check_op_supports_soc
DAV_xxx
scripts/ci/gen_ops_soc.py
ARCH_TO_SOC_NAMES
extract_add_config_by_arch_configs()
extract_ai_core_configs()
scripts/ci/local_check.sh
soc_to_npu_arch()
op_supports_soc
AddConfigByArch[^;]*DAV_xxx
cmake/opbuild.cmake
gen_op_host_*
opbase_util_objs
OPBASE_INC_DIRS
cmake/third_party/opbase.cmake
OPBASE_TAG_ID
ab014585877c660db1f024a04b43650867556fbc
不涉及(构建与 CI 脚本改动,不改变任何算子的数据类型支持范围)。
check_op_supported(CMake)与 check_op_supports_soc(Python)/op_supports_soc(Bash)在保留 AddConfig("<soc>") 判断的基础上,按 socVersion→npuArch 映射追加 AddConfigByArch 的 arch 匹配;gen_ops_soc.py 额外负责把 AddConfigByArch 中的 DAV_xxx 反向映射为 socVersion,参与 CI 算子分组。
AddConfig("<soc>")
gen_ops_soc.py
不涉及(未修改 kernel 代码)。
映射覆盖 cmake/soc_arch_variables.cmake 中的 socVersion→npuArch 对应关系(如 ascend910b/ascend910_93→dav_2201、ascend950/ascend350→dav_3510、ascend310p→dav_2002、ascend310b→dav_3002、ascend910→dav_1001 等);新增脚本侧映射表需与 cmake 侧保持一致。
ascend5162a → dav_5162
ascend5162 → dav_5162
ascend5162
💡 备注(选填) 关联 PR:https://gitcode.com/cann/ops-math/pull/6990
/assign @esok11
一、背景信息 (必填)
算子注册方式正在从
AddConfig("<socVersion>")迁移到ArchConfigHelper::AddConfigByArch(Ops::Base::DAV_xxx)(npuArch 注册)。但 ops-math 仓库构建与 CI 侧的“算子是否支持某芯片”判定仍只识别AddConfig("<socVersion>"),导致仅用AddConfigByArch注册的算子被误判为不支持当前芯片,影响 tiling 目录收集、ops-info 生成、CI 算子筛选、本地自检与 cannsim 选算子。二、价值/作用 (必填)
使构建与 CI 流程在不改动算子代码的前提下识别 npuArch 注册方式,保证 npuarch 整改后的算子不会在编译、打包、分组、自检与仿真环节被漏选/漏测;同时保留对旧
COMPUTE_UNIT/NPU_ARCH写法的兼容,改造可渐进推进。三、设计方案 (必填)
在现有的 socVersion↔npuArch 映射(
cmake/soc_arch_variables.cmake的ASCEND_ALL_COMPUTE_UNIT/SOC_TO_ARCH_VALUES)基础上,为各构建/CI 环节补一份同名映射与 arch 识别逻辑,并统一采用“先按 npuArch 匹配、未命中再回退 socVersion”的策略。3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
不涉及算子调用框架,属于构建系统(CMake)与 CI 脚本(Python / Bash)适配;改动随仓库构建流程生效,算子侧无需额外配置。
3.2 总体设计
cmake/func.cmake:add_all_modules_sources中NPU_ARCH与TILING_DIR继续按位置一一配对,当前构建芯片的 key 统一换算为 npuArch 后匹配;若声明列表中没有该 npuArch(老写法全为 socVersion),回退按 socVersion 字面值匹配。cmake/gen_ops_info.cmake:check_op_supported的 grep 增加AddConfigByArch ... <ARCH_UPPER>备选分支(主模块与MODULE_EXT两处),仅在get_npu_arch_by_soc_version可换算时启用。scripts/ci/gen_ci_cmd.py:新增SOC_TO_ARCH映射与soc_to_arch(),check_op_supports_soc增加AddConfigByArch+DAV_xxx正则判定。scripts/ci/gen_ops_soc.py:新增SOC_TO_ARCH与反向表ARCH_TO_SOC_NAMES,新增extract_add_config_by_arch_configs()解析AddConfigByArch中的DAV_xxx并映射回 socVersion,汇入extract_ai_core_configs()供算子分组使用。scripts/ci/local_check.sh:内置SOC_TO_ARCH关联数组与soc_to_npu_arch(),op_supports_soc增加AddConfigByArch[^;]*DAV_xxx判断,并同步 cannsim 跳过提示文案。cmake/opbuild.cmake:gen_op_host_*目标链接opbase_util_objs(存在时)并加入OPBASE_INC_DIRS头文件路径。cmake/third_party/opbase.cmake:OPBASE_TAG_ID升级为ab014585877c660db1f024a04b43650867556fbc。3.2.1 算子支持的数据类型
不涉及(构建与 CI 脚本改动,不改变任何算子的数据类型支持范围)。
3.2.2 host侧设计
check_op_supported(CMake)与check_op_supports_soc(Python)/op_supports_soc(Bash)在保留AddConfig("<soc>")判断的基础上,按 socVersion→npuArch 映射追加AddConfigByArch的 arch 匹配;gen_ops_soc.py额外负责把AddConfigByArch中的DAV_xxx反向映射为 socVersion,参与 CI 算子分组。3.2.3 kernel侧设计
不涉及(未修改 kernel 代码)。
3.3 支持硬件
映射覆盖
cmake/soc_arch_variables.cmake中的 socVersion→npuArch 对应关系(如 ascend910b/ascend910_93→dav_2201、ascend950/ascend350→dav_3510、ascend310p→dav_2002、ascend310b→dav_3002、ascend910→dav_1001 等);新增脚本侧映射表需与 cmake 侧保持一致。3.4 算子约束限制
NPU_ARCH与TILING_DIR仍需按位置一一对应。ascend5162a → dav_5162,而cmake/soc_arch_variables.cmake为ascend5162 → dav_5162,按ascend5162构建时脚本侧 arch 匹配会落空,建议对齐拼写。💡 备注(选填)
关联 PR:https://gitcode.com/cann/ops-math/pull/6990