算子原型注册
算子原型主要描述了算子的输入输出、属性等信息以及算子在AI处理器上相关实现信息,并关联上述Tiling实现、Shape推导等函数。下面是一个简单的Add算子原型注册的例子。
namespace ops { class AddCustom : public OpDef { public: AddCustom(const char* name) : OpDef(name) { this->Input("x") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}) .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}); this->Input("y") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}) .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}); this->Output("z") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}) .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}); this->SetInferShape(ge::InferShape); this->AICore() .SetTiling(optiling::TilingFunc); // 请替换为实际的昇腾AI处理器型号 this->AICore().AddConfig("ascendxxx"); } }; OP_ADD(AddCustom); } // namespace ops
算子原型定义
算子原型定义描述了算子的输入输出,属性等信息。
如下的代码片段呈现了Add算子输入x的描述信息。
this->Input("x") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND}) .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});
如下的代码片段呈现了ReduceMax算子的属性reduceDim和isKeepDim的描述信息。
this->Attr("reduceDim") .AttrType(REQUIRED) .Int(); this->Attr("isKeepDim") .AttrType(OPTIONAL) .Int(1);
具体参数说明如下:
原型定义 |
注册方式 |
具体描述 |
---|---|---|
Input/Ouput |
ParamType |
参数类型,Option取值为:OPTIONAL(可选)、REQUIRED(必选)、DYNAMIC(动态输入)。
|
DataType |
算子输入输出支持的数据类型。数据类型的取值请参考ge:DataType。 |
|
Format |
算子输入输出支持的格式。格式的取值请参考ge::Format。 |
|
Attr |
AttrType |
设置算子属性类型,取值为:OPTIONAL(可选)、REQUIRED(必选)。 |
Bool/Float/Int... |
设置算子属性数据类型为Bool/Float/Int...。具体说明请参考OpAttrDef类。 |
AI处理器上相关实现信息
通过AddConfig注册算子支持的AI处理器型号以及相关的配置信息。AddConfig接口原型如下:soc参数表示AI处理器型号,aicore_config表示其他配置信息。
void AddConfig(const char *soc); void AddConfig(const char *soc, OpAICoreConfig &aicore_config);
通过该接口注册AI 处理器型号的样例如下,ascendxxx请替换为实际的AI处理器型号。
this->AICore().AddConfig("ascendxxx");
其他AI Core配置信息的配置方式请参考OpAICoreConfig。
关联Tiling实现、Shape推导等函数
通过SetInferShape、SetTiling接口来关联对应的shape推导函数和Tiling函数,样例如下。
this->SetInferShape(ge::InferShape); this->AICore() .SetTiling(optiling::TilingFunc);
父主题: host侧算子实现