1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022 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/TensorHandle.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include "TosaRefMemoryManager.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 TosaRefTensorHandle : public ITensorHandle 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker public: 18*89c4ff92SAndroid Build Coastguard Worker TosaRefTensorHandle(const TensorInfo& tensorInfo, std::shared_ptr<TosaRefMemoryManager> &memoryManager); 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker TosaRefTensorHandle(const TensorInfo& tensorInfo, MemorySourceFlags importFlags); 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker ~TosaRefTensorHandle(); 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 GetImportFlags() const54*89c4ff92SAndroid Build Coastguard Worker virtual 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, MemorySource source) override; 60*89c4ff92SAndroid Build Coastguard Worker virtual bool CanBeImported(void* memory, MemorySource source) override; 61*89c4ff92SAndroid Build Coastguard Worker 62*89c4ff92SAndroid Build Coastguard Worker private: 63*89c4ff92SAndroid Build Coastguard Worker // Only used for testing 64*89c4ff92SAndroid Build Coastguard Worker void CopyOutTo(void*) const override; 65*89c4ff92SAndroid Build Coastguard Worker void CopyInFrom(const void*) override; 66*89c4ff92SAndroid Build Coastguard Worker 67*89c4ff92SAndroid Build Coastguard Worker void* GetPointer() const; 68*89c4ff92SAndroid Build Coastguard Worker 69*89c4ff92SAndroid Build Coastguard Worker TosaRefTensorHandle(const TosaRefTensorHandle& other) = delete; // noncopyable 70*89c4ff92SAndroid Build Coastguard Worker TosaRefTensorHandle& operator=(const TosaRefTensorHandle& other) = delete; //noncopyable 71*89c4ff92SAndroid Build Coastguard Worker 72*89c4ff92SAndroid Build Coastguard Worker TensorInfo m_TensorInfo; 73*89c4ff92SAndroid Build Coastguard Worker 74*89c4ff92SAndroid Build Coastguard Worker std::shared_ptr<TosaRefMemoryManager> m_MemoryManager; 75*89c4ff92SAndroid Build Coastguard Worker TosaRefMemoryManager::Pool* m_Pool; 76*89c4ff92SAndroid Build Coastguard Worker mutable void* m_UnmanagedMemory; 77*89c4ff92SAndroid Build Coastguard Worker MemorySourceFlags m_ImportFlags; 78*89c4ff92SAndroid Build Coastguard Worker bool m_Imported; 79*89c4ff92SAndroid Build Coastguard Worker bool m_IsImportEnabled; 80*89c4ff92SAndroid Build Coastguard Worker }; 81*89c4ff92SAndroid Build Coastguard Worker 82*89c4ff92SAndroid Build Coastguard Worker } 83