1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. 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/IMemoryManager.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include <forward_list> 10*89c4ff92SAndroid Build Coastguard Worker #include <vector> 11*89c4ff92SAndroid Build Coastguard Worker 12*89c4ff92SAndroid Build Coastguard Worker namespace armnn 13*89c4ff92SAndroid Build Coastguard Worker { 14*89c4ff92SAndroid Build Coastguard Worker 15*89c4ff92SAndroid Build Coastguard Worker // An implementation of IMemoryManager to be used with RefTensorHandle 16*89c4ff92SAndroid Build Coastguard Worker class RefMemoryManager : public IMemoryManager 17*89c4ff92SAndroid Build Coastguard Worker { 18*89c4ff92SAndroid Build Coastguard Worker public: 19*89c4ff92SAndroid Build Coastguard Worker RefMemoryManager(); 20*89c4ff92SAndroid Build Coastguard Worker virtual ~RefMemoryManager(); 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker class Pool; 23*89c4ff92SAndroid Build Coastguard Worker 24*89c4ff92SAndroid Build Coastguard Worker Pool* Manage(unsigned int numBytes); 25*89c4ff92SAndroid Build Coastguard Worker 26*89c4ff92SAndroid Build Coastguard Worker void Allocate(Pool *pool); 27*89c4ff92SAndroid Build Coastguard Worker 28*89c4ff92SAndroid Build Coastguard Worker void* GetPointer(Pool *pool); 29*89c4ff92SAndroid Build Coastguard Worker 30*89c4ff92SAndroid Build Coastguard Worker void Acquire() override; 31*89c4ff92SAndroid Build Coastguard Worker void Release() override; 32*89c4ff92SAndroid Build Coastguard Worker 33*89c4ff92SAndroid Build Coastguard Worker class Pool 34*89c4ff92SAndroid Build Coastguard Worker { 35*89c4ff92SAndroid Build Coastguard Worker public: 36*89c4ff92SAndroid Build Coastguard Worker Pool(unsigned int numBytes); 37*89c4ff92SAndroid Build Coastguard Worker ~Pool(); 38*89c4ff92SAndroid Build Coastguard Worker 39*89c4ff92SAndroid Build Coastguard Worker void Acquire(); 40*89c4ff92SAndroid Build Coastguard Worker void Release(); 41*89c4ff92SAndroid Build Coastguard Worker 42*89c4ff92SAndroid Build Coastguard Worker void* GetPointer(); 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker void Reserve(unsigned int numBytes); 45*89c4ff92SAndroid Build Coastguard Worker 46*89c4ff92SAndroid Build Coastguard Worker private: 47*89c4ff92SAndroid Build Coastguard Worker unsigned int m_Size; 48*89c4ff92SAndroid Build Coastguard Worker void* m_Pointer; 49*89c4ff92SAndroid Build Coastguard Worker }; 50*89c4ff92SAndroid Build Coastguard Worker 51*89c4ff92SAndroid Build Coastguard Worker private: 52*89c4ff92SAndroid Build Coastguard Worker RefMemoryManager(const RefMemoryManager&) = delete; // Noncopyable 53*89c4ff92SAndroid Build Coastguard Worker RefMemoryManager& operator=(const RefMemoryManager&) = delete; // Noncopyable 54*89c4ff92SAndroid Build Coastguard Worker 55*89c4ff92SAndroid Build Coastguard Worker std::forward_list<Pool> m_Pools; 56*89c4ff92SAndroid Build Coastguard Worker std::vector<Pool*> m_FreePools; 57*89c4ff92SAndroid Build Coastguard Worker }; 58*89c4ff92SAndroid Build Coastguard Worker 59*89c4ff92SAndroid Build Coastguard Worker } 60