[MemoryManager] Introduce createMemoryManager on each acl backend (#5468)
author김용섭/On-Device Lab(SR)/Engineer/삼성전자 <yons.kim@samsung.com>
Mon, 24 Jun 2019 05:42:02 +0000 (14:42 +0900)
committer이춘석/On-Device Lab(SR)/Staff Engineer/삼성전자 <chunseok.lee@samsung.com>
Mon, 24 Jun 2019 05:42:02 +0000 (14:42 +0900)
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 <yons.kim@samsung.com>
runtimes/neurun/backend/acl_cl/MemoryManager.h
runtimes/neurun/backend/acl_common/TemplTensorBuilder.h
runtimes/neurun/backend/acl_neon/MemoryManager.h

index 9a8bedd..875c157 100644 (file)
 #ifndef __NEURUN_BACKEND_ACL_CL_MEMORY_MANAGER_H__
 #define __NEURUN_BACKEND_ACL_CL_MEMORY_MANAGER_H__
 
+#include <arm_compute/runtime/CL/CLBufferAllocator.h>
+#include <arm_compute/runtime/PoolManager.h>
+#include <arm_compute/runtime/BlobLifetimeManager.h>
+#include <arm_compute/runtime/MemoryManagerOnDemand.h>
+#include <arm_compute/runtime/CL/CLMemoryGroup.h>
+
 #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<operand::CLTensor, operand::CLSubTensor,
                                                     operand::Object>;
 
+#if 1
 using LinearMemoryManager =
     ::neurun::backend::acl_common::LinearAclMemoryManager<operand::CLTensor, operand::CLSubTensor,
                                                           operand::Object>;
+#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<std::string>(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
index 3cf450d..b7a8e48 100644 (file)
@@ -109,18 +109,9 @@ namespace acl_common
 template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object>
 TemplTensorBuilder<T_ITensor, T_Tensor, T_SubTensor, T_Object>::TemplTensorBuilder()
 {
+  // TODO Replace this with createMemoryManager() at StageGenerator's ctor
   _mem_mgr = nnfw::cpp14::make_unique<AclMemoryManager<T_Tensor, T_SubTensor, T_Object>>();
   assert(_mem_mgr);
-
-// TODO After LinearAclMemoryManager lands, apply below code
-#if 0
-  const std::string executor_str =
-      config::ConfigManager::instance().get<std::string>(config::EXECUTOR);
-  if (executor_str == "Linear")
-    _mem_mgr = nnfw::cpp14::make_unique<LinearAclMemoryManager<T_Tensor, T_SubTensor, T_Object>>();
-  else
-    _mem_mgr = nnfw::cpp14::make_unique<AclMemoryManager<T_Tensor, T_SubTensor, T_Object>>();
-#endif
 }
 
 template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object>
index 72d1a9b..4006a5e 100644 (file)
 #ifndef __NEURUN_BACKEND_ACL_NEON_MEMORY_MANAGER_H__
 #define __NEURUN_BACKEND_ACL_NEON_MEMORY_MANAGER_H__
 
+#include <arm_compute/runtime/Allocator.h>
+#include <arm_compute/runtime/PoolManager.h>
+#include <arm_compute/runtime/OffsetLifetimeManager.h>
+#include <arm_compute/runtime/MemoryManagerOnDemand.h>
+#include <arm_compute/runtime/MemoryGroup.h>
+
 #include "acl_common/AclMemoryManager.h"
+//#include "acl_common/AclLinearMemoryManager.h"
+
 #include "operand/NETensor.h"
 #include "operand/NESubTensor.h"
 #include <backend/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<operand::NETensor, operand::NESubTensor,
                                                     ::neurun::backend::operand::Object>;
 
+#if 1
 using LinearMemoryManager =
     ::neurun::backend::acl_common::LinearAclMemoryManager<operand::NETensor, operand::NESubTensor,
                                                           ::neurun::backend::operand::Object>;
+#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<std::string>(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