StridedSliceAssign
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
-
算子功能:StridedSliceAssign是一种张量切片赋值操作,将输入张量input_value的内容赋值给目标张量var中由begin、end、strides指定的切片位置,切片以外的区域保持var原值不变。输出var与输入var同名,为in-place语义,输出shape与输入var的shape相同。
-
计算公式:
var[b0:e0:s0,b1:e1:s1,… ]=input_valuevar[b_0:e_0:s_0, b_1:e_1:s_1, \dots] = \text{input\_value}
切片第i维的长度为:sliceLen[i]=max(0,⌈end[i]−begin[i]strides[i]⌉)sliceLen[i] = \max(0, \lceil\frac{end[i] - begin[i]}{strides[i]}\rceil),其中⌈x⌉\lceil x \rceil表示对xx向上取整。beginbegin和endend为经过负索引归一化与边界截断后的取值:当x<0x < 0时x=x+dimx = x + dim,之后截断到[0,dim][0, dim]区间(shrink轴例外,见shrink_axis_mask说明)。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| var | 输入 | 待切片赋值的目标tensor。 | FLOAT16、FLOAT、BFLOAT16、INT32、INT16 | ND |
| begin | 输入 | 切片位置的起始索引,1维常量tensor,长度为var的维数。 | INT64 | ND |
| end | 输入 | 切片位置的终止索引,1维常量tensor,长度为var的维数。 | INT64 | ND |
| strides | 输入 | 切片的步长,1维常量tensor,长度为var的维数。 | INT64 | ND |
| input_value | 输入 | 替换切片内容的tensor,dtype需与var保持一致,shape需严格等于计算得出的切片shape。 | FLOAT16、FLOAT、BFLOAT16、INT32、INT16 | ND |
| var | 输出 | 切片赋值后的结果tensor,与输入var同名,shape与dtype和输入var一致。 | FLOAT16、FLOAT、BFLOAT16、INT32、INT16 | ND |
| begin_mask | 属性 | int类型,第i位为1时忽略begin[i],起始索引取该区间的起点0。默认值为0。 | - | - |
| end_mask | 属性 | int类型,第i位为1时忽略end[i],终止索引取该区间的终点dim。默认值为0。 | - | - |
| ellipsis_mask | 属性 | int类型,至多一位为1,表示该位展开为完整维度的切片。默认值为0。 | - | - |
| new_axis_mask | 属性 | int类型,第i位为1时在该位置插入长度为1的新维。默认值为0。 | - | - |
| shrink_axis_mask | 属性 | int类型,第i位为1时收缩该维(该维从切片shape中移除,切片长度为1)。要求该维strides[i]=1(非1报错);end[i]被忽略、取begin[i]+1;begin[i]仅做负索引归一化(x<0时x=x+dim)、不截断到[0, dim],越界报错;该位上begin_mask/end_mask不生效。与new_axis_mask同位置置位时shrink失效。默认值为0。 | - | - |
约束说明
- begin、end、strides为值依赖输入,必须能在host侧获取具体数值。
- 输入var支持1D~8D,各维长度必须大于0(不支持空var)。
- begin、end、strides为1维等长tensor(长度m < 32),扣除ellipsis_mask与new_axis_mask置位后的spec项数不得超过var的维数n;不足n时,未指定的尾维按全区间[0, dim)切片。
- strides[i]必须大于0,且最内维的stride必须为1。
- input_value的dtype必须与var一致,shape必须严格等于切片计算后的final shape,不支持广播。
- 输出var与输入var为in-place语义,输出shape等于输入var的shape。
- 本算子为纯数据搬运算子,结果位级精确,无精度损失。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_strided_slice_assign | 参见算子调用完成算子编译和验证,算子IR定义参见strided_slice_assign_proto.h。 |