news 2026/5/9 14:46:19

CANN/runtime共享Buffer管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/runtime共享Buffer管理

17-03 共享Buffer管理

【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime

本章节描述共享 Buffer 管理接口,用于 Buffer 的分配、释放、数据操作及 Buffer 链管理。

  • aclError acltdtAllocBuf(size_t size, uint32_t type, acltdtBuf *buf):申请共享Buffer内存。
  • aclError acltdtFreeBuf(acltdtBuf buf):释放通过acltdtAllocBuf接口申请的mbuf。
  • aclError acltdtGetBufData(const acltdtBuf buf, void **dataPtr, size_t *size):获取共享Buffer的数据区指针和数据区长度,用户可以使用此指针填入数据。
  • aclError acltdtSetBufUserData(acltdtBuf buf, const void *dataPtr, size_t size, size_t offset):设置共享Buffer的私有数据区数据,从用户内存拷贝到共享内存的私有数据区的指定偏移位置,用于设置控制信息作为上下文传递。
  • aclError acltdtGetBufUserData(const acltdtBuf buf, void *dataPtr, size_t size, size_t offset):获取共享Buffer的私有数据区数据,偏移offset后,拷贝至用户申请的内存区域。
  • aclError acltdtSetBufDataLen(acltdtBuf buf, size_t len):设置共享Buffer中有效数据的长度。
  • aclError acltdtGetBufDataLen(acltdtBuf buf, size_t *len):获取共享Buffer中有效数据的长度。
  • aclError acltdtCopyBufRef(const acltdtBuf buf, acltdtBuf *newBuf):对共享Buffer数据区的引用拷贝,创建并返回一个新的Buffer管理结构指向相同的数据区。
  • aclError acltdtAppendBufChain(acltdtBuf headBuf, acltdtBuf buf):将某个共享Buffer内存添加到共享Buffer链表中。
  • aclError acltdtGetBufChainNum(acltdtBuf headBuf, uint32_t *num):获取共享Buffer链中的共享Buffer数量。
  • aclError acltdtGetBufFromChain(acltdtBuf headBuf, uint32_t index, acltdtBuf *buf):获取Mbuf链中第index个Mbuf。

acltdtAllocBuf

aclError acltdtAllocBuf(size_t size, uint32_t type, acltdtBuf *buf)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

申请共享Buffer内存。

使用acltdtAllocBuf接口申请内存后,数据区的长度为size参数的大小,在用户还未填入有效数据前,该内存的有效数据长度初始值为0,可在用户向内存中填入有效数据后,再通过acltdtSetBufDataLen接口设置有效数据长度。

使用acltdtAllocBuf接口申请的内存,需要通过acltdtFreeBuf接口释放内存。

参数说明

参数名输入/输出说明
size输入用于指定数据区的内存大小,单位Byte,不能超过4G。
type输入共享Buffer内存类型,支持设置如下枚举值。
typedef enum {
ACL_TDT_NORMAL_MEM = 0,
ACL_TDT_DVPP_MEM
} acltdtAllocBufType;
当前仅支持设置ACL_TDT_NORMAL_MEM。
buf输出申请成功,输出共享Buffer。类型定义请参见acltdtBuf。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtFreeBuf

aclError acltdtFreeBuf(acltdtBuf buf)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

释放通过acltdtAllocBuf接口申请的mbuf。

参数说明

参数名输入/输出说明
buf输入指定要释放的mbuf。类型定义请参见acltdtBuf。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtGetBufData

aclError acltdtGetBufData(const acltdtBuf buf, void **dataPtr, size_t *size)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

获取共享Buffer的数据区指针和数据区长度,用户可以使用此指针填入数据。

接口调用顺序:调用acltdtAllocBuf或acltdtCopyBufRef接口申请到共享Buffer后,因此需由用户调用acltdtGetBufData接口获取共享Buffer的内存指针及长度后,再自行向内存中填充有效数据,然后再调用acltdtSetBufDataLen接口设置共享Buffer中有效数据的长度,且长度必须小于acltdtGetBufData获取到的size大小。

参数说明

参数名输入/输出说明
buf输入共享Buffer指针。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
dataPtr输出数据区指针(Device侧地址)。
size输出数据区的长度,单位为Byte。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtSetBufUserData

aclError acltdtSetBufUserData(acltdtBuf buf, const void *dataPtr, size_t size, size_t offset)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

设置共享Buffer的私有数据区数据,从用户内存拷贝到共享内存的私有数据区的指定偏移位置,用于设置控制信息作为上下文传递。当前默认私有数据区大小是96Byte,offset+size必须小于或等于96Byte,否则返回报错。

参数说明

参数名输入/输出说明
buf输出共享Buffer指针。类型定义请参见acltdtBuf。
dataPtr输入存放用户数据的内存地址指针。
size输入用户数据的长度,单位为Byte。
数据长度小于或等于96Byte。
offset输入地址偏移,单位为Byte。
偏移量小于或等于96Byte。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtGetBufUserData

aclError acltdtGetBufUserData(const acltdtBuf buf, void *dataPtr, size_t size, size_t offset)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

获取共享Buffer的私有数据区数据,偏移offset后,拷贝至用户申请的内存区域。当前默认私有数据区大小是96Byte,offset+size必须小于或等于96Byte,否则返回报错。

参数说明

参数名输入/输出说明
buf输入共享Buffer指针。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
dataPtr输入存放用户数据的内存地址指针。
size输入用户数据的长度,单位为Byte。
数据长度小于或等于96Byte。
offset输入地址偏移,单位为Byte。
偏移量小于或等于96Byte。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtSetBufDataLen

aclError acltdtSetBufDataLen(acltdtBuf buf, size_t len)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

设置共享Buffer中有效数据的长度。

接口调用顺序:调用acltdtAllocBuf或acltdtCopyBufRef接口申请到共享Buffer后,因此需由用户调用acltdtGetBufData接口获取共享Buffer的内存指针及长度后,再自行向内存中填充有效数据,然后再调用acltdtSetBufDataLen接口设置共享Buffer中有效数据的长度,且长度必须小于acltdtGetBufData获取到的size大小。

参数说明

参数名输入/输出说明
buf输入共享Buffer指针。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
len输入有效数据的长度,单位为Byte。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtGetBufDataLen

aclError acltdtGetBufDataLen(acltdtBuf buf, size_t *len)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

获取共享Buffer中有效数据的长度。

通过acltdtSetBufDataLen接口设置共享Buffer中有效数据的长度后,可调用本接口获取有效数据的长度,否则,通过本接口获取到的长度为0。

参数说明

参数名输入/输出说明
buf输入共享Buffer指针。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
len输出有效数据的长度,单位为Byte。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtCopyBufRef

aclError acltdtCopyBufRef(const acltdtBuf buf, acltdtBuf *newBuf)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

对共享Buffer数据区的引用拷贝,创建并返回一个新的Buffer管理结构指向相同的数据区。

参数说明

参数名输入/输出说明
buf输入共享Buffer。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
newBuf输出返回一个新的共享Buffer,指向相同的数据区。类型定义请参见acltdtBuf。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtAppendBufChain

aclError acltdtAppendBufChain(acltdtBuf headBuf, acltdtBuf buf)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

将某个共享Buffer内存添加到共享Buffer链表中。共享Buffer链最大支持128个共享Buffer。共享Buffer可通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。

参数说明

参数名输入/输出说明
headBuf输入共享Buffer链头部的第一个共享Buffer。类型定义请参见acltdtBuf。
buf输入待添加的共享Buffer。类型定义请参见acltdtBuf。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtGetBufChainNum

aclError acltdtGetBufChainNum(acltdtBuf headBuf, uint32_t *num)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

获取共享Buffer链中的共享Buffer数量。

参数说明

参数名输入/输出说明
headBuf输入共享Buffer链头部的第一个共享Buffer。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
num输出共享Buffer链中的共享Buffer数量。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。




acltdtGetBufFromChain

aclError acltdtGetBufFromChain(acltdtBuf headBuf, uint32_t index, acltdtBuf *buf)

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

获取Mbuf链中第index个Mbuf。

参数说明

参数名输入/输出说明
headBuf输入共享Buffer链头部的第一个共享Buffer。类型定义请参见acltdtBuf。
须通过acltdtAllocBuf或acltdtCopyBufRef接口申请获得。
index输入共享Buffer链中的共享Buffer序号(从0开始计数)。
buf输出输出第index个共享Buffer。类型定义请参见acltdtBuf。

返回值说明

返回0表示成功,返回其他值表示失败,请参见aclError。

【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

AI智能体竞技场:零代码可视化多智能体系统实战

1. 项目概述:当AI智能体在游戏世界里“卷”起来如果你对AI的印象还停留在聊天机器人或者生成图片,那这个项目可能会刷新你的认知。ai-co-play是一个让多个自主AI智能体在同一个平台上,实时对战、竞技甚至合作的软件。想象一下,你搭…

作者头像 李华
网站建设 2026/5/9 14:44:12

大语言模型解码方法与指令遵循技术详解

1. 项目背景与核心价值大语言模型在自然语言处理领域已经展现出惊人的能力,但如何让这些"聪明"的模型真正理解并准确执行人类指令,仍然是一个极具挑战性的课题。我在过去两年参与多个大模型落地项目的过程中,深刻体会到解码方法和指…

作者头像 李华
网站建设 2026/5/9 14:42:29

CANN/ops-math矩阵乘法压缩反量化算子

aclnnMatmulCompressDequant 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 📄 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAt…

作者头像 李华
网站建设 2026/5/9 14:39:34

CANN/asc-tools msopgen算子模板样例

【免费下载链接】asc-tools Ascend C Tools仓是CANN基于Ascend C编程语言推出的配套调试工具仓。 项目地址: https://gitcode.com/cann/asc-tools msopgen使用新自定义算子工程模板样例 概述 本样例介绍msopgen工具按照新算子工程模板生成新自定义算子工程。以AddCust…

作者头像 李华
网站建设 2026/5/9 14:37:45

工程教育AI能力框架:角色化教学破解AI融合难题

1. 项目概述:为什么工程教育需要一套“角色化”的AI能力框架?如果你是一位机械、电气或土木工程专业的教授,面对“在你的专业课里融入人工智能内容”这个要求,第一反应是什么?是觉得自己的AI知识储备不够,无…

作者头像 李华
网站建设 2026/5/9 14:36:37

CANN/pyasc稀疏矩阵乘加API

asc.language.basic.mmad_with_sparse 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.…

作者头像 李华