自定义内存资源池管理
功能介绍
Vision SDK支持用户自己管理内存资源(DVPP与Device侧)。用户在调用涉及到内存资源相关的接口前,通过注册函数传入自定义的内存管理申请/释放函数,注册后用户可以通过自定义的接口从用户的内存资源池中申请/释放资源。该功能仅支持Atlas 推理系列产品。
注册函数必须成对使用,如果用户只注册了申请/释放函数其一,会使用默认方式,直接申请/释放内存。
示例代码
以下分别为DVPP和Device侧注册函数的代码示例,不可以直接拷贝编译运行,仅供参考。
DVPP
APP_ERROR userCustomizedDVPPMallocFunc(unsigned int deviceID, void** buffer, unsigned long long size) { LogInfo << "user customized DVPP Malloc func called" ; // 此处添加用户自定义DVPP资源申请函数 return APP_ERR_OK; } APP_ERROR userCustomizedDVPPFreeFunc(void* buffer) { LogInfo << "user customized DVPP Free func called" ; // 此处添加用户自定义DVPP资源释放函数 return APP_ERR_OK; } int main(){ MxBase::MxInit(); { APP_ERROR ret = MxBase::DVPPMallocFuncHookReg(userCustomizedDVPPMallocFunc); if (ret != APP_ERR_OK) { std::cout << "registerTest failed, dvpp malloc registered failed" << std::endl; } else { std::cout << "registerTest success, dvpp malloc registered success" << std::endl; } ret = MxBase::DVPPFreeFuncHookReg(userCustomizedDVPPFreeFunc); if (ret != APP_ERR_OK) { std::cout << "registerTest failed, dvpp free registered failed" << std::endl; } else { std::cout << "registerTest success, dvpp free registered success" << std::endl; } } MxBase::MxDeInit(); }
Device
APP_ERROR userCustomizedDeviceMallocFunc(void** buffer, unsigned int size, MxBase::MxMemMallocPolicy policy) { LogInfo << "user customized Device Malloc func called" ; // user customized Device Malloc function definition return APP_ERR_OK; } APP_ERROR userCustomizedDeviceFreeFunc(void* buffer) { LogInfo << "user customized Device Free func called" ; // user customized Device Free function definition return APP_ERR_OK; } int main() { MxBase::MxInit(); { APP_ERROR ret = MxBase::DeviceMallocFuncHookReg(userCustomizedDeviceMallocFunc); if (ret != APP_ERR_OK) { std::cout << "registerTest failed, device malloc registered failed" << std::endl; } else { std::cout << "registerTest success, device malloc registered success" << std::endl; } ret = MxBase::DeviceFreeFuncHookReg(userCustomizedDeviceFreeFunc); if (ret != APP_ERR_OK) { std::cout << "registerTest failed, device free registered failed" << std::endl; } else { std::cout << "registerTest success, device free registered success" << std::endl; } } MxBase::MxDeInit(); }
父主题: 使用API接口方式开发(C++)