From 3e7f9e41fee1c607f94d9db098d42e3130c5d47d Mon Sep 17 00:00:00 2001 From: yeyunpeng Date: Fri, 25 Dec 2020 09:15:15 +0800 Subject: [PATCH] Avoid multiple checks --- .../lite/src/runtime/agent/npu/npu_manager.cc | 25 ++++++++++++------- .../lite/src/runtime/agent/npu/npu_manager.h | 6 +++-- .../optimizer/npu_insert_transform_pass.cc | 3 --- .../agent/npu/optimizer/npu_pass_manager.cc | 5 +++- .../agent/npu/optimizer/npu_pass_manager.h | 3 ++- .../agent/npu/optimizer/npu_transform_pass.cc | 3 --- mindspore/lite/src/scheduler.cc | 2 +- mindspore/lite/test/models_npu.cfg | 6 ++--- 8 files changed, 30 insertions(+), 23 deletions(-) diff --git a/mindspore/lite/src/runtime/agent/npu/npu_manager.cc b/mindspore/lite/src/runtime/agent/npu/npu_manager.cc index 6357ee8821..e841db7a33 100644 --- a/mindspore/lite/src/runtime/agent/npu/npu_manager.cc +++ b/mindspore/lite/src/runtime/agent/npu/npu_manager.cc @@ -60,10 +60,10 @@ void NPUManager::Reset() { domi::HiaiIrBuild ir_build; for (const auto &model_map : models_) { auto model = model_map.second; - if (!model->is_freed) { + if (!model->is_freed_) { ir_build.ReleaseModelBuff(*model->model_buffer_data_); model->model_buffer_data_ = nullptr; - model->is_freed = true; + model->is_freed_ = true; model->desc_.reset(); model->desc_ = nullptr; } @@ -88,12 +88,19 @@ bool NPUManager::CheckDDKVersion() { return true; } bool NPUManager::IsSupportNPU() { - if (IsKirinChip() && CheckEMUIVersion() && CheckDDKVersion()) { - MS_LOG(INFO) << "The current device support NPU."; - return true; + // Avoid multiple checks + if (!is_check_version_) { + is_check_version_ = true; + if (IsKirinChip() && CheckEMUIVersion() && CheckDDKVersion()) { + is_support_ = true; + MS_LOG(INFO) << "The current device support NPU."; + } else { + is_support_ = false; + MS_LOG(INFO) << "The current device NOT SUPPORT NPU."; + } + return is_support_; } else { - MS_LOG(INFO) << "The current device NOT SUPPORT NPU."; - return false; + return is_support_; } } @@ -173,7 +180,7 @@ int NPUManager::LoadOMModel() { } total++; auto model = model_map.second; - if (model->is_loaded && model->is_freed) { + if (model->is_loaded_ && model->is_freed_) { continue; } models_desc.push_back(model->desc_); @@ -222,7 +229,7 @@ int NPUManager::LoadModel(const std::shared_ptr &clien for (const auto &desc : desc_list) { auto it = models_.find(desc->GetName()); - it->second->is_loaded = true; + it->second->is_loaded_ = true; it->second->client_ = client; } diff --git a/mindspore/lite/src/runtime/agent/npu/npu_manager.h b/mindspore/lite/src/runtime/agent/npu/npu_manager.h index dc132df814..c06dc006af 100644 --- a/mindspore/lite/src/runtime/agent/npu/npu_manager.h +++ b/mindspore/lite/src/runtime/agent/npu/npu_manager.h @@ -36,8 +36,8 @@ struct SubGraphModel { SubGraphModel(int index, std::string model_name, domi::ModelBufferData *model_buffer_data) : index_(index), model_name_(std::move(model_name)), model_buffer_data_(model_buffer_data) {} - bool is_freed = false; - bool is_loaded = false; + bool is_freed_ = false; + bool is_loaded_ = false; int index_; std::string model_name_; std::shared_ptr model_buffer_data_; @@ -84,6 +84,8 @@ class NPUManager { private: int index_ = 0; + bool is_check_version_ = false; + bool is_support_ = false; std::unordered_map models_; std::vector> clients_; }; diff --git a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_insert_transform_pass.cc b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_insert_transform_pass.cc index 8529f11c50..823a0a0e07 100644 --- a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_insert_transform_pass.cc +++ b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_insert_transform_pass.cc @@ -112,9 +112,6 @@ int NPUInsertTransformPass::InsertPostNode(const InnerContext *context, kernel:: } int NPUInsertTransformPass::Run() { - if (!context_->IsNpuEnabled()) { - return RET_OK; - } for (size_t i = 0; i < all_kernels_->size(); i++) { auto kernel = (*all_kernels_)[i]; if (kernel->desc().arch != kNPU) { diff --git a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.cc b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.cc index ab555c599d..1424773854 100644 --- a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.cc +++ b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.cc @@ -20,7 +20,10 @@ namespace mindspore::lite { void NPUPassManager::AddPass(NPUBasePass *pass) { all_pass_.push_back(pass); } -int NPUPassManager::Run() { +int NPUPassManager::Run(const InnerContext *context) { + if (!context->IsNpuEnabled()) { + return RET_OK; + } for (auto pass : all_pass_) { auto ret = pass->Run(); if (ret != RET_OK) { diff --git a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.h b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.h index 2f0a56282d..6dc2026af2 100644 --- a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.h +++ b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_pass_manager.h @@ -18,6 +18,7 @@ #define MINDSPORE_LITE_SRC_RUNTIME_AGENT_NPU_OPTIMIZER_NPU_PASS_MANAGER_H_ #include #include "src/runtime/agent/npu/optimizer/npu_base_pass.h" +#include "src/inner_context.h" namespace mindspore::lite { class NPUPassManager { public: @@ -30,7 +31,7 @@ class NPUPassManager { void AddPass(NPUBasePass *pass); - int Run(); + int Run(const InnerContext *context); void Clear(); diff --git a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_transform_pass.cc b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_transform_pass.cc index 80ffe0930e..a858c8a643 100644 --- a/mindspore/lite/src/runtime/agent/npu/optimizer/npu_transform_pass.cc +++ b/mindspore/lite/src/runtime/agent/npu/optimizer/npu_transform_pass.cc @@ -97,9 +97,6 @@ int NPUTransformPass::InsertPostNode(const InnerContext *context, kernel::LiteKe } int NPUTransformPass::Run() { - if (!context_->IsNpuEnabled()) { - return RET_OK; - } for (size_t i = 0; i < all_kernels_->size();) { auto kernel = (*all_kernels_)[i]; if (kernel->desc().arch != kNPU || npu_trans_nodes.find(kernel->Type()) == npu_trans_nodes.end()) { diff --git a/mindspore/lite/src/scheduler.cc b/mindspore/lite/src/scheduler.cc index dcd9e8b843..2dbf127659 100644 --- a/mindspore/lite/src/scheduler.cc +++ b/mindspore/lite/src/scheduler.cc @@ -574,7 +574,7 @@ int Scheduler::RunPass(std::vector *dst_kernels) { auto fusion_pass = new NPUFusionPass(dst_kernels); mindspore::lite::NPUPassManager::GetInstance()->AddPass(fusion_pass); - ret = mindspore::lite::NPUPassManager::GetInstance()->Run(); + ret = mindspore::lite::NPUPassManager::GetInstance()->Run(context_); #endif return ret; } diff --git a/mindspore/lite/test/models_npu.cfg b/mindspore/lite/test/models_npu.cfg index bf856efcd7..91ea4773c0 100644 --- a/mindspore/lite/test/models_npu.cfg +++ b/mindspore/lite/test/models_npu.cfg @@ -1,3 +1,3 @@ -mobilenet_v1_1.0_224.tflite 3 -squeezenet.tflite 3 -inception_v3.tflite 3 +mobilenet_v1_1.0_224.tflite 1.5 +squeezenet.tflite 1.5 +inception_v3.tflite 0.5