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 #pragma once 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/ICustomAllocator.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker namespace armnn 10*89c4ff92SAndroid Build Coastguard Worker { 11*89c4ff92SAndroid Build Coastguard Worker struct Allocator 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker /// Pointer to @ICustomAllocator. 14*89c4ff92SAndroid Build Coastguard Worker std::shared_ptr<ICustomAllocator> m_CustomAllocator{}; 15*89c4ff92SAndroid Build Coastguard Worker /// Value which the size of each buffer (actual data size + padding) has to be a multiple of. 16*89c4ff92SAndroid Build Coastguard Worker size_t m_Alignment = 0 ; 17*89c4ff92SAndroid Build Coastguard Worker }; 18*89c4ff92SAndroid Build Coastguard Worker 19*89c4ff92SAndroid Build Coastguard Worker struct TensorMemory 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker /// Number of bytes the value is away from the @BufferStorage.m_Buffer. 22*89c4ff92SAndroid Build Coastguard Worker size_t m_Offset{}; 23*89c4ff92SAndroid Build Coastguard Worker /// Identifier to be used by the @LoadedNetwork to order the tensors. 24*89c4ff92SAndroid Build Coastguard Worker unsigned int m_OutputSlotId{}; 25*89c4ff92SAndroid Build Coastguard Worker /// Pointer to the tensor value. 26*89c4ff92SAndroid Build Coastguard Worker void* m_Data = nullptr; 27*89c4ff92SAndroid Build Coastguard Worker }; 28*89c4ff92SAndroid Build Coastguard Worker 29*89c4ff92SAndroid Build Coastguard Worker struct BufferStorage 30*89c4ff92SAndroid Build Coastguard Worker { 31*89c4ff92SAndroid Build Coastguard Worker /// Vector of pointer to @TensorMemory. 32*89c4ff92SAndroid Build Coastguard Worker std::vector<std::shared_ptr<TensorMemory>> m_TensorMemoryVector; 33*89c4ff92SAndroid Build Coastguard Worker /// Total size of the buffer. 34*89c4ff92SAndroid Build Coastguard Worker size_t m_BufferSize; 35*89c4ff92SAndroid Build Coastguard Worker /// Pointer to the first element of the buffer. 36*89c4ff92SAndroid Build Coastguard Worker void* m_Buffer = nullptr; 37*89c4ff92SAndroid Build Coastguard Worker }; 38*89c4ff92SAndroid Build Coastguard Worker 39*89c4ff92SAndroid Build Coastguard Worker class MemoryManager 40*89c4ff92SAndroid Build Coastguard Worker { 41*89c4ff92SAndroid Build Coastguard Worker public: 42*89c4ff92SAndroid Build Coastguard Worker /// Initialization method to store in m_AllocatorBufferStoragePairVector all information needed. 43*89c4ff92SAndroid Build Coastguard Worker /// @param[in] bufferStorageVector - Vector of BufferStorage. 44*89c4ff92SAndroid Build Coastguard Worker /// @param[in] customAllocator - Pointer to ICustomAllocator. 45*89c4ff92SAndroid Build Coastguard Worker /// @param[in] typeAlignment - Optional parameter. Value of which the size of each value has to be multiple of. 46*89c4ff92SAndroid Build Coastguard Worker void StoreMemToAllocate(std::vector<BufferStorage> bufferStorageVector, 47*89c4ff92SAndroid Build Coastguard Worker std::shared_ptr<ICustomAllocator> customAllocator, 48*89c4ff92SAndroid Build Coastguard Worker size_t typeAlignment = 0); 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Worker /// Allocate the amount of memory indicated by m_BufferSize, and 51*89c4ff92SAndroid Build Coastguard Worker /// point each m_Data to each correspondent Tensor so that they are m_Offset bytes separated. 52*89c4ff92SAndroid Build Coastguard Worker void Allocate(); 53*89c4ff92SAndroid Build Coastguard Worker 54*89c4ff92SAndroid Build Coastguard Worker /// Deallocate memory 55*89c4ff92SAndroid Build Coastguard Worker void Deallocate(); 56*89c4ff92SAndroid Build Coastguard Worker 57*89c4ff92SAndroid Build Coastguard Worker private: 58*89c4ff92SAndroid Build Coastguard Worker std::vector<std::pair<Allocator, std::vector<BufferStorage>>> m_AllocatorBufferStoragePairVector; 59*89c4ff92SAndroid Build Coastguard Worker }; 60*89c4ff92SAndroid Build Coastguard Worker 61*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn 62