Vision SDK支持用户自己管理内存资源(DVPP与Device侧)。用户在调用涉及到内存资源相关的接口前,通过注册函数传入自定义的内存管理申请/释放函数,注册后用户可以通过自定义的接口从用户的内存资源池中申请/释放资源。该功能仅支持Atlas 推理系列产品。
注册函数必须成对使用,如果用户只注册了申请/释放函数其一,会使用默认方式,直接申请/释放内存。
相关接口说明请参考自定义内存资源池管理。
以下分别为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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(); } |