将本进程通过aclrtMallocPhysical接口获取到的物理内存handle导出,以便后续将物理内存共享给其它进程。
本接口需与以下其它接口配合使用,以便实现内存共享的目的(此处以A、B进程为例,说明两个进程间的物理内存共享接口调用流程):
先调用aclrtMemGetAllocationGranularity接口获取内存申请粒度,然后在调用aclrtMallocPhysical接口申请物理内存时size按获取到的内存申请粒度对齐,以便节约内存。
若需申请地址连续的虚拟内存、最大化利用物理内存地址的目的,此处可配合aclrtReserveMemAddress、aclrtMapMem等接口申请虚拟内存、建立虚拟内存与物理内存之间的映射,请参见对应接口的说明。
涉及共享内存的进程都需要释放物理内存,所有涉及内存共享的进程都完成释放操作,物理内存才真正释放。释放物理内存后,引用的分配内存将释放回操作系统,之后使用handle将导致未定义的行为。
本接口内部在获取进程ID时已适配物理机、虚拟机场景,用户只需调用本接口获取进程ID,再配置其它接口使用,达到物理内存共享的目的。若用户不调用本接口、自行获取进程ID,可能会导致后续使用进程ID异常。
调用aclrtMemImportFromShareableHandle接口前,需确保待共享的物理内存存在,不能提前释放。
若需申请地址连续的虚拟内存、最大化利用物理内存地址的目的,此处可配合aclrtReserveMemAddress、aclrtMapMem等接口申请虚拟内存、建立虚拟内存与物理内存之间的映射,请参见对应接口的说明。
跨Device共享物理内存仅支持如下项,且需配合aclrtDeviceEnablePeerAccess接口使用:
Atlas 推理系列产品
Atlas 训练系列产品
Atlas A2训练系列产品/Atlas 800I A2推理产品
aclError aclrtMemExportToShareableHandle(aclrtDrvMemHandle handle, aclrtMemHandleType handleType, uint64_t flags, uint64_t *shareableHandle)
参数名 |
输入/输出 |
说明 |
---|---|---|
handle |
输入 |
存放物理内存信息的handle。 需先在本进程调用aclrtMallocPhysical接口申请物理内存,该接口调用成功,会返回一个handle。 |
handleType |
输入 |
预留参数,当前固定填ACL_MEM_HANDLE_TYPE_NONE。 |
flags |
输入 |
预留参数,当前固定填0。 |
shareableHandle |
输出 |
标识共享给其它进程的shareableHandle。 |
返回0表示成功,返回其它值表示失败。