[MemoryManager] Apply createMemoryManager to each TensorBuilder (#5477)
author김용섭/On-Device Lab(SR)/Engineer/삼성전자 <yons.kim@samsung.com>
Mon, 24 Jun 2019 10:03:50 +0000 (19:03 +0900)
committer이춘석/On-Device Lab(SR)/Staff Engineer/삼성전자 <chunseok.lee@samsung.com>
Mon, 24 Jun 2019 10:03:50 +0000 (19:03 +0900)
Apply createMemoryManager to each TensorBuilder. However, until
TensorBuilders' notify{First|Last|UseIf APIs lands, do not use
  LinearMemoryManager.

Signed-off-by: Yongseop Kim <yons.kim@samsung.com>
runtimes/neurun/backend/acl_cl/Backend.h
runtimes/neurun/backend/acl_cl/MemoryManager.h
runtimes/neurun/backend/acl_common/TemplTensorBuilder.h
runtimes/neurun/backend/acl_neon/Backend.h
runtimes/neurun/backend/acl_neon/MemoryManager.h

index d3d0d4f..394a562 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "Config.h"
 #include "StageGenerator.h"
+#include "MemoryManager.h"
 
 namespace neurun
 {
@@ -37,7 +38,8 @@ public:
   Backend(const neurun::model::Operands &operand_ctx)
       : ::neurun::backend::Backend{
             std::make_shared<Config>(),
-            std::make_shared<StageGenerator>(operand_ctx, std::make_shared<TensorBuilder>())}
+            std::make_shared<StageGenerator>(
+                operand_ctx, std::make_shared<TensorBuilder>(createMemoryManager()))}
   {
     // DO NOTHING
   }
index 875c157..c53172d 100644 (file)
@@ -24,7 +24,7 @@
 #include <arm_compute/runtime/CL/CLMemoryGroup.h>
 
 #include "acl_common/AclMemoryManager.h"
-//#include "acl_common/AclLinearMemoryManager.h"
+#include "acl_common/AclLinearMemoryManager.h"
 
 #include "operand/CLTensor.h"
 #include "operand/CLSubTensor.h"
@@ -44,21 +44,20 @@ 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()
 {
+  return new MemoryManager();
+
+// TODO Enable this after TensorBuilders' notify{First|Last}UseIf lands
+#if 0
   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;
@@ -69,6 +68,7 @@ MemoryManager *createMemoryManager()
     VERBOSE(acl_cl_createMemoryManager) << "AclMemoryManager" << std::endl;
     return new MemoryManager();
   }
+#endif
 }
 
 } // namespace acl_cl
index 4f78a49..206f5b8 100644 (file)
@@ -37,7 +37,9 @@ template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename
 class TemplTensorBuilder : public ITensorBuilder
 {
 public:
-  TemplTensorBuilder();
+  using T_AclMemoryManager = AclMemoryManager<T_Tensor, T_SubTensor, T_Object>;
+
+  TemplTensorBuilder(T_AclMemoryManager *mem_mgr);
 
   /**
    * @brief     Register tensor information to allocate on ACL-CL backend
@@ -88,8 +90,7 @@ private:
   model::OperandIndexMap<compiler::SubTensorInfo> _subtensor_info_map;
   model::OperandIndexMap<bool> _apply_dim_correction_map;
   model::Layout _layout;
-
-  std::unique_ptr<AclMemoryManager<T_Tensor, T_SubTensor, T_Object>> _mem_mgr;
+  std::unique_ptr<T_AclMemoryManager> _mem_mgr;
 };
 
 } // namespace acl_common
@@ -111,10 +112,10 @@ 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()
+TemplTensorBuilder<T_ITensor, T_Tensor, T_SubTensor, T_Object>::TemplTensorBuilder(
+    T_AclMemoryManager *mem_mgr)
+    : _mem_mgr{mem_mgr}
 {
-  // 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);
 }
 
index 7376b7d..0e27d21 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "Config.h"
 #include "StageGenerator.h"
+#include "MemoryManager.h"
 
 namespace neurun
 {
@@ -37,7 +38,8 @@ public:
   Backend(const neurun::model::Operands &operand_ctx)
       : ::neurun::backend::Backend{
             std::make_shared<Config>(),
-            std::make_shared<StageGenerator>(operand_ctx, std::make_shared<TensorBuilder>())}
+            std::make_shared<StageGenerator>(
+                operand_ctx, std::make_shared<TensorBuilder>(createMemoryManager()))}
   {
     // DO NOTHING
   }
index 4006a5e..5745ab2 100644 (file)
@@ -24,7 +24,7 @@
 #include <arm_compute/runtime/MemoryGroup.h>
 
 #include "acl_common/AclMemoryManager.h"
-//#include "acl_common/AclLinearMemoryManager.h"
+#include "acl_common/AclLinearMemoryManager.h"
 
 #include "operand/NETensor.h"
 #include "operand/NESubTensor.h"
@@ -44,19 +44,17 @@ 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()
 {
+  return new MemoryManager();
+
+// TODO Enable this after TensorBuilders' notify{First|Last}UseIf lands
+#if 0
   const std::string executor_str =
       config::ConfigManager::instance().get<std::string>(config::EXECUTOR);
   if (executor_str == "Linear")
@@ -69,6 +67,7 @@ MemoryManager *createMemoryManager()
     VERBOSE(acl_neon_createMemoryManager) << "AclMemoryManager" << std::endl;
     return new MemoryManager();
   }
+#endif
 }
 
 } // namespace acl_neon