blob: 525db562168b841d3c8bef2a6fab9386b217ad84 [file] [log] [blame]
Derek Lamberti84da38b2019-06-13 11:40:08 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00008#include <armnn/backends/ITensorHandleFactory.hpp>
Derek Lamberti84da38b2019-06-13 11:40:08 +01009
10#include <memory>
11#include <vector>
12
13namespace armnn
14{
15
16//Forward
17class IMemoryManager;
18
19///
20class TensorHandleFactoryRegistry
21{
22public:
23 TensorHandleFactoryRegistry() = default;
24
25 TensorHandleFactoryRegistry(const TensorHandleFactoryRegistry& other) = delete;
26 TensorHandleFactoryRegistry(TensorHandleFactoryRegistry&& other) = delete;
27
28 /// Register a TensorHandleFactory and transfer ownership
29 void RegisterFactory(std::unique_ptr<ITensorHandleFactory> allocator);
30
31 /// Register a memory manager with shared ownership
32 void RegisterMemoryManager(std::shared_ptr<IMemoryManager> memoryManger);
33
34 /// Find a TensorHandleFactory by Id
35 /// Returns nullptr if not found
36 ITensorHandleFactory* GetFactory(ITensorHandleFactory::FactoryId id) const;
37
Francis Murtagh73d3e2e2021-04-29 14:23:04 +010038 /// Overload of above allowing specification of Memory Source
39 ITensorHandleFactory* GetFactory(ITensorHandleFactory::FactoryId id,
40 MemorySource memSource) const;
41
Derek Lamberti84da38b2019-06-13 11:40:08 +010042 /// Aquire memory required for inference
43 void AquireMemory();
44
45 /// Release memory required for inference
46 void ReleaseMemory();
47
Finn Williams01097942021-04-26 12:06:34 +010048 std::vector<std::shared_ptr<IMemoryManager>>& GetMemoryManagers()
49 {
50 return m_MemoryManagers;
51 }
52
Derek Lamberti84da38b2019-06-13 11:40:08 +010053private:
54 std::vector<std::unique_ptr<ITensorHandleFactory>> m_Factories;
55 std::vector<std::shared_ptr<IMemoryManager>> m_MemoryManagers;
56};
57
58} // namespace armnn