From 555f1c2241d6fa8c84926a72a0c54e4158817df4 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Fri, 14 Dec 2018 17:11:20 +0000 Subject: COMPMID-1710: Account alignment for blob-base allocations Change-Id: I290d33e25a5966d25a91df39ebc01c28bfa31f78 Reviewed-on: https://review.mlplatform.org/402 Reviewed-by: Anthony Barbier Tested-by: Arm Jenkins --- src/runtime/ISimpleLifetimeManager.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/runtime/ISimpleLifetimeManager.cpp') 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 -- cgit v1.2.1