数据格式转换处理。将ACL_FORMAT_ND格式转换为ACL_FORMAT_FRACTAL_NZ格式,或将ACL_FORMAT_FRACTAL_NZ格式转换为ACL_FORMAT_ND格式。
ACL_FORMAT_ND = 2:表示支持任意格式,仅Square、Tanh等单输入算子适用。
Format为数据的物理排布格式,定义了解读数据的维度,ND格式表示1D、2D、3D、4D等。以4D为例,N:Batch数量、H:Height,特征图高度、W: Width, 特征图宽度、C: Channel,特征图通道。
以2D为例,一般按照行优先的方式存储。
ACL_FORMAT_FRACTAL_NZ = 29:内部格式,用户目前无需使用。
FRACTAL_NZ是分形格式(NW1H1H0W0),将整个矩阵分为(H1*W1)个分形,每一个分形内部有(H0*W0)个元素对于每一个N层。
以上图为例,N=1、W1=4、H1=4。
struct TransdataParam { enum TransdataType : int { UNDEFINED = 0, FRACTAL_NZ_TO_ND, ND_TO_FRACTAL_NZ }; TransdataType transdataType = UNDEFINED; SVector<int64_t> outCrops = {0, 0}; };
成员名称 |
类型 |
默认值 |
描述 |
---|---|---|---|
transdataType |
TransdataType |
UNDEFINED |
数据格式转换类型,支持FRACTAL_NZ和ND互相转换。
|
outCrops |
SVector<int64_t> |
{0,0} |
仅当FRACTAL_NZ转ND时使用,表示原ND数据格式Shape的最后两维。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
|
float16/int8 |
ND |
输入tensor。 |
y |
[batch, n1, m1m0, n0] |
float16/int8 |
NZ |
输出tensor,数据类型与输入tensor一致。
|
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[batch, n1, m1m0, n0] |
float16 |
NZ |
输入tensor。 |
y |
[batch, m, n] |
float16 |
ND |
输出tensor,数据类型与输入tensor一致。 |
将一个shape为[b, n1, m1m0, n0]的Tensor作为输入,参数中的outCrops = {m, n}。输出tensor的shape为[b, m, n],其中m的取值范围为(,
],n的取值范围为(
,
]。
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}。