ArmNN
 22.11
TensorHandleFactoryRegistry.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
9 
10 #include <memory>
11 #include <vector>
12 
13 namespace armnn
14 {
15 
16 //Forward
17 class IMemoryManager;
18 
19 using CopyAndImportFactoryPairs = std::map<ITensorHandleFactory::FactoryId, ITensorHandleFactory::FactoryId>;
20 
21 ///
23 {
24 public:
25  TensorHandleFactoryRegistry() = default;
26 
29 
30  /// Register a TensorHandleFactory and transfer ownership
31  void RegisterFactory(std::unique_ptr<ITensorHandleFactory> allocator);
32 
33  /// Register a memory manager with shared ownership
34  void RegisterMemoryManager(std::shared_ptr<IMemoryManager> memoryManger);
35 
36  /// Find a TensorHandleFactory by Id
37  /// Returns nullptr if not found
39 
40  /// Overload of above allowing specification of Memory Source
42  MemorySource memSource) const;
43 
44  /// Register a pair of TensorHandleFactory Id for Memory Copy and TensorHandleFactory Id for Memory Import
46  ITensorHandleFactory::FactoryId importFactoryId);
47 
48  /// Get a matching TensorHandleFatory Id for Memory Import given TensorHandleFactory Id for Memory Copy
50 
51  /// Aquire memory required for inference
52  void AquireMemory();
53 
54  /// Release memory required for inference
55  void ReleaseMemory();
56 
57  std::vector<std::shared_ptr<IMemoryManager>>& GetMemoryManagers()
58  {
59  return m_MemoryManagers;
60  }
61 
62 private:
63  std::vector<std::unique_ptr<ITensorHandleFactory>> m_Factories;
64  std::vector<std::shared_ptr<IMemoryManager>> m_MemoryManagers;
65  CopyAndImportFactoryPairs m_FactoryMappings;
66 };
67 
68 } // namespace armnn
void RegisterMemoryManager(std::shared_ptr< IMemoryManager > memoryManger)
Register a memory manager with shared ownership.
void RegisterFactory(std::unique_ptr< ITensorHandleFactory > allocator)
Register a TensorHandleFactory and transfer ownership.
void AquireMemory()
Aquire memory required for inference.
Copyright (c) 2021 ARM Limited and Contributors.
void RegisterCopyAndImportFactoryPair(ITensorHandleFactory::FactoryId copyFactoryId, ITensorHandleFactory::FactoryId importFactoryId)
Register a pair of TensorHandleFactory Id for Memory Copy and TensorHandleFactory Id for Memory Impor...
void ReleaseMemory()
Release memory required for inference.
MemorySource
Define the Memory Source to reduce copies.
Definition: Types.hpp:230
ITensorHandleFactory::FactoryId GetMatchingImportFactoryId(ITensorHandleFactory::FactoryId copyFactoryId)
Get a matching TensorHandleFatory Id for Memory Import given TensorHandleFactory Id for Memory Copy...
ITensorHandleFactory * GetFactory(ITensorHandleFactory::FactoryId id) const
Find a TensorHandleFactory by Id Returns nullptr if not found.
std::map< ITensorHandleFactory::FactoryId, ITensorHandleFactory::FactoryId > CopyAndImportFactoryPairs
std::vector< std::shared_ptr< IMemoryManager > > & GetMemoryManagers()