blob: 64312f362f5556afb32574c6b5f9f432f259e8d6 [file] [log] [blame]
Sadik Armagan932cf3f2021-09-15 09:22:11 +01001//
2// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Jim Flynne1fdd282021-10-26 21:26:10 +01006#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.hpp>
7#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp>
Sadik Armagan932cf3f2021-09-15 09:22:11 +01008
9#include <doctest/doctest.h>
10#include <vector>
11
12using namespace armnn;
13
Jim Flynne1fdd282021-10-26 21:26:10 +010014TEST_SUITE("ConstMemoryStrategyTestSuite")
Sadik Armagan932cf3f2021-09-15 09:22:11 +010015{
16
Jim Flynne1fdd282021-10-26 21:26:10 +010017TEST_CASE("ConstMemoryStrategyTest")
Sadik Armagan932cf3f2021-09-15 09:22:11 +010018{
19 // create a few memory blocks
20 MemBlock memBlock0(0, 2, 20, 0, 0);
21 MemBlock memBlock1(2, 3, 10, 20, 1);
22 MemBlock memBlock2(3, 5, 15, 30, 2);
23 MemBlock memBlock3(5, 6, 20, 50, 3);
24 MemBlock memBlock4(7, 8, 5, 70, 4);
25
26 std::vector<MemBlock> memBlocks;
27 memBlocks.reserve(5);
28 memBlocks.push_back(memBlock0);
29 memBlocks.push_back(memBlock1);
30 memBlocks.push_back(memBlock2);
31 memBlocks.push_back(memBlock3);
32 memBlocks.push_back(memBlock4);
33
Jim Flynne1fdd282021-10-26 21:26:10 +010034 // Optimize the memory blocks with ConstantMemoryStrategy
35 ConstantMemoryStrategy constLayerMemoryOptimizerStrategy;
36 CHECK_EQ(constLayerMemoryOptimizerStrategy.GetName(), std::string("ConstantMemoryStrategy"));
Sadik Armagan932cf3f2021-09-15 09:22:11 +010037 CHECK_EQ(constLayerMemoryOptimizerStrategy.GetMemBlockStrategyType(), MemBlockStrategyType::SingleAxisPacking);
38 auto memBins = constLayerMemoryOptimizerStrategy.Optimize(memBlocks);
39 CHECK(memBins.size() == 5);
40
41 CHECK(memBins[1].m_MemBlocks.size() == 1);
42 CHECK(memBins[1].m_MemBlocks[0].m_Offset == 0);
43 CHECK(memBins[1].m_MemBlocks[0].m_MemSize == 10);
44 CHECK(memBins[1].m_MemBlocks[0].m_Index == 1);
45
46 CHECK(memBins[4].m_MemBlocks.size() == 1);
47 CHECK(memBins[4].m_MemBlocks[0].m_Offset == 0);
48 CHECK(memBins[4].m_MemBlocks[0].m_MemSize == 5);
49 CHECK(memBins[4].m_MemBlocks[0].m_Index == 4);
50}
51
Francis Murtaghca49a242021-09-28 15:30:31 +010052TEST_CASE("ConstLayerMemoryOptimizerStrategyValidatorTest")
53{
54 // create a few memory blocks
55 MemBlock memBlock0(0, 2, 20, 0, 0);
56 MemBlock memBlock1(2, 3, 10, 20, 1);
57 MemBlock memBlock2(3, 5, 15, 30, 2);
58 MemBlock memBlock3(5, 6, 20, 50, 3);
59 MemBlock memBlock4(7, 8, 5, 70, 4);
60
61 std::vector<MemBlock> memBlocks;
62 memBlocks.reserve(5);
63 memBlocks.push_back(memBlock0);
64 memBlocks.push_back(memBlock1);
65 memBlocks.push_back(memBlock2);
66 memBlocks.push_back(memBlock3);
67 memBlocks.push_back(memBlock4);
68
69 // Optimize the memory blocks with ConstLayerMemoryOptimizerStrategy
Jim Flynne1fdd282021-10-26 21:26:10 +010070 auto ptr = std::make_shared<ConstantMemoryStrategy>();
71 StrategyValidator validator;
72 validator.SetStrategy(ptr);
Francis Murtaghca49a242021-09-28 15:30:31 +010073 // Ensure ConstLayerMemoryOptimizerStrategy is valid
Jim Flynne1fdd282021-10-26 21:26:10 +010074 CHECK_NOTHROW(validator.Optimize(memBlocks));
Francis Murtaghca49a242021-09-28 15:30:31 +010075}
76
Sadik Armagan932cf3f2021-09-15 09:22:11 +010077}