From adf17187567de180e64ed4bf45c30853b9db0473 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EA=B9=80=EC=9A=A9=EC=84=AD/On-Device=20Lab=28SR=29/Enginee?= =?utf8?q?r/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Mon, 24 Jun 2019 14:42:02 +0900 Subject: [PATCH] [MemoryManager] Introduce createMemoryManager on each acl backend (#5468) This createMemoryManager function on each acl backend creates MemoryManager according to each executor's type and delivered to TensorBuilder's ctor. Signed-off-by: Yongseop Kim --- runtimes/neurun/backend/acl_cl/MemoryManager.h | 34 ++++++++++++++++++++++ .../neurun/backend/acl_common/TemplTensorBuilder.h | 11 +------ runtimes/neurun/backend/acl_neon/MemoryManager.h | 34 ++++++++++++++++++++++ 3 files changed, 69 insertions(+), 10 deletions(-) diff --git a/runtimes/neurun/backend/acl_cl/MemoryManager.h b/runtimes/neurun/backend/acl_cl/MemoryManager.h index 9a8bedd..875c157 100644 --- a/runtimes/neurun/backend/acl_cl/MemoryManager.h +++ b/runtimes/neurun/backend/acl_cl/MemoryManager.h @@ -17,11 +17,22 @@ #ifndef __NEURUN_BACKEND_ACL_CL_MEMORY_MANAGER_H__ #define __NEURUN_BACKEND_ACL_CL_MEMORY_MANAGER_H__ +#include +#include +#include +#include +#include + #include "acl_common/AclMemoryManager.h" +//#include "acl_common/AclLinearMemoryManager.h" + #include "operand/CLTensor.h" #include "operand/CLSubTensor.h" #include "operand/Object.h" +#include "util/config/ConfigManager.h" +#include "util/logging.h" + namespace neurun { namespace backend @@ -33,9 +44,32 @@ using MemoryManager = ::neurun::backend::acl_common::AclMemoryManager; +#if 1 using LinearMemoryManager = ::neurun::backend::acl_common::LinearAclMemoryManager; +#else +using LinearMemoryManager = ::neurun::backend::acl_common::AclLinearMemoryManager< + operand::CLTensor, operand::CLSubTensor, operand::Object, ::arm_compute::MemoryManagerOnDemand, + ::arm_compute::PoolManager, ::arm_compute::BlobLifetimeManager, + ::arm_compute::CLBufferAllocator, ::arm_compute::CLMemoryGroup>; +#endif + +MemoryManager *createMemoryManager() +{ + const std::string executor_str = + config::ConfigManager::instance().get(config::EXECUTOR); + if (executor_str == "Linear") + { + VERBOSE(acl_cl_createMemoryManager) << "AclMemoryManager as Linear" << std::endl; + return new LinearMemoryManager(); + } + else + { + VERBOSE(acl_cl_createMemoryManager) << "AclMemoryManager" << std::endl; + return new MemoryManager(); + } +} } // namespace acl_cl } // namespace backend diff --git a/runtimes/neurun/backend/acl_common/TemplTensorBuilder.h b/runtimes/neurun/backend/acl_common/TemplTensorBuilder.h index 3cf450d..b7a8e48 100644 --- a/runtimes/neurun/backend/acl_common/TemplTensorBuilder.h +++ b/runtimes/neurun/backend/acl_common/TemplTensorBuilder.h @@ -109,18 +109,9 @@ namespace acl_common template TemplTensorBuilder::TemplTensorBuilder() { + // TODO Replace this with createMemoryManager() at StageGenerator's ctor _mem_mgr = nnfw::cpp14::make_unique>(); assert(_mem_mgr); - -// TODO After LinearAclMemoryManager lands, apply below code -#if 0 - const std::string executor_str = - config::ConfigManager::instance().get(config::EXECUTOR); - if (executor_str == "Linear") - _mem_mgr = nnfw::cpp14::make_unique>(); - else - _mem_mgr = nnfw::cpp14::make_unique>(); -#endif } template diff --git a/runtimes/neurun/backend/acl_neon/MemoryManager.h b/runtimes/neurun/backend/acl_neon/MemoryManager.h index 72d1a9b..4006a5e 100644 --- a/runtimes/neurun/backend/acl_neon/MemoryManager.h +++ b/runtimes/neurun/backend/acl_neon/MemoryManager.h @@ -17,11 +17,22 @@ #ifndef __NEURUN_BACKEND_ACL_NEON_MEMORY_MANAGER_H__ #define __NEURUN_BACKEND_ACL_NEON_MEMORY_MANAGER_H__ +#include +#include +#include +#include +#include + #include "acl_common/AclMemoryManager.h" +//#include "acl_common/AclLinearMemoryManager.h" + #include "operand/NETensor.h" #include "operand/NESubTensor.h" #include +#include "util/config/ConfigManager.h" +#include "util/logging.h" + namespace neurun { namespace backend @@ -33,9 +44,32 @@ using MemoryManager = ::neurun::backend::acl_common::AclMemoryManager; +#if 1 using LinearMemoryManager = ::neurun::backend::acl_common::LinearAclMemoryManager; +#else +using LinearMemoryManager = ::neurun::backend::acl_common::AclLinearMemoryManager< + operand::NETensor, operand::NESubTensor, ::neurun::backend::operand::Object, + ::arm_compute::MemoryManagerOnDemand, ::arm_compute::PoolManager, + ::arm_compute::OffsetLifetimeManager, ::arm_compute::Allocator, ::arm_compute::MemoryGroup>; +#endif + +MemoryManager *createMemoryManager() +{ + const std::string executor_str = + config::ConfigManager::instance().get(config::EXECUTOR); + if (executor_str == "Linear") + { + VERBOSE(acl_neon_createMemoryManager) << "AclMemoryManager as Linear" << std::endl; + return new LinearMemoryManager(); + } + else + { + VERBOSE(acl_neon_createMemoryManager) << "AclMemoryManager" << std::endl; + return new MemoryManager(); + } +} } // namespace acl_neon } // namespace backend -- 2.7.4