load3d

功能说明

Load3D用于完成image to column操作,将多维feature map转为二维矩阵。支持如下数据通路:A1->A2; B1->B2。

函数原型

参数说明

表1 模板参数说明

参数名称 含义
T 源操作数和目的操作数的数据类型。
defaultConfig 控制是否在Load3Dv1/Load3Dv2接口内部设置相关属性。 IsResetLoad3dConfig类型。IsResetLoad3dConfig结构定义如下:

struct IsResetLoad3dConfig { bool isSetFMatrix = true; bool isSetPadding = true;<br>};

isSetFMatrix配置为true,表示在接口内部设置FeatureMap的属性描述(包括l1H、l1W、padList,参数介绍参考表3,设置为false,表示该接口传入的FeatureMap的属性描述不生效,开发者需要通过SetFmatrix进行设置。

isSetPadding配置为true,表示在接口内部设置Pad属性描述(即padValue参数,参数介绍参考表3、表4;设置为false,表示该接口传入的Pad属性不生效,开发者需要通过SetLoadDataPaddingValue进行设置。

该参数的默认值如下:

<br>constexpr IsResetLoad3dConfig IS_RESER_LOAD3D_DEFAULT_CONFIG = {true, true};<br>
U LoadData3DParamsV1/LoadData3DParamsV2中padValue的数据类型。

- 当dst、src使用基础数据类型时, U和dst、src的数据类型T需保持一致,否则编译失败。
- 当dst 、src使用TensorTrait类型时,U和dst、src的数据类型T的LiteType需保持一致,否则编译失败。

最后一个模板参数仅用于上述数据类型检查,用户无需关注。

表2 通用参数说明

展开

参数名称 输入/输出 含义
dst 输出 目的操作数,类型为LocalTensor。

数据连续排列顺序由目的操作数所在TPosition决定,具体约束如下:

- A2:ZZ格式;
- B2:ZN格式;
- A1/B1:无格式要求,一般情况下为NZ格式。
src 输入 源操作数,类型为LocalTensor或GlobalTensor。

数据类型需要与dst保持一致。
loadDataParams 输入 LoadData参数结构体,类型为:
- LoadData3DParamsV1,具体参考表3。
- LoadData3DParamsV2,具体参考表4。
上述结构体参数定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_mm.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。

表3 LoadData3DParamsV1结构体内参数说明

参数名称 含义
padList padding列表 [padding_left, padding_right, padding_top, padding_bottom],每个元素取值范围:[0,255]。默认为{0, 0, 0, 0}。
l1H 源操作数 height,取值范围:l1H∈[1, 32767]。
l1W 源操作数 width,取值范围:l1W∈[1, 32767] 。
c1Index 该指令在源tensor C1维度的起点,取值范围:c1Index∈[0, 4095] 。默认为0。
fetchFilterW 该指令在卷积核上w维度的起始位置,取值范围:fetchFilterW∈[0, 254] 。默认为0。
fetchFilterH 该指令在filter上h维度的起始位置,取值范围:fetchFilterH∈[0, 254] 。默认为0。
leftTopW 该指令在源操作数上w维度的起点,取值范围:leftTopW∈[-255, 32767] 。默认为0。如果padding_left = a,leftTopW配置为-a。
leftTopH 该指令在源操作数上h维度的起点,取值范围:leftTopH∈[-255, 32767] 。默认为0。如果padding_top = a,leftTopH配置为-a。
strideW 卷积核在源操作数w维度滑动的步长,取值范围:strideW∈[1, 63] 。
strideH 卷积核在源操作数h维度滑动的步长,取值范围:strideH∈[1, 63] 。
filterW 卷积核width,取值范围:filterW∈[1, 255] 。
filterH 卷积核height,取值范围:filterH∈[1, 255] 。
dilationFilterW 卷积核width膨胀系数,取值范围:dilationFilterW∈[1, 255] 。
dilationFilterH 卷积核height膨胀系数,取值范围:dilationFilterH∈[1, 255] 。
jumpStride 迭代之间,目的操作数首地址步长,取值范围:jumpStride∈[1, 127] 。
repeatMode 迭代模式。

- 模式0:每次迭代,增加卷积核窗口中的点,对应在目的矩阵上往w维度方向增长。
- 模式1:每次迭代,增加滑动窗口左上坐标,对应在目的矩阵上往h维度方向增长。

取值范围:repeatMode∈[0, 1] 。默认为0。
repeatTime 迭代次数,每一次源操作数和目的操作数的地址都会改变。取值范围:repeatTime∈[1,255] 。
cSize 配置是否开启cSize = 4(b16) / cSize = 8(b8)优化,取值范围:cSize∈[0, 1] 。默认为0。
padValue Pad填充值的数值,数据类型需要与src保持一致。默认为0。若不想使能padding,可将padList设为全0。

表4 LoadData3DParamsV2结构体内参数说明

参数名称 含义
padList padding 列表 [padding_left, padding_right, padding_top, padding_bottom],每个元素取值范围:[0,255]。默认为{0, 0, 0, 0}。
l1H 源操作数height,取值范围:l1H∈[1, 32767]。
l1W 源操作数weight,取值范围:l1W∈[1, 32767] 。
channelSize 源操作数的通道数,取值范围:channelSize∈[1, 63] 。

针对以下型号,channelSize的取值要求为:对于half,channelSize可取值为4,8,16,N * 16 + 4,N * 16 + 8;对于int8_t/uint8_t,channelSize可取值为4,8,16,32,N * 32 + 4,N * 32 + 8,N * 32 + 16;对于int4b_t,ChannelSize可取值为8,16,32,N * 64,N * 64 + 8,N * 64 + 16,N * 64 + 32。N为正整数。

Atlas 推理系列产品 AI Core

针对以下型号,channelSize的取值要求为:对于uint32_t/int32_t/float,channelSize可取值为4,N * 8,N * 8 + 4;对于half/bfloat16,channelSize可取值为4,8,N * 16,N * 16 + 4,N * 16 + 8;对于int8_t/uint8_t,channelSize可取值为4,8,16, 32 * N,N * 32 + 4,N * 32 + 8,N * 32 + 16;对于int4b_t,ChannelSize可取值为8,16,32,N * 64,N * 64 + 8,N * 64 + 16,N * 64 + 32。N为正整数。

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

Atlas A3 训练系列产品 / Atlas A3 推理系列产品 

Atlas 200I/500 A2 推理产品
kExtension 该指令在目的操作数width维度的传输长度,如果不覆盖最右侧的分形,对于half类型,应为16的倍数,对于int8_t/uint8_t应为32的倍数;覆盖的情况则无倍数要求。取值范围: kExtension∈[1, 65535] 。
mExtension 该指令在目的操作数height维度的传输长度,如果不覆盖最下侧的分形,对于half/int8_t/uint8_t,应为16的倍数;覆盖的情况则无倍数要求。取值范围:mExtension∈[1, 65535] 。
kStartPt 该指令在目的操作数width维度的起点,对于half类型,应为16的倍数,对于int8_t/uint8_t应为32的倍数。取值范围[0, 65535] 。默认为0。
mStartPt 该指令在目的操作数height维度的起点,如果不覆盖最下侧的分形,对于half/int8_t/uint8_t,应为16的倍数;覆盖的情况则无倍数要求。取值范围[0, 65535] 。默认为0。
strideW 卷积核在源操作数width维度滑动的步长,取值范围:strideW∈[1, 63] 。
strideH 卷积核在源操作数height 维度滑动的步长,取值范围:strideH∈[1, 63] 。
filterW 卷积核width,取值范围:filterW∈[1, 255] 。
filterH 卷积核height,取值范围:filterH∈[1, 255] 。
dilationFilterW 卷积核width膨胀系数,取值范围:dilationFilterW∈[1, 255] 。
dilationFilterH 卷积核height膨胀系数,取值范围:dilationFilterH∈[1, 255] 。
enTranspose 是否启用转置功能,对整个目标矩阵进行转置,支持数据类型为 bool,仅在目的TPosition为A2,且源操作数为half类型时有效。默认为false。

- true:启用
- false:不启用
enSmallK 是否使能small k特性,每个分形矩阵大小为16*4,支持数据类型为 bool,默认为false。当前产品形态,该特性已不再支持。

- true:使能
- false:不使能
padValue Pad填充值的数值,数据类型需要与src保持一致。默认为0。若不想使能padding,可将padList设为全0。
filterSizeW 是否在filterW的基础上将卷积核width增加256 个元素。true,增加;false,不增加。
filterSizeH 是否在filterH的基础上将卷积核height增加256个元素。true,增加;false,不增加。
fMatrixCtrl 表示LoadData3DV2指令从左矩阵还是右矩阵获取FeatureMap的属性描述,与SetFmatrix配合使用,当前只支持设置为false,默认值为false。

- true:从右矩阵中获取FeatureMap的属性描述;
- false:从左矩阵中获取FeatureMap的属性描述。