blob: 30aa155be6972473e26e2525031fe8f9aba5b3e4 [file] [log] [blame]
Narumol Prangnawarat867eba52020-02-03 12:29:56 +00001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
Colm Donelan0c479742021-12-10 12:43:54 +00007#include <armnn/backends/TensorHandle.hpp>
Narumol Prangnawarat867eba52020-02-03 12:29:56 +00008
9#include "SampleMemoryManager.hpp"
10
Jan Eilersc84e45d2020-08-19 14:14:36 +010011namespace sdb // sample dynamic backend
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000012{
13
14// An implementation of ITensorHandle with simple "bump the pointer" memory-management behaviour
Jan Eilersc84e45d2020-08-19 14:14:36 +010015class SampleTensorHandle : public armnn::ITensorHandle
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000016{
17public:
Jan Eilersc84e45d2020-08-19 14:14:36 +010018 SampleTensorHandle(const armnn::TensorInfo& tensorInfo, std::shared_ptr<SampleMemoryManager> &memoryManager);
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000019
Jan Eilersc84e45d2020-08-19 14:14:36 +010020 SampleTensorHandle(const armnn::TensorInfo& tensorInfo, armnn::MemorySourceFlags importFlags);
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000021
22 ~SampleTensorHandle();
23
24 virtual void Manage() override;
25
26 virtual void Allocate() override;
27
28 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
36 virtual void Unmap() const override
37 {}
38
Jan Eilersc84e45d2020-08-19 14:14:36 +010039 armnn::TensorShape GetStrides() const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000040 {
41 return GetUnpaddedTensorStrides(m_TensorInfo);
42 }
43
Jan Eilersc84e45d2020-08-19 14:14:36 +010044 armnn::TensorShape GetShape() const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000045 {
46 return m_TensorInfo.GetShape();
47 }
48
Jan Eilersc84e45d2020-08-19 14:14:36 +010049 const armnn::TensorInfo& GetTensorInfo() const
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000050 {
51 return m_TensorInfo;
52 }
53
Jan Eilersc84e45d2020-08-19 14:14:36 +010054 virtual armnn::MemorySourceFlags GetImportFlags() const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000055 {
56 return m_ImportFlags;
57 }
58
Jan Eilersc84e45d2020-08-19 14:14:36 +010059 virtual bool Import(void* memory, armnn::MemorySource source) override;
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000060
61private:
Narumol Prangnawarat0739fee2020-08-11 11:24:25 +010062 // Only used for testing
63 void CopyOutTo(void*) const override;
64 void CopyInFrom(const void*) override;
65
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000066 void* GetPointer() const;
67
68 SampleTensorHandle(const SampleTensorHandle& other) = delete; // noncopyable
69 SampleTensorHandle& operator=(const SampleTensorHandle& other) = delete; //noncopyable
70
Jan Eilersc84e45d2020-08-19 14:14:36 +010071 armnn::TensorInfo m_TensorInfo;
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000072
73 std::shared_ptr<SampleMemoryManager> m_MemoryManager;
74 SampleMemoryManager::Pool* m_Pool;
75 mutable void *m_UnmanagedMemory;
Jan Eilersc84e45d2020-08-19 14:14:36 +010076 armnn::MemorySourceFlags m_ImportFlags;
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000077 bool m_Imported;
78};
79
Jan Eilersc84e45d2020-08-19 14:14:36 +010080} // namespace sdb