昇腾社区首页
中文
注册
开发者
下载

SliceOperation

产品支持情况

硬件型号

是否支持

特殊说明

Atlas A3 推理系列产品/Atlas A3 训练系列产品

-

Atlas A2 训练系列产品/Atlas 800I A2 推理产品

-

Atlas 训练系列产品

-

Atlas 推理系列产品

不支持bf16数据类型。

Atlas 200I/500 A2 推理产品

仅支持float16数据类型。

功能说明

从输入张量某个起始位置中提取指定大小的切片。

算子上下文

图1 SliceOperation算子上下文

定义

1
2
3
4
5
struct SliceParam {
    SVector<int64_t> offsets;
    SVector<int64_t> size;
    uint8_t rsv[8] = {0};
};

参数列表

成员名称

类型

默认值

描述

offsets

SVector<int64_t>

-

每个维度切片的起始位置。

offsets[i] 可以为正或负:

  • offsets[i] >= 0:从第 offsets[i] 个元素开始,即实际起始位置为offsets[i]。
  • offsets[i] < 0:从倒数第 |offsets[i]| 个元素开始,即实际起始位置为 dimNum + offsets[i]。
  • 要求:实际起始位置 >= 0 且 < dimNum。

size

SVector<int64_t>

-

每个维度切片的大小。

  • size[i] 的取值范围为:大于 0 或等于 -1;不允许为 0。
    • size[i] = -1 表示切片在第 i 维延伸到该维的末尾。
    • size[i] > 0 表示切片长度为 size[i]。
  • 对于第 i 维,维度大小为 dimNum,定义实际起始位置和实际长度:
    • 实际起始位置:

      若 offsets[i] >= 0:actual_offset = offsets[i]

      若 offsets[i] < 0:actual_offset = dimNum + offsets[i]

    • 实际长度:

      若 size[i] > 0:actual_size = size[i]

      若 size[i] = -1:actual_size = dimNum - actual_offset

  • 合法性检查:
    • actual_offset >= 0
    • actual_offset < dimNum
    • actual_offset + actual_size <= dimNum
    • actual_size > 0

rsv[8]

uint8_t

{0}

预留参数。

输入

参数

维度

数据类型

格式

描述

x

[dim_0, dim_1, ..., dim_n]

float16/float/int8/bool/int32/uint32/bf16

ND

输入tensor。

输出

参数

维度

数据类型

格式

描述

output

和参数size表示的shape一样

float16/float/int8/bool/int32/uint32/bf16

ND

输出tensor,维度的大小为size指定的大小。与x的数据类型相同。

调用接口示例

  • 输入
    x = [[ -78.9,   78.8,  32.22,   49.7,  82.8, 24.77],
         [  72.2,  20.89,  55.16,   85.5,  72.8,  94.8],
        [ 11.36, -83.56,  65.94, -46.94, 72.44,  68.7]]
    offsets = [1, 2]
        
    size = [2, 4]

    在第0维上,从下标为1开始切片长度为2。

    在第1维上从下标为2开始向后切片长度为4 (2+4 <= 6)。

  • 输出
    y.dim = [2, 4]
    y = [[ 55.1562,  85.5000,  72.8125,  94.8125],
         [ 65.9375, -46.9375,  72.4375,  68.6875]]

    若size中的维度为-1, 表示自动推导输出shape。