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/TensorHandle.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include "RefMemoryManager.hpp" 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace armnn 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker // An implementation of ITensorHandle with simple "bump the pointer" memory-management behaviour 15*89c4ff92SAndroid Build Coastguard Worker class RefTensorHandle : public ITensorHandle 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker public: 18*89c4ff92SAndroid Build Coastguard Worker RefTensorHandle(const TensorInfo& tensorInfo, std::shared_ptr<RefMemoryManager> &memoryManager); 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker RefTensorHandle(const TensorInfo& tensorInfo); 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker ~RefTensorHandle(); 23*89c4ff92SAndroid Build Coastguard Worker 24*89c4ff92SAndroid Build Coastguard Worker virtual void Manage() override; 25*89c4ff92SAndroid Build Coastguard Worker 26*89c4ff92SAndroid Build Coastguard Worker virtual void Allocate() override; 27*89c4ff92SAndroid Build Coastguard Worker GetParent() const28*89c4ff92SAndroid Build Coastguard Worker virtual ITensorHandle* GetParent() const override 29*89c4ff92SAndroid Build Coastguard Worker { 30*89c4ff92SAndroid Build Coastguard Worker return nullptr; 31*89c4ff92SAndroid Build Coastguard Worker } 32*89c4ff92SAndroid Build Coastguard Worker 33*89c4ff92SAndroid Build Coastguard Worker virtual const void* Map(bool /* blocking = true */) const override; 34*89c4ff92SAndroid Build Coastguard Worker using ITensorHandle::Map; 35*89c4ff92SAndroid Build Coastguard Worker Unmap() const36*89c4ff92SAndroid Build Coastguard Worker virtual void Unmap() const override 37*89c4ff92SAndroid Build Coastguard Worker {} 38*89c4ff92SAndroid Build Coastguard Worker GetStrides() const39*89c4ff92SAndroid Build Coastguard Worker TensorShape GetStrides() const override 40*89c4ff92SAndroid Build Coastguard Worker { 41*89c4ff92SAndroid Build Coastguard Worker return GetUnpaddedTensorStrides(m_TensorInfo); 42*89c4ff92SAndroid Build Coastguard Worker } 43*89c4ff92SAndroid Build Coastguard Worker GetShape() const44*89c4ff92SAndroid Build Coastguard Worker TensorShape GetShape() const override 45*89c4ff92SAndroid Build Coastguard Worker { 46*89c4ff92SAndroid Build Coastguard Worker return m_TensorInfo.GetShape(); 47*89c4ff92SAndroid Build Coastguard Worker } 48*89c4ff92SAndroid Build Coastguard Worker GetTensorInfo() const49*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& GetTensorInfo() const 50*89c4ff92SAndroid Build Coastguard Worker { 51*89c4ff92SAndroid Build Coastguard Worker return m_TensorInfo; 52*89c4ff92SAndroid Build Coastguard Worker } 53*89c4ff92SAndroid Build Coastguard Worker 54*89c4ff92SAndroid Build Coastguard Worker virtual MemorySourceFlags GetImportFlags() const override; 55*89c4ff92SAndroid Build Coastguard Worker 56*89c4ff92SAndroid Build Coastguard Worker virtual bool Import(void* memory, MemorySource source) override; 57*89c4ff92SAndroid Build Coastguard Worker virtual bool CanBeImported(void* memory, MemorySource source) override; 58*89c4ff92SAndroid Build Coastguard Worker 59*89c4ff92SAndroid Build Coastguard Worker private: 60*89c4ff92SAndroid Build Coastguard Worker // Only used for testing 61*89c4ff92SAndroid Build Coastguard Worker void CopyOutTo(void*) const override; 62*89c4ff92SAndroid Build Coastguard Worker void CopyInFrom(const void*) override; 63*89c4ff92SAndroid Build Coastguard Worker 64*89c4ff92SAndroid Build Coastguard Worker void* GetPointer() const; 65*89c4ff92SAndroid Build Coastguard Worker 66*89c4ff92SAndroid Build Coastguard Worker RefTensorHandle(const RefTensorHandle& other) = delete; // noncopyable 67*89c4ff92SAndroid Build Coastguard Worker RefTensorHandle& operator=(const RefTensorHandle& other) = delete; //noncopyable 68*89c4ff92SAndroid Build Coastguard Worker 69*89c4ff92SAndroid Build Coastguard Worker TensorInfo m_TensorInfo; 70*89c4ff92SAndroid Build Coastguard Worker 71*89c4ff92SAndroid Build Coastguard Worker std::shared_ptr<RefMemoryManager> m_MemoryManager; 72*89c4ff92SAndroid Build Coastguard Worker RefMemoryManager::Pool* m_Pool; 73*89c4ff92SAndroid Build Coastguard Worker mutable void* m_UnmanagedMemory; 74*89c4ff92SAndroid Build Coastguard Worker void* m_ImportedMemory; 75*89c4ff92SAndroid Build Coastguard Worker }; 76*89c4ff92SAndroid Build Coastguard Worker 77*89c4ff92SAndroid Build Coastguard Worker } 78