---
title: AI CPU算子信息库
description: "算子开发者需要通过配置算子信息库文件，将算子在AI处理器上相关实现信息注册到算子信息库中。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/tbeaicpudevg/atlasopdev_10_0080.html
sourcePath: /source/zh/canncommercial/900/others/tbeaicpudevg/atlasopdev_10_0080.html
indexId: aade03f2f51720c1da13c1d0bd78f9da97aa6c80fe35244befb458ef80848a2073
---
# AI CPU算子信息库

#### 配置说明

算子开发者需要通过配置算子信息库文件，将算子在AI处理器上相关实现信息注册到算子信息库中。

算子信息库文件路径：自定义算子工程目录下的”cpukernel/op_info_cfg/aicpu_kernel/xx.ini“。


**表1 算子信息库配置说明**

| 信息 | 可选/必选 | 说明 |
| --- | --- | --- |
| [OpType] | 必选 | 算子OpType，以英文半角方括号包裹，标识一个算子信息开始，与算子原型定义中REG\_OP(OpType)的OpType保持一致。 |
| opInfo.engine | 必选 | 配置算子调用的引擎。 AI CPU自定义算子的引擎固定为“DNN\_VM\_AICPU”。 |
| opInfo.flagPartial | 必选 | 此参数为预留参数，请保持固定值“False”。 |
| opInfo.computeCost | 必选 | 此参数为预留参数，请保持固定值“100”。 |
| opInfo.flagAsync | 必选 | 此参数为预留参数，请保持固定值“False”。 |
| opInfo.opKernelLib | 必选 | 配置算子调用的kernelLib。 AI CPU自定义算子调用的kernelLib固定为“CUSTAICPUKernel”。 |
| opInfo.kernelSo | 必选 | 配置AI CPU算子实现文件编译生成的动态库文件的名称。 生成的动态库文件的名称来源于算子工程编译的“build.sh”脚本中配置的“AICPU\_KERNEL\_TARGET”，例如“AICPU\_KERNEL\_TARGET”配置的为“cust\_aicpu\_kernels\_3.3.0”，则生成的so名称为：“libcust\_aicpu\_kernels\_3.3.0.so”。 |
| opInfo.functionName | 必选 | 配置自定义算子调用的kernel函数接口名称。 若“opInfo.flagSupportBlockDim”配置为“False”，即AI CPU算子不需要分块并行执行，则opInfo.functionName固定为“RunCpuKernel”。 若“opInfo.flagSupportBlockDim”配置为“True”，即AI CPU算子需要分块并行执行，则opInfo.functionName固定配置为“RunCpuKernelWithBlock”。 |
| opInfo.userDefined | 可选 | 配置该算子是否为用户自定义算子。 AI CPU自定义算子的userDefined仅支持配置为“True”。若开发者没有配置的情况下，该参数会被默认设置为“True”。 |
| opInfo.workspaceSize | 可选 | 配置用于记录AICPU算子日志信息的内存大小。 单位为KB，取值范围为：0~500，默认值为2。 请根据需要记录的日志内容大小，配置合适的数值。 当需要记录的日志大小超出配置的数值，超出部分的日志不会被记录。 |
| opInfo.subTypeOfInferShape | 可选 | 此配置项针对动态shape的场景，配置AI CPU的infershape方式，有以下几种取值： 1：根据inputshape可直接推导outputshape。 2：部分计算的infershape，根据tensorData的值做简单的计算。 3：全部计算的infershape，但最大shape可预估，按照算子最大的shape申请内存。 4：无法由inputshape推导出算子的输出shape，也无法推导出输出range，此种情况需要在算子实现时进行内存的申请，计算完成后，返回output和输出shape。 默认值为1。 |
| opInfo.flagSupportBlockDim | 可选 | AI CPU算子是否设置BlockDim的标识。 此参数有如下两种取值： True：设置BlockDim的标识，代表支持分块并行计算。 False：不设置BlockDim的标识，代表不支持分块并行计算。 默认值为False。 |
| opInfo.blockDimByIndex | 可选 | BlockDim的切分原则，有以下几种取值： \-1：表示按照算子第一个输入参数的元素个数进行BlockDim的切分。 0~N\-1，N为第一个输入参数的shape的维度数。例如若配置为0，表示按照第一个输入参数的轴0进行BlockDim的切分；若配置为1，表示按照第一个输入参数的轴1进行BlockDim的切分。 默认值为“\-1”。 此参数仅在“opInfo.flagSupportBlockDim”配置为“True”时才生效。 |
| input0.name | 可选 | 配置第一个输入的名称，与算子原型定义中REG\_OP(OpType)的下对应的第一个输入的名称保持一致。 说明： input与output中的name、type与format字段的作用是在算子编译阶段进行这些参数的校验，否则，将在算子运行阶段才会校验。 建议用户进行配置。 |
| input0.type | 可选 | 配置第一个输入支持的数据类型， 若支持多种数据类型，请以“,”分隔。 有如下取值范围： DT\_UINT8,DT\_UINT16,DT\_INT8,DT\_INT16,DT\_INT32,DT\_INT64,DT\_FLOAT16,DT\_FLOAT,DT\_DOUBLE，DT\_BOOL等，支持的数据类型列表请与算子原型定义中对应的TensorType列表保持一致。 注意：数据类型之间请不要输入多余空格。 |
| input0.format | 可选 | 支持的数据排布格式。 取值范围：ND、NHWC、NCHW 默认值是：ND，代表对数据排布格式无要求。 |
| ...... | 可选 | input1的其他输入参数配置，参考input0；若算子有其他输入例如input2、input3……，配置也同理参考input0。 |
| dynamic\_inputX.name | 可选 | 若输入为动态输入，则通过此参数配置。 其中配置项“dynamic\_inputX.name”中的“X”为序号，代表此输入为算子的第几个输入，例如算子的第一个输入为静态输入，配置为input0，第二个输入为动态输入，则配置为dynamic\_input1.name。 此参数的值配置为动态输入的名称，与算子原型定义中对应的动态输入的名称保持一致。例如，输入名称为x ，在图运行时，会根据实际输入的个数自动生成x0、x1、x2……，序号依次递增。 |
| dynamic\_inputX.type | 可选 | 配置为动态输入支持的数据类型，若支持多种数据类型，请以“,”分隔。 有如下取值范围： DT\_UINT8,DT\_UINT16,DT\_INT8,DT\_INT16,DT\_INT32,DT\_INT64,DT\_FLOAT16,DT\_FLOAT,DT\_DOUBLE，DT\_BOOL等。 说明：其中配置项“dynamic\_inputX.type”中的“X”为序号，含义同dynamic\_inputX.name中的“X”。 |
| output0.name | 可选 | 配置第一个输出的名称，与算子原型定义中REG\_OP(OpType)的下对应的第一个输出的名称保持一致。如果算子有output0输出，则必须配置output0的name参数。 |
| output0.type | 可选 | 配置第一个输出支持的数据类型， 若支持多种数据类型，请以“,”分隔。 有如下取值范围： DT\_UINT8,DT\_UINT16,DT\_INT8,DT\_INT16,DT\_INT32,DT\_INT64,DT\_FLOAT16,DT\_FLOAT,DT\_DOUBLE，DT\_BOOL等 |
| output0.format | 可选 | 支持的数据排布格式。 取值范围：ND、NHWC、NCHW 默认值是：ND，代表对数据排布格式无要求。 |
| ...... | 可选 | output1的其他输出参数配置，参考output0；若算子有其他输出例如output2、output3……，配置也同理参考output0。 |
| dynamic\_outputX.name | 可选 | 若输出为动态输出，则通过此参数配置。 其中配置项“dynamic\_outputX.name”中的“X”为序号，代表此输出为算子的第几个输出，例如算子的第一个输出为静态输出，配置为output0，第二个输出为动态输出，则配置为dynamic\_output1.name。 此参数的值配置动态输出的名称，与算子原型定义中对应的动态输出的名称保持一致。例如，输出名称为y，在图运行时，会根据实际输出的个数自动生成y0、y1、y2……，序号依次递增。 |
| dynamic\_outputX.type | 可选 | 配置为动态输出支持的数据类型，若支持多种数据类型，请以“,”分隔。 有如下取值范围： DT\_UINT8,DT\_UINT16,DT\_INT8,DT\_INT16,DT\_INT32,DT\_INT64,DT\_FLOAT16,DT\_FLOAT,DT\_DOUBLE，DT\_BOOL等，支持的数据类型列表请与算子原型定义中对应的TensorType列表保持一致。 说明：其中配置项“dynamic\_outputX.type”中的“X”为序号，含义同dynamic\_outputX.name中的“X”。 |


配置示例如下：

```
[Less]
opInfo.engine=DNN_VM_AICPU
opInfo.flagPartial=False
opInfo.computeCost=100
opInfo.flagAsync=False
opInfo.opKernelLib=CUSTAICPUKernel
opInfo.kernelSo=libcust_aicpu_kernels.so
opInfo.functionName=RunCpuKernel
opInfo.workspaceSize=2
input0.name=x1
input0.type=DT_DOUBLE,DT_FLOAT,DT_FLOAT16,DT_INT16,DT_INT32,DT_INT64,DT_INT8,DT_UINT16,DT_UINT32,DT_UINT64,DT_UINT8
input1.name=x2
input1.type=DT_DOUBLE,DT_FLOAT,DT_FLOAT16,DT_INT16,DT_INT32,DT_INT64,DT_INT8,DT_UINT16,DT_UINT32,DT_UINT64,DT_UINT8
output0.name=y
output0.type=DT_BOOL
```


自定义算子信息库文件编译部署完成后，会将算子相关定义信息存入<path>/<vendor_name>/op_impl/cpu/config/cust_aicpu_kernel.json，其中<path>为算子包的安装目录，详细可参见算子包部署，<vendor_name>为提供自定义算子的厂商名字，关于此名字的定义，详细可参见算子工程编译。
