ArmNN
 22.11
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::shared_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::shared_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 27 of file BaseMemoryManager.hpp.

Member Enumeration Documentation

◆ MemoryAffinity

enum MemoryAffinity
strong
Enumerator
Buffer 
Offset 

Definition at line 30 of file BaseMemoryManager.hpp.

31  {
32  Buffer,
33  Offset
34  };
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 36 of file BaseMemoryManager.hpp.

Referenced by BaseMemoryManager::~BaseMemoryManager().

36 { }

◆ ~BaseMemoryManager()

◆ BaseMemoryManager() [2/2]

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

Definition at line 18 of file BaseMemoryManager.cpp.

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

20 {
21  ARMNN_ASSERT(alloc);
22  m_Allocator = std::move(alloc);
23 
26 }
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
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
std::shared_ptr< arm_compute::IAllocator > m_Allocator

Member Function Documentation

◆ Acquire()

void Acquire ( )
overridevirtual

Implements IMemoryManager.

Definition at line 48 of file BaseMemoryManager.cpp.

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

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

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

◆ CreateArmComputeMemoryManager()

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

Definition at line 29 of file BaseMemoryManager.cpp.

References BaseMemoryManager::Buffer.

Referenced by BaseMemoryManager::BaseMemoryManager().

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

◆ 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 46 of file BaseMemoryManager.hpp.

References BaseMemoryManager::m_InterLayerMemoryMgr.

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

◆ GetInterLayerMemoryGroup()

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

Definition at line 47 of file BaseMemoryManager.hpp.

References BaseMemoryManager::m_InterLayerMemoryGroup.

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

◆ GetIntraLayerManager()

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

Definition at line 45 of file BaseMemoryManager.hpp.

References BaseMemoryManager::m_IntraLayerMemoryMgr.

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

◆ Release()

void Release ( )
overridevirtual

Implements IMemoryManager.

Definition at line 65 of file BaseMemoryManager.cpp.

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

Referenced by BaseMemoryManager::~BaseMemoryManager().

66 {
67  // Release inter-layer memory group. NOTE: This has to come before releasing the pools
69  m_InterLayerMemoryGroup->release();
70 
71  // Release memory pools managed by intra-layer memory manager
73  m_IntraLayerMemoryMgr->clear();
74 
75  // Release memory pools managed by inter-layer memory manager
77  m_InterLayerMemoryMgr->clear();
78 }
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_InterLayerMemoryMgr
std::shared_ptr< arm_compute::MemoryManagerOnDemand > m_IntraLayerMemoryMgr
std::shared_ptr< arm_compute::IMemoryGroup > m_InterLayerMemoryGroup
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14

Member Data Documentation

◆ m_Allocator

std::shared_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: