blob: 9e5271e32d183467437304ffa4dd60760e8d2240 [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
7#include <armnn/backends/IMemoryManager.hpp>
8
9#include <forward_list>
10#include <vector>
11
Jan Eilersc84e45d2020-08-19 14:14:36 +010012namespace sdb // sample dynamic backend
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000013{
14
15// An implementation of IMemoryManager to be used with SampleTensorHandle
Jan Eilersc84e45d2020-08-19 14:14:36 +010016class SampleMemoryManager : public armnn::IMemoryManager
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000017{
18public:
19 SampleMemoryManager();
20 virtual ~SampleMemoryManager();
21
22 class Pool;
23
24 Pool* Manage(unsigned int numBytes);
25
26 void Allocate(Pool *pool);
27
28 void* GetPointer(Pool *pool);
29
30 void Acquire() override;
31 void Release() override;
32
33 class Pool
34 {
35 public:
36 Pool(unsigned int numBytes);
37 ~Pool();
38
39 void Acquire();
40 void Release();
41
42 void* GetPointer();
43
44 void Reserve(unsigned int numBytes);
45
46 private:
47 unsigned int m_Size;
48 void* m_Pointer;
49 };
50
51private:
52 SampleMemoryManager(const SampleMemoryManager&) = delete; // Noncopyable
53 SampleMemoryManager& operator=(const SampleMemoryManager&) = delete; // Noncopyable
54
55 std::forward_list<Pool> m_Pools;
56 std::vector<Pool*> m_FreePools;
57};
58
Jan Eilersc84e45d2020-08-19 14:14:36 +010059} // namespace sdb