AsStridedOperation
产品支持情况
| 
          硬件型号  | 
        
          是否支持  | 
       
|---|---|
| 
          | 
        
          √  | 
       
| 
          | 
        
          √  | 
       
| 
          | 
        
          √  | 
       
| 
          | 
        
          √  | 
       
| 
          | 
        
          √  | 
       
功能
根据指定参数,使用输入tensor生成一个数据重新排布过的输出tensor。
算子上下文
    算子功能实现描述
AsStrided算子的功能是基于已有的张量创建一个新的视图(view),可以通过指定形状(shape)和步长(strides)来重新排列元素。
映射关系(以输入为 3x3 shape、输出为 2x2 shape 为例)
- 输入
      
inTensor = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] opParam.size = [2, 2] opParam.stride = [2, 3] opParam.offset = [0]
 - 输出
      
outTensor = [[1, 4], [3, 6]]
 
映射关系为:outTensor[i][j] -> v_inTensor[ i * stride[0] + j * stride[1] + offset[0]]。
其中:v_inTensor 为 输入tensor展开的一维向量。
   - offset不为0时的输出:
     
若加上 offset:opParam.offset = [2]。
则计算后输出为:outTensor = [[3, 6], [5, 8]]。
图3 AsStrided算子实现原理(offset不为0时)
      
定义
          1 2 3 4 5 6  | 
         
          struct AsStridedParam { SVector<int64_t> size; SVector<int64_t> stride; SVector<int64_t> offset; uint8_t rsv[8] = {0}; };  | 
        
参数列表
| 
          成员名称  | 
        
          类型  | 
        
          默认值  | 
        
          描述  | 
       
|---|---|---|---|
| 
          size  | 
        
          SVector<int64_t>  | 
        
          -  | 
        
          输出tensor的shape。 “size”的长度要求小于或等于8且各元素要求大于0。  | 
       
| 
          stride  | 
        
          SVector<int64_t>  | 
        
          -  | 
        
          用于从输入tensor推导输出tensor的各维度的步长。 “stride”的长度要求与size一致,各元素要求大于或等于0。  | 
       
| 
          offset  | 
        
          SVector<int64_t>  | 
        
          -  | 
        
          输出tensor内存相对于输入tensor内存的偏移,作为常数使用。 “offset”的长度要求为1且元素要求大于或等于0。  | 
       
| 
          rsv[8]  | 
        
          uint8_t  | 
        
          {0}  | 
        
          预留参数。  | 
       
输入
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          x  | 
        
          [din_0, ..., din_n]  | 
        
          float16/int64  | 
        
          ND  | 
        
          输入tensor。  | 
       
输出
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          y  | 
        
          [dout_0, ..., dout_m]  | 
        
          float16/int64  | 
        
          ND  | 
        
          输出tensor。  | 
       
规格约束
Param参数约束:
- offset.size() == 1,offset.at(i) ≥ 0。
 - size.size() ≤ 8,size.at(i) > 0。
 - stride.size() == size.size(),stride.at(i) ≥ 0。