From: @HW_KK Reviewed-by: @ji_chen,@wqtshg Signed-off-by: @ji_chentags/v1.3.0
@@ -341,11 +341,7 @@ Status ModelManager::LoadModelOnline(uint32_t &model_id, const shared_ptr<ge::Ge | |||||
mmTimespec timespec = mmGetTickCount(); | mmTimespec timespec = mmGetTickCount(); | ||||
std::shared_ptr<DavinciModel> davinci_model = MakeShared<DavinciModel>(0, listener); | std::shared_ptr<DavinciModel> davinci_model = MakeShared<DavinciModel>(0, listener); | ||||
if (davinci_model == nullptr) { | |||||
REPORT_CALL_ERROR("E19999", "New DavinciModel fail, model_id:%u", model_id); | |||||
GELOGE(FAILED, "davinci_model is nullptr"); | |||||
return FAILED; | |||||
} | |||||
GE_CHECK_NOTNULL(davinci_model); | |||||
davinci_model->SetProfileTime(MODEL_LOAD_START, (timespec.tv_sec * kTimeSpecNano + | davinci_model->SetProfileTime(MODEL_LOAD_START, (timespec.tv_sec * kTimeSpecNano + | ||||
timespec.tv_nsec)); // 1000 ^ 3 converts second to nanosecond | timespec.tv_nsec)); // 1000 ^ 3 converts second to nanosecond | ||||
davinci_model->SetId(model_id); | davinci_model->SetId(model_id); | ||||
@@ -125,6 +125,7 @@ const uint32_t kInitGraphCount = 1; | |||||
const uint32_t kNotAdded = 0; | const uint32_t kNotAdded = 0; | ||||
const uint32_t kStartAdd = 1; | const uint32_t kStartAdd = 1; | ||||
const uint32_t kDoneAdded = 2; | const uint32_t kDoneAdded = 2; | ||||
const uint32_t kNeverLoaded = 0; | |||||
bool IsTailingOptimization() { | bool IsTailingOptimization() { | ||||
string is_tailing_optimization_option; | string is_tailing_optimization_option; | ||||
@@ -2748,6 +2749,15 @@ void GraphManager::ReleaseMemory(const GeModelPtr &ge_model, GraphNodePtr &graph | |||||
GELOGI("CheckAndReleaseMemory UnloadGraph[%u], model[%u] success.", graph_id, model_id); | GELOGI("CheckAndReleaseMemory UnloadGraph[%u], model[%u] success.", graph_id, model_id); | ||||
} | } | ||||
graph_node->SetLoadFlag(false); | graph_node->SetLoadFlag(false); | ||||
// Allow model to be loaded agagin without adding graph again | |||||
graph_node->SetLoadCount(graph_node->GetLoadRecord()); | |||||
graph_node->SetLoadRecord(kNeverLoaded); | |||||
GeRootModelPtr ge_root_model = graph_node->GetGeRootModel(); | |||||
if (ge_root_model == nullptr) { | |||||
GELOGW("ge_root_model is null, graph_id:%u", graph_id); | |||||
return; | |||||
} | |||||
ge_root_model->ClearAllModelId(); | |||||
rt_ret = rtDeviceReset(GetContext().DeviceId()); | rt_ret = rtDeviceReset(GetContext().DeviceId()); | ||||
if (rt_ret != RT_ERROR_NONE) { | if (rt_ret != RT_ERROR_NONE) { | ||||
REPORT_CALL_ERROR("E19999", "Call rtDeviceReset failed, device_id:%u, when GraphManager %s", | REPORT_CALL_ERROR("E19999", "Call rtDeviceReset failed, device_id:%u, when GraphManager %s", | ||||
@@ -178,9 +178,12 @@ class GraphNode { | |||||
void SetSemSize(uint32_t size) { sem_.SetMaxSize(size); } | void SetSemSize(uint32_t size) { sem_.SetMaxSize(size); } | ||||
uint32_t GetLoadCount() const { return load_count_; } | uint32_t GetLoadCount() const { return load_count_; } | ||||
void SetLoadCount(uint32_t count) { load_count_ = count; } | |||||
uint32_t GetLoadRecord() const { return load_record_; } | |||||
void SetLoadRecord(uint32_t record) { load_record_ = record; } | |||||
void IncreaseLoadRecord() { ++load_record_; } | |||||
void IncreaseLoadCount(); | void IncreaseLoadCount(); | ||||
void DecreaseLoadCount() { --load_count_; } | void DecreaseLoadCount() { --load_count_; } | ||||
void IncreaseLoadRecord() { ++load_record_; } | |||||
// run graph asynchronous listener | // run graph asynchronous listener | ||||
std::shared_ptr<RunAsyncListener> graph_run_async_listener_; | std::shared_ptr<RunAsyncListener> graph_run_async_listener_; | ||||
@@ -150,10 +150,8 @@ Status HybridModelAsyncExecutor::RunInternal() { | |||||
Status ret = data_inputer_->Pop(data_wrapper); | Status ret = data_inputer_->Pop(data_wrapper); | ||||
// Model indeedly start running | // Model indeedly start running | ||||
SetRunningFlag(true); | SetRunningFlag(true); | ||||
if (data_wrapper == nullptr || ret != SUCCESS) { | |||||
GELOGI("data_wrapper is null!, ret = %u", ret); | |||||
continue; | |||||
} | |||||
GE_IF_BOOL_EXEC(data_wrapper == nullptr || ret != SUCCESS, GELOGI("data_wrapper is null!, ret = %u", ret); | |||||
continue); | |||||
GELOGI("Getting the input data, model_id:%u", model_id_); | GELOGI("Getting the input data, model_id:%u", model_id_); | ||||
GE_IF_BOOL_EXEC(!run_flag_, break); | GE_IF_BOOL_EXEC(!run_flag_, break); | ||||
@@ -40,12 +40,14 @@ class GeRootModel { | |||||
} | } | ||||
uint32_t GetModelId() const { return model_id_; } | uint32_t GetModelId() const { return model_id_; } | ||||
std::vector<uint32_t> GetAllModelId() const { return model_ids_; } | |||||
void SetModelName(const std::string &model_name) { model_name_ = model_name; } | void SetModelName(const std::string &model_name) { model_name_ = model_name; } | ||||
const std::string &GetModelName() const { return model_name_; } | const std::string &GetModelName() const { return model_name_; } | ||||
std::vector<uint32_t> GetAllModelId() const { return model_ids_; } | |||||
void ClearAllModelId() { model_ids_.clear(); } | |||||
Status CheckIsUnknownShape(bool &is_dynamic_shape); | Status CheckIsUnknownShape(bool &is_dynamic_shape); | ||||
void SetRootGraph(ComputeGraphPtr graph) { root_graph_ = graph; } | void SetRootGraph(ComputeGraphPtr graph) { root_graph_ = graph; } | ||||