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()21 static 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)36 std::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()47 const 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