Transpose

功能说明

用于实现16*16的二维矩阵数据块转置或者[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轴长度。默认值为0。

  • 二维矩阵数据块转置,无需传入,传入数值无效。
  • [N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:nSize∈[0, 65535]。

cSize

c轴长度。默认值为0。

  • 二维矩阵数据块转置,无需传入,传入数值无效。
  • [N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:cSize∈[0, 4095]

hSize

h轴长度。默认值为0。

  • 二维矩阵数据块转置,固定传入16。
  • [N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize * wSize ∈[0, 4095],hSize * wSize * sizeof(datatype)需要保证32B对齐。

wSize

w轴长度。默认值为0。

  • 二维矩阵数据块转置,固定传入16。
  • [N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize * wSize ∈[0, 4095],hSize * wSize * sizeof(datatype)需要保证32B对齐。

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]
};
表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,支持的数据类型为:int8_t/uint8_t/int16_t/uint16_t/half/int32_t/uint32_t/float

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

TRANSPOSE_NHWC2NCHW

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

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 推理产品

注意事项

返回值

调用示例