Compute Library
 21.11
ISimpleLifetimeManager Class Referenceabstract

Abstract class of the simple lifetime manager interface. More...

#include <ISimpleLifetimeManager.h>

Collaboration diagram for ISimpleLifetimeManager:
[legend]

Public Member Functions

 ISimpleLifetimeManager ()
 Constructor. More...
 
 ISimpleLifetimeManager (const ISimpleLifetimeManager &)=delete
 Prevent instances of this class to be copy constructed. More...
 
ISimpleLifetimeManageroperator= (const ISimpleLifetimeManager &)=delete
 Prevent instances of this class to be copied. More...
 
 ISimpleLifetimeManager (ISimpleLifetimeManager &&)=default
 Allow instances of this class to be move constructed. More...
 
ISimpleLifetimeManageroperator= (ISimpleLifetimeManager &&)=default
 Allow instances of this class to be moved. More...
 
void register_group (IMemoryGroup *group) override
 Registers a group to the lifetime manager and assigns a group id. More...
 
bool release_group (IMemoryGroup *group) override
 Unbound and release elements associated with a group. More...
 
void start_lifetime (void *obj) override
 Registers and starts lifetime of an object. More...
 
void end_lifetime (void *obj, IMemory &obj_memory, size_t size, size_t alignment) override
 Ends lifetime of an object. More...
 
bool are_all_finalized () const override
 Checks if the lifetime of the registered object is complete. More...
 
- Public Member Functions inherited from ILifetimeManager
virtual ~ILifetimeManager ()=default
 Virtual Destructor. More...
 
virtual std::unique_ptr< IMemoryPoolcreate_pool (IAllocator *allocator)=0
 Creates a memory pool depending on the memory requirements. More...
 
virtual MappingType mapping_type () const =0
 Returns the type of mappings that the lifetime manager returns. More...
 

Detailed Description

Abstract class of the simple lifetime manager interface.

Definition at line 44 of file ISimpleLifetimeManager.h.

Constructor & Destructor Documentation

◆ ISimpleLifetimeManager() [1/3]

Constructor.

Definition at line 39 of file ISimpleLifetimeManager.cpp.

40  : _active_group(nullptr), _active_elements(), _free_blobs(), _occupied_blobs(), _finalized_groups()
41 {
42 }

◆ ISimpleLifetimeManager() [2/3]

Prevent instances of this class to be copy constructed.

◆ ISimpleLifetimeManager() [3/3]

Allow instances of this class to be move constructed.

Member Function Documentation

◆ are_all_finalized()

bool are_all_finalized ( ) const
overridevirtual

Checks if the lifetime of the registered object is complete.

Returns
True if all object lifetimes are finalized else false.

Implements ILifetimeManager.

Definition at line 134 of file ISimpleLifetimeManager.cpp.

References arm_compute::mlgo::parser::end().

Referenced by ISimpleLifetimeManager::end_lifetime(), OffsetLifetimeManager::mapping_type(), and BlobLifetimeManager::mapping_type().

135 {
136  return !std::any_of(std::begin(_active_elements), std::end(_active_elements), [](const std::pair<void *, Element> &e)
137  {
138  return !e.second.status;
139  });
140 }
void end(TokenStream &in, bool &valid)
Definition: MLGOParser.cpp:290

◆ end_lifetime()

void end_lifetime ( void *  obj,
IMemory obj_memory,
size_t  size,
size_t  alignment 
)
overridevirtual

Ends lifetime of an object.

Parameters
[in]objObject
[in]obj_memoryObject memory
[in]sizeSize of the given object at given time
[in]alignmentAlignment requirements for the object

Implements ILifetimeManager.

Definition at line 87 of file ISimpleLifetimeManager.cpp.

References ISimpleLifetimeManager::are_all_finalized(), ARM_COMPUTE_ERROR_ON, arm_compute::test::validation::b, and arm_compute::mlgo::parser::end().

88 {
89  ARM_COMPUTE_ERROR_ON(obj == nullptr);
90 
91  // Find object
92  auto active_object_it = _active_elements.find(obj);
93  ARM_COMPUTE_ERROR_ON(active_object_it == std::end(_active_elements));
94 
95  // Update object fields and mark object as complete
96  Element &el = active_object_it->second;
97  el.handle = &obj_memory;
98  el.size = size;
99  el.alignment = alignment;
100  el.status = true;
101 
102  // Find object in the occupied lists
103  auto occupied_blob_it = std::find_if(std::begin(_occupied_blobs), std::end(_occupied_blobs), [&obj](const Blob & b)
104  {
105  return obj == b.id;
106  });
107  ARM_COMPUTE_ERROR_ON(occupied_blob_it == std::end(_occupied_blobs));
108 
109  // Update occupied blob and return as free
110  occupied_blob_it->bound_elements.insert(obj);
111  occupied_blob_it->max_size = std::max(occupied_blob_it->max_size, size);
112  occupied_blob_it->max_alignment = std::max(occupied_blob_it->max_alignment, alignment);
113  occupied_blob_it->id = nullptr;
114  _free_blobs.splice(std::begin(_free_blobs), _occupied_blobs, occupied_blob_it);
115 
116  // Check if all objects are finalized and reset active group
117  if(are_all_finalized())
118  {
119  ARM_COMPUTE_ERROR_ON(!_occupied_blobs.empty());
120 
121  // Update blobs and group mappings
122  update_blobs_and_mappings();
123 
124  // Update finalized groups
125  _finalized_groups[_active_group].insert(std::begin(_active_elements), std::end(_active_elements));
126 
127  // Reset state
128  _active_elements.clear();
129  _active_group = nullptr;
130  _free_blobs.clear();
131  }
132 }
SimpleTensor< float > b
Definition: DFT.cpp:157
bool are_all_finalized() const override
Checks if the lifetime of the registered object is complete.
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Definition: Error.h:466
void end(TokenStream &in, bool &valid)
Definition: MLGOParser.cpp:290

◆ operator=() [1/2]

ISimpleLifetimeManager& operator= ( const ISimpleLifetimeManager )
delete

Prevent instances of this class to be copied.

◆ operator=() [2/2]

ISimpleLifetimeManager& operator= ( ISimpleLifetimeManager &&  )
default

Allow instances of this class to be moved.

◆ register_group()

void register_group ( IMemoryGroup group)
overridevirtual

Registers a group to the lifetime manager and assigns a group id.

Parameters
[in]groupThe group id of the group

Implements ILifetimeManager.

Definition at line 44 of file ISimpleLifetimeManager.cpp.

References ARM_COMPUTE_ERROR_ON.

45 {
46  if(_active_group == nullptr)
47  {
48  ARM_COMPUTE_ERROR_ON(group == nullptr);
49  _active_group = group;
50  }
51 }
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Definition: Error.h:466

◆ release_group()

bool release_group ( IMemoryGroup group)
overridevirtual

Unbound and release elements associated with a group.

Parameters
[in]groupGroup to unbound its elements
Returns
True if group was registered and released else false.

Implements ILifetimeManager.

Definition at line 53 of file ISimpleLifetimeManager.cpp.

References IMemoryGroup::mappings().

54 {
55  if(group == nullptr)
56  {
57  return false;
58  }
59  const bool status = bool(_finalized_groups.erase(group));
60  if(status)
61  {
62  group->mappings().clear();
63  }
64  return status;
65 }

◆ start_lifetime()

void start_lifetime ( void *  obj)
overridevirtual

Registers and starts lifetime of an object.

Parameters
[in]objObject to register

Implements ILifetimeManager.

Definition at line 67 of file ISimpleLifetimeManager.cpp.

References ARM_COMPUTE_ERROR_ON, ARM_COMPUTE_ERROR_ON_MSG, and arm_compute::mlgo::parser::end().

68 {
69  ARM_COMPUTE_ERROR_ON(obj == nullptr);
70  ARM_COMPUTE_ERROR_ON_MSG(_active_elements.find(obj) != std::end(_active_elements), "Memory object is already registered!");
71 
72  // Check if there is a free blob
73  if(_free_blobs.empty())
74  {
75  _occupied_blobs.emplace_front(Blob{ obj, 0, 0, { obj } });
76  }
77  else
78  {
79  _occupied_blobs.splice(std::begin(_occupied_blobs), _free_blobs, std::begin(_free_blobs));
80  _occupied_blobs.front().id = obj;
81  }
82 
83  // Insert object in groups and mark its finalized state to false
84  _active_elements.insert(std::make_pair(obj, obj));
85 }
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Definition: Error.h:466
#define ARM_COMPUTE_ERROR_ON_MSG(cond, msg)
Definition: Error.h:456
void end(TokenStream &in, bool &valid)
Definition: MLGOParser.cpp:290

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