ArmNN
 20.02
BaseMemoryManager Class Referenceabstract

#include <BaseMemoryManager.hpp>

Inheritance diagram for BaseMemoryManager:
IMemoryManager ClMemoryManager NeonMemoryManager

Public Types

enum  MemoryAffinity { Buffer, Offset }
 

Public Member Functions

 BaseMemoryManager ()
 
virtual ~BaseMemoryManager ()
 
void Acquire () override
 
void Release () override
 
 BaseMemoryManager (std::unique_ptr< arm_compute::IAllocator > alloc, MemoryAffinity memoryAffinity)
 
std::shared_ptr< arm_compute::MemoryManagerOnDemand > & GetIntraLayerManager ()
 
std::shared_ptr< arm_compute::MemoryManagerOnDemand > & GetInterLayerManager ()
 
std::shared_ptr< arm_compute::IMemoryGroup > & GetInterLayerMemoryGroup ()
 
- Public Member Functions inherited from IMemoryManager
virtual ~IMemoryManager ()
 

Protected Member Functions

std::shared_ptr< arm_compute::MemoryManagerOnDemand > CreateArmComputeMemoryManager (MemoryAffinity memoryAffinity)
 
virtual std::shared_ptr< arm_compute::IMemoryGroup > CreateMemoryGroup (const std::shared_ptr< arm_compute::MemoryManagerOnDemand > &memoryManager)=0
 
- Protected Member Functions inherited from IMemoryManager
 IMemoryManager ()
 

Protected Attributes

std::unique_ptr< arm_compute::IAllocator > m_Allocator
 
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_IntraLayerMemoryMgr
 
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_InterLayerMemoryMgr
 
std::shared_ptr< arm_compute::IMemoryGroup > m_InterLayerMemoryGroup
 

Detailed Description

Definition at line 23 of file BaseMemoryManager.hpp.

Member Enumeration Documentation

◆ MemoryAffinity

enum MemoryAffinity
strong
Enumerator
Buffer 
Offset 

Definition at line 26 of file BaseMemoryManager.hpp.

27  {
28  Buffer,
29  Offset
30  };
unsigned int Offset(const TensorShape &shape, unsigned int batch, unsigned int height, unsigned int width, unsigned int channels, const DataLayoutIndexed &dataLayout)

Constructor & Destructor Documentation

◆ BaseMemoryManager() [1/2]

BaseMemoryManager ( )
inline

Definition at line 32 of file BaseMemoryManager.hpp.

Referenced by BaseMemoryManager::~BaseMemoryManager().

32 { }

◆ ~BaseMemoryManager()

◆ BaseMemoryManager() [2/2]

BaseMemoryManager ( std::unique_ptr< arm_compute::IAllocator >  alloc,
MemoryAffinity  memoryAffinity 
)

Definition at line 19 of file BaseMemoryManager.cpp.

References BaseMemoryManager::CreateArmComputeMemoryManager(), BaseMemoryManager::m_Allocator, BaseMemoryManager::m_InterLayerMemoryMgr, and BaseMemoryManager::m_IntraLayerMemoryMgr.

21 {
22  BOOST_ASSERT(alloc);
23  m_Allocator = std::move(alloc);
24 
27 }
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
std::unique_ptr< arm_compute::IAllocator > m_Allocator

Member Function Documentation

◆ Acquire()

void Acquire ( )
overridevirtual

Implements IMemoryManager.

Definition at line 49 of file BaseMemoryManager.cpp.

References BaseMemoryManager::m_Allocator, BaseMemoryManager::m_InterLayerMemoryGroup, BaseMemoryManager::m_InterLayerMemoryMgr, and BaseMemoryManager::m_IntraLayerMemoryMgr.

Referenced by BaseMemoryManager::Release(), and BaseMemoryManager::~BaseMemoryManager().

50 {
51  static const size_t s_NumPools = 1;
52 
53  // Allocate memory pools for intra-layer memory manager
54  BOOST_ASSERT(m_IntraLayerMemoryMgr);
55  m_IntraLayerMemoryMgr->populate(*m_Allocator, s_NumPools);
56 
57  // Allocate memory pools for inter-layer memory manager
58  BOOST_ASSERT(m_InterLayerMemoryMgr);
59  m_InterLayerMemoryMgr->populate(*m_Allocator, s_NumPools);
60 
61  // Acquire inter-layer memory group. NOTE: This has to come after allocating the pools
62  BOOST_ASSERT(m_InterLayerMemoryGroup);
63  m_InterLayerMemoryGroup->acquire();
64 }
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_InterLayerMemoryMgr
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_IntraLayerMemoryMgr
std::shared_ptr< arm_compute::IMemoryGroup > m_InterLayerMemoryGroup
std::unique_ptr< arm_compute::IAllocator > m_Allocator

◆ CreateArmComputeMemoryManager()

std::shared_ptr< arm_compute::MemoryManagerOnDemand > CreateArmComputeMemoryManager ( MemoryAffinity  memoryAffinity)
protected

Definition at line 30 of file BaseMemoryManager.cpp.

References BaseMemoryManager::Buffer.

Referenced by BaseMemoryManager::BaseMemoryManager().

31 {
32  std::shared_ptr<arm_compute::ILifetimeManager> lifetimeManager = nullptr;
33 
34  if (memoryAffinity == MemoryAffinity::Buffer)
35  {
36  lifetimeManager = std::make_shared<arm_compute::BlobLifetimeManager>();
37  }
38  else
39  {
40  lifetimeManager = std::make_shared<arm_compute::OffsetLifetimeManager>();
41  }
42 
43  auto poolManager = std::make_shared<arm_compute::PoolManager>();
44  auto memoryManager = std::make_shared<arm_compute::MemoryManagerOnDemand>(lifetimeManager, poolManager);
45 
46  return memoryManager;
47 }

◆ CreateMemoryGroup()

virtual std::shared_ptr<arm_compute::IMemoryGroup> CreateMemoryGroup ( const std::shared_ptr< arm_compute::MemoryManagerOnDemand > &  memoryManager)
protectedpure virtual

◆ GetInterLayerManager()

std::shared_ptr<arm_compute::MemoryManagerOnDemand>& GetInterLayerManager ( )
inline

Definition at line 42 of file BaseMemoryManager.hpp.

References BaseMemoryManager::m_InterLayerMemoryMgr.

42 { return m_InterLayerMemoryMgr; }
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_InterLayerMemoryMgr

◆ GetInterLayerMemoryGroup()

std::shared_ptr<arm_compute::IMemoryGroup>& GetInterLayerMemoryGroup ( )
inline

Definition at line 43 of file BaseMemoryManager.hpp.

References BaseMemoryManager::m_InterLayerMemoryGroup.

43 { return m_InterLayerMemoryGroup; }
std::shared_ptr< arm_compute::IMemoryGroup > m_InterLayerMemoryGroup

◆ GetIntraLayerManager()

std::shared_ptr<arm_compute::MemoryManagerOnDemand>& GetIntraLayerManager ( )
inline

Definition at line 41 of file BaseMemoryManager.hpp.

References BaseMemoryManager::m_IntraLayerMemoryMgr.

41 { return m_IntraLayerMemoryMgr; }
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_IntraLayerMemoryMgr

◆ Release()

void Release ( )
overridevirtual

Implements IMemoryManager.

Definition at line 66 of file BaseMemoryManager.cpp.

References BaseMemoryManager::Acquire(), BaseMemoryManager::m_InterLayerMemoryGroup, BaseMemoryManager::m_InterLayerMemoryMgr, and BaseMemoryManager::m_IntraLayerMemoryMgr.

Referenced by BaseMemoryManager::~BaseMemoryManager().

67 {
68  // Release inter-layer memory group. NOTE: This has to come before releasing the pools
69  BOOST_ASSERT(m_InterLayerMemoryGroup);
70  m_InterLayerMemoryGroup->release();
71 
72  // Release memory pools managed by intra-layer memory manager
73  BOOST_ASSERT(m_IntraLayerMemoryMgr);
74  m_IntraLayerMemoryMgr->clear();
75 
76  // Release memory pools managed by inter-layer memory manager
77  BOOST_ASSERT(m_InterLayerMemoryMgr);
78  m_InterLayerMemoryMgr->clear();
79 }
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_InterLayerMemoryMgr
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_IntraLayerMemoryMgr
std::shared_ptr< arm_compute::IMemoryGroup > m_InterLayerMemoryGroup

Member Data Documentation

◆ m_Allocator

std::unique_ptr<arm_compute::IAllocator> m_Allocator
protected

◆ m_InterLayerMemoryGroup

std::shared_ptr<arm_compute::IMemoryGroup> m_InterLayerMemoryGroup
protected

◆ m_InterLayerMemoryMgr

◆ m_IntraLayerMemoryMgr

std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_IntraLayerMemoryMgr
protected

The documentation for this class was generated from the following files: