11-04 虚拟内存管理
本章节描述虚拟内存管理接口,包括物理内存分配、虚拟地址预留、内存映射及跨进程共享。
aclError aclrtMallocPhysical(aclrtDrvMemHandle *handle, size_t size, const aclrtPhysicalMemProp *prop, uint64_t flags):申请Host或Device物理内存,并返回一个物理内存handle。aclError aclrtFreePhysical(aclrtDrvMemHandle handle):释放通过aclrtMallocPhysical接口申请的物理内存。aclError aclrtReserveMemAddress(void **virPtr, size_t size, size_t alignment, void *expectPtr, uint64_t flags):预留虚拟内存。aclError aclrtReserveMemAddressNoUCMemory(void **virPtr, size_t size, size_t alignment, void *expectPtr, uint64_t flags):预留虚拟内存。aclError aclrtReleaseMemAddress(void *virPtr):释放通过aclrtReserveMemAddress接口申请的虚拟内存。aclError aclrtMapMem(void *virPtr, size_t size, size_t offset, aclrtDrvMemHandle handle, uint64_t flags):将虚拟内存映射到物理内存。aclError aclrtMemMapNoAccess(void *virPtr, size_t size, size_t offset, aclrtDrvMemHandle handle, uint64_t flags):将虚拟内存映射到物理内存。aclError aclrtUnmapMem(void *virPtr):取消虚拟内存与物理内存之间的映射关系。aclError aclrtMemExportToShareableHandle(aclrtDrvMemHandle handle, aclrtMemHandleType handleType, uint64_t flags, uint64_t *shareableHandle):将本进程通过aclrtMallocPhysical接口获取到的Device物理内存handle导出,以便后续将Device物理内存共享给其它进程。aclError aclrtMemSetPidToShareableHandle(uint64_t shareableHandle, int32_t *pid, size_t pidNum):设置共享内存的进程白名单。aclError aclrtMemImportFromShareableHandle(uint64_t shareableHandle, int32_t deviceId, aclrtDrvMemHandle *handle):在本进程中获取shareableHandle里的信息,并返回本进程中的handle,用于在本进程中建立虚拟地址与物理地址之间的映射关系。aclError aclrtMemExportToShareableHandleV2(aclrtDrvMemHandle handle, uint64_t flags, aclrtMemSharedHandleType shareType, void *shareableHandle):将本进程通过aclrtMallocPhysical接口获取到的Device物理内存handle导出,以便后续将Device物理内存共享给其它进程。aclError aclrtMemSetPidToShareableHandleV2(void *shareableHandle, aclrtMemSharedHandleType shareType, int32_t *pid, size_t pidNum):设置共享内存的进程白名单。aclError aclrtMemImportFromShareableHandleV2(void *shareableHandle, aclrtMemSharedHandleType shareType, uint64_t flags, aclrtDrvMemHandle *handle);:在本进程中获取shareableHandle里的信息,并返回本进程中的handle,用于在本进程中建立虚拟地址与物理地址之间的映射关系。aclError aclrtMemGetAllocationGranularity(aclrtPhysicalMemProp *prop, aclrtMemGranularityOptions option, size_t *granularity):查询内存申请粒度。aclError aclrtMemSetAccess(void* virPtr, size_t size, aclrtMemAccessDesc* desc, size_t count):设置内存的访问权限。aclError aclrtMemGetAccess(void *virPtr, aclrtMemLocation *location, uint64_t *flag):获取内存的访问权限。aclError aclrtMemRetainAllocationHandle(void* virPtr, aclrtDrvMemHandle *handle):根据虚拟内存地址获取物理内存信息的handle。aclError aclrtMemGetAllocationPropertiesFromHandle(aclrtDrvMemHandle handle, aclrtPhysicalMemProp* prop):根据物理内存信息的handle查询其内存属性信息。aclError aclrtMemGetAddressRange(void *ptr, void **pbase, size_t *psize):获取待查询地址所属内存块的起始地址以及内存块大小。aclError aclrtMemMapSelectedLink(void *virPtrDst, size_t size, void *virPtrSrc, uint32_t linkIdx):将虚拟地址 virPtrSrc 映射到虚拟地址 virPtrDst 对应的物理地址,可以通过 linkIdx 选择 HCCS 链路或者 SIO 链路。aclError aclrtMemMapSetLink(aclrtDrvMemHandle handle, aclrtMemLinkType adviceLink):设置物理内存handle在映射时使用的访问链路类型。
aclrtMallocPhysical
aclError aclrtMallocPhysical(aclrtDrvMemHandle *handle, size_t size, const aclrtPhysicalMemProp *prop, uint64_t flags)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
申请Host或Device物理内存,并返回一个物理内存handle。
本接口可配合aclrtReserveMemAddress接口(申请虚拟内存)、aclrtMapMem接口(建立虚拟内存与物理内存之间的映射)使用,以便申请地址连续的虚拟内存、最大化利用物理内存。
本接口可配合aclrtMemExportToShareableHandle接口(导出物理内存handle)、aclrtMemImportFromShareableHandle(导入共享handle)使用,用于实现多进程之间的物理内存共享。同时,也支持在共享物理内存时,使用虚拟内存,请参见aclrtMemExportToShareableHandle接口处的说明。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输出 | 存放物理内存信息的handle。类型定义请参见aclrtDrvMemHandle。 |
| size | 输入 | 物理内存大小,单位Byte。 先调用aclrtMemGetAllocationGranularity接口获取内存申请粒度,然后再调用本接口申请物理内存时size按获取到的内存申请粒度对齐,以便节约内存。 |
| prop | 输入 | 物理内存属性信息。类型定义请参见aclrtPhysicalMemProp。 |
| flags | 输入 | 预留,当前只能设置为0。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于Atlas 200I/500 A2 推理产品,Ascend RC形态不支持调用本接口。
- 针对Atlas A3 训练系列产品/Atlas A3 推理系列产品中的超节点产品,当内存所在位置aclrtPhysicalMemProp.location.type = ACL_MEM_LOCATION_TYPE_HOST_NUMA,且内存属性类型aclrtPhysicalMemProp.aclrtMemAttr为P2P选项(例如ACL_MEM_P2P_HUGE)时,可申请到的最大内存大小根据服务器型号、Bios版本会有所不同。建议通过aclrtMallocPhysical接口按内存规划尝试申请,以确认内存是否足够。
- 内存属性类型aclrtPhysicalMemProp.aclrtMemAttr当前仅支持如下选项:
-
ACL_MEM_NORMAL:普通内存。
-
ACL_MEM_HUGE:2MB粒度对齐的大页内存。
-
ACL_MEM_HUGE1G:1GB粒度对齐的大页内存,仅支持Device。
仅Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该类型。
Ascend 950PR/Ascend 950DT不支持该类型。
Atlas 200I/500 A2 推理产品、Atlas 推理系列产品、Atlas 训练系列产品不支持该类型。
-
ACL_MEM_P2P_NORMAL:用于Device间数据复制的普通内存。
-
ACL_MEM_P2P_HUGE:用于Device间数据复制的大页内存,内存申请粒度为2MB。
-
ACL_MEM_P2P_HUGE1G:用于Device间数据复制的大页内存,内存申请粒度为1GB,仅支持Device。
仅Atlas A3 训练系列产品/Atlas A3 推理系列产品中的部分互联形态支持该类型,以接口实际返回情况为准。
Ascend 950PR/Ascend 950DT、Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该类型。
Atlas 200I/500 A2 推理产品、Atlas 推理系列产品、Atlas 训练系列产品不支持该类型。
-
ACL_HBM_MEM_HUGE:2MB粒度对齐的大页内存。
-
ACL_HBM_MEM_HUGE1G:1GB粒度对齐的大页内存,仅支持Device。
Ascend 950PR/Ascend 950DT、Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该类型。
Atlas 200I/500 A2 推理产品、Atlas 推理系列产品、Atlas 训练系列产品不支持该类型。
-
ACL_HBM_MEM_NORMAL:普通内存,接口内部会按照ACL_HBM_MEM_HUGE类型申请大页内存。
-
ACL_DDR_MEM_HUGE:大页内存,仅支持Host内存。
-
ACL_DDR_MEM_NORMAL:普通内存,仅支持Host内存。
-
ACL_DDR_MEM_P2P_HUGE:用于Device间数据复制的大页内存,仅支持Host内存。
-
ACL_DDR_MEM_P2P_NORMAL:用于Device间数据复制的普通内存,仅支持Host内存。
-
aclrtFreePhysical
aclError aclrtFreePhysical(aclrtDrvMemHandle handle)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
释放通过aclrtMallocPhysical接口申请的物理内存。
如果物理内存与虚拟内存之间存在映射关系,则此处不会实际释放物理内存。只有在调用aclrtUnmapMem接口取消该物理内存与虚拟内存的映射之后,物理内存才会被真正释放。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 待释放的物理内存信息handle。类型定义请参见aclrtDrvMemHandle。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
Atlas 200I/500 A2 推理产品上,Ascend RC形态不支持调用本接口。
aclrtReserveMemAddress
aclError aclrtReserveMemAddress(void **virPtr, size_t size, size_t alignment, void *expectPtr, uint64_t flags)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
预留虚拟内存。
本接口需与以下其它接口配合使用,以便申请地址连续的虚拟内存、最大化利用物理内存:
- 申请虚拟内存(aclrtReserveMemAddress接口);
- 申请物理内存(aclrtMallocPhysical接口);
- 将虚拟内存映射到物理内存(aclrtMapMem接口);
- 执行任务(调用具体的任务接口);
- 取消虚拟内存与物理内存的映射(aclrtUnmapMem接口);
- 释放物理内存(aclrtFreePhysical接口);
- 释放虚拟内存(aclrtReleaseMemAddress接口)。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输出 | “已分配的虚拟内存地址的指针”的指针。 |
| size | 输入 | 虚拟内存大小,单位Byte。 size不能为0。 |
| alignment | 输入 | 虚拟地址对齐值,预留,当前只能设置为0。 |
| expectPtr | 输入 | 指定期望返回的虚拟内存起始地址。 取值说明如下: - nullptr:系统自动分配符合对齐规则的虚拟地址。 - 非nullptr:由用户指定起始地址,地址必须在8T范围内(16T-24T)。用户需确保指定的地址未被占用,且符合对齐规则,否则预留虚拟内存失败,接口返回错误。对齐规则为:若size小于1GB,expectPtr需按2的n次方对齐;如果size大于1GB,expectPtr需按1GB对齐。须知:由用户指定起始地址是试验特性,后续版本可能存在变更,不支持应用于生产环境中。 |
| flags | 输入 | 预留参数,建议固定配置为0。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于Ascend 950PR/Ascend 950DT,expectPtr参数处仅支持配置为nullptr。
- Atlas 200I/500 A2 推理产品上,Ascend RC形态下,不支持调用本接口。
- 使用本接口预留的虚拟内存,单进程场景下只支持调用aclrtMemcpyAsync接口实现两个Device之间的数据拷贝。
aclrtReserveMemAddressNoUCMemory
aclError aclrtReserveMemAddressNoUCMemory(void **virPtr, size_t size, size_t alignment, void *expectPtr, uint64_t flags)
须知:由用户指定起始地址是试验特性,后续版本可能存在变更,不支持应用于生产环境中
产品支持情况
- Ascend 950PR/Ascend 950DT:不支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
预留虚拟内存。
本接口与aclrtReserveMemAddress接口的使用方法相同,区别在于:根据环境变量AUTO_USE_UC_MEMORY决定是否允许数据搬移不经过L2 Cache的算子,本接口预留的虚拟内存不能用作此类算子的输入或输出内存,否则可能会导致算子精度问题或异常。AUTO_USE_UC_MEMORY环境变量的详细说明请参见《环境变量参考》。
另外,本接口中的虚拟内存起始地址不支持由系统自动分配,只能由用户指定,且地址建议在40T-224T范围内。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输出 | “已分配的虚拟内存地址的指针”的指针。 |
| size | 输入 | 虚拟内存大小,单位Byte。 size不能为0,只能为1GB的整数倍,最小为1GB。 |
| alignment | 输入 | 虚拟地址对齐值,预留,当前只能设置为0。 |
| expectPtr | 输入 | 指定期望返回的虚拟内存起始地址。 由用户指定起始地址,地址建议在40T-224T范围内。用户需确保指定的地址未被占用,否则预留虚拟内存失败,接口返回错误。 |
| flags | 输入 | 预留参数,建议固定配置为0。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtReleaseMemAddress
aclError aclrtReleaseMemAddress(void *virPtr)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
释放通过aclrtReserveMemAddress接口申请的虚拟内存。
本接口需与以下其它接口配合使用,以便申请地址连续的虚拟内存、最大化利用物理内存:
- 申请虚拟内存(aclrtReserveMemAddress接口);
- 申请物理内存(aclrtMallocPhysical接口);
- 将虚拟内存映射到物理内存(aclrtMapMem接口);
- 执行任务(调用具体的任务接口);
- 取消虚拟内存与物理内存的映射(aclrtUnmapMem接口);
- 释放物理内存(aclrtFreePhysical接口);
- 释放虚拟内存(aclrtReleaseMemAddress接口)。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | 待释放的虚拟内存地址指针。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于Atlas 200I/500 A2 推理产品,Ascend RC形态下,不支持调用本接口。
- 若该虚拟内存与物理内存存在映射关系,则释放虚拟内存前,需调用aclrtUnmapMem接口取消该虚拟内存与物理内存的映射。
aclrtMapMem
aclError aclrtMapMem(void *virPtr, size_t size, size_t offset, aclrtDrvMemHandle handle, uint64_t flags)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
将虚拟内存映射到物理内存。
本接口需与以下其它接口配合使用,以便申请地址连续的虚拟内存、最大化利用物理内存:
- 申请虚拟内存(aclrtReserveMemAddress接口);
- 申请物理内存(aclrtMallocPhysical接口);
- 将虚拟内存映射到物理内存(aclrtMapMem接口);
- 执行任务(调用具体的任务接口);
- 取消虚拟内存与物理内存的映射(aclrtUnmapMem接口);
- 释放物理内存(aclrtFreePhysical接口);
- 释放虚拟内存(aclrtReleaseMemAddress接口)。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | 待映射的虚拟内存地址指针。 这个地址不一定是起始地址,用户也可以根据起始地址自行偏移后,再映射。 |
| size | 输入 | 待映射的内存大小,单位Byte。 此处的size必须与aclrtMallocPhysical接口的size参数值相同,size必须与aclrtMemGetAllocationGranularity接口获取的ACL_RT_MEM_ALLOC_GRANULARITY_MINIMUM对齐。 |
| offset | 输入 | 物理内存偏移值,当前只能设置为0。 |
| handle | 输入 | 物理内存信息handle。类型定义请参见aclrtDrvMemHandle。 通过aclrtReserveMemAddress接口预留出来的一整段虚拟地址,由用户自行管理、划分时,不能同时与两个Device上申请的物理地址绑定。 通过aclrtReserveMemAddress接口预留出来的一整段虚拟地址,由用户自行管理、划分时,不能同时与aclrtMallocPhysical、aclrtMemImportFromShareableHandle、aclrtMemImportFromShareableHandleV2接口输出的handle绑定。 |
| flags | 输入 | 预留,当前只能设置为0。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
对于Atlas 200I/500 A2 推理产品,Ascend RC形态下,不支持调用本接口。
aclrtMemMapNoAccess
aclError aclrtMemMapNoAccess(void *virPtr, size_t size, size_t offset, aclrtDrvMemHandle handle, uint64_t flags)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
将虚拟内存映射到物理内存。 本接口与aclrtMapMem接口的区别在于:调用本接口成功后,目标Device上尚未建立可访问页表,虚拟地址区间不可访问。因此,需先调用aclrtMemSetAccess接口设置内存访问权限,以触发在Device上建立可访问页表,方可访问该虚拟地址区间。
本接口需与以下其它接口配合使用,以便申请地址连续的虚拟内存、最大化利用物理内存:
- 申请虚拟内存(aclrtReserveMemAddress接口);
- 申请物理内存(aclrtMallocPhysical接口);
- 将虚拟内存映射到物理内存(aclrtMemMapNoAccess接口);
- 为目标Device设置访问权限(aclrtMemSetAccess接口);
- 执行任务(调用具体的任务接口);
- 取消虚拟内存与物理内存的映射(aclrtUnmapMem接口);
- 释放物理内存(aclrtFreePhysical接口);
- 释放虚拟内存(aclrtReleaseMemAddress接口)。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | 待映射的虚拟内存地址指针。 这个地址不一定是起始地址,用户也可以根据起始地址自行偏移后,再映射。 |
| size | 输入 | 待映射的内存大小,单位Byte。 此处的size必须与aclrtMallocPhysical接口的size参数值相同,size必须与aclrtMemGetAllocationGranularity接口获取的ACL_RT_MEM_ALLOC_GRANULARITY_MINIMUM对齐。 |
| offset | 输入 | 物理内存偏移值,当前只能设置为0。 |
| handle | 输入 | 物理内存信息handle。类型定义请参见aclrtDrvMemHandle。 通过aclrtReserveMemAddress接口预留出来的一整段虚拟地址,由用户自行管理、划分时,不能同时与两个Device上申请的物理地址绑定。 通过aclrtReserveMemAddress接口预留出来的一整段虚拟地址,由用户自行管理、划分时,不能同时与aclrtMallocPhysical、aclrtMemImportFromShareableHandle、aclrtMemImportFromShareableHandleV2接口输出的handle绑定。 |
| flags | 输入 | 预留,当前只能设置为0。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
对于Atlas 200I/500 A2 推理产品,Ascend RC形态下,不支持调用本接口。
对于Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品、Ascend 950PR/Ascend 950DT,本接口不支持PCIe互连形态的设备。
aclrtUnmapMem
aclError aclrtUnmapMem(void *virPtr)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
取消通过aclrtMapMem或aclrtMemMapNoAccess接口建立的虚拟内存与物理内存之间的映射关系。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | 待取消映射的虚拟内存地址指针。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
对于Atlas 200I/500 A2 推理产品,Ascend RC形态下,不支持调用本接口。
aclrtMemExportToShareableHandle
aclError aclrtMemExportToShareableHandle(aclrtDrvMemHandle handle, aclrtMemHandleType handleType, uint64_t flags, uint64_t *shareableHandle)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
将本进程通过aclrtMallocPhysical接口获取到的Device物理内存handle导出,以便后续将Device物理内存共享给其它进程。
本接口需与以下其它关键接口配合使用,以便实现内存共享,此处以A、B进程为例,说明两个进程间的物理内存共享接口调用流程:
-
在A进程中:
-
调用aclrtMallocPhysical接口,申请物理内存。
先调用aclrtMemGetAllocationGranularity接口获取内存申请粒度,然后再调用aclrtMallocPhysical接口申请物理内存时size按获取到的内存申请粒度对齐,以便节约内存。
若需申请地址连续的虚拟内存、最大化利用物理内存,此处可配合aclrtReserveMemAddress、aclrtMapMem、aclrtMemSetAccess等接口申请虚拟内存、建立虚拟内存与物理内存之间的映射、设置虚拟内存的访问权限。
-
调用aclrtMemExportToShareableHandle接口,导出物理内存handle,输出shareableHandle。
调用aclrtMemExportToShareableHandle接口时,可指定是否启用进程白名单校验,若启用,则需单独调用aclrtMemSetPidToShareableHandle接口将B进程的进程ID设置为白名单;反之,则无需调用aclrtMemSetPidToShareableHandle接口。
-
调用aclrtFreePhysical接口,释放物理内存。
内存使用完成后,要及时调用aclrtFreePhysical接口释放物理内存,实现销毁shareableHandle。若有进程还在使用shareableHandle,则等待shareableHandle使用完成后再执行销毁任务。
所有涉及共享内存的进程都必须释放其物理内存,只有当所有相关进程都完成释放操作后,物理内存才能真正被释放。释放物理内存后,原先分配的内存将被归还给操作系统,此后使用该handle将导致未定义的行为。
-
-
在B进程中:
-
调用aclrtDeviceGetBareTgid接口,获取B进程的进程ID。
本接口内部在获取进程ID时已适配物理机、虚拟机场景,用户只需调用本接口获取进程ID,再配合其它接口使用,达到物理内存共享的目的。若用户不调用本接口、自行获取进程ID,可能会导致后续使用进程ID异常。
-
调用aclrtMemImportFromShareableHandle,获取shareableHandle里的信息,并返回本进程中的handle。
在调用aclrtMemImportFromShareableHandle接口前,需确保待共享的物理内存存在,不能提前释放。
若需申请地址连续的虚拟内存、最大化利用物理内存地址,此处可配合aclrtReserveMemAddress、aclrtMapMem、aclrtMemSetAccess等接口申请虚拟内存、建立虚拟内存与物理内存之间的映射、设置虚拟内存的访问权限,请参见对应接口的说明。
-
调用aclrtFreePhysical接口,释放物理内存。
-
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 存放物理内存信息的handle。类型定义请参见aclrtDrvMemHandle。 需先在本进程调用aclrtMallocPhysical接口申请物理内存,该接口调用成功,会返回一个handle。 handle与shareableHandle是一一对应的关系,在同一个进程中,不允许一对多、或多对一,否则报错,例如重复调用本接口导出时则会返回报错。 |
| handleType | 输入 | 预留参数,当前固定填ACL_MEM_HANDLE_TYPE_NONE。 类型定义请参见aclrtMemHandleType。 |
| flags | 输入 | 是否启用进程白名单校验。 取值为如下宏: - ACL_RT_VMM_EXPORT_FLAG_DEFAULT:默认值,启用进程白名单校验。配置为该值时,需单独调用aclrtMemSetPidToShareableHandle接口将使用shareableHandle的进程ID设置为白名单。 - ACL_RT_VMM_EXPORT_FLAG_DISABLE_PID_VALIDATION:关闭进程白名单校验。配置为该值时,则无需调用aclrtMemSetPidToShareableHandle接口。 宏的定义如下: #define ACL_RT_VMM_EXPORT_FLAG_DEFAULT 0x0UL #define ACL_RT_VMM_EXPORT_FLAG_DISABLE_PID_VALIDATION 0x1UL |
| shareableHandle | 输出 | 标识共享给其它进程的shareableHandle。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于Atlas 200I/500 A2 推理产品,Ascend RC形态下,不支持调用本接口。
- 支持AI Server内跨进程共享物理内存。若跨Device,则还需配合aclrtDeviceEnablePeerAccess接口使用。AI Server通常是多个Device组成的服务器形态的统称。
- 不支持昇腾虚拟化实例场景。
- 不支持算力分组场景。
aclrtMemSetPidToShareableHandle
aclError aclrtMemSetPidToShareableHandle(uint64_t shareableHandle, int32_t *pid, size_t pidNum)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
设置共享内存的进程白名单**。**
在调用aclrtMemExportToShareableHandle接口的进程中,调用本接口设置进程白名单。本接口需与其它接口配合使用,以便实现内存共享的目的,请参见aclrtMemExportToShareableHandle接口处的说明。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| shareableHandle | 输入 | 通过aclrtMemExportToShareableHandle接口导出的shareableHandle。 |
| pid | 输入 | 用于存放白名单进程ID的数组。 进程ID可调用aclrtDeviceGetBareTgid接口获取,Docker场景下获取到的是物理机上的进程ID,非Docker场景下获取到的是进程ID。 |
| pidNum | 输入 | 白名单进程数量,与pid参数数组的大小保持一致。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtMemImportFromShareableHandle
aclError aclrtMemImportFromShareableHandle(uint64_t shareableHandle, int32_t deviceId, aclrtDrvMemHandle *handle)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
在本进程中获取shareableHandle里的信息,并返回本进程中的handle,用于在本进程中建立虚拟地址与物理地址之间的映射关系。本接口还支持生成指定Device上的handle。
本接口需与其它接口配合使用,以便实现内存共享的目的,配合使用流程请参见aclrtMemExportToShareableHandle接口处的说明。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| shareableHandle | 输入 | 待共享的shareableHandle,与aclrtMemExportToShareableHandle接口中导出的shareableHandle保持一致。 handle与shareableHandle是一一对应的关系,在同一个进程中,不允许一对多、或多对一。 |
| deviceId | 输入 | 用于生成指定Device ID上的handle。 用户调用aclrtGetDeviceCount接口获取可用的Device数量后,这个Device ID的取值范围:[0, (可用的Device数量-1)] |
| handle | 输出 | 本进程的物理内存handle。类型定义请参见aclrtDrvMemHandle。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 在调用本接口前,需确保待共享的物理内存存在,不能提前释放。
- 不支持同一个进程中调用aclrtMemImportFromShareableHandle、aclrtMemExportToShareableHandle这两个接口,只支持跨进程调用。
- 支持在一个Device上调用aclrtMemExportToShareableHandle接口导出handle,然后调用本接口生成另一个Device上的handle。
- 内存使用完成后,要及时调用aclrtFreePhysical销毁handle,并且需所有调用本接口的进程都销毁shareableHandle的情况下,handle才会真正销毁。
aclrtMemExportToShareableHandleV2
aclError aclrtMemExportToShareableHandleV2(aclrtDrvMemHandle handle, uint64_t flags, aclrtMemSharedHandleType shareType, void *shareableHandle)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
将本进程通过aclrtMallocPhysical接口获取到的Device物理内存handle导出,以便后续将Device物理内存共享给其它进程。
本接口是在接口aclrtMemExportToShareableHandle基础上进行了增强,用户可通过shareType参数指定导出AI Server内的共享句柄,或导出跨AI Server的共享句柄。AI Server通常是多个Device组成的服务器形态的统称。
本接口的使用流程可参见aclrtMemExportToShareableHandle,但本接口需配合调用aclrtMemSetPidToShareableHandleV2接口设置进程白名单、调用aclrtMemImportFromShareableHandleV2接口导入共享句柄。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 存放物理内存信息的handle。类型定义请参见aclrtDrvMemHandle。 需先在本进程调用aclrtMallocPhysical接口申请物理内存,该接口调用成功,会返回一个handle。 handle与shareableHandle是一一对应的关系,在同一个进程中,不允许一对多、或多对一,否则报错,例如重复调用本接口导出时则会返回报错。 |
| flags | 输入 | 是否启用进程白名单校验。 取值为如下宏: - ACL_RT_VMM_EXPORT_FLAG_DEFAULT:默认值,启用进程白名单校验。配置为该值时,需单独调用aclrtMemSetPidToShareableHandleV2接口将使用shareableHandle的进程ID设置为白名单。 - ACL_RT_VMM_EXPORT_FLAG_DISABLE_PID_VALIDATION:关闭进程白名单校验。配置为该值时,则无需调用aclrtMemSetPidToShareableHandleV2接口。 宏的定义如下: #define ACL_RT_VMM_EXPORT_FLAG_DEFAULT 0x0UL #define ACL_RT_VMM_EXPORT_FLAG_DISABLE_PID_VALIDATION 0x1UL |
| shareType | 输入 | 导出的共享句柄类型。类型定义请参见aclrtMemSharedHandleType。 |
| shareableHandle | 输出 | 指向共享句柄的指针。其指向的内存由调用者提供,大小根据shareType决定: 若shareType为ACL_MEM_SHARE_HANDLE_TYPE_DEFAULT,则指向一个uint64_t变量。 若shareType为ACL_MEM_SHARE_HANDLE_TYPE_FABRIC,则指向一个aclrtMemFabricHandle结构体。 typedef struct aclrtMemFabricHandle { uint8_t data[128]; } aclrtMemFabricHandle; |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于Atlas 200I/500 A2 推理产品,Ascend RC形态下,不支持调用本接口。
- 支持AI Server内跨进程共享物理内存,若跨Device,则还需配合aclrtDeviceEnablePeerAccess接口使用。
- 仅Atlas A3 训练系列产品/Atlas A3 推理系列产品支持跨AI Server的跨进程共享物理内存。
- 不支持昇腾虚拟化实例场景。
- 不支持算力分组场景。
aclrtMemSetPidToShareableHandleV2
aclError aclrtMemSetPidToShareableHandleV2(void *shareableHandle, aclrtMemSharedHandleType shareType, int32_t *pid, size_t pidNum)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
设置共享内存的进程白名单**。**
本接口是在接口aclrtMemSetPidToShareableHandle基础上进行了增强,用户可通过shareType参数指定导出AI Server内的共享句柄,或导出跨AI Server的共享句柄。
本接口的使用流程可参见aclrtMemExportToShareableHandle,但本接口需配合调用aclrtMemExportToShareableHandleV2接口导出共享句柄、调用aclrtMemImportFromShareableHandleV2接口导入共享句柄。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| shareableHandle | 输入 | 通过aclrtMemExportToShareableHandleV2接口导出的shareableHandle,表示指向共享句柄的指针。 |
| shareType | 输入 | 导出的共享句柄类型。类型定义请参见aclrtMemSharedHandleType。 |
| pid | 输入 | 用于存放白名单进程ID的数组。 进程ID可调用aclrtDeviceGetBareTgid接口获取,Docker场景下获取到的是物理机上的进程ID,非Docker场景下获取到的是进程ID。 |
| pidNum | 输入 | 白名单进程数量,与pid参数数组的大小保持一致。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtMemImportFromShareableHandleV2
aclError aclrtMemImportFromShareableHandleV2(void *shareableHandle, aclrtMemSharedHandleType shareType, uint64_t flags, aclrtDrvMemHandle *handle)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
在本进程中获取shareableHandle里的信息,并返回本进程中的handle,用于在本进程中建立虚拟地址与物理地址之间的映射关系。
本接口是在接口aclrtMemImportFromShareableHandle基础上进行了增强,用户可通过shareType参数指定导出AI Server内的共享句柄,或导出跨AI Server的共享句柄。
本接口的使用流程可参见aclrtMemExportToShareableHandle,但本接口需配合调用aclrtMemExportToShareableHandleV2接口导出共享句柄、调用aclrtMemSetPidToShareableHandleV2接口设置进程白名单。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| shareableHandle | 输入 | 待共享的shareableHandle,与aclrtMemExportToShareableHandleV2接口中导出的shareableHandle保持一致。 handle与shareableHandle是一一对应的关系,在同一个进程中,不允许一对多、或多对一。 |
| shareType | 输入 | 导出的共享句柄类型。类型定义请参见aclrtMemSharedHandleType。 |
| flags | 输入 | 预留参数,当前固定设置为0。 |
| handle | 输出 | 本进程的物理内存handle。类型定义请参见aclrtDrvMemHandle。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 在调用本接口前,需确保待共享的物理内存存在,不能提前释放。
- 不支持同一个进程中调用aclrtMemImportFromShareableHandleV2、aclrtMemExportToShareableHandleV2这两个接口,只支持跨进程调用。
- 内存使用完成后,要及时调用aclrtFreePhysical销毁handle,并且需所有调用本接口的进程都销毁shareableHandle的情况下,handle才会真正销毁。
aclrtMemGetAllocationGranularity
aclError aclrtMemGetAllocationGranularity(aclrtPhysicalMemProp *prop, aclrtMemGranularityOptions option, size_t *granularity)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
查询内存申请粒度。
系统内部会根据用户指定的内存属性信息计算最小粒度或建议粒度,并以granularity参数返回粒度。此粒度可用作对齐、地址大小或地址映射的倍数。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| prop | 输入 | 物理内存属性信息。类型定义请参见aclrtPhysicalMemProp。 |
| option | 输入 | 最小粒度或推荐粒度。类型定义请参见aclrtMemGranularityOptions。 |
| granularity | 输出 | 内存申请粒度,单位为Byte。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
Atlas 200I/500 A2 推理产品上,Ascend RC形态不支持调用本接口。
aclrtMemSetAccess
aclError aclrtMemSetAccess(void* virPtr, size_t size, aclrtMemAccessDesc* desc, size_t count)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
设置内存的访问权限。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | 虚拟内存的起始地址。 必须与aclrtMapMem或aclrtMemMapNoAccess接口的virPtr地址相同。 |
| size | 输入 | 虚拟内存的长度。 必须与aclrtMapMem或aclrtMemMapNoAccess接口的size相同。 |
| desc | 输入 | 内存访问的配置信息,包含内存访问保护标志、内存所在位置等。类型定义请参见aclrtMemAccessDesc。 |
| count | 输入 | desc数组长度。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtMemGetAccess
aclError aclrtMemGetAccess(void *virPtr, aclrtMemLocation *location, uint64_t *flag)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取内存的访问权限。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | 虚拟内存的起始地址。 必须与aclrtMapMem接口的virPtr地址相同。 |
| location | 输入 | 内存所在位置。类型定义请参见aclrtMemLocation。 当前仅支持将aclrtMemLocation.type设置为ACL_MEM_LOCATION_TYPE_HOST或ACL_MEM_LOCATION_TYPE_DEVICE。当aclrtMemLocation.type为ACL_MEM_LOCATION_TYPE_HOST时,aclrtMemLocation.id无效,固定设置为0即可。 |
| flag | 输出 | 内存访问保护标志。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
aclrtMemRetainAllocationHandle
aclError aclrtMemRetainAllocationHandle(void* virPtr, aclrtDrvMemHandle *handle)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据虚拟内存地址获取物理内存信息的handle。
若多次调用本接口,则需相应地调用相同次数的aclrtFreePhysical来释放物理内存handle。
若调用接口时返回ACL_ERROR_RT_FEATURE_NOT_SUPPORT,这表示底层驱动不支持该特性,需将驱动包升级到26.0.RC1或更高版本。您可以单击Link,在“固件与驱动”页面下载对应版本的驱动安装包,并参照其文档进行安装和升级。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtr | 输入 | “已分配的虚拟内存地址的指针”的指针。 必须与aclrtMapMem接口的virPtr地址相同。 |
| handle | 输出 | 存放物理内存信息的handle。类型定义请参见aclrtDrvMemHandle。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
Atlas 200I/500 A2 推理产品上,Ascend RC形态不支持调用本接口。
aclrtMemGetAllocationPropertiesFromHandle
aclError aclrtMemGetAllocationPropertiesFromHandle(aclrtDrvMemHandle handle, aclrtPhysicalMemProp* prop)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
根据物理内存信息的handle查询其内存属性信息。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 存放物理内存信息的handle。类型定义请参见aclrtDrvMemHandle。 查询通过aclrtMallocPhysical接口申请的物理内存属性信息。 |
| prop | 输出 | 物理内存属性信息。类型定义请参见aclrtPhysicalMemProp。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
Atlas 200I/500 A2 推理产品上,Ascend RC形态不支持调用本接口。
aclrtMemGetAddressRange
aclError aclrtMemGetAddressRange(void *ptr, void **pbase, size_t *psize)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
- Atlas 200I/500 A2 推理产品:支持
- Atlas 推理系列产品:支持
- Atlas 训练系列产品:支持
- IPV350:不支持
功能说明
获取待查询地址所属内存块的起始地址以及内存块大小。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| ptr | 输入 | 待查询的内存地址。 |
| pbase | 输出 | 返回待查询地址所属内存块的起始地址。 |
| psize | 输出 | 返回待查询地址所属内存块的大小,单位Byte。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
参考信息
| 使用场景 | aclrtMemGetAddressRange接口行为 |
|---|---|
| 查询通过aclrtMalloc接口或aclrtMallocWithCfg接口返回的Device内存 | 返回内存块的起始地址和内存大小 |
| 查询通过aclrtMallocHost接口或aclrtMallocHostWithCfg接口返回的Host内存 | 返回内存块的起始地址和内存大小。 |
| 查询通过aclrtReserveMemAddress、aclrtMallocPhysical、aclrtMapMem等接口映射过的虚拟内存地址 | 返回经过映射的内存块的起始地址和内存大小 |
aclrtMemMapSelectedLink
aclError aclrtMemMapSelectedLink(void *virPtrDst, size_t size, void *virPtrSrc, uint32_t linkIdx)
产品支持情况
- Ascend 950PR/Ascend 950DT:不支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
将虚拟地址 virPtrDst 映射到虚拟地址 virPtrSrc 对应的物理地址,可以通过 linkIdx 选择 HCCS 链路或者 SIO 链路。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| virPtrDst | 输入 | 待映射的虚拟内存地址。 需要通过aclrtReserveMemAddress接口提前预留虚拟地址内存,然后将虚拟内存的首地址作为入参传入本接口。不支持将虚拟内存首地址进行偏移后再传入本接口。 |
| size | 输入 | 虚拟内存大小,单位Byte。 virPtrDst与virPtrSrc处的虚拟内存大小需保持一致,且与size相等。 |
| virPtrSrc | 输入 | 已与物理内存建立映射关系的虚拟内存地址。 需提前通过aclrtMapMem接口完成虚拟内存与物理内存的映射,然后将虚拟内存的首地址作为入参传入本接口。不支持对虚拟内存首地址进行偏移后再传入本接口。 |
| linkIdx | 输入 | 链路标识。 - ACL_RT_MEM_LINK_IDX_0:SIO(Small Input Output),表示片内连接方式,两个DIE之间通过该方式连接。 - ACL_RT_MEM_LINK_IDX_1:HCCS(Huawei Cache Coherence System),HCCS是华为缓存一致性系统,用于CPU/NPU之间的高速互联。 宏定义如下: #define ACL_RT_MEM_LINK_IDX_0 0U // SIO #define ACL_RT_MEM_LINK_IDX_1 1U // HCCS |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
若virPtrSrc虚拟内存的首地址在偏移后映射至多个不同的物理内存,则在调用aclrtMemMapSelectedLink接口将virPtrDst与virPtrSrc进行映射时,virPtrDst同样会映射至这些不同的物理内存,且virPtrDst与virPtrSrc的地址偏移量保持一致。在此场景下,需多次调用aclrtUnmapMem接口取消virPtrDst与多个物理地址之间的映射关系。
aclrtMemMapSetLink
aclError aclrtMemMapSetLink(aclrtDrvMemHandle handle, aclrtMemLinkType adviceLink)
产品支持情况
- Ascend 950PR/Ascend 950DT:支持
- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
- Atlas 200I/500 A2 推理产品:不支持
- Atlas 推理系列产品:不支持
- Atlas 训练系列产品:不支持
- IPV350:不支持
功能说明
设置物理内存映射时使用的访问链路类型。
如需指定访问链路类型,需先调用aclrtMemImportFromShareableHandle接口获取物理内存handle,再调用本接口设置该handle的访问链路类型,最后调用aclrtMapMem接口建立虚拟内存与物理内存的映射关系。
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| handle | 输入 | 物理内存信息handle。类型定义请参见aclrtDrvMemHandle。 该handle需通过aclrtMemImportFromShareableHandle接口获取。 |
| adviceLink | 输入 | 内存访问链路类型。类型定义请参见aclrtMemLinkType。 |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
约束说明
- 对于Ascend 950PR/Ascend 950DT,adviceLink支持以下取值:
- ACL_RT_MEM_ACCESS_UB_ONE_PORT_PATH:UB(Unified Bus)单端口路径:FM(Full Mesh)连线方式,无层级、全点对点直连。
- ACL_RT_MEM_ACCESS_UB_MULTI_PORT_PATH:UB(Unified Bus)多端口路径:CLOS连线方式,分层结构化互联。
- 对于Atlas A3 训练系列产品/Atlas A3 推理系列产品,adviceLink支持以下取值:
- ACL_RT_MEM_ACCESS_LINK_SIO:SIO通道,片内连接方式,两个DIE之间通过该方式连接。
- ACL_RT_MEM_ACCESS_LINK_HCCS:HCCS通道,HCCS是Huawei Cache Coherence System(华为缓存一致性系统),用于CPU/NPU之间的高速互联。
若当前产品不支持adviceLink指定的访问链路类型,则返回ACL_ERROR_RT_LINK_TYPE_NOT_SUPPORTED错误码。