整体说明

本章提供了单算子API执行的框架基础接口,包括接口定义、功能描述等信息,帮助用户快速自定义NN类算子(简称aclnn)或者对CANN软件包中内置的NN类算子进行定制化修改,以支撑各种各样的AI业务。

  • Level0接口:简称L0,表示基础Kernel的API,这些API直接调用亲和芯片的Kernel。
  • Level2接口:简称L2,表示更高一层的API(也称为host API),可以调用多个L0接口实现更灵活的功能,同时对标框架的API功能,便于框架适配和脚本迁移。

框架能力接口的头文件一般在${INSTALL_DIR}/include目录下,如表1所示,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。例如,若安装的Ascend-cann-toolkit软件包,则安装后文件存储路径为:$HOME/Ascend/ascend-toolkit/latest。

表1 接口所属头文件说明

头文件路径

头文件介绍

头文件内容说明

aclnn/opdev/bfloat16.h

详细介绍了bfloat16数据类型在CPU侧的实现类。

参见bfloat16

aclnn/opdev/common_type.h

详细介绍了aclTensor、aclScalar等基础的aclnn数据结构

参见common_types

aclnn/opdev/data_type_utils.h

提供了DataType相关的基础接口,例如获取指定DataType的size等。

参见data_type_utils

aclnn/opdev/fast_vector.h

详细介绍了FastVector数据类型,该类型为aclnn中实现的高效vector数据结构。

预留头文件,开发者无需关注。

aclnn/opdev/format_utils.h

提供了Format相关的基础接口。

参见format_utils

aclnn/opdev/fp16_t.h

详细介绍了float16数据类型在CPU侧的实现类。

参见fp16_t

aclnn/opdev/framework_op.h

详细介绍了框架对外提供的从host侧到device侧拷贝能力。

参见framework_op

aclnn/opdev/make_op_executor.h

对外提供初始化aclOpExecutor的宏声明。

预留头文件,开发者无需关注。

aclnn/opdev/object.h

详细介绍了aclnn中aclTensor等基础数据结构的基类Object类,用于重载实现new、delete方法。

参见object

aclnn/opdev/op_arg_def.h

详细介绍了OpArgContext类,并对外提供OP_INPUT等宏声明。

参见op_arg_def

aclnn/opdev/op_cache.h

详细介绍了OpExecCache及相关类,用于完成aclnn缓存,提升运行性能。

参见op_cache

aclnn/opdev/op_cache_container.h

详细介绍了带LRU淘汰机制的aclnn缓存容器。

参见op_cache_container

aclnn/opdev/op_def.h

定义基础枚举及常量,例如精度模式OpImplMode等。

参见op_def

aclnn/opdev/op_dfx.h

详细介绍了DfxGuard类,用于接口打印及上报profiling。

参见op_dfx

aclnn/opdev/op_errno.h

定义了aclnn错误码。

参见昇腾官网"应用开发接口 > AcendCL API(C&C++)> 单算子执行 > 单算子API执行 > NN类算子接口 > aclnn返回码"。

aclnn/opdev/op_executor.h

详细介绍了aclOpExecutor类。

参见op_executor

aclnn/opdev/op_log.h

定义aclnn中日志打印宏。

参见op_log

aclnn/opdev/platform.h

详细介绍了PlatformInfo类,用于存放SOC平台信息。

参见platform

aclnn/opdev/pool_allocator.h

详细介绍了PoolAllocator类,用于实现aclnn内部的CPU内存池。

参见pool_allocator

aclnn/opdev/shape_utils.h

提供了shape相关的基础操作,例如shape打印等。

参见shape_utils

aclnn/opdev/small_vector.h

详细介绍了SmallVector类,该类为aclnn中实现的高效vector数据结构,主要针对已知数据量较小的场景。

参见small_vector

aclnn/opdev/tensor_view_utils.h

提供了对于view类的基础操作,例如判断aclTensor是否连续等。

参见tensor_view_utils

aclnn/opdev/op_common/data_type_utils.h

提供了DataType相关的基础接口,例如判断指定DataType是否为整数类型等。

参见data_type_utils

aclnn/opdev/aicpu/aicpu_args_handler.h

提供了AI CPU相关的组合计算任务的处理逻辑,例如拼接计算任务相关的参数等。

参见aicpu_args_handler

aclnn/opdev/aicpu/aicpu_ext_info_handle.h

提供了AI CPU相关的计算任务拓展参数的处理逻辑,例如拼接解析拓展参数的接口。

参见aicpu_ext_info_handle

aclnn/opdev/aicpu/aicpu_task.h

提供了AI CPU任务设置、下发等逻辑,例如设置调用哪个AI CPU算子,设置算子输入、输出等接口。

参见aicpu_task

aclnn/opdev/aicpu/aicpu_uitls.h

AI CPU任务需要的一些公共接口。

参见aicpu_uitls