diff options
Diffstat (limited to 'src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test')
3 files changed, 86 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt index b96782a84d..3068b609f6 100644 --- a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt +++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt @@ -6,6 +6,7 @@ list(APPEND armnnMemoryOptimizationStrategiesUnitTests_sources ConstMemoryStrategyTests.cpp ValidatorStrategyTests.cpp + SingleAxisPriorityListTests.cpp ) add_library(armnnMemoryOptimizationStrategiesUnitTests OBJECT ${armnnMemoryOptimizationStrategiesUnitTests_sources}) diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/SingleAxisPriorityListTests.cpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/SingleAxisPriorityListTests.cpp new file mode 100644 index 0000000000..516f6f3771 --- /dev/null +++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/SingleAxisPriorityListTests.cpp @@ -0,0 +1,42 @@ +// +// Copyright © 2021 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/SingleAxisPriorityList.hpp> +#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp> +#include "TestMemBlocks.hpp" + +#include <doctest/doctest.h> +#include <vector> + +using namespace armnn; + +TEST_SUITE("SingleAxisPriorityListTestSuite") +{ + TEST_CASE("SingleAxisPriorityListTest") + { + std::vector<MemBlock> memBlocks = fsrcnn; + + auto singleAxisPriorityList = std::make_shared<SingleAxisPriorityList>(); + + CHECK_EQ(singleAxisPriorityList->GetName(), std::string("SingleAxisPriorityList")); + CHECK_EQ(singleAxisPriorityList->GetMemBlockStrategyType(), MemBlockStrategyType::SingleAxisPacking); + + StrategyValidator validator; + validator.SetStrategy(singleAxisPriorityList); + + std::vector<MemBin> memBins; + + CHECK_NOTHROW(memBins = validator.Optimize(memBlocks)); + + size_t minMemSize = GetMinPossibleMemorySize(memBlocks); + size_t actualSize = 0; + for (auto memBin : memBins) + { + actualSize += memBin.m_MemSize; + } + + CHECK(minMemSize == actualSize); + } +} diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/TestMemBlocks.hpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/TestMemBlocks.hpp new file mode 100644 index 0000000000..09369d1efa --- /dev/null +++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/TestMemBlocks.hpp @@ -0,0 +1,43 @@ +// +// Copyright © 2021 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +size_t GetMinPossibleMemorySize(const std::vector<armnn::MemBlock>& blocks) +{ + unsigned int maxLifetime = 0; + for (auto& block: blocks) + { + maxLifetime = std::max(maxLifetime, block.m_EndOfLife); + } + maxLifetime++; + + std::vector<size_t> lifetimes(maxLifetime); + for (const auto& block : blocks) + { + for (auto lifetime = block.m_StartOfLife; lifetime <= block.m_EndOfLife; ++lifetime) + { + lifetimes[lifetime] += block.m_MemSize; + } + } + return *std::max_element(lifetimes.begin(), lifetimes.end()); +} + +// Generated from fsrcnn_720p.tflite +std::vector<armnn::MemBlock> fsrcnn +{ + { 0, 1, 691200, 0, 0 }, + { 1, 3, 7372800, 0, 1 }, + { 2, 5, 7372800, 0, 2 }, + { 3, 7, 1843200, 0, 3 }, + { 4, 9, 1843200, 0, 4 }, + { 5, 11, 1843200, 0, 5 }, + { 6, 13, 1843200, 0, 6 }, + { 7, 15, 1843200, 0, 7 }, + { 8, 17, 1843200, 0, 8 }, + { 9, 19, 7372800, 0, 9 }, + { 10, 21, 7372800, 0, 10 }, + { 11, 23, 2764800, 0, 11 }, + { 12, 25, 2764800, 0, 12 }, + { 13, 27, 2764800, 0, 13 } +};
\ No newline at end of file |