aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/LoadedNetwork.hpp
diff options
context:
space:
mode:
authorFinn Williams <finn.williams@arm.com>2021-10-28 19:07:32 +0100
committerFinn Williams <finn.williams@arm.com>2021-11-08 14:33:17 +0000
commitb1aad4270fa8ad5c4aa62e27d564baf723b2cee5 (patch)
tree98b19ba85b50e2c730d5d2e3822cd2b1438bd149 /src/armnn/LoadedNetwork.hpp
parent3f22d27f51c493e37b9da0692b6bf776f4430dcf (diff)
downloadarmnn-b1aad4270fa8ad5c4aa62e27d564baf723b2cee5.tar.gz
IVGCVSW-6527 Support the new memory API in loaded network
* enable external memory management for neon and ref backends * change m_TensorMemoryVector to hold shared pointers * change input layer backend Id to match backend id of connected layer Signed-off-by: Finn Williams <finn.williams@arm.com> Change-Id: I2216a724028312eb101b290df3f224177826b1a0
Diffstat (limited to 'src/armnn/LoadedNetwork.hpp')
-rw-r--r--src/armnn/LoadedNetwork.hpp38
1 files changed, 32 insertions, 6 deletions
diff --git a/src/armnn/LoadedNetwork.hpp b/src/armnn/LoadedNetwork.hpp
index 71ceaa3938..35c482cbc7 100644
--- a/src/armnn/LoadedNetwork.hpp
+++ b/src/armnn/LoadedNetwork.hpp
@@ -10,9 +10,15 @@
#include <armnn/Tensor.hpp>
#include <armnn/backends/IBackendInternal.hpp>
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
#include <backendsCommon/TensorHandleFactoryRegistry.hpp>
#include <backendsCommon/Workload.hpp>
#include <backendsCommon/WorkloadFactory.hpp>
+#include <backendsCommon/DefaultAllocator.hpp>
+#include <backendsCommon/MemoryManager.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/SingleAxisPriorityList.hpp>
+
+
#include <ProfilingService.hpp>
#include <TimelineUtilityMethods.hpp>
@@ -89,16 +95,16 @@ public:
profiling::ProfilingGuid GetNetworkGuid();
private:
- using WorkloadFactoryWithMemoryManager =
- std::pair<IBackendInternal::IWorkloadFactoryPtr, IBackendInternal::IMemoryManagerSharedPtr>;
- using WorkloadFactoryMap = std::unordered_map<BackendId, WorkloadFactoryWithMemoryManager>;
void AllocateWorkingMemory(std::lock_guard<std::mutex>& lock);
void AllocateAndExecuteConstantWorkloads();
+ void AllocateAndExecuteConstantWorkloadsAsync();
+
+ std::unordered_map<LayerGuid, std::unique_ptr<IWorkload>> m_ConstantWorkloads;
+ std::unordered_map<LayerGuid, ITensorHandle*> m_ConstantTensorHandles;
- std::unordered_map<LayerGuid, ITensorHandle* > m_ConstantTensorHandles;
- std::unordered_map<LayerGuid, std::unique_ptr<IWorkload> > m_ConstantWorkloads;
+ std::unique_ptr<IMemoryOptimizerStrategy> m_ConstantStrategy = std::make_unique<SingleAxisPriorityList>();
LoadedNetwork(std::unique_ptr<IOptimizedNetwork> net,
const INetworkProperties& networkProperties,
@@ -120,9 +126,18 @@ private:
inline LayerBindingId ValidateImportedInputID(ImportedInputId id);
inline LayerBindingId ValidateImportedOutputID(ImportedOutputId id);
+ void CreateMemoryProfile();
+ void CreateMemoryProfileAsync();
+
+ std::unique_ptr<MemoryManager> CreateExternalMemoryManger(
+ std::vector<std::pair<std::shared_ptr<TensorMemory>, MemorySource>>& tensorMemory);
+
using BackendPtrMap = std::unordered_map<BackendId, IBackendInternalUniquePtr>;
- BackendPtrMap m_Backends;
+ BackendPtrMap m_Backends;
+ std::vector<IBackendInternal::IMemoryManagerSharedPtr> m_BackendMemoryMangers;
+
+ using WorkloadFactoryMap = std::unordered_map<BackendId, IBackendInternal::IWorkloadFactoryPtr>;
WorkloadFactoryMap m_WorkloadFactories;
std::unique_ptr<IOptimizedNetwork> m_OptimizedNetwork;
@@ -171,6 +186,17 @@ private:
ImportedInputId m_CurImportedInputId = 0;
ImportedInputId m_CurImportedOutputId = 0;
+
+ std::unordered_map<BackendId, std::vector<MemBlock>> m_MemBlockMap;
+ std::unordered_map<BackendId, std::vector<MemBin>> m_MemBinMap;
+
+ std::vector<ITensorHandle*> m_Tensorhandles;
+
+ std::vector<std::pair<std::shared_ptr<TensorMemory>, MemorySource>> m_TensorMemory;
+
+ std::unique_ptr<MemoryManager> m_ExternalMemoryManager;
+
+ std::unordered_map<BackendId, bool> m_SupportsExternallyManagedMemory;
};
}