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 推理产品/A200I A2 Box 异构组件,支持的数据类型为:uint16_t/int16_t/half

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

  • 增强转置:
    • transposeType为TRANSPOSE_ND2ND_B16:

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

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

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

    • transposeType为TRANSPOSE_NCHW2NHWC或TRANSPOSE_NHWC2NCHW:

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

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

表2 接口参数说明

参数名称

输入/输出

含义

dstLocal

输出

目的操作数。

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

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

srcLocal

输入

源操作数。

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

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

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

sharedTmpBuffer

输入

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

transposeParams

输入

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
struct TransposeParamsExt {
    __aicore__ TransposeParamsExt() {}
    __aicore__ TransposeParamsExt(const uint16_t nSizeIn, const uint16_t cSizeIn, const uint16_t hSizeIn,
        const uint16_t wSizeIn, const TransposeType transposeTypeIn)
        : nSize(nSizeIn),
          cSize(cSizeIn),
          hSize(hSizeIn),
          wSize(wSizeIn),
          transposeType(transposeTypeIn)
    {}
    uint16_t nSize = 0;
    uint16_t cSize = 0;
    uint16_t hSize = 0;
    uint16_t wSize = 0;
    TransposeType transposeType = TransposeType::TRANSPOSE_ND2ND_B16;
};
表3 TransposeParamsExt结构体内参数说明

参数名称

含义

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(T)需要保证32B对齐。

wSize

w轴长度。默认值为0。

  • 二维矩阵数据块转置,固定传入16。
  • [N,C,H,W]与[N,H,W,C]数据格式互相转换,取值范围:hSize * wSize ∈[0, 4095],hSize * wSize * sizeof(T)需要保证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 增强转置接口sharedTmpBuffer所需的大小

transposeType

sharedTmpBuffer所需的大小

TRANSPOSE_ND2ND_B16

不需要临时Buffer。

TRANSPOSE_NCHW2NHWC

针对以下型号:

  • Atlas 推理系列产品AI Core

不需要临时Buffer。

针对以下型号:

  • Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件

临时Buffer的大小按照下述计算规则(伪代码)进行计算。

1
2
3
auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16
auto w0 = 32 / sizeof(type);  // type代表数据类型
auto tmpBufferSize = (cSize + 2)  * h0 * w0 * sizeof(type);

TRANSPOSE_NHWC2NCHW

针对以下型号:

  • Atlas 推理系列产品AI Core

不需要临时Buffer。

针对以下型号:

  • Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件

临时Buffer的大小按照下述计算规则(伪代码)进行计算。

1
2
3
auto h0 = 16; // 当数据类型的位宽为8时,h0 = 32;其他情况下,h0 = 16
auto w0 = 32 / sizeof(type);  // type代表数据类型
auto tmpBufferSize = (cSize  * 2 + 1)  * h0 * w0 * sizeof(type);

支持的型号

Atlas 训练系列产品

Atlas 推理系列产品AI Core

Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件

Atlas 200I/500 A2 推理产品

约束说明

返回值

调用示例