已关闭
[Feature|需求建议] 提供 AICPU CpuKernel V2 注册与查询接口 #512
pantong创建于  5月15日关闭于  5月18日
pantong
5月15日 创建

Background(背景信息)

runtime 仓的 pkg_inc/aicpu_sched/cpu_kernels/ 当前对外仅提供一套 CpuKernel V1 注册/查询/执行接口(RegistCpuKernel / GetCpuKernel / RunCpuKernel / RunCpuKernelAsync 等)。上层(GE 常量折叠、opbase 调度等)希望按"V2 优先、V1 兜底"策略渐进式演进时,没有独立的 V2 接口面可用,导致:

  1. 新实现无法在不污染 V1 注册表的前提下并存。
  2. 上层无法在不构造 kernel 实例的前提下判断某个 op_type 是否在 V2 中注册,导致重复构造开销。
  3. 缺少枚举 V2 已注册 op_type 的能力,无法在 dlopen 后建立"op_type → so"反向索引。

Origin(信息来源)

  • PR: cann/runtime#1522
  • 配套 GE 仓需求:cann/ge#383
  • 配套 opbase 仓需求:cann/opbase#166

Benefit / Necessity(价值/作用)

  1. 能力分层并存:V1/V2 注册表完全隔离(creatorMap_creatorMapV2_ 独立),可在不破坏现有算子注册的前提下接入 V2 实现。
  2. 轻量命中判断IsRegisteredV2 不实例化 kernel,仅查表,配合 GE/opbase 侧"V2 优先"路由可以零额外开销快速分流。
  3. 支持反向索引GetAllRegisteredOpTypesV2 提供 V2 全量 op_type 枚举,让上层在 dlopen 后建立 op_type → so handle 的反向索引,运行期 O(1) 命中正确的 so。
  4. C ABI 裸名符号:以无 mangling 的稳定符号对外暴露,便于上层用 dlsym 在多 so 共存场景下分别绑定。

Design(设计方案)

1. 注册侧(cpu_kernel.h

新增 V2 注册入口与宏:

AICPU_VISIBILITY bool RegistCpuKernelV2(const std::string &type, const KERNEL_CREATOR_FUN &fun);

#define REGISTER_CPU_KERNELV2(type, clazz) /* 形态与 V1 对称,写入 V2 表 */

2. 查询/执行侧(cpu_kernel_register.h

接口 作用
std::shared_ptr<CpuKernel> GetCpuKernelV2(const std::string &op_type) 仅查 creatorMapV2_,未命中返回 nullptr,不回退 V1;不输出"未注册"日志,避免对回退路径产生误导
bool IsRegisteredV2(const std::string &op_type) const 轻量命中判断,不构造 kernel
std::vector<std::string> GetAllRegisteredOpTypesV2() const 枚举 V2 已注册 op_type,供上层建立反向索引
uint32_t RunCpuKernelV2(CpuKernelContext &ctx) V2 执行入口,未命中直接失败
uint32_t RunCpuKernelAsyncV2(...) V2 异步执行入口
class RegisterarV2 静态注册器,与 V1 Registerar 对称

私有侧抽取公共逻辑:RunCpuKernelCommon / SetAsyncKernelContext / RunCpuKernelAsyncCommon,避免 V1/V2 之间复制粘贴。

3. 兼容性

  • V1 接口签名、行为、ABI 完全保持不变,老用户零迁移成本。
  • V2 接口加 AICPU_VISIBILITY,符号导出与 V1 等价。
  • 头文件本次仅做声明扩展,二进制实现由配套 opbase 仓 PR cann/opbase#299 提供。

验证方式

  1. 上层(cann/ge#1824、cann/opbase#299)依赖该头文件编译通过。
  2. 在 V1 调用路径上回归编译现有 aicpu_sched 用户代码,确认无破坏性变更。
  3. 通过 opbase 侧 UT 验证 V2 注册、查询、调度的接口行为。
likedislike
pantong
5月15日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
5月15日 将 pan-tong 设为负责人
Ppantong
5月15日 修改了issue 的描述
CANN-robotCANN-robot成员
5月18日 关闭了 issue
CANN-robotCANN-robot成员
5月18日 添加了label:resolved