1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #pragma once 6 7 #include <backendsCommon/CpuTensorHandle.hpp> 8 9 #include "RefMemoryManager.hpp" 10 11 namespace armnn 12 { 13 14 // An implementation of ITensorHandle with simple "bump the pointer" memory-management behaviour 15 class RefTensorHandle : public ITensorHandle 16 { 17 public: 18 RefTensorHandle(const TensorInfo& tensorInfo, std::shared_ptr<RefMemoryManager> &memoryManager); 19 20 RefTensorHandle(const TensorInfo& tensorInfo, MemorySourceFlags importFlags); 21 22 ~RefTensorHandle(); 23 24 virtual void Manage() override; 25 26 virtual void Allocate() override; 27 GetParent() const28 virtual ITensorHandle* GetParent() const override 29 { 30 return nullptr; 31 } 32 33 virtual const void* Map(bool /* blocking = true */) const override; 34 using ITensorHandle::Map; 35 Unmap() const36 virtual void Unmap() const override 37 {} 38 GetStrides() const39 TensorShape GetStrides() const override 40 { 41 return GetUnpaddedTensorStrides(m_TensorInfo); 42 } 43 GetShape() const44 TensorShape GetShape() const override 45 { 46 return m_TensorInfo.GetShape(); 47 } 48 GetTensorInfo() const49 const TensorInfo& GetTensorInfo() const 50 { 51 return m_TensorInfo; 52 } 53 GetImportFlags() const54 virtual MemorySourceFlags GetImportFlags() const override 55 { 56 return m_ImportFlags; 57 } 58 59 virtual bool Import(void* memory, MemorySource source) override; 60 61 private: 62 // Only used for testing 63 void CopyOutTo(void*) const override; 64 void CopyInFrom(const void*) override; 65 66 void* GetPointer() const; 67 68 RefTensorHandle(const RefTensorHandle& other) = delete; // noncopyable 69 RefTensorHandle& operator=(const RefTensorHandle& other) = delete; //noncopyable 70 71 TensorInfo m_TensorInfo; 72 73 std::shared_ptr<RefMemoryManager> m_MemoryManager; 74 RefMemoryManager::Pool* m_Pool; 75 mutable void* m_UnmanagedMemory; 76 MemorySourceFlags m_ImportFlags; 77 bool m_Imported; 78 bool m_IsImportEnabled; 79 }; 80 81 } 82