当前位置: 首页 > news >正文

CANN/runtime IPC进程间内存共享

11-07 IPC 进程间内存共享

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

本章节描述 IPC(Inter-Process Communication)进程间内存共享接口,用于跨进程的内存导出与导入。

  • aclError aclrtIpcMemGetExportKey(void *devPtr, size_t size, char *key, size_t len, uint64_t flags):在本进程中将指定Device内存设置为IPC(Inter-Process Communication)共享内存,并返回共享内存key,以便后续将内存共享给其它进程。
  • aclError aclrtIpcMemSetImportPid(const char *key, int32_t *pid, size_t num):设置IPC共享内存的进程白名单。
  • aclError aclrtIpcMemImportPidInterServer(const char *key, aclrtServerPid *serverPids, size_t num):针对Atlas A3 训练系列产品/Atlas A3 推理系列产品中的超节点产品,批量设置IPC共享内存的进程白名单。
  • aclError aclrtIpcMemImportByKey(void **devPtr, const char *key, uint64_t flags):在本进程中导入key的信息,并返回本进程可以使用的Device内存地址指针。
  • aclError aclrtIpcMemSetAttr(const char *key, aclrtIpcMemAttrType type, uint64_t attr):设置IPC共享内存的属性信息。
  • aclError aclrtIpcMemClose(const char *key):关闭IPC共享内存,调用aclrtIpcMemImportByKey接口的进程中、调用aclrtIpcMemGetExportKey接口的进程中都需要调用此接口。

aclrtIpcMemGetExportKey

aclError aclrtIpcMemGetExportKey(void *devPtr, size_t size, char *key, size_t len, uint64_t flags)

产品支持情况

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

功能说明

在本进程中将指定Device内存设置为IPC(Inter-Process Communication)共享内存,并返回共享内存key,以便后续将内存共享给其它进程。

本接口需与以下其它关键接口配合使用,以便实现内存共享,此处以A、B进程为例,说明两个进程间的内存共享接口调用流程:

  1. 在A进程中:

    1. 调用aclrtMalloc接口申请内存。

    2. 调用aclrtIpcMemGetExportKey接口导出共享内存key。

      调用aclrtIpcMemGetExportKey接口时,可指定是否启用进程白名单校验,若启用,则需单独调用aclrtIpcMemSetImportPid接口将B进程的进程ID设置为白名单;反之,则无需调用aclrtIpcMemSetImportPid接口。

    3. 调用aclrtIpcMemClose接口关闭IPC共享内存。

      B进程调用aclrtIpcMemClose接口关闭IPC共享内存后,A进程再关闭IPC共享内存,否则可能导致异常。

    4. 调用aclrtFree接口释放内存。

  2. 在B进程中:

    1. 调用aclrtDeviceGetBareTgid接口,获取B进程的进程ID。

      本接口内部在获取进程ID时已适配物理机、虚拟机场景,用户只需调用本接口获取进程ID,再配合其它接口使用,达到内存共享的目的。若用户不调用本接口、自行获取进程ID,可能会导致后续使用进程ID异常。

    2. 调用aclrtIpcMemImportByKey获取key的信息,并返回本进程可以使用的Device内存地址指针。

      调用aclrtIpcMemImportByKey接口前,需确保待共享内存存在,不能提前释放。

    3. 调用aclrtIpcMemClose接口关闭IPC共享内存。

参数说明

参数名输入/输出说明
devPtr输入Device内存地址。
size输入内存大小,单位Byte。
key输出共享内存key,是一个长度为len的字符数组。
len输入key的长度,固定配置为65。
flags输入是否启用进程白名单校验。
取值为如下宏:

- ACL_RT_IPC_MEM_EXPORT_FLAG_DEFAULT:默认值,启用进程白名单校验。配置为该值时,需单独调用aclrtIpcMemSetImportPid接口将使用共享内存key的进程ID设置为白名单。
- ACL_RT_IPC_MEM_EXPORT_FLAG_DISABLE_PID_VALIDATION:关闭进程白名单校验。配置为该值时,则无需调用aclrtIpcMemSetImportPid接口。


宏的定义如下:
#define ACL_RT_IPC_MEM_EXPORT_FLAG_DEFAULT 0x0UL
#define ACL_RT_IPC_MEM_EXPORT_FLAG_DISABLE_PID_VALIDATION 0x1UL

返回值说明

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

约束说明

不同Device上的两个进程通过IPC共享时,如下图,Device 0上的A进程通过IPC方式将内存共享给Device 1上的B进程,在B进程中使用此共享内存地址时:

  • 内存复制时,不支持根据源内存地址指针、目的内存地址指针自动判断复制方向;不支持Host->Device或Device->Host方向的内存复制操作,同步复制、异步复制都不支持;不支持同一个Device内的同步内存复制,但支持同一个Device内的异步内存复制;
  • 支持Cube计算单元、Vector计算单元跨片访问。

同一个Device上的两个进程通过IPC共享内存时,不存在以上约束。




aclrtIpcMemSetImportPid

aclError aclrtIpcMemSetImportPid(const char *key, int32_t *pid, size_t num)

产品支持情况

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

功能说明

设置IPC共享内存的进程白名单。

本接口需与其它接口配合使用,以便实现内存共享的目的,配合使用流程请参见aclrtIpcMemGetExportKey接口处的说明。

参数说明

参数名输入/输出说明
key输入通过aclrtIpcMemGetExportKey接口获取的内存key。
pid输入用于存放白名单进程ID的数组。
进程ID可调用aclrtDeviceGetBareTgid接口获取,Docker场景下获取到的是物理机上的进程ID,非Docker场景下获取到的是进程ID。
num输入白名单进程数量,与pid参数数组的大小保持一致。

返回值说明

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




aclrtIpcMemImportPidInterServer

aclError aclrtIpcMemImportPidInterServer(const char *key, aclrtServerPid *serverPids, size_t num)

产品支持情况

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

功能说明

针对Atlas A3 训练系列产品/Atlas A3 推理系列产品中的超节点产品,批量设置IPC共享内存的进程白名单。

参数说明

参数名输入/输出说明
key输入进程间共享时使用的名称。
必须先调用aclrtIpcMemGetExportKey接口获取共享内存key,再作为入参传入。
serverPids输入白名单信息数组。类型定义请参见aclrtServerPid。
num输入serverPids数组的大小。

返回值说明

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




aclrtIpcMemImportByKey

aclError aclrtIpcMemImportByKey(void **devPtr, const char *key, uint64_t flags)

产品支持情况

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

功能说明

在本进程中导入key的信息,并返回本进程可以使用的Device内存地址指针。

本接口需与其它接口配合使用,以便实现内存共享的目的,配合使用流程请参见aclrtIpcMemGetExportKey接口处的说明。

参数说明

参数名输入/输出说明
devPtr输出Device内存地址指针。
key输入共享内存key
必须先调用aclrtIpcMemGetExportKey接口获取共享内存key,再作为入参传入。
flags输入是否开启两个Device之间的数据交互。
取值为如下宏:

- ACL_RT_IPC_MEM_IMPORT_FLAG_DEFAULT:默认值,关闭两个Device之间的数据交互。配置为该值时,需单独调用aclrtDeviceEnablePeerAccess接口开启两个Device之间的数据交互。
- ACL_RT_IPC_MEM_IMPORT_FLAG_ENABLE_PEER_ACCESS:开启两个Device之间的数据交互。配置为该值时,则无需调用aclrtDeviceEnablePeerAccess接口。


宏的定义如下:
#define ACL_RT_IPC_MEM_IMPORT_FLAG_DEFAULT 0x0UL
#define ACL_RT_IPC_MEM_IMPORT_FLAG_ENABLE_PEER_ACCESS 0x1UL

返回值说明

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




aclrtIpcMemSetAttr

aclError aclrtIpcMemSetAttr(const char *key, aclrtIpcMemAttrType type, uint64_t attr)

产品支持情况

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

功能说明

设置IPC共享内存的属性信息。

参数说明

参数名输入/输出说明
key输入共享内存key,字符串长度小于64,以\0结尾。
type输入内存映射类型。类型定义请参见aclrtIpcMemAttrType。
当前支持配置为ACL_RT_IPC_MEM_ATTR_ACCESS_LINK,用于在跨片访问时,指定双die之间是SIO(serial input/output)通道、还是HCCS(Huawei Cache Coherence System)通道。
attr输入属性。
当前支持设置为如下宏:

- ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_SIO:SIO通道,默认该选项
- ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_HCCS:HCCS通道


宏的定义如下:
#define ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_SIO 0
#define ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_HCCS 1

返回值说明

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




aclrtIpcMemClose

aclError aclrtIpcMemClose(const char *key)

产品支持情况

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

功能说明

关闭IPC共享内存,调用aclrtIpcMemImportByKey接口的进程中、调用aclrtIpcMemGetExportKey接口的进程中都需要调用此接口。

对于同一个共享内存key,需所有调用aclrtIpcMemImportByKey接口的进程中都调用aclrtIpcMemClose接口后,调用aclrtIpcMemGetExportKey接口的进程中才可以调用aclrtIpcMemClose接口,否则可能导致异常。

本接口需与其它接口配合使用,以便实现内存共享的目的,配合使用流程请参见aclrtIpcMemGetExportKey接口处的说明。

参数说明

参数名输入/输出说明
key输入通过aclrtIpcMemGetExportKey接口获取的共享内存key。

返回值说明

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

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

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

http://www.jsqmd.com/news/782836/

相关文章:

  • 2026年新疆不干胶标签及办公用纸一站式采购指南:金阳印务官方联系与深度评测 - 优质企业观察收录
  • CANN预选赛算子测试
  • CANN/Ascend C Axpy API文档
  • CANN堆叠算子接口文档
  • CANN/metadef算子简化键生成
  • PowerShell命令获取电脑sn序列号
  • Taoify 跨境独立站系统:开发者视角下的零代码出海解决方案​
  • Cloudflare Agent Setup:一行指令让 AI Agent 帮你配好整个开发环境
  • JavaScript网盘直链解析技术:跨平台文件传输协议逆向工程实践
  • AI赋能教育:从个性化学习到伦理挑战的实践与思考
  • 2026年新疆票据印刷与热敏收银纸一站式采购完全指南 - 优质企业观察收录
  • 2026年新疆复印纸批发与办公用纸采购完全指南 - 优质企业观察收录
  • CANN/cann-bench:AddRmsNormDynamicQuant算子API描述
  • 在.NET MAUI Blazor中显示本地视频的Android解决方案
  • 长春彩钢围挡公司排行:合规性与周转效率实测对比 - 奔跑123
  • 生成式引擎的“引用黑箱”:AI如何决定你的内容值不值得被推荐?
  • CANN/GE添加图API
  • 爱米优品6年整机全保:以品质与诚信,重塑智能马桶售后新标杆 - 博客万
  • PHOENI2X框架:AI与自动化如何构建下一代网络弹性安全体系
  • 长春地区集装箱安装厂家综合实力排行及实测对比 - 奔跑123
  • 极简生活第一步,先处理掉闲置的沃尔玛购物卡 - 团团收购物卡回收
  • 2026年生成式AI技术前瞻:架构、训练与多模态融合的演进路径
  • 2026年新疆热敏收银纸印刷定制与不干胶标签采购完全指南 - 优质企业观察收录
  • 恒盛通中美物流专线的签收率数据真实可靠吗? - 恒盛通物流
  • 2026年新疆票据印刷与办公用纸采购完全指南:五大品牌深度横评 - 优质企业观察收录
  • CANN/ops-solver安全声明
  • BI 报表覆盖不到的 80% 长尾需求,如何通过 AI 对话解决?
  • 我在上海的奋斗6
  • DownKyi终极教程:3步掌握B站视频下载神器,免费获取高清资源
  • 基于.NET的Windows窗体编程之WinForms列表控件