ArmNN
 21.02
BaseMemoryManager.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
9 
10 #if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
11 #include <arm_compute/runtime/MemoryGroup.h>
12 #endif
13 
14 #if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
15 #include <arm_compute/runtime/IAllocator.h>
16 #include <arm_compute/runtime/IMemoryGroup.h>
17 #include <arm_compute/runtime/MemoryManagerOnDemand.h>
18 #endif
19 
20 namespace armnn
21 {
22 
24 {
25 public:
26  enum class MemoryAffinity
27  {
28  Buffer,
29  Offset
30  };
31 
33  virtual ~BaseMemoryManager() { }
34 
35  void Acquire() override;
36  void Release() override;
37 
38 #if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
39  BaseMemoryManager(std::unique_ptr<arm_compute::IAllocator> alloc, MemoryAffinity memoryAffinity);
40 
41  std::shared_ptr<arm_compute::MemoryManagerOnDemand>& GetIntraLayerManager() { return m_IntraLayerMemoryMgr; }
42  std::shared_ptr<arm_compute::MemoryManagerOnDemand>& GetInterLayerManager() { return m_InterLayerMemoryMgr; }
43  std::shared_ptr<arm_compute::IMemoryGroup>& GetInterLayerMemoryGroup() { return m_InterLayerMemoryGroup; }
44 
45 protected:
46  std::unique_ptr<arm_compute::IAllocator> m_Allocator;
47  std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_IntraLayerMemoryMgr;
48  std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_InterLayerMemoryMgr;
49  std::shared_ptr<arm_compute::IMemoryGroup> m_InterLayerMemoryGroup;
50 
51  std::shared_ptr<arm_compute::MemoryManagerOnDemand> CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity);
52 
53  virtual std::shared_ptr<arm_compute::IMemoryGroup>
54  CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) = 0;
55 #endif
56 };
57 
58 #if defined(ARMCOMPUTENEON_ENABLED)
60 {
61 public:
63  virtual ~NeonMemoryManager() {}
64 
65  NeonMemoryManager(std::unique_ptr<arm_compute::IAllocator> alloc, MemoryAffinity memoryAffinity)
66  : BaseMemoryManager(std::move(alloc), memoryAffinity)
67  {
69  }
70 
71 protected:
72  std::shared_ptr<arm_compute::IMemoryGroup>
73  CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) override;
74 };
75 #endif
76 
77 #if defined(ARMCOMPUTECL_ENABLED)
79 {
80 public:
82  virtual ~ClMemoryManager() {}
83 
84  ClMemoryManager(std::unique_ptr<arm_compute::IAllocator> alloc)
85  : BaseMemoryManager(std::move(alloc), MemoryAffinity::Buffer)
86  {
88  }
89 
90 protected:
91  std::shared_ptr<arm_compute::IMemoryGroup>
92  CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) override;
93 };
94 #endif
95 
96 } //namespace armnn
std::shared_ptr< arm_compute::MemoryManagerOnDemand > CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity)
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_InterLayerMemoryMgr
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_IntraLayerMemoryMgr
ClMemoryManager(std::unique_ptr< arm_compute::IAllocator > alloc)
Copyright (c) 2021 ARM Limited and Contributors.
std::shared_ptr< arm_compute::MemoryManagerOnDemand > & GetInterLayerManager()
NeonMemoryManager(std::unique_ptr< arm_compute::IAllocator > alloc, MemoryAffinity memoryAffinity)
std::shared_ptr< arm_compute::IMemoryGroup > m_InterLayerMemoryGroup
std::shared_ptr< arm_compute::MemoryManagerOnDemand > & GetIntraLayerManager()
std::unique_ptr< arm_compute::IAllocator > m_Allocator
std::shared_ptr< arm_compute::IMemoryGroup > & GetInterLayerMemoryGroup()
virtual std::shared_ptr< arm_compute::IMemoryGroup > CreateMemoryGroup(const std::shared_ptr< arm_compute::MemoryManagerOnDemand > &memoryManager)=0