From 12d963273e3867b1bc585491c6dccec846f429fb Mon Sep 17 00:00:00 2001 From: lichun Date: Wed, 12 May 2021 16:12:11 +0800 Subject: [PATCH] support fwk offline inference when ge_lib is not initialized --- .../node_executor/aicore/aicore_task_compiler.cc | 23 +++++++++++----------- .../node_executor/aicore/aicore_task_compiler.h | 3 +-- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc b/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc index e3836e55..a5964cd9 100755 --- a/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc +++ b/ge/hybrid/node_executor/aicore/aicore_task_compiler.cc @@ -32,6 +32,11 @@ std::mutex AiCoreTaskCompiler::mu_; std::mutex AiCoreTaskCompiler::init_mu_; Status AiCoreTaskCompiler::Initialize() { + std::lock_guard lk(mu_); + if (is_initialized_) { + return SUCCESS; + } + auto ge_lib = GELib::GetInstance(); GE_CHECK_NOTNULL(ge_lib); if (!ge_lib->InitFlag()) { @@ -42,10 +47,7 @@ Status AiCoreTaskCompiler::Initialize() { auto &kernel_manager = ge_lib->OpsKernelManagerObj(); aic_kernel_store_ = kernel_manager.GetOpsKernelInfoStore("AIcoreEngine"); GE_CHECK_NOTNULL(aic_kernel_store_); - std::lock_guard lk(init_mu_); - { - is_initialized_ = true; - } + is_initialized_ = true; return SUCCESS; } @@ -62,14 +64,11 @@ Status AiCoreTaskCompiler::DoCompileOp(const NodePtr &node) const { } Status AiCoreTaskCompiler::CompileOp(const NodePtr &node, std::vector &tasks) { - if (!is_initialized_) { - Status ret; - ret = Initialize(); - if (ret != SUCCESS) { - GELOGE(FAILED, "[Check][State][%s] Offline inference not support online compile.", node->GetName().c_str()); - REPORT_INNER_ERROR("E19999", "[%s] Offline inference not support online compile.", node->GetName().c_str()); - return ret; - } + Status ret = Initialize(); + if (ret != SUCCESS) { + GELOGE(FAILED, "[Check][State][%s] Offline inference not support online compile.", node->GetName().c_str()); + REPORT_INNER_ERROR("E19999", "[%s] Offline inference not support online compile.", node->GetName().c_str()); + return ret; } GE_CHECK_NOTNULL(node); diff --git a/ge/hybrid/node_executor/aicore/aicore_task_compiler.h b/ge/hybrid/node_executor/aicore/aicore_task_compiler.h index eecbe834..04976be3 100755 --- a/ge/hybrid/node_executor/aicore/aicore_task_compiler.h +++ b/ge/hybrid/node_executor/aicore/aicore_task_compiler.h @@ -34,9 +34,8 @@ class AiCoreTaskCompiler : public TaskCompiler { Status DoCompileOp(const NodePtr &node) const; Status DoGenerateTask(const Node &node, std::vector &tasks); OpsKernelInfoStorePtr aic_kernel_store_; - bool is_initialized_ = false; + atomic_bool is_initialized_ = false; static std::mutex mu_; - static std::mutex init_mu_; }; } // namespace hybrid } // namespace ge