1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 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 "SampleMemoryManager.hpp" 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace sdb // sample dynamic backend 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 SampleTensorHandle : public armnn::ITensorHandle 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker public: 18*89c4ff92SAndroid Build Coastguard Worker SampleTensorHandle(const armnn::TensorInfo& tensorInfo, std::shared_ptr<SampleMemoryManager> &memoryManager); 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker SampleTensorHandle(const armnn::TensorInfo& tensorInfo, armnn::MemorySourceFlags importFlags); 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker ~SampleTensorHandle(); 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 armnn::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 armnn::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 armnn::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 GetImportFlags() const54*89c4ff92SAndroid Build Coastguard Worker virtual armnn::MemorySourceFlags GetImportFlags() const override 55*89c4ff92SAndroid Build Coastguard Worker { 56*89c4ff92SAndroid Build Coastguard Worker return m_ImportFlags; 57*89c4ff92SAndroid Build Coastguard Worker } 58*89c4ff92SAndroid Build Coastguard Worker 59*89c4ff92SAndroid Build Coastguard Worker virtual bool Import(void* memory, armnn::MemorySource source) override; 60*89c4ff92SAndroid Build Coastguard Worker 61*89c4ff92SAndroid Build Coastguard Worker private: 62*89c4ff92SAndroid Build Coastguard Worker // Only used for testing 63*89c4ff92SAndroid Build Coastguard Worker void CopyOutTo(void*) const override; 64*89c4ff92SAndroid Build Coastguard Worker void CopyInFrom(const void*) override; 65*89c4ff92SAndroid Build Coastguard Worker 66*89c4ff92SAndroid Build Coastguard Worker void* GetPointer() const; 67*89c4ff92SAndroid Build Coastguard Worker 68*89c4ff92SAndroid Build Coastguard Worker SampleTensorHandle(const SampleTensorHandle& other) = delete; // noncopyable 69*89c4ff92SAndroid Build Coastguard Worker SampleTensorHandle& operator=(const SampleTensorHandle& other) = delete; //noncopyable 70*89c4ff92SAndroid Build Coastguard Worker 71*89c4ff92SAndroid Build Coastguard Worker armnn::TensorInfo m_TensorInfo; 72*89c4ff92SAndroid Build Coastguard Worker 73*89c4ff92SAndroid Build Coastguard Worker std::shared_ptr<SampleMemoryManager> m_MemoryManager; 74*89c4ff92SAndroid Build Coastguard Worker SampleMemoryManager::Pool* m_Pool; 75*89c4ff92SAndroid Build Coastguard Worker mutable void *m_UnmanagedMemory; 76*89c4ff92SAndroid Build Coastguard Worker armnn::MemorySourceFlags m_ImportFlags; 77*89c4ff92SAndroid Build Coastguard Worker bool m_Imported; 78*89c4ff92SAndroid Build Coastguard Worker }; 79*89c4ff92SAndroid Build Coastguard Worker 80*89c4ff92SAndroid Build Coastguard Worker } // namespace sdb 81