From d9e5b19c87906390ed87efdada3b096a62888bf4 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Tue, 19 Sep 2017 15:03:20 +0100 Subject: COMPMID-417: Fix in BlobMemoryPool and BlobLifetimeManager -Removes invalid error check as multiple handles can be applied to the same blob. -Calculate group mappings and update blobs using the active_elements instead of the finalized group to allow reusability of blobs of non-overlapping subgroups of the same group. Change-Id: I21eee7a47829f751280a7b8dc1e831fff1b0ef41 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/88279 Reviewed-by: Moritz Pflanzer Tested-by: Kaizen Reviewed-by: Pablo Tello --- arm_compute/runtime/BlobMemoryPool.h | 12 ++++++++++-- src/runtime/BlobLifetimeManager.cpp | 9 ++++----- src/runtime/BlobMemoryPool.cpp | 3 +-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/arm_compute/runtime/BlobMemoryPool.h b/arm_compute/runtime/BlobMemoryPool.h index f2be2dd8df..f703bf0b82 100644 --- a/arm_compute/runtime/BlobMemoryPool.h +++ b/arm_compute/runtime/BlobMemoryPool.h @@ -26,19 +26,27 @@ #include "arm_compute/runtime/IMemoryPool.h" -#include "arm_compute/runtime/IAllocator.h" #include "arm_compute/runtime/Types.h" #include +#include #include namespace arm_compute { +class IAllocator; + /** Blob memory pool */ class BlobMemoryPool : public IMemoryPool { public: - /** Default Constructor */ + /** Default Constructor + * + * @note allocator should outlive the memory pool + * + * @param[in] allocator Backing memory allocator + * @param[in] blob_sizes Sizes of the blobs to be allocated + */ BlobMemoryPool(IAllocator *allocator, std::vector blob_sizes); /** Default Destructor */ ~BlobMemoryPool(); diff --git a/src/runtime/BlobLifetimeManager.cpp b/src/runtime/BlobLifetimeManager.cpp index c60d8c14ef..69292b9319 100644 --- a/src/runtime/BlobLifetimeManager.cpp +++ b/src/runtime/BlobLifetimeManager.cpp @@ -118,14 +118,13 @@ void BlobLifetimeManager::update_blobs_and_mappings() ARM_COMPUTE_ERROR_ON(!are_all_finalized()); ARM_COMPUTE_ERROR_ON(_active_group == nullptr); - // Sort finalized group requirements in descending order - auto group = _finalized_groups[_active_group]; - std::sort(std::begin(group), std::end(group), [](const Element & a, const Element & b) + // 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; }); std::vector group_sizes; - std::transform(std::begin(group), std::end(group), std::back_inserter(group_sizes), [](const Element & e) + std::transform(std::begin(_active_elements), std::end(_active_elements), std::back_inserter(group_sizes), [](const Element & e) { return e.size; }); @@ -142,7 +141,7 @@ void BlobLifetimeManager::update_blobs_and_mappings() // Calculate group mappings auto &group_mappings = _active_group->mappings(); int blob_idx = 0; - for(auto &e : group) + for(auto &e : _active_elements) { group_mappings[e.handle] = blob_idx++; } diff --git a/src/runtime/BlobMemoryPool.cpp b/src/runtime/BlobMemoryPool.cpp index 6571c75fe7..29505e57fc 100644 --- a/src/runtime/BlobMemoryPool.cpp +++ b/src/runtime/BlobMemoryPool.cpp @@ -24,6 +24,7 @@ #include "arm_compute/runtime/BlobMemoryPool.h" #include "arm_compute/core/Error.h" +#include "arm_compute/runtime/IAllocator.h" #include "arm_compute/runtime/IMemoryPool.h" #include "arm_compute/runtime/Types.h" #include "support/ToolchainSupport.h" @@ -47,8 +48,6 @@ BlobMemoryPool::~BlobMemoryPool() void BlobMemoryPool::acquire(MemoryMappings &handles) { - ARM_COMPUTE_ERROR_ON(handles.size() > _blobs.size()); - // Set memory to handlers for(auto &handle : handles) { -- cgit v1.2.1