mxVision支持用户自己管理内存资源(DVPP与Device侧)。用户在调用涉及到内存资源相关的接口前,通过注册函数传入自定义的内存管理申请/释放函数,注册后用户可以通过自定义的接口从用户的内存资源池中申请/释放资源。该功能仅支持Atlas 推理系列产品。
注册函数必须成对使用,如果用户只注册了申请/释放函数其一,会使用默认方式,直接申请/释放内存。
以下分别为DVPP和Device侧注册函数的代码示例,不可以直接拷贝编译运行,仅供参考。
APP_ERROR userCustomizedDVPPMallocFunc(unsigned int deviceID, void** buffer, unsigned long long size) {
LogInfo << "user customized DVPP Malloc func called" ;
// user customized DVPP Malloc function definition
return APP_ERR_OK;
}
APP_ERROR userCustomizedDVPPFreeFunc(void* buffer) {
LogInfo << "user customized DVPP Free func called" ;
// user customized DVPP Free function definition
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();
}
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();
}