news 2026/6/13 5:38:52

CANN矩阵搬入L0-Buffer接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN矩阵搬入L0-Buffer接口

Load3DBitMode

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品x
Atlas A2 训练系列产品/Atlas A2 推理系列产品x
Atlas 200I/500 A2 推理产品x
Atlas 推理系列产品 AI Corex
Atlas 推理系列产品 Vector Corex
Atlas 训练系列产品x
Kirin X90x
Kirin 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 LocalTensor<T>& dst, const LocalTensor<T>& 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决定,具体约束如下:
• A2:ZZ格式/NZ格式;
• B2:ZN格式;
• 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 LoadData3DParamsV2<T> &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/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为正整数。
(与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::LoadData<A2, 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 5:38:51

CANN/cann-bench:Exp指数算子PyPTO基准测试

Exp PyPTO Selected-Case API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力&#xff0c;涵盖算子生成、算子优化等领域&#xff0c;支撑模型选型、训练效果评估&#xff0c;统一量化评估标准&#xff0c;识别Agent能力短板&#xff0c;构建CANN领域评测…

作者头像 李华
网站建设 2026/6/13 5:35:51

SECURITY.md

SECURITY.md 【免费下载链接】railsdevs.com The reverse job board for Ruby on Rails developers. 项目地址: https://gitcode.com/gh_mirrors/ra/railsdevs.com 如果发现安全漏洞&#xff0c;请发送邮件至joerailsdevs.com报告。 【免费下载链接】railsdevs.com The …

作者头像 李华
网站建设 2026/6/13 5:31:57

手把手教你为GD32W515的QSPI Flash驱动添加DMA支持(附完整工程)

从零构建GD32W515的QSPI Flash DMA驱动&#xff1a;实战指南与性能优化最近在开发一个需要高速存储传感器数据的项目时&#xff0c;遇到了一个棘手的问题&#xff1a;使用传统轮询方式的QSPI Flash读写严重拖慢了系统响应速度。这让我意识到&#xff0c;是时候为GD32W515的QSPI…

作者头像 李华
网站建设 2026/6/13 5:28:04

Windows 11下PL2303驱动兼容性终极解决方案:告别黄色感叹号

Windows 11下PL2303驱动兼容性终极解决方案&#xff1a;告别黄色感叹号 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 PL2303驱动兼容性解决方案在Windows 11系统中面…

作者头像 李华
网站建设 2026/6/13 5:28:01

实战微信好友关系检测:轻松识别隐形社交障碍

实战微信好友关系检测&#xff1a;轻松识别隐形社交障碍 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 你是否曾…

作者头像 李华