| refactor: 按公开接口头平铺 C API 实现并简化调用层 Co-authored-by: lihuaichao<lihuaichao1@huawei.com> # message auto-generated for no-merge-commit merge: !5773 merge capi_impl_refactor into master refactor: 按公开接口头平铺 C API 实现并简化调用层 Created-by: lihuaichao Commit-by: lihuaichao Merged-by: cann-robot Description: ## 描述 C API 原实现使用多层聚合头,公开头会引入无关实现。本变更按实际声明接口的公开头平铺实现,并消除无意义的私有函数转发层。 - 将原 instr_impl 目录重组为 90 个实现头:memory_base_impl 下 26 个、reg_base_impl 公共部分 45 个、npu_arch_3510 专用部分 19 个。共享工具实现保留为 utils_impl.h。 - 将 asc_copy_l0c2ub、asc_copy_gm2ub_align、asc_copy_ub2gm_align、asc_copy_l0c2gm、asc_copy_l0c2l1 的131个公共实现重载移动到3510专用头;保留已有24个废弃重载,公共头按架构宏包含对应专用头。 - 公开头只直接包含同名 *_intf_impl.h。reg_base_impl 公共头通过 #if defined(__NPU_ARCH__) && (__NPU_ARCH__ == 3510) 包含同名专用头,专用头不反向包含公共接口实现头;为三个 composite 接口增加公共分发入口。 - 架构专用头统一在公共头顶部包含;去掉 cache_ctrl、spr 公共函数外围的3510限制。asc_set_atomic_none 直接调用 set_atomic_none,消除对公共头后续定义的依赖。 - reg_addr_reg 的公共接口和3510旧接口直接调用 vag_*,保留AIV保护、非AIV默认返回和废弃标记;移除12个宏生成的_impl转发重载,消除顶部include的声明顺序依赖。 - memory_base_impl 和 reg_base_impl 移除重复的 *_impl 私有转发层,基础接口直接实现底层指令调用,保留必要的参数及返回值适配,以及实际承担同步分发职责的辅助函数。公开声明、重载和原有架构支持范围保持不变。 - composite 接口直接组合底层指令,删除对非 sync 接口实现头的冗余依赖;utils_impl.h 已实现的同步和 mask 辅助操作复用现有工具函数,保留原有条件执行语义。 - 为 sync composite 接口补齐与对应基础操作一致的 AIC/AIV 保护,计算和同步一起受保护,避免在非目标核执行同步。 - 清理 composite 中的34组冗余作用域和多余空行,合并4处重复临时变量并保留地址更新语义。storeunalign composite 恢复 asc_get_vf_len 查询及所需 sys_var.h 依赖,零偏移参数直接使用0。 - 90 个实现头沿用原有 #warning、保护顺序和 UNDEF_ASCENDC_C_API_INCLUDE_COMPILER_INTERNAL_HEADERS_ASCENDC 清理标记,按新路径调整防重复包含宏和警告路径。 - 按实际依赖删除冗余 defs.h 和 utils_impl.h 引用,保留宏及工具函数所需依赖;清理仅有接口名的注释和 49 个空 __asc_aicore 命名空间块,保留有实际内容的命名空间及算法、参数和约束说明。新增或更名的实现头使用 2026 年版权信息。 - 同步最新 master,解决旧 vector_compute_impl.h 的修改/删除冲突,将上游三个 asc_sub_relu_sync 重载的同步修复迁移到新的 memory_base_impl/vector_compute_composite_intf_impl.h。 - 更新目录文档和已有测试引用;classify_rule.yaml 中旧路径的调整保持在本 PR 中。 - 清理22个实现头中的330行冗余、悬空或重复分类注释及多余空行;删除memory_base_impl/vector_datamove_intf_impl.h中已无使用点的两组默认值宏及其重复定义、清理代码,保留硬件位域、使用约束和废弃替代说明。 - 删除两个vector_permute_sel实现头中未调用的ASC_TRANSTO5HD_B8_CALL宏,移除reg_permute_sel对storeunalign实现头的冗余包含,合并两个leakyrelu_sync重载的重复mask恢复,清理两条不准确的storeunalign分类注释。 - 合并master提交4511da2b149ba2bc29d1143a5e21742777199592,解决14个旧聚合头修改/删除冲突,将主线1,414处废弃标记调整迁移到扁平实现;保留接口和底层实现,旧instr_impl目录不恢复。 - sys_var.h先包含defs.h再包含架构实现,确保废弃标记宏在实现使用前定义,支持2201/3510独立包含该公开头。 - 同步master 2abedf248的回退变更:memory/reg的utils统一引用恢复后的impl/utils/sys_macros.h,保留主线恢复的两个兼容入口头。 ## 关联的Issue 无。 ## 测试 接口迁移后已完成公开入口及实现头语法编译、接口对比。本次格式修复使用与CI一致的clang-format 18.1.8,调整两处vadds调用的参数换行,无非空白字符变更;UT、安装目录和重复包含结果来自此前验证。 - 对比主线提交 83f55b37a8ad61662b97a61ce2646f6c660b64df:74个公开头、90个新实现头与659个旧实现头核对,2201/3510公开声明和公开实现新增、删除均为0;122个架构/公开头组合中6,178条原有接口引用关系保持可达。 - 2201/3510 host、单头模式及 device 公开头编译:174 项通过。 - 90项实现头依赖语法编译全部通过(先提供公开入口的基础定义,3510专用头通过公共头引入,不要求裸impl独立包含)。宏展开核对仅剩8个必要同步分发helper。 - 此前87项公开入口重复包含和临时宏清理检查通过。 - 此前四组C API CPU/mock UT共5,057项通过,覆盖2201/3510的AIC/AIV;本次未重跑。 - 此前全新安装目录下5项入口编译通过,无源码C API头回退。 - 本次对150个相关代码文件执行clang-format 18.1.8,格式修复后dry-run和pre-commit clang-format均通过。空白、EOF、YAML、大文件、冲突标记、私钥、拼写和OAT hook通过;无适用文件的JSON、ruff检查跳过。 - 本地完整pre-commit的Markdown检查因已有文档链接 http://optipng.sourceforge.net/ 网络不可达未通过;未修改该无关文档或检查配置,远端检查结果需以新提交CI为准。 - 最近的注释和无用宏清理已通过22个文件的clang-format 18.1.8及git diff --check;逐文件剔除注释、空白和指定无用宏后与修改前一致,未改动函数实现;本轮未重跑编译或UT。 - 合并后全量对照master 4511da2b1及原目录6ee902416:公开声明/实现无新增或缺失,原有6,178条入口匹配关系保留;90个实现头语法检查通过。四组CPU/mock UT重新构建后5,057项全部通过。 - sys_var.h包含顺序修复后,重新执行全部174项公开入口语法检查,174项全部通过,之前6项sys_var独立包含失败已消除;clang-format 18.1.8和git diff --check通过。本次仅调整包含顺序,未重复运行UT。 - 再次同步master 2abedf248后,含恢复的兼容入口在内共178项公开入口语法检查全部通过;90个实现头的包含路径和保护宏静态检查通过,相关文件clang-format检查通过。 - 未运行真实 NPU 测试。上述检查不将原有跨架构的声明/实现差异判定为新增缺陷,也不删除这些接口。 ## 文档更新 更新中英文 C API 贡献指南、目录结构说明以及已有 C API UT 目录映射,说明公共入口、架构专用实现与必要辅助函数的组织方式。 ## 类型标签 - [ ] 🐛 fix: Bug 修复 - [ ] ✨ feat: 新功能 - [ ] ⚡ perf: 性能优化 - [x] ♻️ refactor: 代码重构 - [x] 🧪 test: 新增或修改测试 - [x] 📝 docs: 文档更新 - [ ] 🔧 ci: CI/CD 配置修改 - [ ] ↩️ revert: 回退 - [ ] 🧹 chore: 其他,请具体描述 See merge request: cann/asc-devkit!5773 | 21 小时前 |