TransdataOperation
产品支持情况
| 
          硬件型号  | 
        
          是否支持  | 
        
          特殊说明  | 
       
|---|---|---|
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          -  | 
       
| 
          | 
        
          √  | 
        
          仅支持float16数据类型。  | 
       
功能说明
数据格式转换处理。将ACL_FORMAT_ND格式转换为ACL_FORMAT_FRACTAL_NZ格式,或将ACL_FORMAT_FRACTAL_NZ格式转换为ACL_FORMAT_ND格式。
 
     - 等效描述:ND、ACL_FORMAT_ND
 - 等效描述:NZ、ACL_FORMAT_FRACTAL_NZ、FRACTAL_NZ
 
- ACL_FORMAT_ND格式
     
- aclFormat中的描述
       
ACL_FORMAT_ND = 2:表示支持任意格式,仅Square、Tanh等单输入算子适用。
 - 详细说明
       
Format为数据的物理排布格式,定义了解读数据的维度,ND格式表示1D、2D、3D、4D等。以4D为例,N:Batch数量、H:Height,特征图高度、W: Width, 特征图宽度、C: Channel,特征图通道。
以2D为例,一般按照行优先的方式存储。
图1 ACL_FORMAT_ND格式示例图
        
 - aclFormat中的描述
       
 - ACL_FORMAT_FRACTAL_NZ格式
     
- aclFormat中的描述
       
ACL_FORMAT_FRACTAL_NZ = 29:内部格式,用户目前无需使用。
 - 详细说明
       
FRACTAL_NZ是分形格式(NW1H1H0W0),将整个矩阵分为(H1*W1)个分形,每一个分形内部有(H0*W0)个元素对应每一个N层。
图2 ACL_FORMAT_FRACTAL_NZ格式示例图
       以上图为例,N=1、W1=4、H1=4。
 
 - aclFormat中的描述
       
 
定义
          1 2 3 4 5 6 7 8 9 10  | 
         
          struct TransdataParam { enum TransdataType : int { UNDEFINED = 0, FRACTAL_NZ_TO_ND, ND_TO_FRACTAL_NZ }; TransdataType transdataType = UNDEFINED; SVector<int64_t> outCrops = {0, 0}; uint8_t rsv[8] = {0}; };  | 
        
参数列表
| 
          成员名称  | 
        
          类型  | 
        
          默认值  | 
        
          描述  | 
       
|---|---|---|---|
| 
          transdataType  | 
        
          TransdataType  | 
        
          UNDEFINED  | 
        
          数据格式转换类型,支持FRACTAL_NZ和ND互相转换。 
 此默认类型不可用,用户需配置此项参数。  | 
       
| 
          outCrops  | 
        
          SVector<int64_t>  | 
        
          {0,0}  | 
        
          仅当FRACTAL_NZ转ND时使用,表示原ND数据格式Shape的最后两维。  | 
       
| 
          rsv[8]  | 
        
          uint8_t  | 
        
          {0}  | 
        
          预留参数。  | 
       
ND转NZ输入输出描述
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          x  | 
        
         
  | 
        
          float16/int8/bf16  | 
        
          ND  | 
        
          输入tensor。  | 
       
| 
          y  | 
        
          [batch, n1, m1m0, n0]  | 
        
          float16/int8/bf16  | 
        
          NZ  | 
        
          输出tensor,数据类型与输入tensor一致。 
  | 
       
NZ转ND输入输出描述
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          x  | 
        
          [batch, n1, m1m0, n0]  | 
        
          float16/bf16  | 
        
          NZ  | 
        
          输入tensor。  | 
       
| 
          y  | 
        
          [batch, m, n]  | 
        
          float16/bf16  | 
        
          ND  | 
        
          输出tensor,数据类型与输入tensor一致。  | 
       
功能列表
- 将ACL_FORMAT_ND数据格式的Tensor转换为ACL_FORMAT_FRACTAL_NZ数据格式
      
- 数据类型为float16
 - 数据类型为int8
 
 - 将ACL_FORMAT_FRACTAL_NZ数据格式的Tensor转换为ACL_FORMAT_ND数据格式
      
- 数据类型为float16
        
将一个shape为[b, n1, m1m0, n0]的Tensor作为输入,参数中的outCrops = {m, n}。输出tensor的shape为[b, m, n],其中m的取值范围为(
,
],n的取值范围为(
,
]。 
 - 数据类型为float16
        
 
约束说明
- 使用的NZ的dims约定表示方式:{b, n1, m1m0, n0},对应的ND的dims是{b, m, n},其中:b表示batch,如果batch为1,该维度为1,不可省略。如果batch有多个,该维度为所有batch维度合轴的结果。
      
m0/n0表示对齐位,float16时,n0与m0都为16, int8时,n0为32,m0为16,m1m0表示原始ND的m维度经过对齐位向上对齐,n1表示原始ND的n维度经过对齐位向上对齐后,除以n0的商。例如原始ND的dims为{8, 100, 30},则其对应的NZ的dims为{8, 2, 112, 16}。
 - outCrops的长度要求是2,其值须满足以下要求:
      
- 如果m0m1落在区间(k1 × 16, (k1 + 1) × 16](其中k1为正整数)内,那么该区间即为outCrops[0]的取值范围要求。
 - 如果n0*n1落在区间(k2 × 16, (k2 + 1) × 16](其中k2为正整数)内,那么该区间即为outCrops[1]的取值范围要求。
 
 - 不支持原地写。