Transpose

功能说明

  1. 可实现16*16的二维矩阵数据块的转置;
  2. 可实现[N,C,H,W]与[N,H,W,C]互相转换。

函数原型

参数说明

表1 模板参数说明

参数名

描述

T

操作数的数据类型。

普通转置接口:

Atlas 训练系列产品,支持的数据类型为:uint16_t/int16_t/half

Atlas推理系列产品AI Core,支持的数据类型为:uint16_t/int16_t/half

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:uint16_t/int16_t/half

Atlas 200I/500 A2推理产品,支持的数据类型为:uint16_t/int16_t/half

增强转置接口:

参考表4

表2 接口参数说明

参数名称

输入/输出

含义

dstLocal

输出

目的操作数。

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

LocalTensor的起始地址需要32字节对齐。

srcLocal

输入

源操作数。

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

LocalTensor的起始地址需要32字节对齐。

数据类型需要与dstLocal保持一致。

sharedTmpBuffer

输入

共享的临时Buffer Tensor,sharedTmpBuffer的大小参考表5

transposeParams

输入

控制Transpose的数据结构。结构体内包含:输入的shape信息和transposeType参数。该数据结构的定义请参考表3

1
2
3
4
5
6
7
struct VtransposeParams {
    uint16_t nSize;
    uint16_t cSize;
    uint16_t hSize;
    uint16_t wSize;
    TransposeType transposeType;
};
表3 VtransposeParams结构体内参数说明

参数名称

含义

nSize

n轴长度,取值范围:m∈[0, 65535] 。默认值为0。

cSize

c轴长度,取值范围:m∈[0, 65535] 。默认值为0。

hSize

h轴长度,取值范围:m∈[0, 65535] 。默认值为0。

wSize

w轴长度,取值范围:m∈[0, 65535] 。默认值为0。

transposeType

数据排布及reshape的类型,类型为TransposeType枚举类。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
enum class TransposeType : uint8_t {
    TRANSPOSE_TYPE_NONE,           // default value
    TRANSPOSE_NZ2ND_0213,          // 当前不支持
    TRANSPOSE_NZ2NZ_0213,          // 当前不支持
    TRANSPOSE_NZ2NZ_012_WITH_N,    // 当前不支持
    TRANSPOSE_NZ2ND_012_WITH_N,    // 当前不支持
    TRANSPOSE_NZ2ND_012_WITHOUT_N, // 当前不支持
    TRANSPOSE_NZ2NZ_012_WITHOUT_N, // 当前不支持
    TRANSPOSE_ND2ND_ONLY,          // 当前不支持
    TRANSPOSE_ND_UB_GM,            // 当前不支持
    TRANSPOSE_GRAD_ND_UB_GM,       // 当前不支持
    TRANSPOSE_ND2ND_B16,           // [16,16]二维矩阵转置
    TRANSPOSE_NCHW2NHWC,           // [N,C,H,W]->[N,H,W,C],
    TRANSPOSE_NHWC2NCHW            // [N,H,W,C]->[N,C,H,W]
};

注意:当transposeType为TRANSPOSE_ND2ND_B16时,hSize和wSize必须传入16,nSize和cSize传入无效。

表4 增强转置接口支持的数据类型

transposeType

支持的数据类型

TRANSPOSE_ND2ND_B16

Atlas推理系列产品AI Core,支持的数据类型为:uint16_t

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:uint16_t

Atlas 200I/500 A2推理产品,支持的数据类型为:uint16_t

注意:如果要实现int16_t/half类型,shape为[16,16]二维矩阵的转置,可使用普通转置接口。

TRANSPOSE_NCHW2NHWC

Atlas推理系列产品AI Core,支持的数据类型为:uint8_t/uint16_t/uint32_t

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:int8_t/uint8_t/int16_t/uint16_t/half/int32_t/uint32_t/float

TRANSPOSE_NHWC2NCHW

Atlas推理系列产品AI Core,支持的数据类型为:uint8_t/uint16_t/uint32_t

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:int8_t/uint8_t/int16_t/uint16_t/half/int32_t/uint32_t/float

表5 增强转置接口sharedTmpBuffer所需的大小

transposeType

支持的数据类型

TRANSPOSE_ND2ND_B16

Atlas推理系列产品AI Core:0B

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

Atlas 200I/500 A2推理产品: 0B

TRANSPOSE_NCHW2NHWC

Atlas推理系列产品AI Core:0B

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

int8_t/uint8_t类型:(cSize + 2) * 32 * 32 * 1B

int16_t/uint16_t/half类型:(cSize + 2) * 16 * 16 * 2B

int32_t/uint32_t/float类型:(cSize + 2) * 16 * 8 * 4B

TRANSPOSE_NHWC2NCHW

Atlas推理系列产品AI Core:0Byte

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

int8_t/uint8_t类型:(cSize * 2 + 1) * 32 * 32 * 1B

int16_t/uint16_t/half类型:(cSize * 2 + 1) * 16 * 16 * 2B

int32_t/uint32_t/float类型:(cSize * 2 + 1) * 16 * 8 * 4B

支持的型号

Atlas 训练系列产品

Atlas推理系列产品AI Core

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

Atlas 200I/500 A2推理产品

注意事项

返回值

调用示例