昇腾社区首页
中文
注册

ElewiseOperation

功能

Elewise计算功能。

约束

  • ELEWISE_ADD、ELEWISE_MUL、ELEWISE_REALDIV、ELEWISE_SUB计算类型将会对输入进行广播后再进行指定操作。
  • 输入x、y对应维度的对应值要求相同或至少其中一个为1。

定义

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,
    };
 
    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:相等。

当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_ADD/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_CAST输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

float16/float/int64/int32

ND

表12 ELEWISE_ADD/ ELEWISE_MULS/ ELEWISE_COS/ ELEWISE_SIN输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

float/float16

ND

表13 ELEWISE_NEG输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

float16

ND

表14 ELEWISE_QUANT输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

int8

ND

表15 ELEWISE_LOGICAL_NOT输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

int8

ND

表16 ELEWISE_SUB输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

float16/int64

ND

表17 ELEWISE_MUL输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

float16

ND

表18 ELEWISE_ REALDIV输出

参数

维度

数据类型

格式

output

[-1,…,-1]

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

float

ND

表19 ELEWISE_LOGICAL_AND输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

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

int8

ND

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

表20 ELEWISE_LOGICAL_OR输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

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

int8

ND

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

表21 ELEWISE_LESS/ ELEWISE_GREATER/ELEWISE_EQUAL输出

参数

维度

数据类型

格式

描述

output

[-1,…,-1]

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

int8

ND

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