ElewiseOperation

功能

Elewise计算功能。

约束

定义

struct ElewiseParam {
    enum ElewiseType: int {
        ELEWISE_UNDEFINED = 0,
        ELEWISE_CAST,
        ELEWISE_MULS,
        ELEWISE_COS,
        ELEWISE_SIN,
        ELEWISE_NEG,
        ELEWISE_QUANT,
        ELEWISE_LOGICAL_NOT,
        ELEWISE_ADD,
        ELEWISE_MUL,
        ELEWISE_REALDIV,
        ELEWISE_LOGICAL_AND,
        ELEWISE_LOGICAL_OR,
        ELEWISE_LESS,
        ELEWISE_GREATER,
        ELEWISE_SUB,
        ELEWISE_EQUAL,
        ELEWISE_QUANT_PER_CHANNEL,
        ELEWISE_DEQUANT_PER_CHANNEL,
    };
 
    struct QuantParam {
        float inputScale = 1.0f;
        int inputOffset = 0;
    };
 
    struct MulsParam {
        float varAttr = 0.0f;
    };
 
    ElewiseType elewiseType = ELEWISE_UNDEFINED;
    QuantParam quantParam;
    MulsParam mulsParam;

    aclDataType outTensorType = ACL_DT_UNDEFINED;
};

成员

成员名称

描述

elewiseType

计算类型,支持如下种类:

  • ELEWISE_CAST:数据类型转换。
  • ELEWISE_MULS:标量乘积。
  • ELEWISE_COS:余弦值计算。
  • ELEWISE_SIN:正弦值计算。
  • ELEWISE_NEG:取反。
  • ELEWISE_QUANT:量化,当前只支持INT8。
  • ELEWISE_LOGICAL_NOT:逻辑取反。
  • ELEWISE_ADD:加,经过broadcast后再加。
  • ELEWISE_MUL:乘,经过broadcast后再乘。
  • ELEWISE_REALDIV:除,经过broadcast后再除。
  • ELEWISE_LOGICAL_AND:逻辑与。
  • ELEWISE_LOGICAL_OR:逻辑或。
  • ELEWISE_LESS:小于。
  • ELEWISE_GREATER:大于。
  • ELEWISE_SUB:减,经过broadcast后再减。
  • EQUAL:相等。
  • ELEWISE_QUANT_PER_CHANNEL:Tensor内对每个element进行非对称量化。如果scale和offset为标量,那么算子退化成ELEWISE_QUANT。

    计算公式为:

  • ELEWISE_DEQUANT_PER_CHANNEL:Tensor内对每个element进行非对称反量化。

    计算公式为:

当ElewiseType为ELEWISE_MULS时,用户需要注意传入的参数varAttr与输入x的元素相乘后可能导致的数值溢出问题。

quantParam

量化参数。

MulsParam

Muls参数。

outTensorType

当elewiseType = ELEWISE_CAST时,指定其输出Tensor的数据类型。

输入

表1 ELEWISE_CAST输入

参数

维度

数据类型

格式

描述

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16/float/int64/int32

ND

数据类型之间的转换

表2 ELEWISE_MULS/ ELEWISE_COS/ ELEWISE_SIN/ELEWISE_REALDIV/ ELEWISE_EQUAL输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float/float16

ND

表3 ELEWISE_NEG输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16

ND

表4 ELEWISE_QUANT输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16

ND

表5 ELEWISE_LOGICAL_NOT输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

表6 ELEWISE_SUB输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16/int64

ND

y

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16/int64

ND

表7 ELEWISE_MUL输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16

ND

y

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16

ND

表8 ELEWISE_LOGICAL_AND输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

y

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

表9 ELEWISE_LOGICAL_OR输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

y

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

表10 ELEWISE_LESS/ ELEWISE_GREATER输入

参数

维度

数据类型

格式

描述

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

int64/float/float16

ND

equal不支持int64

y

[-1,…,-1]

-1表示当前维度的大小没有约束。

int64/float/float16

ND

equal不支持int64

表11 ELEWISE_ADD输入

参数

维度

数据类型

格式

x

[-1,…,-1]

-1表示当前维度的大小没有约束。

float/float16/bf16

ND

表12 ELEWISE_QUANT_PER_CHANNEL输入

参数

维度

数据类型

格式

描述

x

[b1,...,bx,n1,...,ny]

float16

ND

无。

scale

[n1,…,ny]

float16

ND

scale中元素要求不为0。可以为标量。

offset

[n1,…,ny]

int8

ND

offset可以为空Tensor。可以为标量。

表13 ELEWISE_DEQUANT_PER_CHANNEL输入

参数

维度

数据类型

格式

描述

y

[b1,...,bx,n1,...,ny]

int8

ND

无。

scale

[n1,…,ny]

float16

ND

可以为标量。

offset

[n1,…,ny]

int8

ND

offset可以为空Tensor。可以为标量。

输出

表14 ELEWISE_CAST输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16/float/int64/int32

ND

表15 ELEWISE_MULS/ ELEWISE_COS/ ELEWISE_SIN输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float/float16

ND

表16 ELEWISE_NEG输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16

ND

表17 ELEWISE_QUANT输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

表18 ELEWISE_LOGICAL_NOT输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

表19 ELEWISE_SUB输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16/int64

ND

表20 ELEWISE_MUL输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float16

ND

表21 ELEWISE_ REALDIV输出

参数

维度

数据类型

格式

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float

ND

表22 ELEWISE_LOGICAL_AND输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

bool类型张量,维度为输入Broadcast后的结果。

表23 ELEWISE_LOGICAL_OR输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

bool类型张量,维度为输入Broadcast后的结果。

表24 ELEWISE_LESS/ ELEWISE_GREATER/ELEWISE_EQUAL输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

int8

ND

bool类型张量,维度为输入Broadcast后的结果。

表25 ELEWISE_ADD输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

-1表示当前维度的大小没有约束。

float/float16/bf16

ND

bool类型张量,维度为输入Broadcast后的结果。

表26 ELEWISE_QUANT_PER_CHANNEL输出

参数

维度

数据类型

格式

描述

y

[b1,...,bx,n1,...,ny]

int8

ND

无。

表27 ELEWISE_DEQUANT_PER_CHANNEL输出

参数

维度

数据类型

格式

描述

x

[b1,...,bx,n1,...,ny]

float16

ND

无。