TransDataTo5HD

功能说明

数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式。特别的,也可以用于二维矩阵数据块的转置。完成转置功能时,相比于Transpose接口,Transpose仅支持16*16大小的矩阵转置;本接口单次repeat内可处理512Byte的数据(16个datablock),根据数据类型不同,支持不同shape的矩阵转置(比如数据类型为half时,单次repeat可完成16*16大小的矩阵转置),同还可以支持多次repeat操作。

单次repeat内转换规则如下:

基于以上的转换规则,使用该接口进行NC1HWC0格式转换或者矩阵转置。NC1HWC0格式转换相对复杂,这里给出其具体的转换方法:

NCHW格式转换成NC1HWC0格式时,如果是数据类型是float/int32_t/uint32_t/int16_t/uint16_t/half,则C0=16;如果数据类型是uint8_t/int8_t,则C0=32。下图以C0=16为例进行介绍:

函数原型

参数说明

表1 模板参数说明

参数名

描述

T

操作数数据类型。

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

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

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

表2 参数列表

参数名称

输入/输出

含义

dstLocalList/dstList

输出

目的操作数地址序列。

类型为LocalTensor或者LocalTensor的地址值,LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32B对齐。支持的数据类型参考模板参数T说明。

srcLocalList/srcList

输入

源操作数地址序列。

类型为LocalTensor或者LocalTensor的地址值,LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32B对齐。支持的数据类型参考模板参数T说明。

数据类型需要与dstLocalList/dstList保持一致。

dstLocal

输出

目的操作数。

类型为LocalTensor,连续存储对应LocalTensor的地址值。LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32B对齐。

srcLocal

输入

源操作数。

类型为LocalTensor,连续存储对应LocalTensor的地址值。LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32B对齐。

nchwconvParams

输入

控制TransdataTo5HD的数据结构。结构体内包含:读取和写入位置的控制参数,迭代次数,相邻迭代间的地址步长等参数。

具体定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_transpose.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。

参数说明请参考表3

表3 TransDataTo5HDParams结构体内参数说明

参数名称

类型

说明

dstHighHalf

输入

指定每个dstLocalList地址中的数据存储到datablock的高半部还是低半部,该配置只支持int8_t/uint8_t的数据类型。

支持的数据类型为bool,有以下两种取值:
  • True:表示存储于datablock的高半部
  • False:表示存储于datablock的低半部

srcHighHalf

输入

指定每个srcLocalList地址中的数据从datablock的高半部还是低半部读取,该配置只支持int8_t/uint8_t的数据类型。

支持的数据类型为bool,有以下两种取值:
  • True:表示从datablock的高半部读取
  • False:表示从datablock的低半部读取

repeatTimes

输入

重复迭代次数,repeatTimes∈[0,255]。

关于该参数的具体描述请参考通用参数说明

注意事项:
  • 当repeatTimes为1时,目的操作数/源操作数的有效起始位置为dstLocalList/srcLocalList序列输入的起始位置加上dstRepStride/srcRepStride;repeatTimes为1,如果要让目的操作数/源操作数的有效起始位置为dstLocalList/srcLocalList序列输入的起始位置,需要将dstRepStride/srcRepStride置为0。
  • 当repeatTimes大于1时,第一次repeat中目的操作数/源操作数的有效起始位置为dstLocalList/srcLocalList序列输入的起始位置,第二次需要加上dstRepStride/srcRepStride。以此类推。

dstRepStride

输入

相邻迭代间,目的操作数相同datablock地址stride,单位:datablock。

相邻迭代间相同datablock的地址步长参数的详细说明请参考repeatStride

srcRepStride

输入

相邻迭代间,源操作数相同datablock地址stride,单位:datablock。

相邻迭代间相同datablock的地址步长参数的详细说明请参考repeatStride

支持的型号

Atlas 训练系列产品

Atlas 推理系列产品 AI Core

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

Atlas 200I/500 A2 推理产品

约束说明

返回值

调用示例