跳到主要内容

内部关联接口

在进行算子原型注册、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类用来存放、获取AscendC高阶API和开发者自定义的tiling结构体大小,通过单例实现一个结构体信息库。

表6 StructSizeInfoBase类成员函数

函数名称含义
GetInstance获取StructSizeInfoBase类的单例。
SetStructSize设置高阶API/开发者自定义tiling结构大小。
GetStructSize获取高阶API/开发者自定义tiling结构大小。

TilingDataStructBase类

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

表7 TilingDataStructBase类成员函数

函数名称含义
GetInstance获取TilingDataStructBase类的单例。
RecordTilingStruct用于框架检查不同算子注册同名不同结构tiling结构体情况,若出现则会打印warning信息。

数值计算校验相关接口

框架内部使用的数值计算校验相关接口。

表8 接口说明

函数名称含义
MulOverflow判断乘法数值运算是否溢出。其中溢出的判断条件为乘积后的数值大于ret类型TRet所能表示的最大值。
AddOverflow判断加法数值运算是否溢出。其中溢出的判断条件为相加后的数值大于ret类型TRet所能表示的最大值。
Compat判断入参的数值是否超过指定类型T所能表示的数值范围。

OpExecuteContext类

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

表9 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获取精度模式配置选项。