11-08 自定义内存分配器【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述自定义 Allocator 接口用于注册、查询和注销用户自定义的内存分配器。aclError aclrtAllocatorRegister(aclrtStream stream, aclrtAllocatorDesc allocatorDesc)调用该接口注册用户提供的Allocator以及Allocator对应的回调函数以便后续使用用户提供的Allocator。aclError aclrtAllocatorGetByStream(aclrtStream stream, aclrtAllocatorDesc *allocatorDesc, aclrtAllocator *allocator, aclrtAllocatorAllocFunc *allocFunc, aclrtAllocatorFreeFunc *freeFunc, aclrtAllocatorAllocAdviseFunc *allocAdviseFunc, aclrtAllocatorGetAddrFromBlockFunc *getAddrFromBlockFunc)根据Stream查询用户注册的Allocator信息。aclError aclrtAllocatorUnregister(aclrtStream stream)用户销毁Allocator前需调用本接口取消注册用户提供的Allocator以及Allocator对应的回调函数。aclrtAllocatorRegisteraclError aclrtAllocatorRegister(aclrtStream stream, aclrtAllocatorDesc allocatorDesc)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明调用该接口注册用户提供的Allocator以及Allocator对应的回调函数以便后续使用用户提供的Allocator。参数说明参数名输入/输出说明stream输入该Allocator需要注册的Stream。类型定义请参见aclrtStream。传入的stream参数值不能为NULL否则返回报错。allocatorDesc输入Allocator描述符指针。类型定义请参见aclrtAllocatorDesc。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明当前仅支持在单算子模型执行、动态shape模型推理场景下使用本接口。单算子模型场景下需在算子执行接口例如aclopExecuteV2之前调用本接口。动态shape模型推理场景本接口需配合aclmdlExecuteAsync接口一起使用且需在aclmdlExecuteAsync接口之前调用本接口。调用本接口前需要先调用aclrtAllocatorCreateDesc创建Allocator描述符再分别调用aclrtAllocatorSetObjToDesc、aclrtAllocatorSetAllocFuncToDesc、aclrtAllocatorSetGetAddrFromBlockFuncToDesc、aclrtAllocatorSetFreeFuncToDesc设置Allocator对象及回调函数。Allocator描述符使用完成后可调用aclrtAllocatorDestroyDesc接口销毁Allocator描述符。对于同一条流多次调用本接口以最后一次注册为准。对于不同流如果用户使用同一个Allocator不可以多条流并发执行在执行下一条Stream前需要对上一Stream做流同步。将Allocator中的内存释放给操作系统前需要先调用aclrtSynchronizeStream接口执行流同步确保Stream中的任务已执行完成。aclrtAllocatorGetByStreamaclError aclrtAllocatorGetByStream(aclrtStream stream, aclrtAllocatorDesc *allocatorDesc, aclrtAllocator *allocator, aclrtAllocatorAllocFunc *allocFunc, aclrtAllocatorFreeFunc *freeFunc, aclrtAllocatorAllocAdviseFunc *allocAdviseFunc, aclrtAllocatorGetAddrFromBlockFunc *getAddrFromBlockFunc)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明根据Stream查询用户注册的Allocator信息。参数说明参数名输入/输出说明stream输入注册的类型按照不同的子模块区分。类型定义请参见aclrtStream。allocatorDesc输出Allocator描述符指针。类型定义请参见aclrtAllocatorDesc。allocator输出用户提供的Allocator对象指针。类型定义请参见aclrtAllocator。allocFunc输出申请内存block的回调函数。回调函数定义如下typedef void *(*aclrtAllocatorAllocFunc)(aclrtAllocator allocator, size_t size);freeFunc输出释放内存block的回调函数。回调函数定义如下typedef void (*aclrtAllocatorFreeFunc)(aclrtAllocator allocator, aclrtAllocatorBlock block);allocAdviseFunc输出根据建议地址申请内存block的回调函数。回调函数定义如下typedef void *(*aclrtAllocatorAllocAdviseFunc)(aclrtAllocator allocator, size_t size, aclrtAllocatorAddr addr);getAddrFromBlockFunc输出根据申请来的block获取device内存地址的回调函数。回调函数定义如下typedef void *(*aclrtAllocatorGetAddrFromBlockFunc)(aclrtAllocatorBlock block);返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtAllocatorUnregisteraclError aclrtAllocatorUnregister(aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明用户销毁Allocator前需调用本接口取消注册用户提供的Allocator以及Allocator对应的回调函数。待取消注册的Stream不存在或多次调用本接口取消注册本接口内部不做任何操作返回成功。参数说明参数名输入/输出说明stream输入该Allocator对应的stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考