11-07 IPC 进程间内存共享【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述 IPCInter-Process Communication进程间内存共享接口用于跨进程的内存导出与导入。aclError aclrtIpcMemGetExportKey(void *devPtr, size_t size, char *key, size_t len, uint64_t flags)在本进程中将指定Device内存设置为IPCInter-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接口的进程中都需要调用此接口。aclrtIpcMemGetExportKeyaclError 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内存设置为IPCInter-Process Communication共享内存并返回共享内存key以便后续将内存共享给其它进程。本接口需与以下其它关键接口配合使用以便实现内存共享此处以A、B进程为例说明两个进程间的内存共享接口调用流程:在A进程中调用aclrtMalloc接口申请内存。调用aclrtIpcMemGetExportKey接口导出共享内存key。调用aclrtIpcMemGetExportKey接口时可指定是否启用进程白名单校验若启用则需单独调用aclrtIpcMemSetImportPid接口将B进程的进程ID设置为白名单反之则无需调用aclrtIpcMemSetImportPid接口。调用aclrtIpcMemClose接口关闭IPC共享内存。B进程调用aclrtIpcMemClose接口关闭IPC共享内存后A进程再关闭IPC共享内存否则可能导致异常。调用aclrtFree接口释放内存。在B进程中调用aclrtDeviceGetBareTgid接口获取B进程的进程ID。本接口内部在获取进程ID时已适配物理机、虚拟机场景用户只需调用本接口获取进程ID再配合其它接口使用达到内存共享的目的。若用户不调用本接口、自行获取进程ID可能会导致后续使用进程ID异常。调用aclrtIpcMemImportByKey获取key的信息并返回本进程可以使用的Device内存地址指针。调用aclrtIpcMemImportByKey接口前需确保待共享内存存在不能提前释放。调用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共享内存时不存在以上约束。aclrtIpcMemSetImportPidaclError 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。aclrtIpcMemImportPidInterServeraclError 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。aclrtIpcMemImportByKeyaclError 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。aclrtIpcMemSetAttraclError 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之间是SIOserial input/output通道、还是HCCSHuawei Cache Coherence System通道。attr输入属性。当前支持设置为如下宏- ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_SIOSIO通道默认该选项- ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_HCCSHCCS通道宏的定义如下#define ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_SIO 0#define ACL_RT_IPC_MEM_ATTR_ACCESS_LINK_HCCS 1返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtIpcMemCloseaclError 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),仅供参考