xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/MemoryManager.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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 Worker void 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 Worker void 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 Worker void 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