11-02 主机内存管理【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述主机Host内存的分配、释放、注册及指针获取接口。aclError aclrtMallocHost(void **hostPtr, size_t size)申请Host内存该内存是锁页内存由系统保证内存首地址64字节对齐。aclError aclrtMallocHostWithCfg(void **ptr, uint64_t size, aclrtMallocConfig *cfg)申请Host内存该内存是锁页内存由系统保证内存首地址64字节对齐。aclError aclrtFreeHost(void *hostPtr)释放通过aclrtMallocHost接口或aclrtMallocHostWithCfg接口申请的Host内存。aclError aclrtFreeHostWithDevSync(void *hostPtr)释放通过aclrtMallocHost接口或aclrtMallocHostWithCfg接口申请的Host内存。aclError aclrtHostRegister(void *ptr, uint64_t size, aclrtHostRegisterType type, void **devPtr)将Host内存映射注册为Device可访问的内存地址并获取映射后的Device内存地址。映射后的Device内存地址不能用于内存操作例如内存复制。aclError aclrtHostRegisterV2(void *ptr, uint64_t size, uint32_t flag)注册Host内存地址。aclError aclrtHostGetDevicePointer(void *pHost, void **pDevice, uint32_t flag)获取由aclrtHostRegister或aclrtHostRegisterV2接口注册映射的Device内存地址。映射后的Device内存地址不能用于内存操作例如内存复制。aclError aclrtHostMemMapCapabilities(uint32_t deviceId, aclrtHacType hacType, aclrtHostMemMapCapability *capabilities)查询指定的硬件驱动加速器是否支持访问通过aclrtHostRegister接口注册的内存。aclError aclrtHostUnregister(void *ptr)取消注册Host内存。aclrtMallocHostaclError aclrtMallocHost(void **hostPtr, size_t size)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明申请Host内存该内存是锁页内存由系统保证内存首地址64字节对齐。通过本接口申请的内存需要通过aclrtFreeHost接口或aclrtFreeHostWithDevSync接口释放内存。参数说明参数名输入/输出说明hostPtr输出“已分配内存的指针”的指针。size输入申请内存的大小单位Byte。size不能为0。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口分配的内存不会进行对内容进行初始化建议在使用内存前先调用aclrtMemset接口先初始化内存清除内存中的随机数。本接口内部不会进行隐式的device同步或流同步。如果申请内存成功或申请内存失败会立刻返回结果。使用aclrtMallocHost接口分配过多的锁页内存将导致操作系统用于分页的物理内存变少从而降低系统整体的性能。频繁调用aclrtMallocHost接口申请内存、调用aclrtFreeHost接口释放内存会损耗性能建议用户提前做内存预先分配或二次管理避免频繁申请/释放内存。aclrtMallocHostWithCfgaclError aclrtMallocHostWithCfg(void **ptr, uint64_t size, aclrtMallocConfig *cfg)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明申请Host内存该内存是锁页内存由系统保证内存首地址64字节对齐。与aclrtMallocHost接口相比本接口在申请内存时还可以指定内存相关的配置信息。通过本接口申请的内存需要通过aclrtFreeHost接口或aclrtFreeHostWithDevSync接口释放内存。参数说明参数名输入/输出说明ptr输出“已分配内存的指针”的指针。size输入申请内存的大小单位Byte。size不能为0。cfg输入内存配置信息。类型定义请参见aclrtMallocConfig。不指定配置时此处可传NULL。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtFreeHostaclError aclrtFreeHost(void *hostPtr)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明释放通过aclrtMallocHost接口或aclrtMallocHostWithCfg接口申请的Host内存。本接口会立刻释放传入的内存接口内部不会进行隐式的Device同步或流同步、也不会等待使用该内存的任务完成。用户需确保在调用本接口后不再访问该内存指针。参数说明参数名输入/输出说明hostPtr输入待释放内存的指针。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtFreeHostWithDevSyncaclError aclrtFreeHostWithDevSync(void *hostPtr)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明释放通过aclrtMallocHost接口或aclrtMallocHostWithCfg接口申请的Host内存。本接口内部会进行隐式的Device同步并等待使用该内存的任务完成。参数说明参数名输入/输出说明hostPtr输入待释放内存的指针。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtHostRegisteraclError aclrtHostRegister(void *ptr, uint64_t size, aclrtHostRegisterType type, void **devPtr)产品支持情况产品是否支持Ascend 950PR√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明将Host内存映射注册为Device可访问的内存地址并获取映射后的Device内存地址。映射后的Device内存地址不能用于内存操作例如内存复制。如果注册的ptr是通过aclrtMallocHostWithCfg申请的并且申请时配置的attr类型是ACL_RT_MEM_ATTR_VA_FLAGvaFlag的值为1则映射后的Device地址与Host地址一致可以进行内存操作。取消注册Host内存需调用aclrtHostUnregister接口。参数说明参数名输入/输出说明ptr输入Host内存地址。Host内存地址需4K页对齐。当os内核版本为5.10或更低时使用非锁页内存会导致异常因此必须调用aclrtMallocHost接口来申请Host锁页内存。当os内核版本为5.10以上时支持使用非锁页的Host内存因此既支持调用aclrtMallocHost接口申请Host锁页内存也支持使用malloc接口申请Host非锁页内存。size输入内存大小单位Byte。type输入内存注册类型。类型定义请参见aclrtHostRegisterType。devPtr输出Host内存映射成的Device可访问的内存地址。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtHostRegisterV2aclError aclrtHostRegisterV2(void *ptr, uint64_t size, uint32_t flag)产品支持情况产品是否支持Ascend 950PR√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明注册Host内存地址。取消注册需调用aclrtHostUnregister接口。参数说明参数名输入/输出说明ptr输入Host内存地址。Host内存地址需4K页对齐。当os内核版本为5.10或更低时使用非锁页内存会导致异常因此必须调用aclrtMallocHost接口来申请Host锁页内存。当os内核版本为5.10以上时支持使用非锁页的Host内存因此既支持调用aclrtMallocHost接口申请Host锁页内存也支持使用malloc接口申请Host非锁页内存。size输入内存大小单位Byte。flag输入内存注册类型。取值为如下宏支持配置单个宏也支持配置多个宏位或例如ACL_HOST_REG_MAPPED | ACL_HOST_REG_PINNED- ACL_HOST_REG_MAPPED将Host内存映射注册为Device可访问的内存地址再配合调用aclrtHostGetDevicePointer接口获取映射后的Device内存地址。- ACL_HOST_REG_IOMEMORY将Host上第三方PCIe设备的IO space(寄存器、缓存)映射注册为Device可访问包括读写。对于Atlas A3 训练系列产品/Atlas A3 推理系列产品仅支持X86架构不支持ARM架构。- ACL_HOST_REG_READONLYHost内存映射注册为Device只读。预留选项当前不支持。- ACL_HOST_REG_PINNED将Host非锁页内存注册为锁页内存。Host非锁页内存可通过C/C标准库函数如malloc、calloc、new或默认的mmap系统调用等方式申请。宏定义如下#define ACL_HOST_REG_MAPPED 0x2UL#define ACL_HOST_REG_IOMEMORY 0x4UL#define ACL_HOST_REG_READONLY 0x8UL#define ACL_HOST_REG_PINNED 0X10000000UL返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtHostGetDevicePointeraclError aclrtHostGetDevicePointer(void *pHost, void **pDevice, uint32_t flag)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取由aclrtHostRegister或aclrtHostRegisterV2接口注册映射的Device内存地址。映射后的Device内存地址不能用于内存操作例如内存复制。参数说明参数名输入/输出说明pHost输入通过aclrtHostRegisterV2接口注册映射的Host内存地址。pDevice输出Host内存映射成的Device内存地址。flag输入预留参数当前固定配置为0。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtHostMemMapCapabilitiesaclError aclrtHostMemMapCapabilities(uint32_t deviceId, aclrtHacType hacType, aclrtHostMemMapCapability *capabilities)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明查询指定的硬件驱动加速器是否支持访问通过aclrtHostRegister接口注册的内存。参数说明参数名输入/输出说明deviceId输入Device ID。用户调用aclrtGetDeviceCount接口获取可用的Device数量后这个Device ID的取值范围[0, (可用的Device数量-1)]hacType输入HACHardware Accelerator Controller硬件加速控制器类型。类型定义请参见aclrtHacType。capabilities输出是否支持访问通过aclrtHostRegister接口注册的内存。类型定义请参见aclrtHostMemMapCapability。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtHostUnregisteraclError aclrtHostUnregister(void *ptr)产品支持情况产品是否支持Ascend 950PR√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明取消注册Host内存。本接口与aclrtHostRegister接口成对使用。参数说明参数名输入/输出说明ptr输入Host侧内存地址。返回值说明返回0表示成功返回其他值表示失败请参见aclError。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考