Load3DBitMode【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品xAtlas A2 训练系列产品/Atlas A2 推理系列产品xAtlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品xKirin X90xKirin 9030x功能说明Load3DBitMode用于完成image to column操作将多维feature map转为二维矩阵。支持的数据通路为L1 Buffer-L0A Buffer、L1 Buffer-L0B Buffer。本接口与Load3D接口的差异在于参数的传入方式不同本接口传入的是一个联合体结构Load3DBitModeParam。函数原型template TPosition Dst, TPosition Src, typename T __aicore__ inline void LoadData(const LocalTensorT dst, const LocalTensorT src,const Load3DBitModeParam loadDataParams)参数说明表 1模板参数说明参数名称含义T源操作数和目的操作数的数据类型。•Load3DBitMode接口Ascend 950PR/Ascend 950DT支持数据类型为int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、half、bfloat16_t、int32_t、uint32_t、float。Src源操作数存储的逻辑位置TPosition仅Load3DBitMode接口使用。Dst目的操作数存储的逻辑位置TPosition仅Load3DBitMode接口使用。表 2通用参数说明参数名称输入/输出含义dst输出目的操作数类型为LocalTensor。数据连续排列顺序由目的操作数所在TPosition决定具体约束如下• A2ZZ格式/NZ格式• B2ZN格式• A1/B1无格式要求一般情况下为NZ格式。src输入源操作数类型为LocalTensor。数据类型需要与dst保持一致。loadDataParams输入LoadData参数结构体类型为• Load3DBitModeParam具体参考表3上述结构体参数定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_mm.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。表 3Load3DBitModeParam类参数说明参数名称含义config0uint64_t类型与Load3DBitModeConfig0位域bit-field结构体类型参数config0BitMode组成联合体union初始化为0可以使用类对象的GetConfig0()函数获取其值。config0BitModeLoad3DBitModeConfig0位域bit-field结构体类型参数参考表4与config0组成联合体union。config1uint64_t类型与Load3DBitModeConfig1位域bit-field结构体类型参数config1BitMode组成联合体union初始化为0可以使用类对象的GetConfig1()函数获取其值。config1BitModeLoad3DBitModeConfig1位域bit-field结构体类型参数参考表5与config1组成联合体union。Load3DBitModeParam类参数设计思想说明联合体union是一种特殊的数据结构允许在相同的内存位置存储不同的数据类型。union的所有成员共享同一块内存空间大小由最大成员决定同一时间只能使用一个成员。位域bit-field是一种特殊的类成员允许精确控制结构体中成员变量所占用的内存位数。结构体中成员变量从上到下对应内存中从低位到高位。Load3DBitModeParam类使用union与bit-field方法采用bit位表达参数类型使用bit-field结构体自动处理入参的bit位数并利用union的特性实现多参数融合传递仅需传递一个入参即可包含全部所需信息对应底层接口仅需要接收一个参数。同时当需要修改参数中某一bit位的值时仅需要通过循环和位运算即可实现不需要重新传入参数。与使用LoadData3DParamsV2结构体的Load3D接口相比减少了scalar计算实现性能提升。Load3DBitModeParam类可以直接使用LoadData3DParamsV2结构体类型对象初始化template typename T __aicore__ inline Load3DBitModeParam(const LoadData3DParamsV2T loadData3DParams_);也可以使用各参数的Set函数修改参数值并且由于使用了联合体还可以对config0和config1直接进行逐bit位修改来修改参数。表 4Load3DBitModeConfig0结构体参数说明参数名称含义kStep该指令在目的操作数width维度的传输长度如果不覆盖最右侧的分形对于half类型应为16的倍数对于int8_t/uint8_t应为32的倍数覆盖的情况则无倍数要求。取值范围kStep∈[1, 65535]。与Load3D中的kExtension含义相同该参数是位域结构体的最低位参数占用16bit可以使用Load3DBitModeParam类对象的SetKExtension()函数设置其值使用GetKExtension()函数获取其值。mStep该指令在目的操作数height维度的传输长度如果不覆盖最下侧的分形对于half/int8_t/uint8_t应为16的倍数覆盖的情况则无倍数要求。取值范围mStep∈[1, 65535]。与Load3D中的mExtension含义相同该参数是位域结构体的第二低位参数占用16bit可以使用Load3DBitModeParam类对象的SetMExtension()函数设置其值使用GetMExtension()函数获取其值。kPos该指令在目的操作数width维度的起点对于half类型应为16的倍数对于int8_t/uint8_t应为32的倍数。取值范围[0, 65535]。默认为0。与Load3D中的kStartPt含义相同该参数是位域结构体的第三低位参数占用16bit可以使用Load3DBitModeParam类对象的SetKStartPt()函数设置其值使用GetKStartPt()函数获取其值。mPos该指令在目的操作数height维度的起点如果不覆盖最下侧的分形对于half/int8_t/uint8_t应为16的倍数覆盖的情况则无倍数要求。取值范围[0, 65535]。默认为0。与Load3D中的mStartPt含义相同该参数是位域结构体的最高位参数占用16bit可以使用Load3DBitModeParam类对象的SetMStartPt()函数设置其值使用GetMStartPt()函数获取其值。表 5Load3DBitModeConfig1结构体参数说明参数名称含义strideW卷积核在源操作数width维度滑动的步长取值范围strideW∈[1, 63]。与Load3D中的strideW含义相同该参数是位域结构体的最低位参数占用6bit可以使用Load3DBitModeParam类对象的SetStrideW()函数设置其值使用GetStrideW()函数获取其值。strideH卷积核在源操作数height维度滑动的步长取值范围strideH∈[1, 63]。与Load3D中的strideH含义相同该参数是位域结构体的第二低位参数占用6bit可以使用Load3DBitModeParam类对象的SetStrideH()函数设置其值使用GetStrideH()函数获取其值。Wk卷积核width取值范围Wk∈[1, 255]。与Load3D中的filterW含义相同该参数是位域结构体的第三低位参数占用8bit可以使用Load3DBitModeParam类对象的SetFilterW()函数设置其值使用GetFilterW()函数获取其值。Hk卷积核height取值范围Hk∈[1, 255]。与Load3D中的filterH含义相同该参数是位域结构体的第四低位参数占用8bit可以使用Load3DBitModeParam类对象的SetFilterH()函数设置其值使用GetFilterH()函数获取其值。dilationW卷积核width膨胀系数取值范围dilationW∈[1, 255]。与Load3D中的dilationFilterW含义相同该参数是位域结构体的第五低位参数占用8bit可以使用Load3DBitModeParam类对象的SetDilationFilterW()函数设置其值使用GetDilationFilterW()函数获取其值。dilationH卷积核height膨胀系数取值范围dilationH∈[1, 255]。与Load3D中的dilationFilterH含义相同该参数是位域结构体的第六低位参数占用8bit可以使用Load3DBitModeParam类对象的SetDilationFilterH()函数设置其值使用GetDilationFilterH()函数获取其值。filterW是否在filterW的基础上将卷积核width增加256 个元素。true增加false不增加。与Load3D中的filterSizeW含义相同该参数是位域结构体的第七低位参数占用1bit可以使用Load3DBitModeParam类对象的SetFilterSizeW()函数设置其值使用GetFilterSizeW()函数获取其值。filterH是否在filterH的基础上将卷积核height增加256个元素。true增加false不增加。与Load3D中的filterSizeH含义相同该参数是位域结构体的第八低位参数占用1bit可以使用Load3DBitModeParam类对象的SetFilterSizeH()函数设置其值使用GetFilterSizeH()函数获取其值。transpose是否启用转置功能对整个目标矩阵进行转置支持数据类型为bool仅在目的TPosition为A2且源操作数为half类型时有效。默认为false。• true启用• false不启用与Load3D中的enTranspose含义相同该参数是位域结构体的第九低位参数占用1bit可以使用Load3DBitModeParam类对象的SetTranspose()函数设置其值使用GetTranspose()函数获取其值。fmatrixCtrl表示LoadData3DV2指令从左矩阵还是右矩阵获取FeatureMap的属性描述与SetFmatrix配合使用当前只支持设置为false默认值为false。• true从右矩阵中获取FeatureMap的属性描述• false从左矩阵中获取FeatureMap的属性描述。与Load3D中的fMatrixCtrl含义相同该参数是位域结构体的第十低位参数占用1bit可以使用Load3DBitModeParam类对象的SetFmatrixCtrl()函数设置其值使用GetFmatrixCtrl()函数获取其值。sizeChannel源操作数的通道数取值范围channelSize∈[1, 63]。channelSize的取值要求为对于uint32_t/int32_t/floatchannelSize可取值为4N*8N*84对于half/bfloat16channelSize可取值为48N*16N*164N*168对于int8_t/uint8_tchannelSize可取值为481632*NN*324N*328N*3216对于int4b_tChannelSize可取值为81632N * 64N*648N*6416N*6432。N为正整数。与Load3D中的channelSize含义相同该参数是位域结构体的最高位参数占用16bit可以使用Load3DBitModeParam类对象的SetChannelSize()函数设置其值使用GetChannelSize()函数获取其值。数据类型支持数据类型为int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、half、bfloat16_t、int32_t、uint32_t、float。返回值说明无约束说明操作数地址对齐要求请参见通用地址对齐约束。调用示例示例代码片段如下uint16_t C1 2; uint16_t H 4, W 4; uint8_t Kh 2, Kw 2; uint16_t Cout 16; uint16_t C0 16; uint8_t dilationH 2, dilationW 2; uint8_t padTop 1, padBottom 1, padLeft 1, padRight 1; uint8_t strideH 1, strideW 1; uint8_t padList[4] {padLeft, padRight, padTop, padBottom}; LoadData3DParamsV2 param { padList, H, W, 0, 0, 0, -1, -1, strideW, strideH, Kw, Kh, dilationW, dilationH, 1, 0, fmRepeat, 0, (half)(0)}; Load3DBitModeParam paramBitMode(param); AscendC::LoadDataA2, A1, half(featureMapA2, featureMapA1, paramBitMode); // AscendC::LoadData(weightB2, weightB1, { 0, weRepeat, 1, 0, 0, false, 0 });【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考