1 // 2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #pragma once 6 7 #include <armnn/backends/IMemoryOptimizerStrategy.hpp> 8 #include "MemoryOptimizerStrategyFactory.hpp" 9 10 #include "strategies/ConstantMemoryStrategy.hpp" 11 #include "strategies/StrategyValidator.hpp" 12 #include "strategies/SingleAxisPriorityList.hpp" 13 14 #include <map> 15 16 namespace armnn 17 { 18 namespace 19 { 20 GetStrategyFactories()21static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>>& GetStrategyFactories() 22 { 23 static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>> strategies; 24 25 if (strategies.size() == 0) 26 { 27 strategies["ConstantMemoryStrategy"] = std::make_unique<StrategyFactory<ConstantMemoryStrategy>>(); 28 strategies["SingleAxisPriorityList"] = std::make_unique<StrategyFactory<SingleAxisPriorityList>>(); 29 strategies["StrategyValidator"] = std::make_unique<StrategyFactory<StrategyValidator>>(); 30 } 31 return strategies; 32 } 33 34 } // anonymous namespace 35 GetMemoryOptimizerStrategy(const std::string & strategyName)36std::unique_ptr<IMemoryOptimizerStrategy> GetMemoryOptimizerStrategy(const std::string& strategyName) 37 { 38 const auto& strategyFactoryMap = GetStrategyFactories(); 39 auto strategyFactory = strategyFactoryMap.find(strategyName); 40 if (strategyFactory != GetStrategyFactories().end()) 41 { 42 return strategyFactory->second->CreateMemoryOptimizerStrategy(); 43 } 44 return nullptr; 45 } 46 GetMemoryOptimizerStrategyNames()47const std::vector<std::string> GetMemoryOptimizerStrategyNames() 48 { 49 const auto& strategyFactoryMap = GetStrategyFactories(); 50 std::vector<std::string> strategyNames; 51 for (const auto& strategyFactory : strategyFactoryMap) 52 { 53 strategyNames.emplace_back(strategyFactory.first); 54 } 55 return strategyNames; 56 } 57 } // namespace armnn