load3d
功能说明
Load3D用于完成image to column操作,将多维feature map转为二维矩阵。支持如下数据通路:A1->A2; B1->B2。
函数原型
- Load3Dv2接口
template <typename T, const IsResetLoad3dConfig &defaultConfig = IS_RESER_LOAD3D_DEFAULT_CONFIG, typename U = PrimT<T>, typename Std::enable_if<Std::is_same<PrimT<T>, U>::value, bool>::type = true> __aicore__ inline void LoadData(const LocalTensor<T>& dst, const LocalTensor<T>& src, const LoadData3DParamsV2<U>& loadDataParams)
参数说明
表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的属性描述。 |