diff options
Diffstat (limited to 'src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp')
-rw-r--r-- | src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp | 68 |
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 |