diff options
author | Finn Williams <finn.williams@arm.com> | 2021-11-08 15:22:45 +0000 |
---|---|---|
committer | David Monahan <david.monahan@arm.com> | 2021-11-08 18:11:37 +0000 |
commit | b03e8ffd1a895b680dca1ce90c049fa7a9a40cb0 (patch) | |
tree | 03a97f1cb5d4d1d88324c059f782d840b7b0522d /src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp | |
parent | f8fb46df602c72d62defe82e3283b33f9eeccdd3 (diff) | |
download | armnn-b03e8ffd1a895b680dca1ce90c049fa7a9a40cb0.tar.gz |
Fix MemoryOptimizerStrategyLibrary search
Signed-off-by: Finn Williams <finn.williams@arm.com>
Change-Id: I4ca8d9196abd0e116d420a36c780e39edbca0eb3
Diffstat (limited to 'src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp')
-rw-r--r-- | src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp | 63 |
1 files changed, 33 insertions, 30 deletions
diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp index 5fa151560b..9814405ff7 100644 --- a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp +++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp @@ -6,49 +6,52 @@ #include <armnn/backends/IMemoryOptimizerStrategy.hpp> #include "MemoryOptimizerStrategyFactory.hpp" -#include <algorithm> #include "strategies/ConstantMemoryStrategy.hpp" #include "strategies/StrategyValidator.hpp" #include "strategies/SingleAxisPriorityList.hpp" -namespace +#include <map> + +namespace armnn { -// Default Memory Optimizer Strategies -static const std::vector<std::string> memoryOptimizationStrategies( +namespace { - "ConstantMemoryStrategy", - "SingleAxisPriorityList" - "StrategyValidator" -}); - -#define CREATE_MEMORY_OPTIMIZER_STRATEGY(strategyName, memoryOptimizerStrategy) \ -{ \ - MemoryOptimizerStrategyFactory memoryOptimizerStrategyFactory; \ - memoryOptimizerStrategy = memoryOptimizerStrategyFactory.CreateMemoryOptimizerStrategy<strategyName>(); \ -} \ -} // anonymous namespace -namespace armnn +static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>>& GetStrategyFactories() { - std::unique_ptr<IMemoryOptimizerStrategy> GetMemoryOptimizerStrategy(const std::string& strategyName) + static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>> strategies; + + if (strategies.size() == 0) { - auto doesStrategyExist = std::find(memoryOptimizationStrategies.begin(), - memoryOptimizationStrategies.end(), - strategyName) != memoryOptimizationStrategies.end(); - if (doesStrategyExist) - { - std::unique_ptr<IMemoryOptimizerStrategy> memoryOptimizerStrategy = nullptr; - CREATE_MEMORY_OPTIMIZER_STRATEGY(armnn::ConstantMemoryStrategy, - memoryOptimizerStrategy); - return memoryOptimizerStrategy; - } - return nullptr; + strategies["ConstantMemoryStrategy"] = std::make_unique<StrategyFactory<ConstantMemoryStrategy>>(); + strategies["SingleAxisPriorityList"] = std::make_unique<StrategyFactory<SingleAxisPriorityList>>(); + strategies["StrategyValidator"] = std::make_unique<StrategyFactory<StrategyValidator>>(); } + return strategies; +} + +} // anonymous namespace +std::unique_ptr<IMemoryOptimizerStrategy> GetMemoryOptimizerStrategy(const std::string& strategyName) +{ + const auto& strategyFactoryMap = GetStrategyFactories(); + auto strategyFactory = strategyFactoryMap.find(strategyName); + if (strategyFactory != GetStrategyFactories().end()) + { + return strategyFactory->second->CreateMemoryOptimizerStrategy(); + } + return nullptr; +} - const std::vector<std::string>& GetMemoryOptimizerStrategyNames() +const std::vector<std::string> GetMemoryOptimizerStrategyNames() +{ + const auto& strategyFactoryMap = GetStrategyFactories(); + std::vector<std::string> strategyNames; + for (const auto& strategyFactory : strategyFactoryMap) { - return memoryOptimizationStrategies; + strategyNames.emplace_back(strategyFactory.first); } + return strategyNames; +} } // namespace armnn
\ No newline at end of file |