[neurun] Add buildSubtensor() and objects() to AclMemoryManager (#7084)
author김용섭/On-Device Lab(SR)/Engineer/삼성전자 <yons.kim@samsung.com>
Wed, 4 Sep 2019 01:45:30 +0000 (10:45 +0900)
committer오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Wed, 4 Sep 2019 01:45:30 +0000 (10:45 +0900)
Add buildSubtensor() and objects() into AclMemoryManager to be used by AclTensorManager in the future
Apply buildSubtensor() into TemplTensorBuilder
Remove unnecessary namespace

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

index 65338c2..ef15a49 100644 (file)
@@ -40,13 +40,14 @@ namespace acl_cl
 {
 
 using MemoryManager =
-    ::neurun::backend::acl_common::AclMemoryManager<operand::CLTensor, operand::CLSubTensor,
-                                                    operand::Object>;
+    ::neurun::backend::acl_common::AclMemoryManager<operand::ICLTensor, operand::CLTensor,
+                                                    operand::CLSubTensor, operand::Object>;
 
 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>;
+    operand::ICLTensor, operand::CLTensor, operand::CLSubTensor, operand::Object,
+    ::arm_compute::MemoryManagerOnDemand, ::arm_compute::PoolManager,
+    ::arm_compute::BlobLifetimeManager, ::arm_compute::CLBufferAllocator,
+    ::arm_compute::CLMemoryGroup>;
 
 MemoryManager *createMemoryManager()
 {
index e40b3aa..006c28a 100644 (file)
@@ -46,10 +46,10 @@ namespace backend
 namespace acl_common
 {
 
-template <typename T_Tensor, typename T_SubTensor, typename T_Object, typename T_MemoryManager,
-          typename T_PoolManager, typename T_LifetimeManager, typename T_Allocator,
-          typename T_MemoryGroup>
-class AclLinearMemoryManager : public AclMemoryManager<T_Tensor, T_SubTensor, T_Object>
+template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object,
+          typename T_MemoryManager, typename T_PoolManager, typename T_LifetimeManager,
+          typename T_Allocator, typename T_MemoryGroup>
+class AclLinearMemoryManager : public AclMemoryManager<T_ITensor, T_Tensor, T_SubTensor, T_Object>
 {
 public:
   AclLinearMemoryManager()
index b7897f9..0358b49 100644 (file)
@@ -33,7 +33,7 @@ namespace backend
 namespace acl_common
 {
 
-template <typename T_Tensor, typename T_SubTensor, typename T_Object>
+template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename T_Object>
 class AclMemoryManager : public backend::IMemoryManager
 {
 public:
@@ -64,6 +64,8 @@ public:
 
   virtual void startLifetime(const model::OperandIndex &) {}
   virtual void finishLifetime(const model::OperandIndex &) {}
+
+  // TODO Remove this
   virtual std::shared_ptr<::arm_compute::IMemoryManager> internal_buffer_manager()
   {
     return nullptr;
@@ -76,6 +78,16 @@ public:
     _tensors[ind] = tensor;
   }
 
+  void buildSubtensor(std::shared_ptr<T_ITensor> parent_tensor,
+                      const model::OperandIndex &child_ind, const ::arm_compute::TensorShape &shape,
+                      const ::arm_compute::Coordinates &coordinates, size_t rank,
+                      bool extent_parent)
+  {
+    auto subtensor =
+        std::make_shared<T_SubTensor>(parent_tensor.get(), shape, coordinates, rank, extent_parent);
+    _subtensors[child_ind] = subtensor;
+  }
+
   std::shared_ptr<T_Object> wrapTensor(const model::OperandIndex &ind)
   {
     if (_objects.find(ind) != _objects.end())
@@ -99,6 +111,8 @@ public:
 
   model::OperandIndexMap<std::shared_ptr<T_SubTensor>> &subtensors(void) { return _subtensors; }
 
+  model::OperandIndexMap<std::shared_ptr<T_Object>> &objects(void) { return _objects; }
+
 private:
   model::OperandIndexMap<std::shared_ptr<T_Tensor>> _tensors;
   model::OperandIndexMap<std::shared_ptr<T_SubTensor>> _subtensors;
index 6d7d41c..19d6c3d 100644 (file)
@@ -44,7 +44,7 @@ template <typename T_ITensor, typename T_Tensor, typename T_SubTensor, typename
 class TemplTensorBuilder : public ITensorBuilder
 {
 public:
-  using T_AclMemoryManager = AclMemoryManager<T_Tensor, T_SubTensor, T_Object>;
+  using T_AclMemoryManager = AclMemoryManager<T_ITensor, T_Tensor, T_SubTensor, T_Object>;
 
   TemplTensorBuilder(T_AclMemoryManager *mem_mgr);
 
@@ -407,9 +407,8 @@ void TemplTensorBuilder<T_ITensor, T_Tensor, T_SubTensor, T_Object>::buildSubten
                                  _apply_dim_correction_map[current]);
       ::arm_compute::Coordinates coordinates =
           asTensorCoordinate(info.offset(), frontend_layout, backend_layout);
-      auto tensor = std::make_shared<T_SubTensor>(parent_tensor.get(), shape, coordinates,
-                                                  info.shape().rank(), true);
-      subtensors[current] = tensor;
+      _mem_mgr->buildSubtensor(parent_tensor, current, shape, coordinates, info.shape().rank(),
+                               true);
       stack.pop();
     }
   }
index b47cd66..ef7b60a 100644 (file)
@@ -40,11 +40,12 @@ namespace acl_neon
 {
 
 using MemoryManager =
-    ::neurun::backend::acl_common::AclMemoryManager<operand::NETensor, operand::NESubTensor,
+    ::neurun::backend::acl_common::AclMemoryManager<operand::INETensor, operand::NETensor,
+                                                    operand::NESubTensor,
                                                     ::neurun::backend::operand::Object>;
 
 using LinearMemoryManager = ::neurun::backend::acl_common::AclLinearMemoryManager<
-    operand::NETensor, operand::NESubTensor, ::neurun::backend::operand::Object,
+    operand::INETensor, operand::NETensor, operand::NESubTensor, ::neurun::backend::operand::Object,
     ::arm_compute::MemoryManagerOnDemand, ::arm_compute::PoolManager,
     ::arm_compute::OffsetLifetimeManager, ::arm_compute::Allocator, ::arm_compute::MemoryGroup>;