IndexAddOperation

功能

固定维度的指定下标加上某个特定值。

图1 IndexAddOperation

定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
struct IndexAddParam {
    enum IndexType {
        INDEX_UNDEFINED = 0,
        INDEX_ADD,
        INDEX_ADD_VALID, 
    };
    IndexType indexType = INDEX_UNDEFINED;
    int64_t axis = 0;
    uint8_t rsv[16] = {0};
};

参数列表

成员名称

类型

默认值

取值范围

是否必选

描述

indexType

IndexType

INDEX_UNDEFINED

0,1,2

操作类型。

  • INDEX_UNDEFINED:未定义。
  • INDEX_ADD:加。
  • INDEX_ADD_VALID:有效长度内加。不支持Atlas 推理系列产品

axis

int64_t

0

  • indexType = 1时:[-intensor[0].dimNum, intensor[0].dimNum - 1]
  • indexType = 2时:0

输入tensor需加上updates更新值的轴。

  • “indexType”为INDEX_ADD时,可为负数,取值范围为[-varDimNum, varDimNum - 1]。varDimNum为输入tensor0的维度数。
  • “indexType”为INDEX_ADD_VALID时,仅支持取值为0。

rsv[16]

uint8_t

{0}

[0]

预留参数。

输入输出描述(INDEX_ADD)

参数

维度

数据类型

格式

描述

var

[dim_0, ..., dim_n]

float16/bf16

ND

输入tensor。被加数,输入为零,原地被加后作为输出。

indices

[dim_x]

int32

ND

输入tensor。指定固定维度的指定下标。dim_min = min(dim_x, dim_axis),值域为[0, dim_min),且前dim_min个值不重复。

updates

[dim_0, ..., dim_n]

float16/bf16

ND

输入tensor。加数,根据indices的值加到var对应位置。维度数与var一致。索引为axis的维度为dim_x,即dim_axis == dim_x。

alpha

[1]

float16/bf16

ND

输入tensor。累加次数。

output

[dim_0, ..., dim_n]

float16/bf16

ND

输出tensor。与var为同一个Tensor,即二者数据类型、数据格式和地址等所有属性均相同。

min(x, y)表示取x和y两个数中的较小值。

dim_axis表示var、updates和output在索引为axis的维度大小,即:若axis为0,则dim_axis对应第0维大小d_0。

输入输出描述(INDEX_ADD_VALID)

参数

维度

数据类型

格式

描述

var

[dim_1, dim_2]

float16/bf16

ND

输入tensor。被加数,输入为零,原地被加后作为输出。

indices

[dim_0]

int32

ND

输入tensor。指定固定维度的指定下标。值域范围为[0, dim_1)。

updates

[dim_0, dim_2]

float16/bf16

ND

输入tensor。加数,根据indices的值加到var对应位置。

validIndicesNum

[1]

int32

ND

输入tensor。indices的有效长度。值域范围为[0, dim_0]。

output

[dim_1, dim_2]

float16/bf16

ND

输出tensor。与var为同一个Tensor,即二者数据类型、数据格式和地址等所有属性均相同。

dim_2取值范围为(0, 8192]。

接口调用示例