aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/ISimpleLifetimeManager.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2018-12-14 17:11:20 +0000
committerMichele Di Giorgio <michele.digiorgio@arm.com>2018-12-14 19:45:00 +0000
commit555f1c2241d6fa8c84926a72a0c54e4158817df4 (patch)
tree0ec5da469c28559d8c5df9848cfa3ada6e0646e8 /src/runtime/ISimpleLifetimeManager.cpp
parentb4af2c6738614850aaca3754904f0e8e3b17f0b2 (diff)
downloadComputeLibrary-555f1c2241d6fa8c84926a72a0c54e4158817df4.tar.gz
COMPMID-1710: Account alignment for blob-base allocations
Change-Id: I290d33e25a5966d25a91df39ebc01c28bfa31f78 Reviewed-on: https://review.mlplatform.org/402 Reviewed-by: Anthony Barbier <Anthony.barbier@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/runtime/ISimpleLifetimeManager.cpp')
-rw-r--r--src/runtime/ISimpleLifetimeManager.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/runtime/ISimpleLifetimeManager.cpp b/src/runtime/ISimpleLifetimeManager.cpp
index 7d928d6a7a..97c20d1882 100644
--- a/src/runtime/ISimpleLifetimeManager.cpp
+++ b/src/runtime/ISimpleLifetimeManager.cpp
@@ -59,7 +59,7 @@ void ISimpleLifetimeManager::start_lifetime(void *obj)
// Check if there is a free blob
if(_free_blobs.empty())
{
- _occupied_blobs.emplace_front(Blob{ obj, 0, { obj } });
+ _occupied_blobs.emplace_front(Blob{ obj, 0, 0, { obj } });
}
else
{
@@ -71,7 +71,7 @@ void ISimpleLifetimeManager::start_lifetime(void *obj)
_active_elements.insert(std::make_pair(obj, obj));
}
-void ISimpleLifetimeManager::end_lifetime(void *obj, IMemory &obj_memory, size_t size)
+void ISimpleLifetimeManager::end_lifetime(void *obj, IMemory &obj_memory, size_t size, size_t alignment)
{
ARM_COMPUTE_ERROR_ON(obj == nullptr);
@@ -80,10 +80,11 @@ void ISimpleLifetimeManager::end_lifetime(void *obj, IMemory &obj_memory, size_t
ARM_COMPUTE_ERROR_ON(active_object_it == std::end(_active_elements));
// Update object fields and mark object as complete
- Element &el = active_object_it->second;
- el.handle = &obj_memory;
- el.size = size;
- el.status = true;
+ Element &el = active_object_it->second;
+ el.handle = &obj_memory;
+ el.size = size;
+ el.alignment = alignment;
+ el.status = true;
// Find object in the occupied lists
auto occupied_blob_it = std::find_if(std::begin(_occupied_blobs), std::end(_occupied_blobs), [&obj](const Blob & b)
@@ -94,8 +95,9 @@ void ISimpleLifetimeManager::end_lifetime(void *obj, IMemory &obj_memory, size_t
// Update occupied blob and return as free
occupied_blob_it->bound_elements.insert(obj);
- occupied_blob_it->max_size = std::max(occupied_blob_it->max_size, size);
- occupied_blob_it->id = nullptr;
+ occupied_blob_it->max_size = std::max(occupied_blob_it->max_size, size);
+ occupied_blob_it->max_alignment = std::max(occupied_blob_it->max_alignment, alignment);
+ occupied_blob_it->id = nullptr;
_free_blobs.splice(std::begin(_free_blobs), _occupied_blobs, occupied_blob_it);
// Check if all object are finalized and reset active group