diff --git a/mindspore/ccsrc/backend/session/session_basic.cc b/mindspore/ccsrc/backend/session/session_basic.cc index c9a8cefe32..b567d41f75 100644 --- a/mindspore/ccsrc/backend/session/session_basic.cc +++ b/mindspore/ccsrc/backend/session/session_basic.cc @@ -312,7 +312,7 @@ void SessionBasic::InitInternalOutputParameter(const AnfNodePtr &out_node, const MS_LOG(INFO) << "No kernel info"; return; } - if (!AnfAlgo::OutputAddrExist(ref_real_node, ref_real_node_index)) { + if (!opt::IsNopNode(ref_real_node) && !AnfAlgo::OutputAddrExist(ref_real_node, ref_real_node_index)) { MS_LOG(INFO) << "No kernel address"; return; } diff --git a/mindspore/ccsrc/runtime/device/cpu/cpu_kernel_runtime.cc b/mindspore/ccsrc/runtime/device/cpu/cpu_kernel_runtime.cc index 2ab1c90fd8..5af81eadbf 100644 --- a/mindspore/ccsrc/runtime/device/cpu/cpu_kernel_runtime.cc +++ b/mindspore/ccsrc/runtime/device/cpu/cpu_kernel_runtime.cc @@ -40,8 +40,7 @@ void CPUKernelRuntime::AssignKernelAddress(session::KernelGraph *kernel_graph) { AssignValueNodeAddress(kernel_graph); AssignInputNodeAddress(kernel_graph); AssignKernelOutputAddress(kernel_graph); - resource_manager_.MemPlan(kernel_graph); - resource_manager_.MemMalloc(kernel_graph); + resource_manager_.AssignMemory(kernel_graph); } void CPUKernelRuntime::AssignValueNodeAddress(session::KernelGraph *kernel_graph) { diff --git a/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.cc b/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.cc index c607260ab3..f8917893f8 100644 --- a/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.cc +++ b/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.cc @@ -34,11 +34,13 @@ void CPUResourceManager::MemFree() { dynamic_mem_.clear(); } -void CPUResourceManager::MemPlan(const session::KernelGraph *graph) { - mem_plan_.MemPlan(graph); - size_t graph_mem_size = mem_plan_.GetGraphMemSize(graph); +void CPUResourceManager::AssignMemory(const session::KernelGraph *graph) { + size_t graph_mem_size = mem_plan_.MemPlan(graph); if (graph_mem_size > mem_size_) { - MemFree(); + if (mem_size_ > 0) { + dynamic_mem_[mem_ptr_] = mem_size_; + mem_size_ = 0; + } mem_ptr_ = reinterpret_cast(malloc(graph_mem_size)); if (mem_ptr_ != nullptr) { mem_size_ = graph_mem_size; @@ -48,9 +50,6 @@ void CPUResourceManager::MemPlan(const session::KernelGraph *graph) { dynamic_malloc_ = true; } } -} - -void CPUResourceManager::MemMalloc(const session::KernelGraph *graph) { if (dynamic_malloc_) { return; } diff --git a/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.h b/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.h index 4142033fc0..5e476cac69 100644 --- a/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.h +++ b/mindspore/ccsrc/runtime/device/cpu/cpu_resource_manager.h @@ -17,7 +17,7 @@ #define MINDSPORE_CCSRC_RUNTIME_DEVICE_CPU_CPU_RESOURCE_MANAGER_H_ #include -#include +#include #include "backend/session/kernel_graph.h" #include "backend/session/session_basic.h" #include "runtime/device/device_address.h" @@ -30,8 +30,7 @@ class CPUResourceManager { CPUResourceManager() = default; ~CPUResourceManager(); - void MemPlan(const session::KernelGraph *graph); - void MemMalloc(const session::KernelGraph *graph); + void AssignMemory(const session::KernelGraph *graph); void IncreaseAddressRefCount(const session::KernelGraph *graph); void DecreaseAddressRefCount(const AnfNodePtr &kernel); void *MemMalloc(size_t mem_size); @@ -46,7 +45,7 @@ class CPUResourceManager { size_t mem_size_{0}; uint8_t *mem_ptr_{nullptr}; bool dynamic_malloc_{false}; - std::unordered_map dynamic_mem_; + std::map dynamic_mem_; }; } // namespace cpu } // namespace device diff --git a/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.cc b/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.cc index 7596817fea..78c63bac81 100644 --- a/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.cc +++ b/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.cc @@ -19,7 +19,7 @@ namespace mindspore { namespace device { namespace cpu { -void CPUSimpleMemPlan::MemPlan(const session::KernelGraph *graph) { +size_t CPUSimpleMemPlan::MemPlan(const session::KernelGraph *graph) { MS_EXCEPTION_IF_NULL(graph); size_t total_mem_size = 32; auto kernels = graph->execution_order(); @@ -58,15 +58,8 @@ void CPUSimpleMemPlan::MemPlan(const session::KernelGraph *graph) { } } } - graph_mem_size_[graph] = total_mem_size; -} -size_t CPUSimpleMemPlan::GetGraphMemSize(const session::KernelGraph *graph) const { - auto iter = graph_mem_size_.find(graph); - if (iter != graph_mem_size_.end()) { - return iter->second; - } - return 0; + return total_mem_size; } void CPUSimpleMemPlan::MemAssign(const session::KernelGraph *graph, uint8_t *base_ptr) { diff --git a/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.h b/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.h index 8dbd9c8553..8fce841807 100644 --- a/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.h +++ b/mindspore/ccsrc/runtime/device/cpu/cpu_simple_mem_plan.h @@ -17,7 +17,6 @@ #define MINDSPORE_CCSRC_RUNTIME_DEVICE_CPU_CPU_SIMPLE_MEM_PLAN_H_ #include -#include #include "backend/session/kernel_graph.h" #include "runtime/device/device_address.h" @@ -29,12 +28,8 @@ class CPUSimpleMemPlan { CPUSimpleMemPlan() = default; ~CPUSimpleMemPlan() = default; - void MemPlan(const session::KernelGraph *graph); + size_t MemPlan(const session::KernelGraph *graph); void MemAssign(const session::KernelGraph *graph, uint8_t *base_ptr); - size_t GetGraphMemSize(const session::KernelGraph *graph) const; - - private: - std::unordered_map graph_mem_size_; }; } // namespace cpu } // namespace device diff --git a/mindspore/core/ir/anf.cc b/mindspore/core/ir/anf.cc index ab5e96be2f..1d31936cfb 100644 --- a/mindspore/core/ir/anf.cc +++ b/mindspore/core/ir/anf.cc @@ -270,7 +270,7 @@ std::string GetCNodeTarget(const AnfNodePtr &node) { } return target; } - if (IsPrimitive(node, prim::kPrimMakeTuple)) { + if (IsPrimitiveCNode(node, prim::kPrimMakeTuple)) { return GetMaketupleNodeTarget(cnode); } return default_target;