aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp')
-rw-r--r--src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp b/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp
new file mode 100644
index 0000000000..0b48cbd176
--- /dev/null
+++ b/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp
@@ -0,0 +1,68 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "MemoryOptimizerStrategyLibrary.hpp"
+#include "MemoryOptimizerStrategyFactory.hpp"
+
+#include <armnn/BackendHelper.hpp>
+#include <armnn/Logging.hpp>
+#include <armnn/TypesUtils.hpp>
+
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
+
+#include <backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp>
+
+#include <algorithm>
+
+namespace
+{
+// Default Memory Optimizer Strategies
+static const std::vector<std::string> memoryOptimizationStrategies({
+ "ConstLayerMemoryOptimizerStrategy",
+ });
+
+#define CREATE_MEMORY_OPTIMIZER_STRATEGY(strategyName, memoryOptimizerStrategy) \
+{ \
+ MemoryOptimizerStrategyFactory memoryOptimizerStrategyFactory; \
+ memoryOptimizerStrategy = memoryOptimizerStrategyFactory.CreateMemoryOptimizerStrategy<strategyName>(); \
+} \
+
+} // anonymous namespace
+
+namespace armnn
+{
+
+bool MemoryOptimizerStrategyLibrary::SetMemoryOptimizerStrategy(const BackendId& id, const std::string& strategyName)
+{
+ auto isStrategyExist = std::find(memoryOptimizationStrategies.begin(),
+ memoryOptimizationStrategies.end(),
+ strategyName) != memoryOptimizationStrategies.end();
+ if (isStrategyExist)
+ {
+ std::shared_ptr<IMemoryOptimizerStrategy> memoryOptimizerStrategy = nullptr;
+ CREATE_MEMORY_OPTIMIZER_STRATEGY(armnn::ConstLayerMemoryOptimizerStrategy,
+ memoryOptimizerStrategy);
+ if (memoryOptimizerStrategy)
+ {
+ using BackendCapability = BackendOptions::BackendOption;
+ auto strategyType = GetMemBlockStrategyTypeName(memoryOptimizerStrategy->GetMemBlockStrategyType());
+ BackendCapability memOptimizeStrategyCapability {strategyType, true};
+ if (HasCapability(memOptimizeStrategyCapability, id))
+ {
+ BackendRegistryInstance().RegisterMemoryOptimizerStrategy(id, memoryOptimizerStrategy);
+ return true;
+ }
+ // reset shared_ptr memoryOptimizerStrategy
+ memoryOptimizerStrategy.reset();
+ }
+ }
+ ARMNN_LOG(warning) << "Backend "
+ << id
+ << " is not registered as does not support memory optimizer strategy "
+ << strategyName << " \n";
+ return false;
+}
+
+} // namespace armnn \ No newline at end of file