---
title: 内部关联接口
description: "在进行算子原型注册、Tiling实现、shape推导过程中，使用到的外部开放接口中会调用到一些辅助数据结构和接口，称之为内部关联接口。开发者不会直接调用内部关联接口，此处仅作简单介绍。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/maintenref/basicdataapi/atlasopapi_07_00274.html
sourcePath: /source/zh/canncommercial/900/maintenref/basicdataapi/atlasopapi_07_00274.html
indexId: 66ec8d46b5442b5006cc2dd16e58e800e9a47e990b8b812294bf0d85f6aa190078
---
# 内部关联接口

在进行算子原型注册、Tiling实现、shape推导过程中，使用到的外部开放接口中会调用到一些辅助数据结构和接口，称之为内部关联接口。开发者不会直接调用内部关联接口，此处仅作简单介绍。

#### KernelContext类

本类是对底层数据结构KernelRunContext的包装，包含kernel执行时所需的算子输入、输出个数信息以及输入输出数据信息、compute_node_info和kernel_extend_info。


**表1 KernelContext类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetInput | 获取输入的Chain指针。Chain是一个可以用来保存任意类型数据的类。 |
| GetInputNum | 获取kernel的输入数量。 |
| GetInputPointer | 获取输入数据的指针，本函数首先获取输入Chain，然后从输入Chain中获取指针。 |
| GetInputStrPointer | 获取输入字符串的指针，本函数首先获取输入Chain，然后从输入Chain中获取指针。 |
| GetInputValue | 获取输入数据的值，本函数首先获取输入Chain，然后从输入Chain中获取值。 |
| GetOutput | 获取输出的Chain指针。 |
| GetOutput2 | 获取输出的Chain指针。 |
| GetOutputNum | 获取kernel的输出数量。 |
| GetOutputPointer | 获取输出数据的指针，本函数首先获取输出Chain，然后从Chain中获取指针。 |
| GetContext | 获取底层的context结构体。 |
| GetKernelExtend | 获取kernel扩展信息的指针。 |
| GetComputeNodeExtend | 获取计算节点信息的指针。 |
| MutableInput | 获取输入的Chain指针。 |
| MutableInputPointer | 获取输入数据的指针，本函数首先获取输入Chain，然后从输入Chain中获取指针。 |
| IsInlineSize | 根据数据的长度判断一个数据是否会被inline存储，所谓inline存储是指此数据保存在context中时不需要单独分配内存。 |


#### TilingParseContext类

用于TilingParse所需的信息保存在本类中，本类为编写算子的TilingParse函数时提供上下文信息，在TilingParse时可以从本类中获取所需的信息。


**表2 TilingParseContext类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetCompiledJson | 获取算子编译产生的JSON字符串。 |
| GetCompiledInfo | 获取CompiledInfo实例。 |
| GetPlatformInfo | 获取fe::PlatFormInfos指针。 |


#### Chain类

Chain是一个可以用来保存任意类型数据的类。通过其Set接口保存数据，通过GetPointer或者GetValue方法获取保存的数据。


**表3 Chain类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetPointer | 获取指向Chain中保存数据的指针。 |
| GetValue | 获取Chain中保存的数据的值。 |
| Set | 将数据设置到Chain中。设置数据指针时，会尝试调用deleter将原有保存在Chain的数据删除。 |
| SetWithDefaultDeleter | 将数据设置到Chain中。设置数据指针时，会尝试调用deleter将原有保存在Chain的数据删除。 |
| HasDeleter | 判断当前Chain中保存的数据是否有deleter。 |


#### ContinuousBuffer类

ContinuousBuffer类用于连续存储任意类型的数据，每个数据被转成uint8_t数组进行存储，每个存储单元称为一个buffer。ContinuousBuffer使用两个属性来描述被存储的数据，分别是存储buffer的个数以及每个buffer对应的内存偏移量offsets_。每个buffer在内存上是连续的。


**表4 ContinuousBuffer类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetNum | 获取buffer的数量。 |
| GetTotalLength | 获取本实例的总长度。 |
| Get | 获取buffer指针、长度信息。 |


#### KernelExtendInfo类

本类是用于保存的kernel运行时的额外信息，包括kernel的名字、类型、用于profiling注册的kernel type的index以及计算节点名的index。


**表5 KernelExtendInfo类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetKernelName | 获取kernel name。 |
| SetKernelName | 设置kernel name。 |
| GetKernelType | 获取kernel type。一个算子可以对应多个kernel，也就对应多个kernel type。 |
| SetKernelType | 设置kernel type。 |
| SetKernelTypeIdx | 设置kernel\_type\_idx\_，用于profiling。profiling时设置的kernel type字符串对应的idx，用idx代替kernel type字符串作为标识，提升速度。 |
| SetNodeNameIdx | 设置compute\_node\_name\_idx\_，用于profiling，profiling时，用idx代替node name字符串作为标识，提升速度。 |
| GetNodeNameIdx | 获取compute\_node\_name\_idx\_，用于profiling。 |
| GetKernelTypeIdx | 获取kernel\_type\_idx\_，用于profiling。 |


#### TensorOperateType

```
enum TensorOperateType {
kGetTensorAddress,  ///< 获取Tensor的地址
kFreeTensor,        ///< 释放Tensor
kPlusShareCount,    ///< 共享Tensor
kTensorOperateType
};
```


#### StructSizeInfoBase类

StructSizeInfoBase类用来存放、获取Ascend C高阶API和用户自定义的tiling结构体大小，通过单例实现一个结构体信息库。


**表6 StructSizeInfoBase类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetInstance | 获取StructSizeInfoBase类的单例。 |
| SetStructSize | 设置高阶API/用户自定义tiling结构大小。 |
| GetStructSize | 获取高阶API/用户自定义tiling结构大小。 |


#### TilingDataStructBase类

TilingDataStructBase的类，用于记录Tiling结构体构造过程信息。提供以下接口：


**表7 TilingDataStructBase类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetInstance | 获取TilingDataStructBase类的单例。 |
| RecordTilingStruct | 用于框架检查不同算子注册同名不同结构tiling结构体情况，若出现则会打印warning信息。 |


#### OpExecuteContext类

本类用于保存图模式下调用单算子执行API场景下的上下文。


**表8 OpExecuteContext类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetInputTensor | 获取指定索引输入的Tensor。 |
| GetOptionalInputTensor | 获取指定索引的可选输入的Tensor。 |
| GetDynamicInputTensor | 获取指定索引的动态个数输入的Tensor。 |
| GetRequiredInputTensor | 获取指定索引的必选输入的Tensor。 |
| GetOutputTensor | 获取指定索引输出的Tensor。 |
| GetDynamicOutputTensor | 获取指定索引的动态个数输出的Tensor。 |
| GetRequiredOutputTensor | 获取指定索引的必选输出的Tensor。 |
| GetStream | 获取下发算子的流信息。 |
| GetOpExecuteFunc | 获取多kernel算子的执行回调函数。 |
| MallocWorkspace | 分配workspace内存。 |
| FreeWorkspace | 释放workspace内存。 |
| GetDeterministic | 获取确定性计算配置选项。 |
| GetAllowHf32 | 获取allow\_hf32配置选项。 |
| GetPrecisionMode | 获取精度模式配置选项。 |


#### OpExecutePrepareContext类

本类用于保存图模式下调用单算子执行一阶段API（准备算子下发参数）场景下的上下文。


**表9 OpExecutePrepareContext类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetInputTensor | 获取指定索引输入的Tensor。 |
| GetOptionalInputTensor | 获取指定索引的可选输入的Tensor。 |
| GetDynamicInputTensor | 获取指定索引的动态个数输入的Tensor。 |
| GetRequiredInputTensor | 获取指定索引的必选输入的Tensor。 |
| GetOutputTensor | 获取指定索引输出的Tensor。 |
| GetDynamicOutputTensor | 获取指定索引的动态个数输出的Tensor。 |
| GetRequiredOutputTensor | 获取指定索引的必选输出的Tensor。 |
| SetOpApiParamsWithDefaultDeleter | 设置传递给算子下发阶段使用的参数结构体指针到输出Chain中。 |
| SetOpApiParams | 设置传递给算子下发阶段使用的参数结构体指针到输出Chain中。 |
| SetWorkspaceSizes | 设置需要申请的Workspace内存大小。 |
| GetDeterministic | 获取确定性计算配置选项。 |
| GetAllowHf32 | 获取allow\_hf32配置选项。 |
| GetPrecisionMode | 获取精度模式配置选项。 |


#### OpExecuteLaunchContext类

本类用于保存图模式下调用单算子执行二阶段API（算子下发）场景下的上下文。


**表10 OpExecuteLaunchContext类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| GetInputTensor | 获取指定索引输入的Tensor。 |
| GetOptionalInputTensor | 获取指定索引的可选输入的Tensor。 |
| GetDynamicInputTensor | 获取指定索引的动态个数输入的Tensor。 |
| GetRequiredInputTensor | 获取指定索引的必选输入的Tensor。 |
| GetOutputTensor | 获取指定索引输出的Tensor。 |
| GetDynamicOutputTensor | 获取指定索引的动态个数输出的Tensor。 |
| GetRequiredOutputTensor | 获取指定索引的必选输出的Tensor。 |
| GetOpApiParams | 设置一阶段输出数据到输出Chain中。 |
| GetWorkspaceSizes | 获取申请的Workspace内存大小。 |
| GetWorkspaceAddrs | 获取申请的Workspace地址。 |
| GetStream | 获取下发算子的流信息。 |


#### OpImplSpaceRegistryV2类

本类用于保存算子交付件，用于管理、隔离不同离线模型、默认安装目录下不同版本的算子交付件。


**表11 OpImplSpaceRegistryV2类成员函数**

| 接口名 | 接口功能 |
| --- | --- |
| OpImplSpaceRegistryV2 | OpImplSpaceRegistryV2构造函数。 |
| ~OpImplSpaceRegistryV2 | OpImplSpaceRegistryV2析构函数。 |
| AddSoToRegistry | 读取so路径，解析so里包含的算子交付件。 |
| GetOpImpl | 获取该版本下的某个算子类型的所有交付件。 |


#### DefaultOpImplSpaceRegistryV2类

单例类，用于管理默认安装路径下的算子交付件注册中心，称之为默认注册中心，一个进程中只有唯一一份。


**表12 DefaultOpImplSpaceRegistryV2类成员函数**

| 函数名称含义 | 含义 |
| --- | --- |
| GetSpaceRegistry | 获取默认注册中心的space registry，space registry对应OpImplSpaceRegistryV2类对象。 |
| SetSpaceRegistry | 设置默认注册中心的space registry，space registry对应OpImplSpaceRegistryV2类对象。 |
| ClearSpaceRegistry | 清空当前默认注册中心里保存的所有space registry。 |


#### OppSoDesc类

本类用于组织算子交付件的so路径以及so归属哪种类型的包（内置包或者自定义算子包）。


**表13 OppSoDesc类成员函数**

| 函数名称含义 | 含义 |
| --- | --- |
| OppSoDesc | So描述信息的构造函数，包含一个输入so路径以及so的描述信息。 |
| OppSoDesc | So描述信息的构造函数，包含一组输入so路径以及该组so的描述信息。 |
| OppSoDesc | So描述信息的移动构造函数 |
| GetSoPaths | 获取当前So描述信息中的so路径。 |
| GetPackageName | 获取当前So描述信息中的包名。 |


#### OppPackageUtils类

本类用于按照优先级加载所有的安装目录下的so，优先级：自定义算子 > 内置安装目录算子。


**表14 OppPackageUtils类成员函数**

| 函数名称含义 | 含义 |
| --- | --- |
| LoadAllOppPackage | 静态成员方法，加载所有的安装目录下的so。 |


#### OppImplVersionTag类

```
enum class OppImplVersionTag {
kOpp,
kOppKernel,
// add new version definitions here
kVersionEnd = 20
};
```


#### OpImplFunctions类

本类用于保存算子注册的Shape/ShapeRange/DataType推导、Tiling计算、值依赖等信息，不可扩展。


**表15 OpImplFunctions类成员函数**

| 函数名称含义 | 含义 |
| --- | --- |
| operator= | 拷贝赋值函数 |
| HasDataDependency | 判断算子是否注册了InferShape值依赖，表示在Shape推导时依赖输入的值。 |
| IsInputDataDependency | 判断算子的第index个输入是否为InferShape值依赖，其中index是算子的原型输入顺序。 |
| SetInputDataDependency | 设置算子的第index个输入为InferShape值依赖，其中index是算子的原型输入顺序。 |
| HasHostInput | 判断算子是否注册了输入地址需要是一个host地址。 |
| IsHostInput | 判断算子的第index个输入是否需要是一个host地址，其中index是算子的原型输入顺序。 |
| SetHostInputs | 设置算子的第index个输入需要是一个host地址，其中index是算子的原型输入顺序。 |
| HasTilingInputDataDependency | 判断算子是否注册了Tiling值依赖，表示算子在Tiling计算时依赖输入的值。 |
| IsTilingInputDataDependency | 判断算子的第index个输入是否为Tiling值依赖，其中index是算子的原型输入顺序。 |
| SetTilingInputDataDependency | 设置算子的第index个输入为Tiling值依赖，其中index是算子的原型输入顺序。 |
| IsSupportTilingDependencyPlacement | 判断算子是否支持入参指定的Tiling计算所在的设备类型。 |
| SetTilingDependencyPlacement | 设置算子Tiling计算所在的设备类型，算子注册了Tiling值依赖的场景下需要设置。 |
| IsOutputShapeDependOnCompute | 判断算子输出shape是否需要在计算完成后才能获取。 |
| IsOutputShapeDependOnCompute | 判断算子的第index个输出shape是否需要在计算完成后才能获取，其中index是算子的原型输入顺序。 |
| SetOutputShapeDependOnCompute | 设置算子的第index个输出shape需要在计算完成后才能获取，其中index是算子的原型输入顺序。 |


#### OpImplFunctionsV2类

OpImplFunctions的子类，可扩展，本类用于保存算子注册的GenerateTask、CheckSupport等信息。


**表16 OpImplFunctionsV2类成员函数**

| 函数名称含义 | 含义 |
| --- | --- |
| OpImplFunctionsV2 | 默认构造函数 |
| operator= | 拷贝赋值函数 |
