1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2021 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #include "MemoryManager.hpp" 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp> 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker namespace armnn 11*89c4ff92SAndroid Build Coastguard Worker { 12*89c4ff92SAndroid Build Coastguard Worker StoreMemToAllocate(std::vector<BufferStorage> bufferStorageVector,std::shared_ptr<ICustomAllocator> customAllocator,const size_t typeAlignment)13*89c4ff92SAndroid Build Coastguard Workervoid MemoryManager::StoreMemToAllocate(std::vector<BufferStorage> bufferStorageVector, 14*89c4ff92SAndroid Build Coastguard Worker std::shared_ptr<ICustomAllocator> customAllocator, 15*89c4ff92SAndroid Build Coastguard Worker const size_t typeAlignment) 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(typeAlignment); 18*89c4ff92SAndroid Build Coastguard Worker m_AllocatorBufferStoragePairVector.emplace_back(std::make_pair<Allocator, std::vector<BufferStorage>>( 19*89c4ff92SAndroid Build Coastguard Worker Allocator{customAllocator}, 20*89c4ff92SAndroid Build Coastguard Worker std::move(bufferStorageVector))); 21*89c4ff92SAndroid Build Coastguard Worker } 22*89c4ff92SAndroid Build Coastguard Worker Allocate()23*89c4ff92SAndroid Build Coastguard Workervoid MemoryManager::Allocate() 24*89c4ff92SAndroid Build Coastguard Worker { 25*89c4ff92SAndroid Build Coastguard Worker for (auto& m_AllocatorBufferStoragePair : m_AllocatorBufferStoragePairVector) 26*89c4ff92SAndroid Build Coastguard Worker { 27*89c4ff92SAndroid Build Coastguard Worker auto& allocator = m_AllocatorBufferStoragePair.first; 28*89c4ff92SAndroid Build Coastguard Worker for (auto&& bufferStorage : m_AllocatorBufferStoragePair.second) 29*89c4ff92SAndroid Build Coastguard Worker { 30*89c4ff92SAndroid Build Coastguard Worker bufferStorage.m_Buffer = allocator.m_CustomAllocator->allocate(bufferStorage.m_BufferSize, 0); 31*89c4ff92SAndroid Build Coastguard Worker 32*89c4ff92SAndroid Build Coastguard Worker for (auto tensorMemory : bufferStorage.m_TensorMemoryVector) 33*89c4ff92SAndroid Build Coastguard Worker { 34*89c4ff92SAndroid Build Coastguard Worker tensorMemory->m_Data = allocator.m_CustomAllocator->GetMemoryRegionAtOffset(bufferStorage.m_Buffer, 35*89c4ff92SAndroid Build Coastguard Worker tensorMemory->m_Offset); 36*89c4ff92SAndroid Build Coastguard Worker } 37*89c4ff92SAndroid Build Coastguard Worker } 38*89c4ff92SAndroid Build Coastguard Worker } 39*89c4ff92SAndroid Build Coastguard Worker } 40*89c4ff92SAndroid Build Coastguard Worker Deallocate()41*89c4ff92SAndroid Build Coastguard Workervoid MemoryManager::Deallocate() 42*89c4ff92SAndroid Build Coastguard Worker { 43*89c4ff92SAndroid Build Coastguard Worker for (auto& m_AllocatorBufferStoragePair : m_AllocatorBufferStoragePairVector) 44*89c4ff92SAndroid Build Coastguard Worker { 45*89c4ff92SAndroid Build Coastguard Worker auto& allocator = m_AllocatorBufferStoragePair.first; 46*89c4ff92SAndroid Build Coastguard Worker for (auto&& bufferStorage : m_AllocatorBufferStoragePair.second) 47*89c4ff92SAndroid Build Coastguard Worker { 48*89c4ff92SAndroid Build Coastguard Worker allocator.m_CustomAllocator->free(bufferStorage.m_Buffer); 49*89c4ff92SAndroid Build Coastguard Worker } 50*89c4ff92SAndroid Build Coastguard Worker } 51*89c4ff92SAndroid Build Coastguard Worker } 52*89c4ff92SAndroid Build Coastguard Worker 53*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn