blob: 9814405ff714650feac138ac162da918682d11a8 [file] [log] [blame]
Jim Flynne1fdd282021-10-26 21:26:10 +01001//
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 Flynne1fdd282021-10-26 21:26:10 +01009
10#include "strategies/ConstantMemoryStrategy.hpp"
11#include "strategies/StrategyValidator.hpp"
Finn Williamsf9d96e52021-10-27 11:25:02 +010012#include "strategies/SingleAxisPriorityList.hpp"
Jim Flynne1fdd282021-10-26 21:26:10 +010013
Finn Williamsb03e8ff2021-11-08 15:22:45 +000014#include <map>
Jim Flynne1fdd282021-10-26 21:26:10 +010015
Jim Flynne1fdd282021-10-26 21:26:10 +010016namespace armnn
17{
Finn Williamsb03e8ff2021-11-08 15:22:45 +000018namespace
19{
Jim Flynne1fdd282021-10-26 21:26:10 +010020
Finn Williamsb03e8ff2021-11-08 15:22:45 +000021static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>>& GetStrategyFactories()
22{
23 static std::map<std::string, std::unique_ptr<IMemoryOptimizerStrategyFactory>> strategies;
Jim Flynne1fdd282021-10-26 21:26:10 +010024
Finn Williamsb03e8ff2021-11-08 15:22:45 +000025 if (strategies.size() == 0)
Jim Flynne1fdd282021-10-26 21:26:10 +010026 {
Finn Williamsb03e8ff2021-11-08 15:22:45 +000027 strategies["ConstantMemoryStrategy"] = std::make_unique<StrategyFactory<ConstantMemoryStrategy>>();
28 strategies["SingleAxisPriorityList"] = std::make_unique<StrategyFactory<SingleAxisPriorityList>>();
29 strategies["StrategyValidator"] = std::make_unique<StrategyFactory<StrategyValidator>>();
Jim Flynne1fdd282021-10-26 21:26:10 +010030 }
Finn Williamsb03e8ff2021-11-08 15:22:45 +000031 return strategies;
32}
33
34} // anonymous namespace
35
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
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}
Jim Flynne1fdd282021-10-26 21:26:10 +010057} // namespace armnn