
AddConfigByArch 接口深度解析按 NPU 架构批量注册算子 AI Core 配置【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbaseAddConfigByArch 是 CANN opbase 算子库中ArchConfigHelper类的静态成员函数用于在算子注册OpDef 构造阶段按 NPU 架构NpuArch一次性完成该架构下所有 SoC 版本的 AI Core 配置注册。本文以该接口为核心结合仓库源码逐层拆解其映射机制、参数语义与调用方式帮助读者掌握在多 SoC 版本共存的算子库中高效完成算子注册的实战方法。功能说明在 CANN 算子库中一个算子往往需要适配多个 SoC 版本如 ascend910、ascend310p、ascend950 等。若逐个 SoC 调用AddConfig注册代码冗长且难以维护。AddConfigByArch将「架构 → SoC 版本」的映射关系内置在接口内部一对多开发者只需传入一个 NPU 架构常量即可完成该架构对应的所有 SoC 版本的注册。该接口位于opbase命名空间下ArchConfigHelper类的静态成员函数其类声明与实现分别位于 op_arch_helper.h 与 op_arch_helper.cpp。接口内部维护的「架构 → SoC 版本」映射表如下与 op_arch_helper.cpp 中g_archToSocNames定义一致NpuArch 常量Ops::Base 命名空间注册的 SoC 版本DAV_1001ascend910DAV_2002ascend310pDAV_2201ascend910b、ascend910_93DAV_3002ascend310bDAV_3102ascend610liteDAV_3510ascend950从上表可见映射关系支持一对多DAV_2201一次调用即可同时注册ascend910b与ascend910_93两个 SoC 版本这正是该接口相对逐个调用AddConfig的核心价值所在。函数原型ArchConfigHelper提供了两个重载版本static void AddConfigByArch(ops::OpAICoreDef aicore, NpuArch arch, ops::OpAICoreConfig aicoreConfig); static void AddConfigByArch(ops::OpAICoreDef aicore, NpuArch arch);三参数重载携带显式的 AI Core 配置对象适用于需要定制配置如动态编译、动态格式开关的场景两参数重载不传配置等价于对映射表内各 SoC 版本分别调用AddConfig(soc)使用各 SoC 的默认配置。参数说明参数名输入/输出说明aicore输入/输出算子的 AI Core 定义取 OpDef 实现类中this-AICore()的返回值。arch输入NPU 架构建议使用 op_const_def.h 中Ops::Base命名空间下定义的DAV_*常量。aicoreConfig输入待注册的 AI Core 配置不传该参数时等价于对映射表内各 SoC 版本分别调用AddConfig(soc)。其中aicore参数的类型为ops::OpAICoreDef即算子 AI Core 定义对象aicoreConfig为ops::OpAICoreConfig即待注册的 AI Core 配置对象。arch参数的类型为NpuArch为枚举型 NPU 架构标识。返回值说明无返回值void。接口的注册结果体现在aicore对象内部的状态上。约束说明使用该接口时需注意以下约束入参arch不在映射表内时不注册任何 SoC 版本接口直接返回不会报错也不产生副作用该接口用于算子注册OpDef 构造阶段不适用于 Tiling 阶段传入aicoreConfig的重载中同一个OpAICoreConfig对象会被注册到映射表内的所有 SoC 版本即多个 SoC 版本共享同一份配置。调用示例以下为官方文档中的关键代码示例仅供参考不支持直接拷贝运行#include op_common/op_host/util/op_arch_helper.h class HistogramV2 : public OpDef { public: explicit HistogramV2(const char* name) : OpDef(name) { // ... 算子输入输出与属性定义 ... OpAICoreConfig aicoreConfig; aicoreConfig.DynamicCompileStaticFlag(true).DynamicFormatFlag(true); // 一次调用同时注册ascend910b与ascend910_93 opbase::ArchConfigHelper::AddConfigByArch(this-AICore(), Ops::Base::DAV_2201, aicoreConfig); // 注册ascend950使用默认配置 opbase::ArchConfigHelper::AddConfigByArch(this-AICore(), Ops::Base::DAV_3510); } };示例要点解析头文件包含op_arch_helper.h 本身已包含op_const_def.h因此Ops::Base::DAV_2201等常量可直接使用配置定制OpAICoreConfig支持链式调用示例中开启了动态编译静态标志DynamicCompileStaticFlag与动态格式标志DynamicFormatFlag批量注册DAV_2201一次调用同时覆盖ascend910b与ascend910_93默认配置DAV_3510使用两参数重载走默认配置注册ascend950。源码实现深入映射表与注册循环结合 op_arch_helper.cpp可以看清接口的底层实现逻辑。映射表定义于匿名命名空间中以std::mapNpuArch, std::vectorstd::string存储「架构 → SoC 版本名列表」const std::mapNpuArch, std::vectorstd::string g_archToSocNames { {Ops::Base::DAV_1001, {ascend910}}, {Ops::Base::DAV_2002, {ascend310p}}, {Ops::Base::DAV_2201, {ascend910b, ascend910_93}}, {Ops::Base::DAV_3002, {ascend310b}}, {Ops::Base::DAV_3102, {ascend610lite}}, {Ops::Base::DAV_3510, {ascend950}}, };两个重载的实现结构完全对称先在g_archToSocNames中查找入参arch若未找到iter g_archToSocNames.end()直接return不注册任何 SoC——这与「约束说明」中描述的幂等行为一致若找到则遍历该架构对应的 SoC 版本名列表逐个调用aicore.AddConfig(socName.c_str(), aicoreConfig)三参数版本或aicore.AddConfig(socName.c_str())两参数版本。由此可以确认AddConfigByArch本质上是对OpAICoreDef::AddConfig的批量封装它将「架构常量 → 多个 SoC 名」的映射集中收敛到一处避免了在每个算子实现中重复书写多个 SoC 字符串降低了拼写错误与遗漏注册的风险。DAV_* 架构常量与映射范围Ops::Base命名空间下的DAV_*常量统一定义于 op_const_def.h均为constexpr ::NpuArch常量例如constexpr ::NpuArch DAV_1001 static_cast::NpuArch(1001); constexpr ::NpuArch DAV_2201 static_cast::NpuArch(2201); constexpr ::NpuArch DAV_3510 static_cast::NpuArch(3510);该头文件共定义了 24 个DAV_*常量DAV_1001DAV_9301等。但需要注意只有映射表中列出的 6 个架构常量DAV_1001、DAV_2002、DAV_2201、DAV_3002、DAV_3102、DAV_3510在AddConfigByArch中有效传入其他常量如DAV_1002、DAV_3801时接口会因查找失败而静默返回。因此在使用前应先对照映射表确认目标架构是否受支持。适用场景与使用建议多 SoC 算子的注册入口当算子的 OpDef 需要同时覆盖同架构下的多个 SoC 版本典型如DAV_2201→ ascend910b ascend910_93时优先使用AddConfigByArch而非逐个AddConfig注册阶段专用该接口面向 OpDef 构造阶段算子注册Tiling 阶段不应使用共享配置语义三参数重载会将同一个OpAICoreConfig对象应用到该架构下所有 SoC 版本若不同 SoC 需要差异化配置仍需回到逐个AddConfig的方式统一配置偏好当所有 SoC 版本均使用默认配置时直接使用两参数重载代码最为简洁。相关资源接口文档AddConfigByArch.md、英文版op_host 接口总览op_host.mdop_common 公共接口说明op_common_api_introduction.md、0_op_common_list.md接口声明op_arch_helper.h接口实现op_arch_helper.cpp架构常量定义op_const_def.h【免费下载链接】opbase本项目是CANN算子库的基础框架库为算子提供公共依赖文件和基础调度能力。项目地址: https://gitcode.com/cann/opbase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考