TilingData结构注册
函数功能
注册定义的TilingData结构体并和自定义算子绑定。具体使用说明请参考调用示例。
函数原型
REGISTER_TILING_DATA_CLASS(op_type, class_name)
#define REGISTER_TILING_DATA_CLASS(op_type, class_name) class op_type##class_name##Helper { public: op_type##class_name##Helper() { CTilingDataClassFactory::RegisterTilingData(#op_type, op_type##class_name##Helper::CreateTilingDataInstance); } static std::shared_ptr<TilingDef> CreateTilingDataInstance() { return std::make_shared<class_name>(); } }; op_type##class_name##Helper g_tilingdata_##op_type##class_name##helper;
约束说明
使用时需要包含头文件register/tilingdata_base.h。
调用示例
- 使用样例
#include "register/tilingdata_base.h" // 定义tilingdata类 namespace optiling { BEGIN_TILING_DATA_DEF(AddCustomTilingData) // 注册一个tiling的类,以tiling的名字作为入参 TILING_DATA_FIELD_DEF(uint32_t, blkDim); // 添加tiling字段,参与计算核数 TILING_DATA_FIELD_DEF(uint32_t, totalSize); // 添加tiling字段,总计算数据量-输入shape大小 TILING_DATA_FIELD_DEF(uint32_t, splitTile); // 添加tiling字段,每个core处理的数据分块计算 END_TILING_DATA_DEF; // 定义结束 // 注册算子tilingdata类到对应的AddCustom算子 REGISTER_TILING_DATA_CLASS(AddCustom, AddCustomTilingData) }
- 不同tiling_key注册不同tiling结构体样例
/*REGISTER_TILING_DATA_CLASS中第一个参数为${op_type) + ‘_’ + tiling_key。若tiling_key未注册匹配的tiling结构体,则会使用默认的结构体。如下面两种方式,tiling_key不指定或者非1情况,tiling结构体为AddStruct;tiling_key等于1的时候,tiling结构体为AddStructSample1*/ // 以op_type为Add为例,默认tiling结构体注册如下 BEGIN_TILING_DATA_DEF(AddStruct) TILING_DATA_FIELD_DEF(uint16_t, mmVar); TILING_DATA_FIELD_DEF_ARR(uint16_t, 3, mmArr); END_TILING_DATA_DEF; REGISTER_TILING_DATA_CLASS(Add, AddStruct) // TilingKey等于1时注册结构体如下 BEGIN_TILING_DATA_DEF(AddStructSample1) TILING_DATA_FIELD_DEF(uint16_t, mmVar); TILING_DATA_FIELD_DEF_ARR(uint16_t, 3, mmArr); END_TILING_DATA_DEF; REGISTER_TILING_DATA_CLASS(Add_1, AddStructSample1)
父主题: Tiling实现