From 511347a7282b948bddfc071e9a8fa08e79da25b4 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Mon, 18 Sep 2017 18:33:07 +0100 Subject: COMPMID-485: Offset-based memory manager support. Adds support for offset-based memory mappings used from CPU system memory and SVM based allocations. Change-Id: Ibee6a3c02a61df9b11fe8878cfe40dc6fd9a4be0 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/88307 Tested-by: Kaizen Reviewed-by: Anthony Barbier --- src/runtime/BlobLifetimeManager.cpp | 65 ++----------------------------------- 1 file changed, 2 insertions(+), 63 deletions(-) (limited to 'src/runtime/BlobLifetimeManager.cpp') diff --git a/src/runtime/BlobLifetimeManager.cpp b/src/runtime/BlobLifetimeManager.cpp index 69292b9319..3ca5071d91 100644 --- a/src/runtime/BlobLifetimeManager.cpp +++ b/src/runtime/BlobLifetimeManager.cpp @@ -37,77 +37,16 @@ using namespace arm_compute; BlobLifetimeManager::BlobLifetimeManager() - : _active_group(nullptr), _active_elements(), _finalized_groups(), _blobs() + : _blobs() { } -void BlobLifetimeManager::register_group(IMemoryGroup *group) -{ - if(_active_group == nullptr) - { - ARM_COMPUTE_ERROR_ON(group == nullptr); - _active_group = group; - } -} - -void BlobLifetimeManager::start_lifetime(void *obj) -{ - ARM_COMPUTE_ERROR_ON(obj == nullptr); - ARM_COMPUTE_ERROR_ON_MSG(std::find_if(std::begin(_active_elements), std::end(_active_elements), [&obj](const Element & e) - { - return obj == e.id; - }) != std::end(_active_elements), - "Memory object is already registered!"); - - // Insert object in groups and mark its finalized state to false - _active_elements.emplace_back(obj); -} - -void BlobLifetimeManager::end_lifetime(void *obj, void **handle, size_t size) -{ - ARM_COMPUTE_ERROR_ON(obj == nullptr); - - // Find object - auto it = std::find_if(std::begin(_active_elements), std::end(_active_elements), [&obj](const Element & e) - { - return obj == e.id; - }); - ARM_COMPUTE_ERROR_ON(it == std::end(_active_elements)); - - // Update object fields and mark object as complete - it->handle = handle; - it->size = size; - it->status = true; - - // Check if all object are finalized and reset active group - if(are_all_finalized()) - { - // Update finalized groups - _finalized_groups[_active_group].insert(std::end(_finalized_groups[_active_group]), std::begin(_active_elements), std::end(_active_elements)); - - // Update blobs and group mappings - update_blobs_and_mappings(); - - // Reset state - _active_elements.clear(); - _active_group = nullptr; - } -} - std::unique_ptr BlobLifetimeManager::create_pool(IAllocator *allocator) { ARM_COMPUTE_ERROR_ON(allocator == nullptr); return support::cpp14::make_unique(allocator, _blobs); } -bool BlobLifetimeManager::are_all_finalized() const -{ - return !std::any_of(std::begin(_active_elements), std::end(_active_elements), [](const Element e) - { - return !e.status; - }); -} - MappingType BlobLifetimeManager::mapping_type() const { return MappingType::BLOBS; @@ -118,7 +57,7 @@ void BlobLifetimeManager::update_blobs_and_mappings() ARM_COMPUTE_ERROR_ON(!are_all_finalized()); ARM_COMPUTE_ERROR_ON(_active_group == nullptr); - // Sort active group requirements in descending order + // Sort active group requirements in descending order. std::sort(std::begin(_active_elements), std::end(_active_elements), [](const Element & a, const Element & b) { return a.size > b.size; -- cgit v1.2.1