更新时间:2021-03-18 GMT+08:00
分享

算子分析

使用TIK API开发Upsample算子前,我们需要确定算子功能、输入、输出,算子开发方式、算子类型以及算子实现函数名称等。

  1. 明确算子的功能。

    Upsample算子用于在神经网络中,使用插值方法扩大特征图。

  2. 明确输入和输出。

    • Upsample算子有1个输入x,1个输出y,3个属性。
    • 算子输入的数据类型为float16和float32,算子输出的数据类型为float16和float32。
    • 算子输入支持所有shape。
    • 算子输入支持的format:NC1HWC0。
    • 算子的三个属性为scale,stride_h,stride_w。

  3. 确定算子开发方式及使用的计算接口。

    1. 涉及对tensor的不同维度上的不同元素同时操作,TBE DSL接口都无法满足此算子的计算要求,所以考虑使用TIK方式进行此算子的实现。
    2. 该算子实现核心的计算流程如下:
      1. 使用data_move()接口将数据读入到Unified Buffer中。
      2. 使用vmuls()接口乘以缩放系数。
      3. 使用data_move()接口把数据从Unified Buffer搬运数据到Global Memory中。

  4. 明确算子实现文件名称、算子实现函数名称以及算子的类型(OpType)。

    • 算子类型需要采用大驼峰的命名方式,即采用大写字符区分不同的语义。
    • 算子文件名称和算子函数名称,可选用以下任意一种命名规则:
      • 用户自定义,此时需要在算子信息定义中配置opFile.valueopInterface.value
      • 不配置算子信息定义中的opFile.valueopInterface.value,FE会将OpType按照如下方式进行转换后进行算子文件名和算子函数名的匹配。
        转换规则如下:
        • 首字符的大写字符转换为小写字符。

          例如:Abc -> abc

        • 小写字符后的大写字符转换为下划线+小写字符。

          例如:AbcDef -> abc_def

        • 紧跟数字以及大写字符后的大写字符,作为同一语义字符串,查找此字符串后的第一个小写字符,并将此小写字符的前一个大写字符转换为下划线+小写字符,其余大写字符转换为小写字符。若此字符串后不存在小写字符,则直接将此字符串中的大写字符转换为小写字符。

          例如:ABCDef -> abc_def;Abc2DEf -> abc2d_ef;Abc2DEF -> abc2def;ABC2dEF -> abc2d_ef。

    本例中,算子类型定义为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

分享:

    相关文档

    相关产品

close