Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 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" |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 9 | |
| 10 | #include "strategies/ConstantMemoryStrategy.hpp" |
| 11 | #include "strategies/StrategyValidator.hpp" |
Finn Williams | f9d96e5 | 2021-10-27 11:25:02 +0100 | [diff] [blame] | 12 | #include "strategies/SingleAxisPriorityList.hpp" |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 13 | |
Finn Williams | b03e8ff | 2021-11-08 15:22:45 +0000 | [diff] [blame] | 14 | #include <map> |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 15 | |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 16 | namespace armnn |
| 17 | { |
Finn Williams | b03e8ff | 2021-11-08 15:22:45 +0000 | [diff] [blame] | 18 | namespace |
| 19 | { |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 20 | |
Finn Williams | b03e8ff | 2021-11-08 15:22:45 +0000 | [diff] [blame] | 21 | static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>>& GetStrategyFactories() |
| 22 | { |
| 23 | static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>> strategies; |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 24 | |
Finn Williams | b03e8ff | 2021-11-08 15:22:45 +0000 | [diff] [blame] | 25 | if (strategies.size() == 0) |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 26 | { |
Finn Williams | b03e8ff | 2021-11-08 15:22:45 +0000 | [diff] [blame] | 27 | strategies["ConstantMemoryStrategy"] = std::make_unique<StrategyFactory<ConstantMemoryStrategy>>(); |
| 28 | strategies["SingleAxisPriorityList"] = std::make_unique<StrategyFactory<SingleAxisPriorityList>>(); |
| 29 | strategies["StrategyValidator"] = std::make_unique<StrategyFactory<StrategyValidator>>(); |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 30 | } |
Finn Williams | b03e8ff | 2021-11-08 15:22:45 +0000 | [diff] [blame] | 31 | return strategies; |
| 32 | } |
| 33 | |
| 34 | } // anonymous namespace |
| 35 | |
| 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 | |
| 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 | } |
Jim Flynn | e1fdd28 | 2021-10-26 21:26:10 +0100 | [diff] [blame] | 57 | } // namespace armnn |