算子分析
使用TIK API开发Upsample算子前,我们需要确定算子功能、输入、输出,算子开发方式、算子类型以及算子实现函数名称等。
- 明确算子的功能。
Upsample算子用于在神经网络中,使用插值方法扩大特征图。
- 明确输入和输出。
- Upsample算子有1个输入x,1个输出y,3个属性。
- 算子输入的数据类型为float16和float32,算子输出的数据类型为float16和float32。
- 算子输入支持所有shape。
- 算子输入支持的format:NC1HWC0。
- 算子的三个属性为scale,stride_h,stride_w。
- 确定算子开发方式及使用的计算接口。
- 涉及对tensor的不同维度上的不同元素同时操作,TBE DSL接口都无法满足此算子的计算要求,所以考虑使用TIK方式进行此算子的实现。
- 该算子实现核心的计算流程如下:
- 使用data_move()接口将数据读入到Unified Buffer中。
- 使用vmuls()接口乘以缩放系数。
- 使用data_move()接口把数据从Unified Buffer搬运数据到Global Memory中。
- 明确算子实现文件名称、算子实现函数名称以及算子的类型(OpType)。
- 算子类型需要采用大驼峰的命名方式,即采用大写字符区分不同的语义。
- 算子文件名称和算子函数名称,可选用以下任意一种命名规则:
本例中,算子类型定义为Upsample;算子的实现文件名称及实现函数名称定义为upsample。
通过以上分析,得到UpsampleTik算子的设计规格如下:
表1 Upsample算子设计规格 算子类型(OpType)
Upsample
算子输入
name:x
shape:all
data type:float16, float32
format:NC1HWC0
算子属性
name:scale
-
data type:float32
-
name:stride_h
-
data type:int
-
name:stride_w
-
data type:int
-
算子输出
name:y
shape:all
data type:float16, float32
format:NC1HWC0
算子实现使用主要TIK接口
data_move()
vmuls()
算子实现文件/实现函数名称
upsample
