8 #include <doctest/doctest.h> 11 using namespace armnn;
21 : m_Name(std::string(
"testMemoryOptimizerStrategy"))
22 , m_MemBlockStrategyType(type) {}
24 std::string GetName()
const override 31 return m_MemBlockStrategyType;
34 std::vector<MemBin>
Optimize(std::vector<MemBlock>& memBlocks)
override 36 std::vector<MemBin> memBins;
37 memBins.reserve(memBlocks.size());
42 for (
auto& memBlock : memBlocks)
48 memBins.push_back(memBin);
58 TEST_CASE(
"MemoryOptimizerStrategyValidatorTestOverlapX")
63 MemBlock memBlock2(11, 15, 15, 0, 2);
64 MemBlock memBlock3(16, 20, 20, 0, 3);
67 std::vector<MemBlock> memBlocks;
69 memBlocks.push_back(memBlock0);
70 memBlocks.push_back(memBlock1);
71 memBlocks.push_back(memBlock2);
72 memBlocks.push_back(memBlock3);
73 memBlocks.push_back(memBlock4);
77 auto ptr = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategySingle);
81 CHECK_NOTHROW(validator.Optimize(memBlocks));
85 auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategyMulti);
89 CHECK_NOTHROW(validatorMulti.Optimize(memBlocks));
92 TEST_CASE(
"MemoryOptimizerStrategyValidatorTestOverlapXAndY")
101 std::vector<MemBlock> memBlocks;
102 memBlocks.reserve(5);
103 memBlocks.push_back(memBlock0);
104 memBlocks.push_back(memBlock1);
105 memBlocks.push_back(memBlock2);
106 memBlocks.push_back(memBlock3);
107 memBlocks.push_back(memBlock4);
111 auto ptr = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategySingle);
115 CHECK_THROWS(validator.Optimize(memBlocks));
119 auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategyMulti);
123 CHECK_THROWS(validatorMulti.Optimize(memBlocks));
126 TEST_CASE(
"MemoryOptimizerStrategyValidatorTestOverlapY")
130 MemBlock memBlock1(0, 3, 10, 21, 1);
131 MemBlock memBlock2(0, 5, 15, 37, 2);
132 MemBlock memBlock3(0, 6, 20, 58, 3);
135 std::vector<MemBlock> memBlocks;
136 memBlocks.reserve(5);
137 memBlocks.push_back(memBlock0);
138 memBlocks.push_back(memBlock1);
139 memBlocks.push_back(memBlock2);
140 memBlocks.push_back(memBlock3);
141 memBlocks.push_back(memBlock4);
145 auto ptr = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategySingle);
149 CHECK_THROWS(validator.Optimize(memBlocks));
153 auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategyMulti);
157 CHECK_NOTHROW(validatorMulti.Optimize(memBlocks));
162 class TestMemoryOptimizerStrategyDuplicate :
public TestMemoryOptimizerStrategy
166 : TestMemoryOptimizerStrategy(type)
169 std::vector<MemBin>
Optimize(std::vector<MemBlock>& memBlocks)
override 171 std::vector<MemBin> memBins;
172 memBins.reserve(memBlocks.size());
176 for (
auto& memBlock : memBlocks)
183 memBins.push_back(memBin);
189 TEST_CASE(
"MemoryOptimizerStrategyValidatorTestDuplicateBlocks")
193 MemBlock memBlock1(2, 3, 10, 20, 1);
194 MemBlock memBlock2(3, 5, 15, 30, 2);
195 MemBlock memBlock3(5, 6, 20, 50, 3);
198 std::vector<MemBlock> memBlocks;
199 memBlocks.reserve(5);
200 memBlocks.push_back(memBlock0);
201 memBlocks.push_back(memBlock1);
202 memBlocks.push_back(memBlock2);
203 memBlocks.push_back(memBlock3);
204 memBlocks.push_back(memBlock4);
209 auto ptr = std::make_shared<TestMemoryOptimizerStrategyDuplicate>(testMemoryOptimizerStrategySingle);
212 CHECK_THROWS(validator.Optimize(memBlocks));
216 auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategyDuplicate>(testMemoryOptimizerStrategyMulti);
219 CHECK_THROWS(validatorMulti.Optimize(memBlocks));
224 class TestMemoryOptimizerStrategySkip :
public TestMemoryOptimizerStrategy
228 : TestMemoryOptimizerStrategy(type)
231 std::vector<MemBin>
Optimize(std::vector<MemBlock>& memBlocks)
override 233 std::vector<MemBin> memBins;
234 memBins.reserve(memBlocks.size());
238 for (
unsigned int i = 0; i < memBlocks.size()-1; i+=2)
240 auto memBlock = memBlocks[i];
244 memBins.push_back(memBin);
250 TEST_CASE(
"MemoryOptimizerStrategyValidatorTestSkipBlocks")
254 MemBlock memBlock1(2, 3, 10, 20, 1);
255 MemBlock memBlock2(3, 5, 15, 30, 2);
256 MemBlock memBlock3(5, 6, 20, 50, 3);
259 std::vector<MemBlock> memBlocks;
260 memBlocks.reserve(5);
261 memBlocks.push_back(memBlock0);
262 memBlocks.push_back(memBlock1);
263 memBlocks.push_back(memBlock2);
264 memBlocks.push_back(memBlock3);
265 memBlocks.push_back(memBlock4);
270 auto ptr = std::make_shared<TestMemoryOptimizerStrategySkip>(testMemoryOptimizerStrategySingle);
273 CHECK_THROWS(validator.Optimize(memBlocks));
277 auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategySkip>(testMemoryOptimizerStrategyMulti);
280 CHECK_THROWS(validatorMulti.Optimize(memBlocks));
TEST_SUITE("TestConstTensorLayerVisitor")
std::vector< MemBlock > m_MemBlocks
Copyright (c) 2021 ARM Limited and Contributors.
IOptimizedNetworkPtr Optimize(const INetwork &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > &> messages=EmptyOptional())
Create an optimized version of the network.
void SetStrategy(std::shared_ptr< IMemoryOptimizerStrategy > strategy)