算子分析
简介
本节以Add TBE算子和AI CPU算子开发为例进行算子分析,帮助读者快速掌握算子分析流程。MindSpore算子工程的Square TBE算子分析请读者自行完成。
TBE算子分析
使用TBE DSL方式开发Add算子前,我们需要确定算子功能、输入、输出,算子开发方式、算子类型以及算子实现函数名称等。
- 明确算子的功能以及数学表达式。
add算子的数学表达式为:
z=x+y
计算过程:将两个输入参数相加,得到最终结果z并将其返回。
- 明确输入和输出。
- add算子有两个输入:x与y,输出为z。
- 本样例中算子的输入支持的数据类型为float16、float32、int32,算子输出的数据类型与输入数据类型相同。
- 算子输入支持所有shape,输出shape与输入shape相同。
- 算子输入支持的format为:NCHW,NC1HWC0,NHWC,ND。
- 确定算子开发方式及使用的计算接口。
- 明确算子实现文件名称、算子实现函数名称以及算子的类型(OpType)。
算子命名规则如下:
- 算子类型需要采用大驼峰的命名方式,即采用大写字符区分不同的语义。
- 算子文件名称和算子函数名称,可选用以下任意一种命名规则:
因此本例中,算子类型定义为Add。算子的实现文件名称及实现函数名称将首字母转换小写字符,定义为add。
通过以上分析,得到Add算子的设计规格如下:
表1 Add算子设计规格 算子类型(OpType)
Add
算子输入
name:x1
shape:all
data type:
float16、float32、 int32
format:
NCHW,NC1HWC0,NHWC,ND
name:x2
shape:all
data type:
float16、float32、 int32
format:
NCHW,NC1HWC0,NHWC,ND
算子输出
name:y
shape:all
data type:
float16、float32、 int32
format:
NCHW,NC1HWC0,NHWC,ND
算子实现使用的主要DSL接口
tbe.dsl.broadcast(var, shape, output_dtype=None)
tbe.dsl.vadd(lhs, rhs)
算子实现文件/实现函数名称
add
AI CPU算子分析
使用AI CPU方式开发算子前,我们需要确定算子功能、输入、输出、算子类型以及算子实现函数名称等。
- 明确算子的功能以及数学表达式。
以Add算子为例,Add算子的数学表达式为:
z=x+y
计算过程是:将两个输入参数相加,得到最终结果z并将其返回。
- 明确输入和输出。
- 例如Add算子有两个输入:x与y,输出为z。
- 本样例中算子的输入支持的数据类型为float16、float32、 int32,算子输出的数据类型与输入数据类型相同。
- 算子输入支持所有shape,输出shape与输入shape相同。
- 算子输入支持的format为:NCHW,NHWC,ND。
- 明确算子实现文件名称以及算子的类型(OpType)。
因此本例中,算子类型定义为Add,算子的实现文件名称为add,因此各个交付件的名称建议命名如下:
- 算子的代码实现(即kernel实现)文件命名为add_kernel.h与add_kernel.cc。
- 插件实现文件命名为add_kernel_plugin.cc。
- 原型定义文件命名为:add.h与add.cc。
- 信息定义文件命名为add.ini。
通过以上分析,得到Add算子的设计规格如下:
表2 Add算子设计规格 算子类型(OpType)
Add
算子输入
name:x
shape:all
data type:
float16、float32、 int32
name:y
shape:all
data type:
float16、float32、 int32
算子输出
name:z
shape:all
data type:
float16、float32、 int32
算子实现文件名称
add