内部关联接口
在进行算子原型注册、Tiling实现、shape推导过程中,使用到的外部开放接口中会调用到一些辅助数据结构和接口,称之为内部关联接口。开发者不会直接调用内部关联接口,此处仅作简单介绍。
CTilingDataClassFactory
CTilingDataClassFactory类用于注册AscendC高阶API和开发者自定义tiling结构,通过单例实现的工厂类,在TilingData结构注册中REGISTER_TILING_DATA_CLASS中使用。
表1 CTilingDataClassFactory成员函数
| 函数名称 | 含义 |
|---|---|
| GetInstance | 获取CTilingDataClassFactory类的单例。 |
| RegisterTilingData | 注册op_type的tiling结构constructor至CTilingDataClassFactory工厂类。 |
| CreateTilingDataInstance | 根据算子名获取tiling结构。 |
OpDef相关接口
原型注册相关类的一些非对外开放接口,包括OpDef、OpParamDef、OpAICoreConfig等,下述接口均为框架生成相关工程所需,开发者无需关心。
表2 OpDef相关类及其成员函数
| 类名 | 接口名 | 接口功能 |
|---|---|---|
| OpAICoreDef | GetTiling | 获取Tiling信息。 |
| OpDef | GetInferShape | 获取Shape推导函数。 |
| OpDef | GetInferDataType | 获取DataType推导函数。 |
| OpDefFactory | OpDefRegister | 注册算子。 |
Tiling定义辅助接口
以下接口为Tiling定义辅助接口。AscendC提供了一系列Tiling类型定义宏,包含BEGIN_TILING_DATA_DEF、TILING_DATA_FIELD_DEF、TILING_DATA_FIELD_DEF_ARR、TILING_DATA_FIELD_DEF_STRUCT、REGISTER_TILING_DATA_CLASS。开发者调用该系列宏会调用以下接口对tiling信息进一步处理,包含结构信息保留、字节对齐等。
// TilingDef类
void SaveToBuffer(void *pdata, size_t capacity);
std::vector<FieldInfo> GetFieldInfo() const;
const char *GetTilingClassName() const;
size_t GetDataSize() const;
void SetDataPtr(void *dataPtr);
void CheckAlignAndGenPlaceHolder(const char *name, size_t typeSize);
// FieldInfo类
FieldInfo(const char *dtype, const char *name)
FieldInfo(const char *dtype, const char *name, size_t arrSize)
FieldInfo(const char *dtype, const char *name, const char *structType,size_t structSize)