
AddConfigByArch 接口深度解析按 NPU 架構批量注冊算子 AI Core 配置【免費下載鏈接】opbase本項目是CANN算子庫的基礎框架庫為算子提供公共依賴文件和基礎調度能力。項目地址: https://gitcode.com/cann/opbaseAddConfigByArch 是 CANN opbase 算子庫中ArchConfigHelper類的靜態(tài)成員函數(shù)用于在算子注冊OpDef 構造階段按 NPU 架構NpuArch一次性完成該架構下所有 SoC 版本的 AI Core 配置注冊。本文以該接口為核心結合倉庫源碼逐層拆解其映射機制、參數(shù)語義與調用方式幫助讀者掌握在多 SoC 版本共存的算子庫中高效完成算子注冊的實戰(zhàn)方法。功能說明在 CANN 算子庫中一個算子往往需要適配多個 SoC 版本如 ascend910、ascend310p、ascend950 等。若逐個 SoC 調用AddConfig注冊代碼冗長且難以維護。AddConfigByArch將「架構 → SoC 版本」的映射關系內置在接口內部一對多開發(fā)者只需傳入一個 NPU 架構常量即可完成該架構對應的所有 SoC 版本的注冊。該接口位于opbase命名空間下ArchConfigHelper類的靜態(tài)成員函數(shù)其類聲明與實現(xiàn)分別位于 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的核心價值所在。函數(shù)原型ArchConfigHelper提供了兩個重載版本static void AddConfigByArch(ops::OpAICoreDef aicore, NpuArch arch, ops::OpAICoreConfig aicoreConfig); static void AddConfigByArch(ops::OpAICoreDef aicore, NpuArch arch);三參數(shù)重載攜帶顯式的 AI Core 配置對象適用于需要定制配置如動態(tài)編譯、動態(tài)格式開關的場景兩參數(shù)重載不傳配置等價于對映射表內各 SoC 版本分別調用AddConfig(soc)使用各 SoC 的默認配置。參數(shù)說明參數(shù)名輸入/輸出說明aicore輸入/輸出算子的 AI Core 定義取 OpDef 實現(xiàn)類中this-AICore()的返回值。arch輸入NPU 架構建議使用 op_const_def.h 中Ops::Base命名空間下定義的DAV_*常量。aicoreConfig輸入待注冊的 AI Core 配置不傳該參數(shù)時等價于對映射表內各 SoC 版本分別調用AddConfig(soc)。其中aicore參數(shù)的類型為ops::OpAICoreDef即算子 AI Core 定義對象aicoreConfig為ops::OpAICoreConfig即待注冊的 AI Core 配置對象。arch參數(shù)的類型為NpuArch為枚舉型 NPU 架構標識。返回值說明無返回值void。接口的注冊結果體現(xiàn)在aicore對象內部的狀態(tài)上。約束說明使用該接口時需注意以下約束入?yún)rch不在映射表內時不注冊任何 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支持鏈式調用示例中開啟了動態(tài)編譯靜態(tài)標志DynamicCompileStaticFlag與動態(tài)格式標志DynamicFormatFlag批量注冊DAV_2201一次調用同時覆蓋ascend910b與ascend910_93默認配置DAV_3510使用兩參數(shù)重載走默認配置注冊ascend950。源碼實現(xiàn)深入映射表與注冊循環(huán)結合 op_arch_helper.cpp可以看清接口的底層實現(xiàn)邏輯。映射表定義于匿名命名空間中以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}}, };兩個重載的實現(xiàn)結構完全對稱先在g_archToSocNames中查找入?yún)rch若未找到iter g_archToSocNames.end()直接return不注冊任何 SoC——這與「約束說明」中描述的冪等行為一致若找到則遍歷該架構對應的 SoC 版本名列表逐個調用aicore.AddConfig(socName.c_str(), aicoreConfig)三參數(shù)版本或aicore.AddConfig(socName.c_str())兩參數(shù)版本。由此可以確認AddConfigByArch本質上是對OpAICoreDef::AddConfig的批量封裝它將「架構常量 → 多個 SoC 名」的映射集中收斂到一處避免了在每個算子實現(xiàn)中重復書寫多個 SoC 字符串降低了拼寫錯誤與遺漏注冊的風險。DAV_* 架構常量與映射范圍Ops::Base命名空間下的DAV_*常量統(tǒng)一定義于 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時優(yōu)先使用AddConfigByArch而非逐個AddConfig注冊階段專用該接口面向 OpDef 構造階段算子注冊Tiling 階段不應使用共享配置語義三參數(shù)重載會將同一個OpAICoreConfig對象應用到該架構下所有 SoC 版本若不同 SoC 需要差異化配置仍需回到逐個AddConfig的方式統(tǒng)一配置偏好當所有 SoC 版本均使用默認配置時直接使用兩參數(shù)重載代碼最為簡潔。相關資源接口文檔AddConfigByArch.md、英文版op_host 接口總覽op_host.mdop_common 公共接口說明op_common_api_introduction.md、0_op_common_list.md接口聲明op_arch_helper.h接口實現(xiàn)op_arch_helper.cpp架構常量定義op_const_def.h【免費下載鏈接】opbase本項目是CANN算子庫的基礎框架庫為算子提供公共依賴文件和基礎調度能力。項目地址: https://gitcode.com/cann/opbase創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考