aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2021-10-26 21:26:10 +0100
committerJim Flynn <jim.flynn@arm.com>2021-10-26 21:27:22 +0100
commite1fdd2866b0f403b5e80994890d62c2c038c16c9 (patch)
treed7398443532cbafde7c6824015397e6bac6dd502
parentca5883951ab51191eb19502459f0936fc96e14f1 (diff)
downloadarmnn-e1fdd2866b0f403b5e80994890d62c2c038c16c9.tar.gz
IVGCVSW-6470 Create MemoryStrategyBenchmark
* Refactor the strategy library to be more generic * Shorten the names of the current strategies * Change validatorStrat to throw exceptions Change-Id: I0d9c9ef609b2d8675e5788610d1accac6767c660 Signed-off-by: Finn Williams <finwil01@e127804.cambridge.arm.com> Signed-off-by: Jim Flynn <jim.flynn@arm.com>
-rw-r--r--cmake/GlobalConfig.cmake1
-rw-r--r--include/armnn/Exceptions.hpp6
-rw-r--r--include/armnn/IRuntime.hpp2
-rw-r--r--src/armnn/Runtime.cpp32
-rw-r--r--src/backends/backendsCommon/CMakeLists.txt7
-rw-r--r--src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp68
-rw-r--r--src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.hpp21
-rw-r--r--src/backends/backendsCommon/common.mk10
-rw-r--r--src/backends/backendsCommon/memoryOptimizationStrategies/CMakeLists.txt23
-rw-r--r--src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp27
-rw-r--r--src/backends/backendsCommon/memoryOptimizationStrategies/test/CMakeLists.txt17
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/CMakeLists.txt19
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyFactory.hpp (renamed from src/backends/backendsCommon/MemoryOptimizerStrategyFactory.hpp)4
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp52
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.cpp (renamed from src/backends/backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.cpp)8
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.hpp (renamed from src/backends/backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp)6
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.cpp (renamed from src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.cpp)61
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp41
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt12
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/ConstMemoryStrategyTests.cpp (renamed from src/backends/backendsCommon/memoryOptimizationStrategies/test/ConstLayerMemoryOptimizerStrategyTests.cpp)22
-rw-r--r--src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/ValidatorStrategyTests.cpp (renamed from src/backends/backendsCommon/memoryOptimizationStrategies/test/MemoryOptimizerStrategyValidatorTests.cpp)52
-rw-r--r--src/backends/backendsCommon/test/BackendRegistryTests.cpp4
-rw-r--r--src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp6
-rw-r--r--tests/CMakeLists.txt4
-rw-r--r--tests/MemoryStrategyBenchmark/CMakeLists.txt16
-rw-r--r--tests/MemoryStrategyBenchmark/MemoryStrategyBenchmark.cpp206
-rw-r--r--tests/MemoryStrategyBenchmark/TestBlocks.hpp1575
-rw-r--r--tests/MemoryStrategyBenchmark/TestStrategy.cpp43
-rw-r--r--tests/MemoryStrategyBenchmark/TestStrategy.hpp31
29 files changed, 2133 insertions, 243 deletions
diff --git a/cmake/GlobalConfig.cmake b/cmake/GlobalConfig.cmake
index ef18ed0030..1dc2d67f49 100644
--- a/cmake/GlobalConfig.cmake
+++ b/cmake/GlobalConfig.cmake
@@ -32,6 +32,7 @@ option(BUILD_PYTHON_SRC "Build Python source package" OFF)
option(BUILD_STATIC_PIPE_LIBS "Build Static PIPE libraries" OFF)
option(BUILD_PIPE_ONLY "Build the PIPE libraries only" OFF)
option(BUILD_ARMNN_TFLITE_DELEGATE "Build the Arm NN TfLite delegate" OFF)
+option(BUILD_MEMORY_STRATEGY_BENCHMARK "Build the MemoryBenchmark" OFF)
include(SelectLibraryConfigurations)
diff --git a/include/armnn/Exceptions.hpp b/include/armnn/Exceptions.hpp
index 1a123bfbce..980b57449d 100644
--- a/include/armnn/Exceptions.hpp
+++ b/include/armnn/Exceptions.hpp
@@ -161,6 +161,12 @@ public:
using Exception::Exception;
};
+class MemoryValidationException : public Exception
+{
+public:
+ using Exception::Exception;
+};
+
template <typename ExceptionType>
void ConditionalThrow(bool condition, const std::string& message)
{
diff --git a/include/armnn/IRuntime.hpp b/include/armnn/IRuntime.hpp
index 014481357d..b89cfd72cd 100644
--- a/include/armnn/IRuntime.hpp
+++ b/include/armnn/IRuntime.hpp
@@ -198,7 +198,7 @@ public:
/// The following backend options are available:
/// AllBackends:
/// "MemoryOptimizerStrategy" : string [stategynameString]
- /// (Existing Memory Optimizer Strategies: ConstLayerMemoryOptimizerStrategy)
+ /// (Existing Memory Optimizer Strategies: ConstantMemoryStrategy)
/// GpuAcc:
/// "TuningLevel" : int [0..3] (0=UseOnly(default) | 1=RapidTuning | 2=NormalTuning | 3=ExhaustiveTuning)
/// "TuningFile" : string [filenameString]
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index ca28199aae..9e212306c4 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -12,7 +12,7 @@
#include <armnn/backends/IBackendContext.hpp>
#include <backendsCommon/DynamicBackendUtils.hpp>
-#include <backendsCommon/MemoryOptimizerStrategyLibrary.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp>
#include <armnn/utility/PolymorphicDowncast.hpp>
#include <common/include/LabelsAndEventClasses.hpp>
@@ -425,11 +425,33 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options)
});
if (memoryOptimizerStrategyName != "")
{
- MemoryOptimizerStrategyLibrary memoryOptimizerStrategyLibrary;
- if (memoryOptimizerStrategyLibrary.SetMemoryOptimizerStrategy(id, memoryOptimizerStrategyName))
+ std::shared_ptr<IMemoryOptimizerStrategy> strategy =
+ GetMemoryOptimizerStrategy(memoryOptimizerStrategyName);
+
+ if (!strategy)
{
- ARMNN_LOG(info) << "MemoryOptimizerStrategy "
- << memoryOptimizerStrategyName << " set for the backend " << id << ".";
+ ARMNN_LOG(warning) << "MemoryOptimizerStrategy: " << memoryOptimizerStrategyName
+ << " was not found \n";
+ }
+ else
+ {
+ using BackendCapability = BackendOptions::BackendOption;
+ auto strategyType = GetMemBlockStrategyTypeName(strategy->GetMemBlockStrategyType());
+ BackendCapability memOptimizeStrategyCapability {strategyType, true};
+ if (HasCapability(memOptimizeStrategyCapability, id))
+ {
+ BackendRegistryInstance().RegisterMemoryOptimizerStrategy(id, strategy);
+
+ ARMNN_LOG(info) << "MemoryOptimizerStrategy: "
+ << memoryOptimizerStrategyName << " set for the backend " << id << ".";
+ }
+ else
+ {
+ ARMNN_LOG(warning) << "Backend "
+ << id
+ << " does not have multi-axis packing capability and cannot support"
+ << "MemoryOptimizerStrategy: " << memoryOptimizerStrategyName << "\n";
+ }
}
}
}
diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt
index 90fb376dae..dfd35018d9 100644
--- a/src/backends/backendsCommon/CMakeLists.txt
+++ b/src/backends/backendsCommon/CMakeLists.txt
@@ -24,9 +24,6 @@ list(APPEND armnnBackendsCommon_sources
MemCopyWorkload.hpp
MemImportWorkload.cpp
MemImportWorkload.hpp
- MemoryOptimizerStrategyFactory.hpp
- MemoryOptimizerStrategyLibrary.cpp
- MemoryOptimizerStrategyLibrary.hpp
MemoryManager.cpp
MemoryManager.hpp
MemSyncWorkload.cpp
@@ -51,7 +48,7 @@ list(APPEND armnnBackendsCommon_sources
WorkloadUtils.hpp
)
-add_subdirectory(memoryOptimizationStrategies)
+add_subdirectory(memoryOptimizerStrategyLibrary)
if(BUILD_UNIT_TESTS)
add_subdirectory(test)
@@ -63,4 +60,4 @@ target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src
target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/src/profiling)
-target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/profiling/common/include) \ No newline at end of file
+target_include_directories(armnnBackendsCommon PRIVATE ${PROJECT_SOURCE_DIR}/profiling/common/include)
diff --git a/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp b/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp
deleted file mode 100644
index 0b48cbd176..0000000000
--- a/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "MemoryOptimizerStrategyLibrary.hpp"
-#include "MemoryOptimizerStrategyFactory.hpp"
-
-#include <armnn/BackendHelper.hpp>
-#include <armnn/Logging.hpp>
-#include <armnn/TypesUtils.hpp>
-
-#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
-
-#include <backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp>
-
-#include <algorithm>
-
-namespace
-{
-// Default Memory Optimizer Strategies
-static const std::vector<std::string> memoryOptimizationStrategies({
- "ConstLayerMemoryOptimizerStrategy",
- });
-
-#define CREATE_MEMORY_OPTIMIZER_STRATEGY(strategyName, memoryOptimizerStrategy) \
-{ \
- MemoryOptimizerStrategyFactory memoryOptimizerStrategyFactory; \
- memoryOptimizerStrategy = memoryOptimizerStrategyFactory.CreateMemoryOptimizerStrategy<strategyName>(); \
-} \
-
-} // anonymous namespace
-
-namespace armnn
-{
-
-bool MemoryOptimizerStrategyLibrary::SetMemoryOptimizerStrategy(const BackendId& id, const std::string& strategyName)
-{
- auto isStrategyExist = std::find(memoryOptimizationStrategies.begin(),
- memoryOptimizationStrategies.end(),
- strategyName) != memoryOptimizationStrategies.end();
- if (isStrategyExist)
- {
- std::shared_ptr<IMemoryOptimizerStrategy> memoryOptimizerStrategy = nullptr;
- CREATE_MEMORY_OPTIMIZER_STRATEGY(armnn::ConstLayerMemoryOptimizerStrategy,
- memoryOptimizerStrategy);
- if (memoryOptimizerStrategy)
- {
- using BackendCapability = BackendOptions::BackendOption;
- auto strategyType = GetMemBlockStrategyTypeName(memoryOptimizerStrategy->GetMemBlockStrategyType());
- BackendCapability memOptimizeStrategyCapability {strategyType, true};
- if (HasCapability(memOptimizeStrategyCapability, id))
- {
- BackendRegistryInstance().RegisterMemoryOptimizerStrategy(id, memoryOptimizerStrategy);
- return true;
- }
- // reset shared_ptr memoryOptimizerStrategy
- memoryOptimizerStrategy.reset();
- }
- }
- ARMNN_LOG(warning) << "Backend "
- << id
- << " is not registered as does not support memory optimizer strategy "
- << strategyName << " \n";
- return false;
-}
-
-} // namespace armnn \ No newline at end of file
diff --git a/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.hpp b/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.hpp
deleted file mode 100644
index 795fc640b9..0000000000
--- a/src/backends/backendsCommon/MemoryOptimizerStrategyLibrary.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <armnn/BackendRegistry.hpp>
-
-namespace armnn
-{
-
-class MemoryOptimizerStrategyLibrary
-{
-public:
- MemoryOptimizerStrategyLibrary() = default;
-
- bool SetMemoryOptimizerStrategy(const BackendId& id, const std::string& strategyName);
-
-};
-
-} // namespace armnn \ No newline at end of file
diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk
index 910f9a4210..f90a7c855e 100644
--- a/src/backends/backendsCommon/common.mk
+++ b/src/backends/backendsCommon/common.mk
@@ -17,7 +17,6 @@ COMMON_SOURCES := \
MapWorkload.cpp \
MemCopyWorkload.cpp \
MemImportWorkload.cpp \
- MemoryOptimizerStrategyLibrary.cpp \
MemSyncWorkload.cpp \
OptimizationViews.cpp \
TensorHandleFactoryRegistry.cpp \
@@ -25,8 +24,9 @@ COMMON_SOURCES := \
WorkloadData.cpp \
WorkloadFactory.cpp \
WorkloadUtils.cpp \
- memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.cpp \
- memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.cpp
+ memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.cpp \
+ memoryOptimizerStrategyLibrary/strategies/StrategyValidator.cpp \
+
# COMMON_TEST_SOURCES contains the list of files to be included
# in the Android unit test build (armnn-tests) and it is picked
@@ -102,8 +102,8 @@ COMMON_TEST_SOURCES := \
test/layerTests/SubtractionTestImpl.cpp \
test/layerTests/TransposeConvolution2dTestImpl.cpp \
test/layerTests/UnidirectionalSequenceLstmTestImpl.cpp \
- memoryOptimizationStrategies/test/ConstLayerMemoryOptimizerStrategyTests.cpp \
- memoryOptimizationStrategies/test/MemoryOptimizerStrategyValidatorTests.cpp
+ memoryOptimizerStrategyLibrary/test/ConstMemoryStrategyTests.cpp \
+ memoryOptimizerStrategyLibrary/test/ValidatorStrategyTests.cpp
ifeq ($(ARMNN_REF_ENABLED),1)
COMMON_TEST_SOURCES += \
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/CMakeLists.txt b/src/backends/backendsCommon/memoryOptimizationStrategies/CMakeLists.txt
deleted file mode 100644
index de83505f7c..0000000000
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
-# SPDX-License-Identifier: MIT
-#
-
-list(APPEND armnnMemoryOptimizationStrategies_sources
- ConstLayerMemoryOptimizerStrategy.hpp
- ConstLayerMemoryOptimizerStrategy.cpp
- MemoryOptimizerStrategyValidator.hpp
- MemoryOptimizerStrategyValidator.cpp
-)
-
-if(BUILD_UNIT_TESTS)
- add_subdirectory(test)
-endif()
-
-add_library(armnnMemoryOptimizationStrategies OBJECT ${armnnMemoryOptimizationStrategies_sources})
-target_include_directories(armnnMemoryOptimizationStrategies PRIVATE ${PROJECT_SOURCE_DIR}/include/armnn)
-target_include_directories(armnnMemoryOptimizationStrategies PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnMemoryOptimizationStrategies PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
-target_include_directories(armnnMemoryOptimizationStrategies PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
-target_include_directories(armnnMemoryOptimizationStrategies PRIVATE ${PROJECT_SOURCE_DIR}/src/profiling)
-target_include_directories(armnnMemoryOptimizationStrategies PRIVATE ${PROJECT_SOURCE_DIR}/profiling/common/include) \ No newline at end of file
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp b/src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp
deleted file mode 100644
index 13e90593d8..0000000000
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <armnn/Types.hpp>
-#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
-
-namespace armnn
-{
-
-class MemoryOptimizerValidator
-{
-public:
- explicit MemoryOptimizerValidator(std::shared_ptr<IMemoryOptimizerStrategy> strategy)
- : m_Strategy(strategy)
- {
- };
-
- bool Validate(std::vector<MemBlock>& memBlocks);
-
-private:
- std::shared_ptr<IMemoryOptimizerStrategy> m_Strategy;
-};
-
-} // namespace armnn \ No newline at end of file
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/test/CMakeLists.txt b/src/backends/backendsCommon/memoryOptimizationStrategies/test/CMakeLists.txt
deleted file mode 100644
index 1e16f09411..0000000000
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/test/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
-# SPDX-License-Identifier: MIT
-#
-
-list(APPEND armnnMemoryOptimizationStrategiesUnitTests_sources
- ConstLayerMemoryOptimizerStrategyTests.cpp
- MemoryOptimizerStrategyValidatorTests.cpp
-)
-
-add_library(armnnMemoryOptimizationStrategiesUnitTests OBJECT ${armnnMemoryOptimizationStrategiesUnitTests_sources})
-target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
-target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
-target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/profiling)
-target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/profiling/common/include)
-target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/third-party)
diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/CMakeLists.txt b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/CMakeLists.txt
new file mode 100644
index 0000000000..43ec9db670
--- /dev/null
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/CMakeLists.txt
@@ -0,0 +1,19 @@
+#
+# Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+list(APPEND armnnMemoryOptimizationStrategies_sources
+ MemoryOptimizerStrategyLibrary.hpp
+ MemoryOptimizerStrategyFactory.hpp
+ strategies/ConstantMemoryStrategy.hpp
+ strategies/ConstantMemoryStrategy.cpp
+ strategies/StrategyValidator.hpp
+ strategies/StrategyValidator.cpp
+)
+
+if(BUILD_UNIT_TESTS)
+ add_subdirectory(test)
+endif()
+
+add_library(armnnMemoryOptimizationStrategies OBJECT ${armnnMemoryOptimizationStrategies_sources}) \ No newline at end of file
diff --git a/src/backends/backendsCommon/MemoryOptimizerStrategyFactory.hpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyFactory.hpp
index 62a2182a6e..aff0995266 100644
--- a/src/backends/backendsCommon/MemoryOptimizerStrategyFactory.hpp
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyFactory.hpp
@@ -18,9 +18,9 @@ public:
MemoryOptimizerStrategyFactory() {}
template <typename T>
- std::shared_ptr<IMemoryOptimizerStrategy> CreateMemoryOptimizerStrategy()
+ std::unique_ptr<IMemoryOptimizerStrategy> CreateMemoryOptimizerStrategy()
{
- return std::make_shared<T>();
+ return std::make_unique<T>();
}
};
diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp
new file mode 100644
index 0000000000..5e20a9f218
--- /dev/null
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp
@@ -0,0 +1,52 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
+#include "MemoryOptimizerStrategyFactory.hpp"
+#include <algorithm>
+
+#include "strategies/ConstantMemoryStrategy.hpp"
+#include "strategies/StrategyValidator.hpp"
+
+namespace
+{
+// Default Memory Optimizer Strategies
+static const std::vector<std::string> memoryOptimizationStrategies(
+{
+ "ConstantMemoryStrategy",
+ "StrategyValidator"
+});
+
+#define CREATE_MEMORY_OPTIMIZER_STRATEGY(strategyName, memoryOptimizerStrategy) \
+{ \
+ MemoryOptimizerStrategyFactory memoryOptimizerStrategyFactory; \
+ memoryOptimizerStrategy = memoryOptimizerStrategyFactory.CreateMemoryOptimizerStrategy<strategyName>(); \
+} \
+
+} // anonymous namespace
+namespace armnn
+{
+ std::unique_ptr<IMemoryOptimizerStrategy> GetMemoryOptimizerStrategy(const std::string& strategyName)
+ {
+ auto doesStrategyExist = std::find(memoryOptimizationStrategies.begin(),
+ memoryOptimizationStrategies.end(),
+ strategyName) != memoryOptimizationStrategies.end();
+ if (doesStrategyExist)
+ {
+ std::unique_ptr<IMemoryOptimizerStrategy> memoryOptimizerStrategy = nullptr;
+ CREATE_MEMORY_OPTIMIZER_STRATEGY(armnn::ConstantMemoryStrategy,
+ memoryOptimizerStrategy);
+ return memoryOptimizerStrategy;
+ }
+ return nullptr;
+ }
+
+
+ const std::vector<std::string>& GetMemoryOptimizerStrategyNames()
+ {
+ return memoryOptimizationStrategies;
+ }
+} // namespace armnn \ No newline at end of file
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.cpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.cpp
index 023c6361d0..55f7f89f4b 100644
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.cpp
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.cpp
@@ -3,17 +3,17 @@
// SPDX-License-Identifier: MIT
//
-#include "ConstLayerMemoryOptimizerStrategy.hpp"
+#include "ConstantMemoryStrategy.hpp"
namespace armnn
{
-std::string ConstLayerMemoryOptimizerStrategy::GetName() const
+std::string ConstantMemoryStrategy::GetName() const
{
return m_Name;
}
-MemBlockStrategyType ConstLayerMemoryOptimizerStrategy::GetMemBlockStrategyType() const
+MemBlockStrategyType ConstantMemoryStrategy::GetMemBlockStrategyType() const
{
return m_MemBlockStrategyType;
}
@@ -22,7 +22,7 @@ MemBlockStrategyType ConstLayerMemoryOptimizerStrategy::GetMemBlockStrategyType(
// 1: All MemBlocks have been assigned to a MemBin
// 2: No MemBlock is assigned to multiple MemBins
// 3: No two Memblocks in a MemBin overlap in both the X and Y axis
-std::vector<MemBin> ConstLayerMemoryOptimizerStrategy::Optimize(std::vector<MemBlock>& memBlocks)
+std::vector<MemBin> ConstantMemoryStrategy::Optimize(std::vector<MemBlock>& memBlocks)
{
std::vector<MemBin> memBins;
memBins.reserve(memBlocks.size());
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.hpp
index 3f803abe87..249c133a0f 100644
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.hpp
@@ -10,11 +10,11 @@
namespace armnn
{
// ConstLayerMemoryOptimizer: Create a unique MemBin for each MemBlock and assign it an offset of 0
-class ConstLayerMemoryOptimizerStrategy : public IMemoryOptimizerStrategy
+class ConstantMemoryStrategy : public IMemoryOptimizerStrategy
{
public:
- ConstLayerMemoryOptimizerStrategy()
- : m_Name(std::string("ConstLayerMemoryOptimizerStrategy"))
+ ConstantMemoryStrategy()
+ : m_Name(std::string("ConstantMemoryStrategy"))
, m_MemBlockStrategyType(MemBlockStrategyType::SingleAxisPacking) {}
std::string GetName() const override;
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.cpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.cpp
index 876ad90cd4..48cdfb040c 100644
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.cpp
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.cpp
@@ -3,12 +3,14 @@
// SPDX-License-Identifier: MIT
//
-#include <backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp>
+#include <unordered_map>
+#include <iostream>
+#include "StrategyValidator.hpp"
namespace armnn
{
-bool MemoryOptimizerValidator::Validate(std::vector<MemBlock>& memBlocks)
+std::vector<MemBin> StrategyValidator::Optimize(std::vector<MemBlock>& memBlocks)
{
// Condition #1: All Memblocks have been assigned to a MemBin
@@ -18,36 +20,46 @@ bool MemoryOptimizerValidator::Validate(std::vector<MemBlock>& memBlocks)
// Memblocks in a MemBin can overlap on the X axis for SingleAxisPacking
// Memblocks in a MemBin can overlap on the Y axis or the X for MultiAxisPacking but not both
+ std::unordered_map<unsigned int, bool> validationMap;
+
+ for (auto memBlock : memBlocks)
+ {
+ validationMap[memBlock.m_Index] = false;
+ }
+
auto memBinVect = m_Strategy->Optimize(memBlocks);
// Compare each of the input memblocks against every assignedBlock in each bin
// if we get through all bins without finding a block return
// if at any stage the block is found twice return
- for (auto memBlock : memBlocks)
+ for (auto memBin : memBinVect)
{
- auto found = false;
-
- for (auto bin : memBinVect)
+ for (auto block : memBin.m_MemBlocks)
{
- for (auto assignedBlock : bin.m_MemBlocks)
+ try
{
- if (memBlock.m_Index == assignedBlock.m_Index)
+ if (!validationMap.at(block.m_Index))
{
- if (found)
- {
- // Condition #2: Memblock is assigned to multiple MemBins
- return false;
- }
-
- found = true;
+ validationMap.at(block.m_Index) = true;
+ }
+ else
+ {
+ throw MemoryValidationException("Condition #2: Memblock is assigned to multiple MemBins");
}
}
+ catch (const std::out_of_range&)
+ {
+ throw MemoryValidationException("Unknown index ");
+ }
}
- // Condition #1: Block not found in any bin so return false as strategy is invalid
- if (!found)
+ }
+
+ for (auto memBlock : memBlocks)
+ {
+ if (!validationMap.at(memBlock.m_Index))
{
- return false;
+ throw MemoryValidationException("Condition #1: Block not found in any bin");
}
}
@@ -84,7 +96,7 @@ bool MemoryOptimizerValidator::Validate(std::vector<MemBlock>& memBlocks)
(assignedIndex != otherIndex))
{
// Condition #3: two Memblocks overlap on both the X and Y axis
- return false;
+ throw MemoryValidationException("Condition #3: two Memblocks overlap on both the X and Y axis");
}
switch (m_Strategy->GetMemBlockStrategyType())
@@ -96,8 +108,9 @@ bool MemoryOptimizerValidator::Validate(std::vector<MemBlock>& memBlocks)
// Cant overlap with itself
(assignedIndex != otherIndex))
{
- // Condition #3: invalid as two Memblocks overlap on the Y axis for SingleAxisPacking
- return false;
+ throw MemoryValidationException("Condition #3: "
+ "invalid as two Memblocks overlap on the Y axis for SingleAxisPacking");
+
}
break;
}
@@ -106,16 +119,14 @@ bool MemoryOptimizerValidator::Validate(std::vector<MemBlock>& memBlocks)
break;
}
default:
- // Unknown MemBlockStrategyType
- return false;
+ throw MemoryValidationException("Unknown MemBlockStrategyType");
}
}
-
}
}
// None of the conditions broken so return true
- return true;
+ return memBinVect;
}
} // namespace armnn \ No newline at end of file
diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp
new file mode 100644
index 0000000000..e1f9111cd3
--- /dev/null
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp
@@ -0,0 +1,41 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/Types.hpp>
+#include <armnn/Exceptions.hpp>
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
+
+namespace armnn
+{
+
+class StrategyValidator : public IMemoryOptimizerStrategy
+{
+public:
+
+ void SetStrategy(std::shared_ptr<IMemoryOptimizerStrategy> strategy)
+ {
+ m_Strategy = strategy;
+ m_MemBlockStrategyType = strategy->GetMemBlockStrategyType();
+ }
+
+ std::string GetName() const override
+ {
+ return "StrategyValidator";
+ }
+
+ MemBlockStrategyType GetMemBlockStrategyType() const override
+ {
+ return m_MemBlockStrategyType;
+ }
+
+ std::vector<MemBin> Optimize(std::vector<MemBlock>& memBlocks) override;
+
+private:
+ std::shared_ptr<IMemoryOptimizerStrategy> m_Strategy;
+ MemBlockStrategyType m_MemBlockStrategyType;
+};
+
+} // namespace armnn \ No newline at end of file
diff --git a/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt
new file mode 100644
index 0000000000..b96782a84d
--- /dev/null
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/CMakeLists.txt
@@ -0,0 +1,12 @@
+#
+# Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+#
+
+list(APPEND armnnMemoryOptimizationStrategiesUnitTests_sources
+ ConstMemoryStrategyTests.cpp
+ ValidatorStrategyTests.cpp
+)
+
+add_library(armnnMemoryOptimizationStrategiesUnitTests OBJECT ${armnnMemoryOptimizationStrategiesUnitTests_sources})
+target_include_directories(armnnMemoryOptimizationStrategiesUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/test/ConstLayerMemoryOptimizerStrategyTests.cpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/ConstMemoryStrategyTests.cpp
index cfa2d40e7d..64312f362f 100644
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/test/ConstLayerMemoryOptimizerStrategyTests.cpp
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/ConstMemoryStrategyTests.cpp
@@ -3,18 +3,18 @@
// SPDX-License-Identifier: MIT
//
-#include <backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp>
-#include <backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp>
#include <doctest/doctest.h>
#include <vector>
using namespace armnn;
-TEST_SUITE("ConstLayerMemoryOptimizerStrategyTestSuite")
+TEST_SUITE("ConstMemoryStrategyTestSuite")
{
-TEST_CASE("ConstLayerMemoryOptimizerStrategyTest")
+TEST_CASE("ConstMemoryStrategyTest")
{
// create a few memory blocks
MemBlock memBlock0(0, 2, 20, 0, 0);
@@ -31,9 +31,9 @@ TEST_CASE("ConstLayerMemoryOptimizerStrategyTest")
memBlocks.push_back(memBlock3);
memBlocks.push_back(memBlock4);
- // Optimize the memory blocks with ConstLayerMemoryOptimizerStrategy
- ConstLayerMemoryOptimizerStrategy constLayerMemoryOptimizerStrategy;
- CHECK_EQ(constLayerMemoryOptimizerStrategy.GetName(), std::string("ConstLayerMemoryOptimizerStrategy"));
+ // Optimize the memory blocks with ConstantMemoryStrategy
+ ConstantMemoryStrategy constLayerMemoryOptimizerStrategy;
+ CHECK_EQ(constLayerMemoryOptimizerStrategy.GetName(), std::string("ConstantMemoryStrategy"));
CHECK_EQ(constLayerMemoryOptimizerStrategy.GetMemBlockStrategyType(), MemBlockStrategyType::SingleAxisPacking);
auto memBins = constLayerMemoryOptimizerStrategy.Optimize(memBlocks);
CHECK(memBins.size() == 5);
@@ -67,11 +67,11 @@ TEST_CASE("ConstLayerMemoryOptimizerStrategyValidatorTest")
memBlocks.push_back(memBlock4);
// Optimize the memory blocks with ConstLayerMemoryOptimizerStrategy
- ConstLayerMemoryOptimizerStrategy constLayerMemoryOptimizerStrategy;
- auto ptr = std::make_shared<ConstLayerMemoryOptimizerStrategy>(constLayerMemoryOptimizerStrategy);
- MemoryOptimizerValidator validator(std::move(ptr));
+ auto ptr = std::make_shared<ConstantMemoryStrategy>();
+ StrategyValidator validator;
+ validator.SetStrategy(ptr);
// Ensure ConstLayerMemoryOptimizerStrategy is valid
- CHECK(validator.Validate(memBlocks));
+ CHECK_NOTHROW(validator.Optimize(memBlocks));
}
}
diff --git a/src/backends/backendsCommon/memoryOptimizationStrategies/test/MemoryOptimizerStrategyValidatorTests.cpp b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/ValidatorStrategyTests.cpp
index af09e4ed56..bc04105f4b 100644
--- a/src/backends/backendsCommon/memoryOptimizationStrategies/test/MemoryOptimizerStrategyValidatorTests.cpp
+++ b/src/backends/backendsCommon/memoryOptimizerStrategyLibrary/test/ValidatorStrategyTests.cpp
@@ -3,7 +3,7 @@
// SPDX-License-Identifier: MIT
//
-#include <backendsCommon/memoryOptimizationStrategies/MemoryOptimizerStrategyValidator.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/StrategyValidator.hpp>
#include <doctest/doctest.h>
#include <vector>
@@ -75,16 +75,18 @@ TEST_CASE("MemoryOptimizerStrategyValidatorTestOverlapX")
// Optimize the memory blocks with TestMemoryOptimizerStrategySingle
TestMemoryOptimizerStrategy testMemoryOptimizerStrategySingle(MemBlockStrategyType::SingleAxisPacking);
auto ptr = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategySingle);
- MemoryOptimizerValidator validator(std::move(ptr));
+ StrategyValidator validator;
+ validator.SetStrategy(ptr);
// SingleAxisPacking can overlap on X axis.
- CHECK(validator.Validate(memBlocks));
+ CHECK_NOTHROW(validator.Optimize(memBlocks));
// Optimize the memory blocks with TestMemoryOptimizerStrategyMulti
TestMemoryOptimizerStrategy testMemoryOptimizerStrategyMulti(MemBlockStrategyType::MultiAxisPacking);
auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategyMulti);
- MemoryOptimizerValidator validatorMulti(std::move(ptrMulti));
+ StrategyValidator validatorMulti;
+ validatorMulti.SetStrategy(ptrMulti);
// MultiAxisPacking can overlap on X axis.
- CHECK(validatorMulti.Validate(memBlocks));
+ CHECK_NOTHROW(validatorMulti.Optimize(memBlocks));
}
TEST_CASE("MemoryOptimizerStrategyValidatorTestOverlapXAndY")
@@ -107,16 +109,18 @@ TEST_CASE("MemoryOptimizerStrategyValidatorTestOverlapXAndY")
// Optimize the memory blocks with TestMemoryOptimizerStrategySingle
TestMemoryOptimizerStrategy testMemoryOptimizerStrategySingle(MemBlockStrategyType::SingleAxisPacking);
auto ptr = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategySingle);
- MemoryOptimizerValidator validator(std::move(ptr));
+ StrategyValidator validator;
+ validator.SetStrategy(ptr);
// SingleAxisPacking cannot overlap on both X and Y axis.
- CHECK(!validator.Validate(memBlocks));
+ CHECK_THROWS(validator.Optimize(memBlocks));
// Optimize the memory blocks with TestMemoryOptimizerStrategyMulti
TestMemoryOptimizerStrategy testMemoryOptimizerStrategyMulti(MemBlockStrategyType::MultiAxisPacking);
auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategyMulti);
- MemoryOptimizerValidator validatorMulti(std::move(ptrMulti));
+ StrategyValidator validatorMulti;
+ validatorMulti.SetStrategy(ptrMulti);
// MultiAxisPacking cannot overlap on both X and Y axis.
- CHECK(!validatorMulti.Validate(memBlocks));
+ CHECK_THROWS(validatorMulti.Optimize(memBlocks));
}
TEST_CASE("MemoryOptimizerStrategyValidatorTestOverlapY")
@@ -139,16 +143,18 @@ TEST_CASE("MemoryOptimizerStrategyValidatorTestOverlapY")
// Optimize the memory blocks with TestMemoryOptimizerStrategySingle
TestMemoryOptimizerStrategy testMemoryOptimizerStrategySingle(MemBlockStrategyType::SingleAxisPacking);
auto ptr = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategySingle);
- MemoryOptimizerValidator validator(std::move(ptr));
+ StrategyValidator validator;
+ validator.SetStrategy(ptr);
// SingleAxisPacking cannot overlap on Y axis
- CHECK(!validator.Validate(memBlocks));
+ CHECK_THROWS(validator.Optimize(memBlocks));
// Optimize the memory blocks with TestMemoryOptimizerStrategyMulti
TestMemoryOptimizerStrategy testMemoryOptimizerStrategyMulti(MemBlockStrategyType::MultiAxisPacking);
auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategy>(testMemoryOptimizerStrategyMulti);
- MemoryOptimizerValidator validatorMulti(std::move(ptrMulti));
+ StrategyValidator validatorMulti;
+ validatorMulti.SetStrategy(ptrMulti);
// MultiAxisPacking can overlap on Y axis
- CHECK(validatorMulti.Validate(memBlocks));
+ CHECK_NOTHROW(validatorMulti.Optimize(memBlocks));
}
// TestMemoryOptimizerStrategyDuplicate: Create a MemBin and put all blocks in it duplicating each so validator
@@ -201,14 +207,16 @@ TEST_CASE("MemoryOptimizerStrategyValidatorTestDuplicateBlocks")
// Duplicate strategy is invalid as same block is found twice
TestMemoryOptimizerStrategyDuplicate testMemoryOptimizerStrategySingle(MemBlockStrategyType::SingleAxisPacking);
auto ptr = std::make_shared<TestMemoryOptimizerStrategyDuplicate>(testMemoryOptimizerStrategySingle);
- MemoryOptimizerValidator validator(std::move(ptr));
- CHECK(!validator.Validate(memBlocks));
+ StrategyValidator validator;
+ validator.SetStrategy(ptr);
+ CHECK_THROWS(validator.Optimize(memBlocks));
// Optimize the memory blocks with TestMemoryOptimizerStrategyMulti
TestMemoryOptimizerStrategyDuplicate testMemoryOptimizerStrategyMulti(MemBlockStrategyType::MultiAxisPacking);
auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategyDuplicate>(testMemoryOptimizerStrategyMulti);
- MemoryOptimizerValidator validatorMulti(std::move(ptrMulti));
- CHECK(!validatorMulti.Validate(memBlocks));
+ StrategyValidator validatorMulti;
+ validatorMulti.SetStrategy(ptrMulti);
+ CHECK_THROWS(validatorMulti.Optimize(memBlocks));
}
// TestMemoryOptimizerStrategySkip: Create a MemBin and put all blocks in it skipping every other block so validator
@@ -260,14 +268,16 @@ TEST_CASE("MemoryOptimizerStrategyValidatorTestSkipBlocks")
// Skip strategy is invalid as every second block is not found
TestMemoryOptimizerStrategySkip testMemoryOptimizerStrategySingle(MemBlockStrategyType::SingleAxisPacking);
auto ptr = std::make_shared<TestMemoryOptimizerStrategySkip>(testMemoryOptimizerStrategySingle);
- MemoryOptimizerValidator validator(std::move(ptr));
- CHECK(!validator.Validate(memBlocks));
+ StrategyValidator validator;
+ validator.SetStrategy(ptr);
+ CHECK_THROWS(validator.Optimize(memBlocks));
// Optimize the memory blocks with TestMemoryOptimizerStrategyMulti
TestMemoryOptimizerStrategySkip testMemoryOptimizerStrategyMulti(MemBlockStrategyType::MultiAxisPacking);
auto ptrMulti = std::make_shared<TestMemoryOptimizerStrategySkip>(testMemoryOptimizerStrategyMulti);
- MemoryOptimizerValidator validatorMulti(std::move(ptrMulti));
- CHECK(!validatorMulti.Validate(memBlocks));
+ StrategyValidator validatorMulti;
+ validatorMulti.SetStrategy(ptrMulti);
+ CHECK_THROWS(validatorMulti.Optimize(memBlocks));
}
}
diff --git a/src/backends/backendsCommon/test/BackendRegistryTests.cpp b/src/backends/backendsCommon/test/BackendRegistryTests.cpp
index 5acc61fe2c..18b3745a2e 100644
--- a/src/backends/backendsCommon/test/BackendRegistryTests.cpp
+++ b/src/backends/backendsCommon/test/BackendRegistryTests.cpp
@@ -7,7 +7,7 @@
#include <armnn/BackendRegistry.hpp>
#include <armnn/backends/IBackendInternal.hpp>
-#include <backendsCommon/memoryOptimizationStrategies/ConstLayerMemoryOptimizerStrategy.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/strategies/ConstantMemoryStrategy.hpp>
#include <reference/RefBackend.hpp>
#include <doctest/doctest.h>
@@ -156,7 +156,7 @@ TEST_CASE("RegisterMemoryOptimizerStrategy")
// Register the memory optimizer
std::shared_ptr<IMemoryOptimizerStrategy> memoryOptimizerStrategy =
- std::make_shared<ConstLayerMemoryOptimizerStrategy>();
+ std::make_shared<ConstantMemoryStrategy>();
BackendRegistryInstance().RegisterMemoryOptimizerStrategy(cpuRefBackendId, memoryOptimizerStrategy);
CHECK(!BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().size() == 1);
diff --git a/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp b/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp
index a5bf17c8b1..11eae04775 100644
--- a/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp
+++ b/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp
@@ -80,18 +80,18 @@ TEST_CASE("CpuRefSetMemoryOptimizerStrategyTest")
options.m_BackendOptions.emplace_back(
BackendOptions{"CpuRef",
{
- {"MemoryOptimizerStrategy", "ConstLayerMemoryOptimizerStrategy"}
+ {"MemoryOptimizerStrategy", "ConstantMemoryStrategy"}
}
});
IRuntimePtr run = IRuntime::Create(options);
- // ConstLayerMemoryOptimizerStrategy should be registered for CpuRef
+ // ConstantMemoryStrategy should be registered for CpuRef
CHECK(!BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().size() == 1);
CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().at(RefBackend::GetIdStatic()));
auto optimizerStrategy = BackendRegistryInstance().GetMemoryOptimizerStrategies().at(RefBackend::GetIdStatic());
- CHECK(optimizerStrategy->GetName() == std::string("ConstLayerMemoryOptimizerStrategy"));
+ CHECK(optimizerStrategy->GetName() == std::string("ConstantMemoryStrategy"));
armnn::BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(RefBackend::GetIdStatic());
}
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 1531fd5f24..cea55c5b8e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -221,3 +221,7 @@ if(BUILD_ACCURACY_TOOL)
target_include_directories(ImageCSVFileGenerator PRIVATE ../src/armnnUtils)
ImageTensorExecutor(ImageCSVFileGenerator)
endif()
+
+if(BUILD_MEMORY_STRATEGY_BENCHMARK)
+ add_subdirectory(MemoryStrategyBenchmark)
+endif()
diff --git a/tests/MemoryStrategyBenchmark/CMakeLists.txt b/tests/MemoryStrategyBenchmark/CMakeLists.txt
new file mode 100644
index 0000000000..9ed79bae5f
--- /dev/null
+++ b/tests/MemoryStrategyBenchmark/CMakeLists.txt
@@ -0,0 +1,16 @@
+add_executable(MemoryStrategyBenchmark
+ MemoryStrategyBenchmark.cpp
+ TestBlocks.hpp
+ TestStrategy.hpp
+ TestStrategy.cpp
+ ../../include/armnn/Exceptions.hpp
+ ../../src/armnn/Exceptions.cpp)
+
+target_link_libraries(MemoryStrategyBenchmark armnnMemoryOptimizationStrategies)
+target_include_directories(MemoryStrategyBenchmark PRIVATE
+ ../../include/armnn/backends
+ ../../src/backends/backendsCommon/memoryOptimizerStrategyLibrary
+ ../../third-party/cxxopts)
+
+
+set_target_properties(MemoryStrategyBenchmark PROPERTIES LINKER_LANGUAGE CXX) \ No newline at end of file
diff --git a/tests/MemoryStrategyBenchmark/MemoryStrategyBenchmark.cpp b/tests/MemoryStrategyBenchmark/MemoryStrategyBenchmark.cpp
new file mode 100644
index 0000000000..5924757f21
--- /dev/null
+++ b/tests/MemoryStrategyBenchmark/MemoryStrategyBenchmark.cpp
@@ -0,0 +1,206 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "TestBlocks.hpp"
+#include "TestStrategy.hpp"
+
+#include <IMemoryOptimizerStrategy.hpp>
+#include <MemoryOptimizerStrategyLibrary.hpp>
+#include <strategies/StrategyValidator.hpp>
+
+
+#include <cxxopts.hpp>
+
+#include <iostream>
+#include <algorithm>
+#include <iomanip>
+
+std::vector<TestBlock> testBlocks
+{
+ {"inceptionv4", inceptionv4},
+ {"deeplabv3", deeplabv3},
+ {"deepspeechv1", deepspeechv1},
+ {"ssd_mobilenetv2", ssd_mobilenetv2},
+ {"resnetv2", resnetv2},
+ {"yolov3",yolov3}
+};
+
+void PrintModels()
+{
+ std::cout << "Available models:\n";
+ for (const auto& model : testBlocks)
+ {
+ std::cout << model.m_Name << "\n";
+ }
+ std::cout << "\n";
+}
+
+size_t GetMinPossibleMemorySize(const std::vector<armnn::MemBlock> blocks)
+{
+ std::vector<size_t> lifetimes(1000);
+ 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());
+}
+
+void RunBenchmark(armnn::IMemoryOptimizerStrategy* strategy, std::vector<TestBlock>* models)
+{
+ using Clock = std::chrono::high_resolution_clock;
+ float avgEfficiency = 0;
+ std::chrono::duration<double, std::milli> avgDuration{};
+ std::cout << "\nMemory Strategy: " << strategy->GetName()<< "\n";
+ std::cout << "===============================================\n";
+ for (auto& model : *models)
+ {
+ auto now = Clock::now();
+ const std::vector<armnn::MemBin> result = strategy->Optimize(model.m_Blocks);
+ auto duration = std::chrono::duration<double, std::milli>(Clock::now() - now);
+
+ avgDuration += duration;
+ size_t memoryUsage = 0;
+ for (auto bin : result)
+ {
+ memoryUsage += bin.m_MemSize;
+ }
+ size_t minSize = GetMinPossibleMemorySize(model.m_Blocks);
+
+ float efficiency = static_cast<float>(minSize) / static_cast<float>(memoryUsage);
+ efficiency*=100;
+ avgEfficiency += efficiency;
+ std::cout << "\nModel: " << model.m_Name << "\n";
+
+ std::cout << "Strategy execution time: " << std::setprecision(4) << duration.count() << " milliseconds\n";
+
+ std::cout << "Memory usage: " << memoryUsage/1024 << " kb\n";
+
+ std::cout << "Minimum possible usage: " << minSize/1024 << " kb\n";
+
+ std::cout << "Memory efficiency: " << std::setprecision(3) << efficiency << "%\n";
+ }
+
+ avgDuration/= static_cast<double>(models->size());
+ avgEfficiency/= static_cast<float>(models->size());
+
+ std::cout << "\n===============================================\n";
+ std::cout << "Average memory duration: " << std::setprecision(4) << avgDuration.count() << " milliseconds\n";
+ std::cout << "Average memory efficiency: " << std::setprecision(3) << avgEfficiency << "%\n";
+}
+
+struct BenchmarkOptions
+{
+ std::string m_StrategyName;
+ std::string m_ModelName;
+ bool m_UseDefaultStrategy = false;
+ bool m_Validate = false;
+};
+
+BenchmarkOptions ParseOptions(int argc, char* argv[])
+{
+ cxxopts::Options options("Memory Benchmark", "Tests memory optimization strategies on different models");
+
+ options.add_options()
+ ("s, strategy", "Strategy name, do not specify to use default strategy", cxxopts::value<std::string>())
+ ("m, model", "Model name", cxxopts::value<std::string>())
+ ("v, validate", "Validate strategy", cxxopts::value<bool>()->default_value("false")->implicit_value("true"))
+ ("h,help", "Display usage information");
+
+ auto result = options.parse(argc, argv);
+ if (result.count("help"))
+ {
+ std::cout << options.help() << std::endl;
+ PrintModels();
+
+ std::cout << "\nAvailable strategies:\n";
+
+ for (const auto& s :armnn::GetMemoryOptimizerStrategyNames())
+ {
+ std::cout << s << "\n";
+ }
+ exit(EXIT_SUCCESS);
+ }
+
+ BenchmarkOptions benchmarkOptions;
+
+ if(result.count("strategy"))
+ {
+ benchmarkOptions.m_StrategyName = result["strategy"].as<std::string>();
+ }
+ else
+ {
+ std::cout << "No Strategy given, using default strategy";
+
+ benchmarkOptions.m_UseDefaultStrategy = true;
+ }
+
+ if(result.count("model"))
+ {
+ benchmarkOptions.m_ModelName = result["model"].as<std::string>();
+ }
+
+ benchmarkOptions.m_Validate = result["validate"].as<bool>();
+
+ return benchmarkOptions;
+}
+
+int main(int argc, char* argv[])
+{
+ BenchmarkOptions benchmarkOptions = ParseOptions(argc, argv);
+
+ std::shared_ptr<armnn::IMemoryOptimizerStrategy> strategy;
+
+ if (benchmarkOptions.m_UseDefaultStrategy)
+ {
+ strategy = std::make_shared<armnn::TestStrategy>();
+ }
+ else
+ {
+ strategy = armnn::GetMemoryOptimizerStrategy(benchmarkOptions.m_StrategyName);
+
+ if (!strategy)
+ {
+ std::cout << "Strategy name not found\n";
+ return 0;
+ }
+ }
+
+ std::vector<TestBlock> model;
+ std::vector<TestBlock>* modelsToTest = &testBlocks;
+ if (benchmarkOptions.m_ModelName.size() != 0)
+ {
+ auto it = std::find_if(testBlocks.cbegin(), testBlocks.cend(), [&](const TestBlock testBlock)
+ {
+ return testBlock.m_Name == benchmarkOptions.m_ModelName;
+ });
+
+ if (it == testBlocks.end())
+ {
+ std::cout << "Model name not found\n";
+ return 0;
+ }
+ else
+ {
+ model.push_back(*it);
+ modelsToTest = &model;
+ }
+ }
+
+ if (benchmarkOptions.m_Validate)
+ {
+ armnn::StrategyValidator strategyValidator;
+
+ strategyValidator.SetStrategy(strategy);
+
+ RunBenchmark(&strategyValidator, modelsToTest);
+ }
+ else
+ {
+ RunBenchmark(strategy.get(), modelsToTest);
+ }
+
+} \ No newline at end of file
diff --git a/tests/MemoryStrategyBenchmark/TestBlocks.hpp b/tests/MemoryStrategyBenchmark/TestBlocks.hpp
new file mode 100644
index 0000000000..280307c2bf
--- /dev/null
+++ b/tests/MemoryStrategyBenchmark/TestBlocks.hpp
@@ -0,0 +1,1575 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <vector>
+#include <IMemoryOptimizerStrategy.hpp>
+
+struct TestBlock
+{
+ std::string m_Name;
+ std::vector<armnn::MemBlock>& m_Blocks;
+};
+
+// Generated from inception_v4_299_quant.tflite
+std::vector<armnn::MemBlock> inceptionv4
+{
+ { 0, 1, 268203, 0, 0 },
+ { 1, 5, 710432, 0, 1 },
+ { 4, 9, 691488, 0, 4 },
+ { 5, 12, 1382976, 0, 5 },
+ { 6, 14, 341056, 0, 6 },
+ { 7, 15, 511584, 0, 7 },
+ { 8, 18, 852640, 0, 8 },
+ { 9, 20, 341056, 0, 9 },
+ { 10, 22, 341056, 0, 10 },
+ { 12, 25, 341056, 0, 12 },
+ { 13, 27, 341056, 0, 13 },
+ { 11, 26, 483936, 0, 11 },
+ { 14, 29, 483936, 0, 14 },
+ { 15, 32, 967872, 0, 15 },
+ { 17, 35, 235200, 0, 17 },
+ { 16, 34, 235200, 0, 16 },
+ { 18, 40, 470400, 0, 18 },
+ { 21, 44, 78400, 0, 21 },
+ { 22, 46, 78400, 0, 22 },
+ { 19, 44, 470400, 0, 19 },
+ { 24, 50, 117600, 0, 24 },
+ { 20, 47, 117600, 0, 20 },
+ { 23, 50, 117600, 0, 23 },
+ { 26, 53, 117600, 0, 26 },
+ { 25, 52, 117600, 0, 25 },
+ { 27, 58, 470400, 0, 27 },
+ { 30, 62, 78400, 0, 30 },
+ { 31, 64, 78400, 0, 31 },
+ { 28, 62, 470400, 0, 28 },
+ { 33, 68, 117600, 0, 33 },
+ { 29, 65, 117600, 0, 29 },
+ { 32, 68, 117600, 0, 32 },
+ { 35, 71, 117600, 0, 35 },
+ { 34, 70, 117600, 0, 34 },
+ { 36, 76, 470400, 0, 36 },
+ { 39, 80, 78400, 0, 39 },
+ { 40, 82, 78400, 0, 40 },
+ { 37, 80, 470400, 0, 37 },
+ { 42, 86, 117600, 0, 42 },
+ { 38, 83, 117600, 0, 38 },
+ { 41, 86, 117600, 0, 41 },
+ { 44, 89, 117600, 0, 44 },
+ { 43, 88, 117600, 0, 43 },
+ { 45, 94, 470400, 0, 45 },
+ { 48, 98, 78400, 0, 48 },
+ { 49, 100, 78400, 0, 49 },
+ { 46, 98, 470400, 0, 46 },
+ { 51, 104, 117600, 0, 51 },
+ { 47, 101, 117600, 0, 47 },
+ { 50, 104, 117600, 0, 50 },
+ { 53, 107, 117600, 0, 53 },
+ { 52, 106, 117600, 0, 52 },
+ { 54, 111, 470400, 0, 54 },
+ { 57, 115, 235200, 0, 57 },
+ { 58, 117, 274400, 0, 58 },
+ { 56, 116, 110976, 0, 56 },
+ { 59, 119, 73984, 0, 59 },
+ { 55, 115, 110976, 0, 55 },
+ { 60, 124, 295936, 0, 60 },
+ { 63, 128, 55488, 0, 63 },
+ { 64, 130, 55488, 0, 64 },
+ { 61, 128, 295936, 0, 61 },
+ { 65, 133, 64736, 0, 65 },
+ { 66, 135, 55488, 0, 66 },
+ { 69, 139, 64736, 0, 69 },
+ { 70, 141, 64736, 0, 70 },
+ { 62, 134, 110976, 0, 62 },
+ { 68, 140, 73984, 0, 68 },
+ { 71, 143, 73984, 0, 71 },
+ { 67, 139, 36992, 0, 67 },
+ { 72, 148, 295936, 0, 72 },
+ { 75, 152, 55488, 0, 75 },
+ { 76, 154, 55488, 0, 76 },
+ { 73, 152, 295936, 0, 73 },
+ { 77, 157, 64736, 0, 77 },
+ { 78, 159, 55488, 0, 78 },
+ { 81, 163, 64736, 0, 81 },
+ { 82, 165, 64736, 0, 82 },
+ { 74, 158, 110976, 0, 74 },
+ { 80, 164, 73984, 0, 80 },
+ { 83, 167, 73984, 0, 83 },
+ { 79, 163, 36992, 0, 79 },
+ { 84, 172, 295936, 0, 84 },
+ { 87, 176, 55488, 0, 87 },
+ { 88, 178, 55488, 0, 88 },
+ { 85, 176, 295936, 0, 85 },
+ { 89, 181, 64736, 0, 89 },
+ { 90, 183, 55488, 0, 90 },
+ { 93, 187, 64736, 0, 93 },
+ { 94, 189, 64736, 0, 94 },
+ { 86, 182, 110976, 0, 86 },
+ { 92, 188, 73984, 0, 92 },
+ { 95, 191, 73984, 0, 95 },
+ { 91, 187, 36992, 0, 91 },
+ { 96, 196, 295936, 0, 96 },
+ { 99, 200, 55488, 0, 99 },
+ { 100, 202, 55488, 0, 100 },
+ { 97, 200, 295936, 0, 97 },
+ { 101, 205, 64736, 0, 101 },
+ { 102, 207, 55488, 0, 102 },
+ { 105, 211, 64736, 0, 105 },
+ { 106, 213, 64736, 0, 106 },
+ { 98, 206, 110976, 0, 98 },
+ { 104, 212, 73984, 0, 104 },
+ { 107, 215, 73984, 0, 107 },
+ { 103, 211, 36992, 0, 103 },
+ { 108, 220, 295936, 0, 108 },
+ { 111, 224, 55488, 0, 111 },
+ { 112, 226, 55488, 0, 112 },
+ { 109, 224, 295936, 0, 109 },
+ { 113, 229, 64736, 0, 113 },
+ { 114, 231, 55488, 0, 114 },
+ { 117, 235, 64736, 0, 117 },
+ { 118, 237, 64736, 0, 118 },
+ { 110, 230, 110976, 0, 110 },
+ { 116, 236, 73984, 0, 116 },
+ { 119, 239, 73984, 0, 119 },
+ { 115, 235, 36992, 0, 115 },
+ { 120, 244, 295936, 0, 120 },
+ { 123, 248, 55488, 0, 123 },
+ { 124, 250, 55488, 0, 124 },
+ { 121, 248, 295936, 0, 121 },
+ { 125, 253, 64736, 0, 125 },
+ { 126, 255, 55488, 0, 126 },
+ { 129, 259, 64736, 0, 129 },
+ { 130, 261, 64736, 0, 130 },
+ { 122, 254, 110976, 0, 122 },
+ { 128, 260, 73984, 0, 128 },
+ { 131, 263, 73984, 0, 131 },
+ { 127, 259, 36992, 0, 127 },
+ { 132, 268, 295936, 0, 132 },
+ { 135, 272, 55488, 0, 135 },
+ { 136, 274, 55488, 0, 136 },
+ { 133, 272, 295936, 0, 133 },
+ { 137, 277, 64736, 0, 137 },
+ { 138, 279, 55488, 0, 138 },
+ { 141, 283, 64736, 0, 141 },
+ { 142, 285, 64736, 0, 142 },
+ { 134, 278, 110976, 0, 134 },
+ { 140, 284, 73984, 0, 140 },
+ { 143, 287, 73984, 0, 143 },
+ { 139, 283, 36992, 0, 139 },
+ { 144, 291, 295936, 0, 144 },
+ { 146, 294, 55488, 0, 146 },
+ { 147, 296, 73984, 0, 147 },
+ { 149, 299, 73984, 0, 149 },
+ { 150, 301, 92480, 0, 150 },
+ { 148, 300, 12288, 0, 148 },
+ { 151, 303, 20480, 0, 151 },
+ { 145, 297, 65536, 0, 145 },
+ { 152, 308, 98304, 0, 152 },
+ { 155, 313, 24576, 0, 155 },
+ { 156, 315, 24576, 0, 156 },
+ { 153, 313, 98304, 0, 153 },
+ { 157, 318, 16384, 0, 157 },
+ { 158, 319, 16384, 0, 158 },
+ { 159, 321, 28672, 0, 159 },
+ { 162, 326, 32768, 0, 162 },
+ { 163, 328, 16384, 0, 163 },
+ { 164, 329, 16384, 0, 164 },
+ { 154, 320, 16384, 0, 154 },
+ { 161, 327, 32768, 0, 161 },
+ { 165, 331, 32768, 0, 165 },
+ { 160, 326, 16384, 0, 160 },
+ { 166, 336, 98304, 0, 166 },
+ { 169, 341, 24576, 0, 169 },
+ { 170, 343, 24576, 0, 170 },
+ { 167, 341, 98304, 0, 167 },
+ { 171, 346, 16384, 0, 171 },
+ { 172, 347, 16384, 0, 172 },
+ { 173, 349, 28672, 0, 173 },
+ { 176, 354, 32768, 0, 176 },
+ { 177, 356, 16384, 0, 177 },
+ { 178, 357, 16384, 0, 178 },
+ { 168, 348, 16384, 0, 168 },
+ { 175, 355, 32768, 0, 175 },
+ { 179, 359, 32768, 0, 179 },
+ { 174, 354, 16384, 0, 174 },
+ { 180, 364, 98304, 0, 180 },
+ { 183, 369, 24576, 0, 183 },
+ { 184, 371, 24576, 0, 184 },
+ { 181, 369, 98304, 0, 181 },
+ { 185, 374, 16384, 0, 185 },
+ { 186, 375, 16384, 0, 186 },
+ { 187, 377, 28672, 0, 187 },
+ { 190, 382, 32768, 0, 190 },
+ { 191, 384, 16384, 0, 191 },
+ { 192, 385, 16384, 0, 192 },
+ { 182, 376, 16384, 0, 182 },
+ { 189, 383, 32768, 0, 189 },
+ { 193, 387, 32768, 0, 193 },
+ { 188, 382, 16384, 0, 188 },
+ { 194, 389, 98304, 0, 194 },
+ { 195, 391, 1536, 0, 195 },
+ { 196, 393, 1536, 0, 196 },
+ { 197, 395, 1001, 0, 197 },
+ { 198, 397, 1001, 0, 198 }
+};
+
+// Generated from deepspeechv1_float32.tflite
+std::vector<armnn::MemBlock> deepspeechv1
+{
+ { 0, 3, 31616, 0, 0 },
+ { 3, 39, 31616, 0, 3 },
+ { 36, 73, 131072, 0, 36 },
+ { 37, 75, 131072, 0, 37 },
+ { 38, 77, 131072, 0, 38 },
+ { 39, 79, 131072, 0, 39 },
+ { 40, 81, 131072, 0, 40 },
+ { 41, 83, 131072, 0, 41 },
+ { 42, 85, 131072, 0, 42 },
+ { 43, 87, 131072, 0, 43 },
+ { 44, 89, 131072, 0, 44 },
+ { 45, 91, 131072, 0, 45 },
+ { 46, 93, 8192, 0, 46 },
+ { 46, 94, 8192, 0, 47 },
+ { 46, 95, 8192, 0, 48 },
+ { 46, 96, 8192, 0, 49 },
+ { 46, 97, 8192, 0, 50 },
+ { 46, 98, 8192, 0, 51 },
+ { 46, 99, 8192, 0, 52 },
+ { 46, 100, 8192, 0, 53 },
+ { 46, 101, 8192, 0, 54 },
+ { 46, 102, 8192, 0, 55 },
+ { 46, 103, 8192, 0, 56 },
+ { 46, 104, 8192, 0, 57 },
+ { 46, 105, 8192, 0, 58 },
+ { 46, 106, 8192, 0, 59 },
+ { 46, 107, 8192, 0, 60 },
+ { 46, 108, 8192, 0, 61 },
+ { 47, 110, 8192, 0, 62 },
+ { 1, 64, 8192, 0, 1 },
+ { 63, 127, 16384, 0, 78 },
+ { 64, 129, 32768, 0, 79 },
+ { 65, 131, 8192, 0, 82 },
+ { 65, 132, 8192, 0, 80 },
+ { 65, 133, 8192, 0, 81 },
+ { 65, 134, 8192, 0, 83 },
+ { 66, 136, 8192, 0, 84 },
+ { 67, 138, 8192, 0, 85 },
+ { 68, 139, 8192, 0, 86 },
+ { 70, 142, 8192, 0, 88 },
+ { 2, 74, 8192, 0, 2 },
+ { 72, 145, 8192, 0, 90 },
+ { 71, 144, 8192, 0, 89 },
+ { 69, 144, 8192, 0, 87 },
+ { 74, 149, 8192, 0, 92 },
+ { 48, 124, 8192, 0, 63 },
+ { 76, 153, 16384, 0, 94 },
+ { 77, 155, 32768, 0, 95 },
+ { 78, 157, 8192, 0, 98 },
+ { 78, 158, 8192, 0, 96 },
+ { 78, 159, 8192, 0, 97 },
+ { 78, 160, 8192, 0, 99 },
+ { 79, 162, 8192, 0, 100 },
+ { 80, 164, 8192, 0, 101 },
+ { 81, 165, 8192, 0, 102 },
+ { 83, 168, 8192, 0, 104 },
+ { 73, 158, 8192, 0, 91 },
+ { 85, 171, 8192, 0, 106 },
+ { 84, 170, 8192, 0, 105 },
+ { 82, 170, 8192, 0, 103 },
+ { 87, 175, 8192, 0, 108 },
+ { 49, 138, 8192, 0, 64 },
+ { 89, 179, 16384, 0, 110 },
+ { 90, 181, 32768, 0, 111 },
+ { 91, 183, 8192, 0, 114 },
+ { 91, 184, 8192, 0, 112 },
+ { 91, 185, 8192, 0, 113 },
+ { 91, 186, 8192, 0, 115 },
+ { 92, 188, 8192, 0, 116 },
+ { 93, 190, 8192, 0, 117 },
+ { 94, 191, 8192, 0, 118 },
+ { 96, 194, 8192, 0, 120 },
+ { 86, 184, 8192, 0, 107 },
+ { 98, 197, 8192, 0, 122 },
+ { 97, 196, 8192, 0, 121 },
+ { 95, 196, 8192, 0, 119 },
+ { 100, 201, 8192, 0, 124 },
+ { 50, 152, 8192, 0, 65 },
+ { 102, 205, 16384, 0, 126 },
+ { 103, 207, 32768, 0, 127 },
+ { 104, 209, 8192, 0, 130 },
+ { 104, 210, 8192, 0, 128 },
+ { 104, 211, 8192, 0, 129 },
+ { 104, 212, 8192, 0, 131 },
+ { 105, 214, 8192, 0, 132 },
+ { 106, 216, 8192, 0, 133 },
+ { 107, 217, 8192, 0, 134 },
+ { 109, 220, 8192, 0, 136 },
+ { 99, 210, 8192, 0, 123 },
+ { 111, 223, 8192, 0, 138 },
+ { 110, 222, 8192, 0, 137 },
+ { 108, 222, 8192, 0, 135 },
+ { 113, 227, 8192, 0, 140 },
+ { 51, 166, 8192, 0, 66 },
+ { 115, 231, 16384, 0, 142 },
+ { 116, 233, 32768, 0, 143 },
+ { 117, 235, 8192, 0, 146 },
+ { 117, 236, 8192, 0, 144 },
+ { 117, 237, 8192, 0, 145 },
+ { 117, 238, 8192, 0, 147 },
+ { 118, 240, 8192, 0, 148 },
+ { 119, 242, 8192, 0, 149 },
+ { 120, 243, 8192, 0, 150 },
+ { 122, 246, 8192, 0, 152 },
+ { 112, 236, 8192, 0, 139 },
+ { 124, 249, 8192, 0, 154 },
+ { 123, 248, 8192, 0, 153 },
+ { 121, 248, 8192, 0, 151 },
+ { 126, 253, 8192, 0, 156 },
+ { 52, 180, 8192, 0, 67 },
+ { 128, 257, 16384, 0, 158 },
+ { 129, 259, 32768, 0, 159 },
+ { 130, 261, 8192, 0, 162 },
+ { 130, 262, 8192, 0, 160 },
+ { 130, 263, 8192, 0, 161 },
+ { 130, 264, 8192, 0, 163 },
+ { 131, 266, 8192, 0, 164 },
+ { 132, 268, 8192, 0, 165 },
+ { 133, 269, 8192, 0, 166 },
+ { 135, 272, 8192, 0, 168 },
+ { 125, 262, 8192, 0, 155 },
+ { 137, 275, 8192, 0, 170 },
+ { 136, 274, 8192, 0, 169 },
+ { 134, 274, 8192, 0, 167 },
+ { 139, 279, 8192, 0, 172 },
+ { 53, 194, 8192, 0, 68 },
+ { 141, 283, 16384, 0, 174 },
+ { 142, 285, 32768, 0, 175 },
+ { 143, 287, 8192, 0, 178 },
+ { 143, 288, 8192, 0, 176 },
+ { 143, 289, 8192, 0, 177 },
+ { 143, 290, 8192, 0, 179 },
+ { 144, 292, 8192, 0, 180 },
+ { 145, 294, 8192, 0, 181 },
+ { 146, 295, 8192, 0, 182 },
+ { 148, 298, 8192, 0, 184 },
+ { 138, 288, 8192, 0, 171 },
+ { 150, 301, 8192, 0, 186 },
+ { 149, 300, 8192, 0, 185 },
+ { 147, 300, 8192, 0, 183 },
+ { 152, 305, 8192, 0, 188 },
+ { 54, 208, 8192, 0, 69 },
+ { 154, 309, 16384, 0, 190 },
+ { 155, 311, 32768, 0, 191 },
+ { 156, 313, 8192, 0, 194 },
+ { 156, 314, 8192, 0, 192 },
+ { 156, 315, 8192, 0, 193 },
+ { 156, 316, 8192, 0, 195 },
+ { 157, 318, 8192, 0, 196 },
+ { 158, 320, 8192, 0, 197 },
+ { 159, 321, 8192, 0, 198 },
+ { 161, 324, 8192, 0, 200 },
+ { 151, 314, 8192, 0, 187 },
+ { 163, 327, 8192, 0, 202 },
+ { 162, 326, 8192, 0, 201 },
+ { 160, 326, 8192, 0, 199 },
+ { 165, 331, 8192, 0, 204 },
+ { 55, 222, 8192, 0, 70 },
+ { 167, 335, 16384, 0, 206 },
+ { 168, 337, 32768, 0, 207 },
+ { 169, 339, 8192, 0, 210 },
+ { 169, 340, 8192, 0, 208 },
+ { 169, 341, 8192, 0, 209 },
+ { 169, 342, 8192, 0, 211 },
+ { 170, 344, 8192, 0, 212 },
+ { 171, 346, 8192, 0, 213 },
+ { 172, 347, 8192, 0, 214 },
+ { 174, 350, 8192, 0, 216 },
+ { 164, 340, 8192, 0, 203 },
+ { 176, 353, 8192, 0, 218 },
+ { 175, 352, 8192, 0, 217 },
+ { 173, 352, 8192, 0, 215 },
+ { 178, 357, 8192, 0, 220 },
+ { 56, 236, 8192, 0, 71 },
+ { 180, 361, 16384, 0, 222 },
+ { 181, 363, 32768, 0, 223 },
+ { 182, 365, 8192, 0, 226 },
+ { 182, 366, 8192, 0, 224 },
+ { 182, 367, 8192, 0, 225 },
+ { 182, 368, 8192, 0, 227 },
+ { 183, 370, 8192, 0, 228 },
+ { 184, 372, 8192, 0, 229 },
+ { 185, 373, 8192, 0, 230 },
+ { 187, 376, 8192, 0, 232 },
+ { 177, 366, 8192, 0, 219 },
+ { 189, 379, 8192, 0, 234 },
+ { 188, 378, 8192, 0, 233 },
+ { 186, 378, 8192, 0, 231 },
+ { 191, 383, 8192, 0, 236 },
+ { 57, 250, 8192, 0, 72 },
+ { 193, 387, 16384, 0, 238 },
+ { 194, 389, 32768, 0, 239 },
+ { 195, 391, 8192, 0, 242 },
+ { 195, 392, 8192, 0, 240 },
+ { 195, 393, 8192, 0, 241 },
+ { 195, 394, 8192, 0, 243 },
+ { 196, 396, 8192, 0, 244 },
+ { 197, 398, 8192, 0, 245 },
+ { 198, 399, 8192, 0, 246 },
+ { 200, 402, 8192, 0, 248 },
+ { 190, 392, 8192, 0, 235 },
+ { 202, 405, 8192, 0, 250 },
+ { 201, 404, 8192, 0, 249 },
+ { 199, 404, 8192, 0, 247 },
+ { 204, 409, 8192, 0, 252 },
+ { 58, 264, 8192, 0, 73 },
+ { 206, 413, 16384, 0, 254 },
+ { 207, 415, 32768, 0, 255 },
+ { 208, 417, 8192, 0, 258 },
+ { 208, 418, 8192, 0, 256 },
+ { 208, 419, 8192, 0, 257 },
+ { 208, 420, 8192, 0, 259 },
+ { 209, 422, 8192, 0, 260 },
+ { 210, 424, 8192, 0, 261 },
+ { 211, 425, 8192, 0, 262 },
+ { 213, 428, 8192, 0, 264 },
+ { 203, 418, 8192, 0, 251 },
+ { 215, 431, 8192, 0, 266 },
+ { 214, 430, 8192, 0, 265 },
+ { 212, 430, 8192, 0, 263 },
+ { 217, 435, 8192, 0, 268 },
+ { 59, 278, 8192, 0, 74 },
+ { 219, 439, 16384, 0, 270 },
+ { 220, 441, 32768, 0, 271 },
+ { 221, 443, 8192, 0, 274 },
+ { 221, 444, 8192, 0, 272 },
+ { 221, 445, 8192, 0, 273 },
+ { 221, 446, 8192, 0, 275 },
+ { 222, 448, 8192, 0, 276 },
+ { 223, 450, 8192, 0, 277 },
+ { 224, 451, 8192, 0, 278 },
+ { 226, 454, 8192, 0, 280 },
+ { 216, 444, 8192, 0, 267 },
+ { 228, 457, 8192, 0, 282 },
+ { 227, 456, 8192, 0, 281 },
+ { 225, 456, 8192, 0, 279 },
+ { 230, 461, 8192, 0, 284 },
+ { 60, 292, 8192, 0, 75 },
+ { 232, 465, 16384, 0, 286 },
+ { 233, 467, 32768, 0, 287 },
+ { 234, 469, 8192, 0, 290 },
+ { 234, 470, 8192, 0, 288 },
+ { 234, 471, 8192, 0, 289 },
+ { 234, 472, 8192, 0, 291 },
+ { 235, 474, 8192, 0, 292 },
+ { 236, 476, 8192, 0, 293 },
+ { 237, 477, 8192, 0, 294 },
+ { 239, 480, 8192, 0, 296 },
+ { 229, 470, 8192, 0, 283 },
+ { 241, 483, 8192, 0, 298 },
+ { 240, 482, 8192, 0, 297 },
+ { 238, 482, 8192, 0, 295 },
+ { 243, 487, 8192, 0, 300 },
+ { 61, 306, 8192, 0, 76 },
+ { 245, 491, 16384, 0, 302 },
+ { 246, 493, 32768, 0, 303 },
+ { 247, 495, 8192, 0, 306 },
+ { 247, 496, 8192, 0, 304 },
+ { 247, 497, 8192, 0, 305 },
+ { 247, 498, 8192, 0, 307 },
+ { 248, 500, 8192, 0, 308 },
+ { 249, 502, 8192, 0, 309 },
+ { 250, 503, 8192, 0, 310 },
+ { 252, 506, 8192, 0, 312 },
+ { 242, 496, 8192, 0, 299 },
+ { 254, 509, 8192, 0, 314 },
+ { 253, 508, 8192, 0, 313 },
+ { 251, 508, 8192, 0, 311 },
+ { 256, 513, 8192, 0, 316 },
+ { 62, 320, 8192, 0, 77 },
+ { 258, 517, 16384, 0, 318 },
+ { 259, 519, 32768, 0, 319 },
+ { 260, 521, 8192, 0, 322 },
+ { 260, 522, 8192, 0, 320 },
+ { 260, 523, 8192, 0, 321 },
+ { 260, 524, 8192, 0, 323 },
+ { 261, 526, 8192, 0, 324 },
+ { 262, 528, 8192, 0, 325 },
+ { 263, 529, 8192, 0, 326 },
+ { 265, 532, 8192, 0, 328 },
+ { 255, 522, 8192, 0, 315 },
+ { 267, 535, 8192, 0, 330 },
+ { 266, 534, 8192, 0, 329 },
+ { 264, 534, 8192, 0, 327 },
+ { 269, 539, 8192, 0, 332 },
+ { 75, 346, 8192, 0, 93 },
+ { 88, 359, 8192, 0, 109 },
+ { 101, 372, 8192, 0, 125 },
+ { 114, 385, 8192, 0, 141 },
+ { 127, 398, 8192, 0, 157 },
+ { 140, 411, 8192, 0, 173 },
+ { 153, 424, 8192, 0, 189 },
+ { 166, 437, 8192, 0, 205 },
+ { 179, 450, 8192, 0, 221 },
+ { 192, 463, 8192, 0, 237 },
+ { 205, 476, 8192, 0, 253 },
+ { 218, 489, 8192, 0, 269 },
+ { 231, 502, 8192, 0, 285 },
+ { 244, 515, 8192, 0, 301 },
+ { 257, 528, 8192, 0, 317 },
+ { 271, 543, 131072, 0, 334 },
+ { 272, 545, 131072, 0, 335 },
+ { 273, 547, 131072, 0, 336 },
+ { 274, 549, 131072, 0, 337 },
+ { 275, 551, 1856, 0, 338 },
+ { 276, 553, 1856, 0, 339 },
+ { 270, 548, 8192, 0, 333 },
+ { 268, 547, 8192, 0, 331 }
+};
+
+// Generated from resnet_v2_50_default_minmax.tflite
+std::vector<armnn::MemBlock> resnetv2
+{
+ { 0, 1, 150528, 0, 0 },
+ { 1, 37, 802816, 0, 1 },
+ { 36, 73, 200704, 0, 36 },
+ { 37, 75, 200704, 0, 37 },
+ { 38, 77, 200704, 0, 38 },
+ { 39, 80, 200704, 0, 39 },
+ { 41, 83, 200704, 0, 41 },
+ { 42, 85, 200704, 0, 42 },
+ { 43, 87, 200704, 0, 43 },
+ { 44, 89, 200704, 0, 44 },
+ { 40, 86, 802816, 0, 40 },
+ { 45, 91, 802816, 0, 45 },
+ { 47, 95, 802816, 0, 47 },
+ { 48, 97, 802816, 0, 48 },
+ { 49, 99, 802816, 0, 49 },
+ { 50, 101, 200704, 0, 50 },
+ { 51, 103, 200704, 0, 51 },
+ { 52, 105, 200704, 0, 52 },
+ { 53, 107, 200704, 0, 53 },
+ { 46, 101, 802816, 0, 46 },
+ { 54, 109, 802816, 0, 54 },
+ { 55, 112, 802816, 0, 55 },
+ { 56, 114, 802816, 0, 56 },
+ { 58, 117, 802816, 0, 58 },
+ { 59, 119, 802816, 0, 59 },
+ { 60, 121, 200704, 0, 60 },
+ { 61, 123, 200704, 0, 61 },
+ { 62, 125, 50176, 0, 62 },
+ { 63, 127, 50176, 0, 63 },
+ { 57, 122, 200704, 0, 57 },
+ { 64, 129, 200704, 0, 64 },
+ { 65, 131, 200704, 0, 65 },
+ { 66, 133, 200704, 0, 66 },
+ { 67, 135, 200704, 0, 67 },
+ { 68, 138, 200704, 0, 68 },
+ { 70, 141, 100352, 0, 70 },
+ { 71, 143, 100352, 0, 71 },
+ { 72, 145, 100352, 0, 72 },
+ { 73, 147, 100352, 0, 73 },
+ { 69, 144, 401408, 0, 69 },
+ { 74, 149, 401408, 0, 74 },
+ { 76, 153, 401408, 0, 76 },
+ { 77, 155, 401408, 0, 77 },
+ { 78, 157, 401408, 0, 78 },
+ { 79, 159, 100352, 0, 79 },
+ { 80, 161, 100352, 0, 80 },
+ { 81, 163, 100352, 0, 81 },
+ { 82, 165, 100352, 0, 82 },
+ { 75, 159, 401408, 0, 75 },
+ { 83, 167, 401408, 0, 83 },
+ { 85, 171, 401408, 0, 85 },
+ { 86, 173, 401408, 0, 86 },
+ { 87, 175, 401408, 0, 87 },
+ { 88, 177, 100352, 0, 88 },
+ { 89, 179, 100352, 0, 89 },
+ { 90, 181, 100352, 0, 90 },
+ { 91, 183, 100352, 0, 91 },
+ { 84, 177, 401408, 0, 84 },
+ { 92, 185, 401408, 0, 92 },
+ { 93, 188, 401408, 0, 93 },
+ { 94, 190, 401408, 0, 94 },
+ { 96, 193, 401408, 0, 96 },
+ { 97, 195, 401408, 0, 97 },
+ { 98, 197, 100352, 0, 98 },
+ { 99, 199, 100352, 0, 99 },
+ { 100, 201, 25088, 0, 100 },
+ { 101, 203, 25088, 0, 101 },
+ { 95, 198, 100352, 0, 95 },
+ { 102, 205, 100352, 0, 102 },
+ { 103, 207, 100352, 0, 103 },
+ { 104, 209, 100352, 0, 104 },
+ { 105, 211, 100352, 0, 105 },
+ { 106, 214, 100352, 0, 106 },
+ { 108, 217, 50176, 0, 108 },
+ { 109, 219, 50176, 0, 109 },
+ { 110, 221, 50176, 0, 110 },
+ { 111, 223, 50176, 0, 111 },
+ { 107, 220, 200704, 0, 107 },
+ { 112, 225, 200704, 0, 112 },
+ { 114, 229, 200704, 0, 114 },
+ { 115, 231, 200704, 0, 115 },
+ { 116, 233, 200704, 0, 116 },
+ { 117, 235, 50176, 0, 117 },
+ { 118, 237, 50176, 0, 118 },
+ { 119, 239, 50176, 0, 119 },
+ { 120, 241, 50176, 0, 120 },
+ { 113, 235, 200704, 0, 113 },
+ { 121, 243, 200704, 0, 121 },
+ { 123, 247, 200704, 0, 123 },
+ { 124, 249, 200704, 0, 124 },
+ { 125, 251, 200704, 0, 125 },
+ { 126, 253, 50176, 0, 126 },
+ { 127, 255, 50176, 0, 127 },
+ { 128, 257, 50176, 0, 128 },
+ { 129, 259, 50176, 0, 129 },
+ { 122, 253, 200704, 0, 122 },
+ { 130, 261, 200704, 0, 130 },
+ { 132, 265, 200704, 0, 132 },
+ { 133, 267, 200704, 0, 133 },
+ { 134, 269, 200704, 0, 134 },
+ { 135, 271, 50176, 0, 135 },
+ { 136, 273, 50176, 0, 136 },
+ { 137, 275, 50176, 0, 137 },
+ { 138, 277, 50176, 0, 138 },
+ { 131, 271, 200704, 0, 131 },
+ { 139, 279, 200704, 0, 139 },
+ { 141, 283, 200704, 0, 141 },
+ { 142, 285, 200704, 0, 142 },
+ { 143, 287, 200704, 0, 143 },
+ { 144, 289, 50176, 0, 144 },
+ { 145, 291, 50176, 0, 145 },
+ { 146, 293, 50176, 0, 146 },
+ { 147, 295, 50176, 0, 147 },
+ { 140, 289, 200704, 0, 140 },
+ { 148, 297, 200704, 0, 148 },
+ { 149, 300, 200704, 0, 149 },
+ { 150, 302, 200704, 0, 150 },
+ { 152, 305, 200704, 0, 152 },
+ { 153, 307, 200704, 0, 153 },
+ { 154, 309, 50176, 0, 154 },
+ { 155, 311, 50176, 0, 155 },
+ { 156, 313, 12544, 0, 156 },
+ { 157, 315, 12544, 0, 157 },
+ { 151, 310, 50176, 0, 151 },
+ { 158, 317, 50176, 0, 158 },
+ { 159, 319, 50176, 0, 159 },
+ { 160, 321, 50176, 0, 160 },
+ { 161, 323, 50176, 0, 161 },
+ { 162, 326, 50176, 0, 162 },
+ { 164, 329, 25088, 0, 164 },
+ { 165, 331, 25088, 0, 165 },
+ { 166, 333, 25088, 0, 166 },
+ { 167, 335, 25088, 0, 167 },
+ { 163, 332, 100352, 0, 163 },
+ { 168, 337, 100352, 0, 168 },
+ { 170, 341, 100352, 0, 170 },
+ { 171, 343, 100352, 0, 171 },
+ { 172, 345, 100352, 0, 172 },
+ { 173, 347, 25088, 0, 173 },
+ { 174, 349, 25088, 0, 174 },
+ { 175, 351, 25088, 0, 175 },
+ { 176, 353, 25088, 0, 176 },
+ { 169, 347, 100352, 0, 169 },
+ { 177, 355, 100352, 0, 177 },
+ { 179, 359, 100352, 0, 179 },
+ { 180, 361, 100352, 0, 180 },
+ { 181, 363, 100352, 0, 181 },
+ { 182, 365, 25088, 0, 182 },
+ { 183, 367, 25088, 0, 183 },
+ { 184, 369, 25088, 0, 184 },
+ { 185, 371, 25088, 0, 185 },
+ { 178, 365, 100352, 0, 178 },
+ { 186, 373, 100352, 0, 186 },
+ { 187, 375, 100352, 0, 187 },
+ { 188, 377, 100352, 0, 188 },
+ { 189, 379, 100352, 0, 189 },
+ { 190, 381, 100352, 0, 190 },
+ { 191, 383, 2048, 0, 191 },
+ { 192, 385, 1001, 0, 192 },
+ { 193, 387, 1001, 0, 193 },
+ { 194, 389, 1001, 0, 194 }
+
+};
+
+// Generated from yolov3_1080_1920_backbone_int8.tflite
+std::vector<armnn::MemBlock> yolov3
+{
+ { 0, 1, 24883200, 0, 0 },
+ { 1, 75, 6220800, 0, 1 },
+ { 74, 150, 66355200, 0, 74 },
+ { 75, 152, 66355200, 0, 75 },
+ { 76, 154, 66355200, 0, 76 },
+ { 77, 155, 66355200, 0, 77 },
+ { 78, 157, 66355200, 0, 78 },
+ { 79, 160, 33177600, 0, 79 },
+ { 80, 162, 33177600, 0, 80 },
+ { 81, 164, 33177600, 0, 81 },
+ { 82, 165, 33177600, 0, 82 },
+ { 84, 170, 16588800, 0, 84 },
+ { 85, 172, 16588800, 0, 85 },
+ { 86, 174, 16588800, 0, 86 },
+ { 87, 175, 16588800, 0, 87 },
+ { 88, 177, 16588800, 0, 88 },
+ { 89, 180, 33177600, 0, 89 },
+ { 90, 182, 33177600, 0, 90 },
+ { 91, 184, 33177600, 0, 91 },
+ { 92, 185, 33177600, 0, 92 },
+ { 93, 187, 33177600, 0, 93 },
+ { 83, 177, 33177600, 0, 83 },
+ { 94, 189, 33177600, 0, 94 },
+ { 95, 192, 16588800, 0, 95 },
+ { 96, 194, 16588800, 0, 96 },
+ { 97, 196, 16588800, 0, 97 },
+ { 98, 197, 16588800, 0, 98 },
+ { 100, 202, 8294400, 0, 100 },
+ { 101, 204, 8294400, 0, 101 },
+ { 102, 206, 8294400, 0, 102 },
+ { 103, 207, 8294400, 0, 103 },
+ { 104, 209, 8294400, 0, 104 },
+ { 105, 212, 16588800, 0, 105 },
+ { 106, 214, 16588800, 0, 106 },
+ { 107, 216, 16588800, 0, 107 },
+ { 108, 217, 16588800, 0, 108 },
+ { 109, 219, 16588800, 0, 109 },
+ { 99, 209, 16588800, 0, 99 },
+ { 111, 224, 8294400, 0, 111 },
+ { 112, 226, 8294400, 0, 112 },
+ { 113, 228, 8294400, 0, 113 },
+ { 114, 229, 8294400, 0, 114 },
+ { 115, 231, 8294400, 0, 115 },
+ { 116, 234, 16588800, 0, 116 },
+ { 117, 236, 16588800, 0, 117 },
+ { 118, 238, 16588800, 0, 118 },
+ { 119, 239, 16588800, 0, 119 },
+ { 120, 241, 16588800, 0, 120 },
+ { 110, 231, 16588800, 0, 110 },
+ { 121, 243, 16588800, 0, 121 },
+ { 122, 246, 8294400, 0, 122 },
+ { 123, 248, 8294400, 0, 123 },
+ { 124, 250, 8294400, 0, 124 },
+ { 125, 251, 8294400, 0, 125 },
+ { 127, 256, 4147200, 0, 127 },
+ { 128, 258, 4147200, 0, 128 },
+ { 129, 260, 4147200, 0, 129 },
+ { 130, 261, 4147200, 0, 130 },
+ { 131, 263, 4147200, 0, 131 },
+ { 132, 266, 8294400, 0, 132 },
+ { 133, 268, 8294400, 0, 133 },
+ { 134, 270, 8294400, 0, 134 },
+ { 135, 271, 8294400, 0, 135 },
+ { 136, 273, 8294400, 0, 136 },
+ { 126, 263, 8294400, 0, 126 },
+ { 138, 278, 4147200, 0, 138 },
+ { 139, 280, 4147200, 0, 139 },
+ { 140, 282, 4147200, 0, 140 },
+ { 141, 283, 4147200, 0, 141 },
+ { 142, 285, 4147200, 0, 142 },
+ { 143, 288, 8294400, 0, 143 },
+ { 144, 290, 8294400, 0, 144 },
+ { 145, 292, 8294400, 0, 145 },
+ { 146, 293, 8294400, 0, 146 },
+ { 147, 295, 8294400, 0, 147 },
+ { 137, 285, 8294400, 0, 137 },
+ { 149, 300, 4147200, 0, 149 },
+ { 150, 302, 4147200, 0, 150 },
+ { 151, 304, 4147200, 0, 151 },
+ { 152, 305, 4147200, 0, 152 },
+ { 153, 307, 4147200, 0, 153 },
+ { 154, 310, 8294400, 0, 154 },
+ { 155, 312, 8294400, 0, 155 },
+ { 156, 314, 8294400, 0, 156 },
+ { 157, 315, 8294400, 0, 157 },
+ { 158, 317, 8294400, 0, 158 },
+ { 148, 307, 8294400, 0, 148 },
+ { 160, 322, 4147200, 0, 160 },
+ { 161, 324, 4147200, 0, 161 },
+ { 162, 326, 4147200, 0, 162 },
+ { 163, 327, 4147200, 0, 163 },
+ { 164, 329, 4147200, 0, 164 },
+ { 165, 332, 8294400, 0, 165 },
+ { 166, 334, 8294400, 0, 166 },
+ { 167, 336, 8294400, 0, 167 },
+ { 168, 337, 8294400, 0, 168 },
+ { 169, 339, 8294400, 0, 169 },
+ { 159, 329, 8294400, 0, 159 },
+ { 171, 344, 4147200, 0, 171 },
+ { 172, 346, 4147200, 0, 172 },
+ { 173, 348, 4147200, 0, 173 },
+ { 174, 349, 4147200, 0, 174 },
+ { 175, 351, 4147200, 0, 175 },
+ { 176, 354, 8294400, 0, 176 },
+ { 177, 356, 8294400, 0, 177 },
+ { 178, 358, 8294400, 0, 178 },
+ { 179, 359, 8294400, 0, 179 },
+ { 180, 361, 8294400, 0, 180 },
+ { 170, 351, 8294400, 0, 170 },
+ { 182, 366, 4147200, 0, 182 },
+ { 183, 368, 4147200, 0, 183 },
+ { 184, 370, 4147200, 0, 184 },
+ { 185, 371, 4147200, 0, 185 },
+ { 186, 373, 4147200, 0, 186 },
+ { 187, 376, 8294400, 0, 187 },
+ { 188, 378, 8294400, 0, 188 },
+ { 189, 380, 8294400, 0, 189 },
+ { 190, 381, 8294400, 0, 190 },
+ { 191, 383, 8294400, 0, 191 },
+ { 181, 373, 8294400, 0, 181 },
+ { 193, 388, 4147200, 0, 193 },
+ { 194, 390, 4147200, 0, 194 },
+ { 195, 392, 4147200, 0, 195 },
+ { 196, 393, 4147200, 0, 196 },
+ { 197, 395, 4147200, 0, 197 },
+ { 198, 398, 8294400, 0, 198 },
+ { 199, 400, 8294400, 0, 199 },
+ { 200, 402, 8294400, 0, 200 },
+ { 201, 403, 8294400, 0, 201 },
+ { 202, 405, 8294400, 0, 202 },
+ { 192, 395, 8294400, 0, 192 },
+ { 204, 410, 4147200, 0, 204 },
+ { 205, 412, 4147200, 0, 205 },
+ { 206, 414, 4147200, 0, 206 },
+ { 207, 415, 4147200, 0, 207 },
+ { 208, 417, 4147200, 0, 208 },
+ { 209, 420, 8294400, 0, 209 },
+ { 210, 422, 8294400, 0, 210 },
+ { 211, 424, 8294400, 0, 211 },
+ { 212, 425, 8294400, 0, 212 },
+ { 213, 427, 8294400, 0, 213 },
+ { 203, 417, 8294400, 0, 203 },
+ { 214, 430, 8294400, 0, 214 },
+ { 215, 433, 4177920, 0, 215 },
+ { 217, 436, 4177920, 0, 217 },
+ { 218, 438, 4177920, 0, 218 },
+ { 219, 439, 4177920, 0, 219 },
+ { 221, 444, 2088960, 0, 221 },
+ { 222, 446, 2088960, 0, 222 },
+ { 223, 448, 2088960, 0, 223 },
+ { 224, 449, 2088960, 0, 224 },
+ { 225, 451, 2088960, 0, 225 },
+ { 226, 454, 4177920, 0, 226 },
+ { 227, 456, 4177920, 0, 227 },
+ { 228, 458, 4177920, 0, 228 },
+ { 229, 459, 4177920, 0, 229 },
+ { 230, 461, 4177920, 0, 230 },
+ { 220, 451, 4177920, 0, 220 },
+ { 232, 466, 2088960, 0, 232 },
+ { 233, 468, 2088960, 0, 233 },
+ { 234, 470, 2088960, 0, 234 },
+ { 235, 471, 2088960, 0, 235 },
+ { 236, 473, 2088960, 0, 236 },
+ { 237, 476, 4177920, 0, 237 },
+ { 238, 478, 4177920, 0, 238 },
+ { 239, 480, 4177920, 0, 239 },
+ { 240, 481, 4177920, 0, 240 },
+ { 241, 483, 4177920, 0, 241 },
+ { 231, 473, 4177920, 0, 231 },
+ { 243, 488, 2088960, 0, 243 },
+ { 244, 490, 2088960, 0, 244 },
+ { 245, 492, 2088960, 0, 245 },
+ { 246, 493, 2088960, 0, 246 },
+ { 247, 495, 2088960, 0, 247 },
+ { 248, 498, 4177920, 0, 248 },
+ { 249, 500, 4177920, 0, 249 },
+ { 250, 502, 4177920, 0, 250 },
+ { 251, 503, 4177920, 0, 251 },
+ { 252, 505, 4177920, 0, 252 },
+ { 242, 495, 4177920, 0, 242 },
+ { 254, 510, 2088960, 0, 254 },
+ { 255, 512, 2088960, 0, 255 },
+ { 256, 514, 2088960, 0, 256 },
+ { 257, 515, 2088960, 0, 257 },
+ { 258, 517, 2088960, 0, 258 },
+ { 259, 520, 4177920, 0, 259 },
+ { 260, 522, 4177920, 0, 260 },
+ { 261, 524, 4177920, 0, 261 },
+ { 262, 525, 4177920, 0, 262 },
+ { 263, 527, 4177920, 0, 263 },
+ { 253, 517, 4177920, 0, 253 },
+ { 265, 532, 2088960, 0, 265 },
+ { 266, 534, 2088960, 0, 266 },
+ { 267, 536, 2088960, 0, 267 },
+ { 268, 537, 2088960, 0, 268 },
+ { 269, 539, 2088960, 0, 269 },
+ { 270, 542, 4177920, 0, 270 },
+ { 271, 544, 4177920, 0, 271 },
+ { 272, 546, 4177920, 0, 272 },
+ { 273, 547, 4177920, 0, 273 },
+ { 274, 549, 4177920, 0, 274 },
+ { 264, 539, 4177920, 0, 264 },
+ { 276, 554, 2088960, 0, 276 },
+ { 277, 556, 2088960, 0, 277 },
+ { 278, 558, 2088960, 0, 278 },
+ { 279, 559, 2088960, 0, 279 },
+ { 280, 561, 2088960, 0, 280 },
+ { 281, 564, 4177920, 0, 281 },
+ { 282, 566, 4177920, 0, 282 },
+ { 283, 568, 4177920, 0, 283 },
+ { 284, 569, 4177920, 0, 284 },
+ { 285, 571, 4177920, 0, 285 },
+ { 275, 561, 4177920, 0, 275 },
+ { 287, 576, 2088960, 0, 287 },
+ { 288, 578, 2088960, 0, 288 },
+ { 289, 580, 2088960, 0, 289 },
+ { 290, 581, 2088960, 0, 290 },
+ { 291, 583, 2088960, 0, 291 },
+ { 292, 586, 4177920, 0, 292 },
+ { 293, 588, 4177920, 0, 293 },
+ { 294, 590, 4177920, 0, 294 },
+ { 295, 591, 4177920, 0, 295 },
+ { 296, 593, 4177920, 0, 296 },
+ { 286, 583, 4177920, 0, 286 },
+ { 298, 598, 2088960, 0, 298 },
+ { 299, 600, 2088960, 0, 299 },
+ { 300, 602, 2088960, 0, 300 },
+ { 301, 603, 2088960, 0, 301 },
+ { 302, 605, 2088960, 0, 302 },
+ { 303, 608, 4177920, 0, 303 },
+ { 304, 610, 4177920, 0, 304 },
+ { 305, 612, 4177920, 0, 305 },
+ { 306, 613, 4177920, 0, 306 },
+ { 307, 615, 4177920, 0, 307 },
+ { 297, 605, 4177920, 0, 297 },
+ { 309, 620, 2088960, 0, 309 },
+ { 310, 622, 2088960, 0, 310 },
+ { 311, 624, 2088960, 0, 311 },
+ { 312, 625, 2088960, 0, 312 },
+ { 314, 630, 1044480, 0, 314 },
+ { 315, 632, 1044480, 0, 315 },
+ { 316, 634, 1044480, 0, 316 },
+ { 317, 635, 1044480, 0, 317 },
+ { 318, 637, 1044480, 0, 318 },
+ { 319, 640, 2088960, 0, 319 },
+ { 320, 642, 2088960, 0, 320 },
+ { 321, 644, 2088960, 0, 321 },
+ { 322, 645, 2088960, 0, 322 },
+ { 323, 647, 2088960, 0, 323 },
+ { 313, 637, 2088960, 0, 313 },
+ { 325, 652, 1044480, 0, 325 },
+ { 326, 654, 1044480, 0, 326 },
+ { 327, 656, 1044480, 0, 327 },
+ { 328, 657, 1044480, 0, 328 },
+ { 329, 659, 1044480, 0, 329 },
+ { 330, 662, 2088960, 0, 330 },
+ { 331, 664, 2088960, 0, 331 },
+ { 332, 666, 2088960, 0, 332 },
+ { 333, 667, 2088960, 0, 333 },
+ { 334, 669, 2088960, 0, 334 },
+ { 324, 659, 2088960, 0, 324 },
+ { 336, 674, 1044480, 0, 336 },
+ { 337, 676, 1044480, 0, 337 },
+ { 338, 678, 1044480, 0, 338 },
+ { 339, 679, 1044480, 0, 339 },
+ { 340, 681, 1044480, 0, 340 },
+ { 341, 684, 2088960, 0, 341 },
+ { 342, 686, 2088960, 0, 342 },
+ { 343, 688, 2088960, 0, 343 },
+ { 344, 689, 2088960, 0, 344 },
+ { 345, 691, 2088960, 0, 345 },
+ { 335, 681, 2088960, 0, 335 },
+ { 347, 696, 1044480, 0, 347 },
+ { 348, 698, 1044480, 0, 348 },
+ { 349, 700, 1044480, 0, 349 },
+ { 350, 701, 1044480, 0, 350 },
+ { 351, 703, 1044480, 0, 351 },
+ { 352, 706, 2088960, 0, 352 },
+ { 353, 708, 2088960, 0, 353 },
+ { 354, 710, 2088960, 0, 354 },
+ { 355, 711, 2088960, 0, 355 },
+ { 356, 713, 2088960, 0, 356 },
+ { 346, 703, 2088960, 0, 346 },
+ { 357, 715, 2088960, 0, 357 },
+ { 358, 718, 1044480, 0, 358 },
+ { 359, 720, 1044480, 0, 359 },
+ { 360, 722, 1044480, 0, 360 },
+ { 361, 723, 1044480, 0, 361 },
+ { 362, 725, 1044480, 0, 362 },
+ { 363, 728, 2088960, 0, 363 },
+ { 364, 730, 2088960, 0, 364 },
+ { 365, 732, 2088960, 0, 365 },
+ { 366, 733, 2088960, 0, 366 },
+ { 367, 735, 2088960, 0, 367 },
+ { 368, 738, 1044480, 0, 368 },
+ { 369, 740, 1044480, 0, 369 },
+ { 370, 742, 1044480, 0, 370 },
+ { 371, 743, 1044480, 0, 371 },
+ { 372, 745, 1044480, 0, 372 },
+ { 373, 748, 2088960, 0, 373 },
+ { 374, 750, 2088960, 0, 374 },
+ { 375, 752, 2088960, 0, 375 },
+ { 376, 753, 2088960, 0, 376 },
+ { 377, 755, 2088960, 0, 377 },
+ { 378, 758, 1044480, 0, 378 },
+ { 379, 760, 1044480, 0, 379 },
+ { 380, 762, 1044480, 0, 380 },
+ { 381, 763, 1044480, 0, 381 },
+ { 382, 766, 1044480, 0, 382 },
+ { 383, 770, 2088960, 0, 383 },
+ { 384, 772, 522240, 0, 384 },
+ { 385, 774, 2088960, 0, 385 },
+ { 386, 776, 522240, 0, 386 },
+ { 387, 778, 2088960, 0, 387 },
+ { 389, 780, 2088960, 0, 389 },
+ { 388, 780, 522240, 0, 388 },
+ { 390, 782, 522240, 0, 390 },
+ { 391, 784, 2088960, 0, 391 },
+ { 392, 786, 522240, 0, 392 },
+ { 394, 789, 2088960, 0, 394 },
+ { 393, 789, 520200, 0, 393 },
+ { 395, 792, 2088960, 0, 395 },
+ { 308, 705, 4177920, 0, 308 },
+ { 397, 795, 6266880, 0, 397 },
+ { 398, 798, 2088960, 0, 398 },
+ { 399, 800, 2088960, 0, 399 },
+ { 400, 802, 2088960, 0, 400 },
+ { 401, 803, 2088960, 0, 401 },
+ { 402, 805, 2088960, 0, 402 },
+ { 403, 808, 4177920, 0, 403 },
+ { 404, 810, 4177920, 0, 404 },
+ { 405, 812, 4177920, 0, 405 },
+ { 406, 813, 4177920, 0, 406 },
+ { 407, 815, 4177920, 0, 407 },
+ { 408, 818, 2088960, 0, 408 },
+ { 409, 820, 2088960, 0, 409 },
+ { 410, 822, 2088960, 0, 410 },
+ { 411, 823, 2088960, 0, 411 },
+ { 412, 825, 2088960, 0, 412 },
+ { 413, 828, 4177920, 0, 413 },
+ { 414, 830, 4177920, 0, 414 },
+ { 415, 832, 4177920, 0, 415 },
+ { 416, 833, 4177920, 0, 416 },
+ { 417, 835, 4177920, 0, 417 },
+ { 418, 838, 2088960, 0, 418 },
+ { 419, 840, 2088960, 0, 419 },
+ { 420, 842, 2088960, 0, 420 },
+ { 421, 843, 2088960, 0, 421 },
+ { 422, 846, 2088960, 0, 422 },
+ { 423, 850, 4177920, 0, 423 },
+ { 424, 852, 1044480, 0, 424 },
+ { 425, 854, 4177920, 0, 425 },
+ { 426, 856, 1044480, 0, 426 },
+ { 427, 858, 4177920, 0, 427 },
+ { 429, 860, 4177920, 0, 429 },
+ { 428, 860, 1044480, 0, 428 },
+ { 430, 862, 1044480, 0, 430 },
+ { 431, 864, 4177920, 0, 431 },
+ { 432, 866, 1044480, 0, 432 },
+ { 434, 869, 4147200, 0, 434 },
+ { 433, 869, 2080800, 0, 433 },
+ { 435, 872, 4147200, 0, 435 },
+ { 216, 653, 8294400, 0, 216 },
+ { 437, 875, 12441600, 0, 437 },
+ { 438, 878, 4147200, 0, 438 },
+ { 439, 880, 4147200, 0, 439 },
+ { 440, 882, 4147200, 0, 440 },
+ { 441, 883, 4147200, 0, 441 },
+ { 442, 885, 4147200, 0, 442 },
+ { 443, 888, 8294400, 0, 443 },
+ { 444, 890, 8294400, 0, 444 },
+ { 445, 892, 8294400, 0, 445 },
+ { 446, 893, 8294400, 0, 446 },
+ { 447, 895, 8294400, 0, 447 },
+ { 448, 898, 4147200, 0, 448 },
+ { 449, 900, 4147200, 0, 449 },
+ { 450, 902, 4147200, 0, 450 },
+ { 451, 903, 4147200, 0, 451 },
+ { 452, 905, 4147200, 0, 452 },
+ { 453, 908, 8294400, 0, 453 },
+ { 454, 910, 8294400, 0, 454 },
+ { 455, 912, 8294400, 0, 455 },
+ { 456, 913, 8294400, 0, 456 },
+ { 457, 915, 8294400, 0, 457 },
+ { 458, 918, 4147200, 0, 458 },
+ { 459, 920, 4147200, 0, 459 },
+ { 460, 922, 4147200, 0, 460 },
+ { 461, 923, 4147200, 0, 461 },
+ { 462, 925, 4147200, 0, 462 },
+ { 463, 928, 8294400, 0, 463 },
+ { 464, 930, 8294400, 0, 464 },
+ { 465, 932, 8294400, 0, 465 },
+ { 466, 933, 8294400, 0, 466 },
+ { 467, 935, 8294400, 0, 467 },
+ { 468, 937, 8262000, 0, 468 },
+ { 396, 866, 2080800, 0, 396 },
+ { 436, 907, 8323200, 0, 436 },
+ { 469, 941, 33048000, 0, 469 }
+};
+
+// Generated from deeplabv3_257_mv_gpu.tflite
+std::vector<armnn::MemBlock> deeplabv3
+{
+ { 0, 3, 31616, 0, 0 },
+ { 3, 39, 31616, 0, 3 },
+ { 36, 73, 131072, 0, 36 },
+ { 37, 75, 131072, 0, 37 },
+ { 38, 77, 131072, 0, 38 },
+ { 39, 79, 131072, 0, 39 },
+ { 40, 81, 131072, 0, 40 },
+ { 41, 83, 131072, 0, 41 },
+ { 42, 85, 131072, 0, 42 },
+ { 43, 87, 131072, 0, 43 },
+ { 44, 89, 131072, 0, 44 },
+ { 45, 91, 131072, 0, 45 },
+ { 46, 93, 8192, 0, 46 },
+ { 46, 94, 8192, 0, 47 },
+ { 46, 95, 8192, 0, 48 },
+ { 46, 96, 8192, 0, 49 },
+ { 46, 97, 8192, 0, 50 },
+ { 46, 98, 8192, 0, 51 },
+ { 46, 99, 8192, 0, 52 },
+ { 46, 100, 8192, 0, 53 },
+ { 46, 101, 8192, 0, 54 },
+ { 46, 102, 8192, 0, 55 },
+ { 46, 103, 8192, 0, 56 },
+ { 46, 104, 8192, 0, 57 },
+ { 46, 105, 8192, 0, 58 },
+ { 46, 106, 8192, 0, 59 },
+ { 46, 107, 8192, 0, 60 },
+ { 46, 108, 8192, 0, 61 },
+ { 47, 110, 8192, 0, 62 },
+ { 1, 64, 8192, 0, 1 },
+ { 63, 127, 16384, 0, 78 },
+ { 64, 129, 32768, 0, 79 },
+ { 65, 131, 8192, 0, 82 },
+ { 65, 132, 8192, 0, 80 },
+ { 65, 133, 8192, 0, 81 },
+ { 65, 134, 8192, 0, 83 },
+ { 66, 136, 8192, 0, 84 },
+ { 67, 138, 8192, 0, 85 },
+ { 68, 139, 8192, 0, 86 },
+ { 70, 142, 8192, 0, 88 },
+ { 2, 74, 8192, 0, 2 },
+ { 72, 145, 8192, 0, 90 },
+ { 71, 144, 8192, 0, 89 },
+ { 69, 144, 8192, 0, 87 },
+ { 74, 149, 8192, 0, 92 },
+ { 48, 124, 8192, 0, 63 },
+ { 76, 153, 16384, 0, 94 },
+ { 77, 155, 32768, 0, 95 },
+ { 78, 157, 8192, 0, 98 },
+ { 78, 158, 8192, 0, 96 },
+ { 78, 159, 8192, 0, 97 },
+ { 78, 160, 8192, 0, 99 },
+ { 79, 162, 8192, 0, 100 },
+ { 80, 164, 8192, 0, 101 },
+ { 81, 165, 8192, 0, 102 },
+ { 83, 168, 8192, 0, 104 },
+ { 73, 158, 8192, 0, 91 },
+ { 85, 171, 8192, 0, 106 },
+ { 84, 170, 8192, 0, 105 },
+ { 82, 170, 8192, 0, 103 },
+ { 87, 175, 8192, 0, 108 },
+ { 49, 138, 8192, 0, 64 },
+ { 89, 179, 16384, 0, 110 },
+ { 90, 181, 32768, 0, 111 },
+ { 91, 183, 8192, 0, 114 },
+ { 91, 184, 8192, 0, 112 },
+ { 91, 185, 8192, 0, 113 },
+ { 91, 186, 8192, 0, 115 },
+ { 92, 188, 8192, 0, 116 },
+ { 93, 190, 8192, 0, 117 },
+ { 94, 191, 8192, 0, 118 },
+ { 96, 194, 8192, 0, 120 },
+ { 86, 184, 8192, 0, 107 },
+ { 98, 197, 8192, 0, 122 },
+ { 97, 196, 8192, 0, 121 },
+ { 95, 196, 8192, 0, 119 },
+ { 100, 201, 8192, 0, 124 },
+ { 50, 152, 8192, 0, 65 },
+ { 102, 205, 16384, 0, 126 },
+ { 103, 207, 32768, 0, 127 },
+ { 104, 209, 8192, 0, 130 },
+ { 104, 210, 8192, 0, 128 },
+ { 104, 211, 8192, 0, 129 },
+ { 104, 212, 8192, 0, 131 },
+ { 105, 214, 8192, 0, 132 },
+ { 106, 216, 8192, 0, 133 },
+ { 107, 217, 8192, 0, 134 },
+ { 109, 220, 8192, 0, 136 },
+ { 99, 210, 8192, 0, 123 },
+ { 111, 223, 8192, 0, 138 },
+ { 110, 222, 8192, 0, 137 },
+ { 108, 222, 8192, 0, 135 },
+ { 113, 227, 8192, 0, 140 },
+ { 51, 166, 8192, 0, 66 },
+ { 115, 231, 16384, 0, 142 },
+ { 116, 233, 32768, 0, 143 },
+ { 117, 235, 8192, 0, 146 },
+ { 117, 236, 8192, 0, 144 },
+ { 117, 237, 8192, 0, 145 },
+ { 117, 238, 8192, 0, 147 },
+ { 118, 240, 8192, 0, 148 },
+ { 119, 242, 8192, 0, 149 },
+ { 120, 243, 8192, 0, 150 },
+ { 122, 246, 8192, 0, 152 },
+ { 112, 236, 8192, 0, 139 },
+ { 124, 249, 8192, 0, 154 },
+ { 123, 248, 8192, 0, 153 },
+ { 121, 248, 8192, 0, 151 },
+ { 126, 253, 8192, 0, 156 },
+ { 52, 180, 8192, 0, 67 },
+ { 128, 257, 16384, 0, 158 },
+ { 129, 259, 32768, 0, 159 },
+ { 130, 261, 8192, 0, 162 },
+ { 130, 262, 8192, 0, 160 },
+ { 130, 263, 8192, 0, 161 },
+ { 130, 264, 8192, 0, 163 },
+ { 131, 266, 8192, 0, 164 },
+ { 132, 268, 8192, 0, 165 },
+ { 133, 269, 8192, 0, 166 },
+ { 135, 272, 8192, 0, 168 },
+ { 125, 262, 8192, 0, 155 },
+ { 137, 275, 8192, 0, 170 },
+ { 136, 274, 8192, 0, 169 },
+ { 134, 274, 8192, 0, 167 },
+ { 139, 279, 8192, 0, 172 },
+ { 53, 194, 8192, 0, 68 },
+ { 141, 283, 16384, 0, 174 },
+ { 142, 285, 32768, 0, 175 },
+ { 143, 287, 8192, 0, 178 },
+ { 143, 288, 8192, 0, 176 },
+ { 143, 289, 8192, 0, 177 },
+ { 143, 290, 8192, 0, 179 },
+ { 144, 292, 8192, 0, 180 },
+ { 145, 294, 8192, 0, 181 },
+ { 146, 295, 8192, 0, 182 },
+ { 148, 298, 8192, 0, 184 },
+ { 138, 288, 8192, 0, 171 },
+ { 150, 301, 8192, 0, 186 },
+ { 149, 300, 8192, 0, 185 },
+ { 147, 300, 8192, 0, 183 },
+ { 152, 305, 8192, 0, 188 },
+ { 54, 208, 8192, 0, 69 },
+ { 154, 309, 16384, 0, 190 },
+ { 155, 311, 32768, 0, 191 },
+ { 156, 313, 8192, 0, 194 },
+ { 156, 314, 8192, 0, 192 },
+ { 156, 315, 8192, 0, 193 },
+ { 156, 316, 8192, 0, 195 },
+ { 157, 318, 8192, 0, 196 },
+ { 158, 320, 8192, 0, 197 },
+ { 159, 321, 8192, 0, 198 },
+ { 161, 324, 8192, 0, 200 },
+ { 151, 314, 8192, 0, 187 },
+ { 163, 327, 8192, 0, 202 },
+ { 162, 326, 8192, 0, 201 },
+ { 160, 326, 8192, 0, 199 },
+ { 165, 331, 8192, 0, 204 },
+ { 55, 222, 8192, 0, 70 },
+ { 167, 335, 16384, 0, 206 },
+ { 168, 337, 32768, 0, 207 },
+ { 169, 339, 8192, 0, 210 },
+ { 169, 340, 8192, 0, 208 },
+ { 169, 341, 8192, 0, 209 },
+ { 169, 342, 8192, 0, 211 },
+ { 170, 344, 8192, 0, 212 },
+ { 171, 346, 8192, 0, 213 },
+ { 172, 347, 8192, 0, 214 },
+ { 174, 350, 8192, 0, 216 },
+ { 164, 340, 8192, 0, 203 },
+ { 176, 353, 8192, 0, 218 },
+ { 175, 352, 8192, 0, 217 },
+ { 173, 352, 8192, 0, 215 },
+ { 178, 357, 8192, 0, 220 },
+ { 56, 236, 8192, 0, 71 },
+ { 180, 361, 16384, 0, 222 },
+ { 181, 363, 32768, 0, 223 },
+ { 182, 365, 8192, 0, 226 },
+ { 182, 366, 8192, 0, 224 },
+ { 182, 367, 8192, 0, 225 },
+ { 182, 368, 8192, 0, 227 },
+ { 183, 370, 8192, 0, 228 },
+ { 184, 372, 8192, 0, 229 },
+ { 185, 373, 8192, 0, 230 },
+ { 187, 376, 8192, 0, 232 },
+ { 177, 366, 8192, 0, 219 },
+ { 189, 379, 8192, 0, 234 },
+ { 188, 378, 8192, 0, 233 },
+ { 186, 378, 8192, 0, 231 },
+ { 191, 383, 8192, 0, 236 },
+ { 57, 250, 8192, 0, 72 },
+ { 193, 387, 16384, 0, 238 },
+ { 194, 389, 32768, 0, 239 },
+ { 195, 391, 8192, 0, 242 },
+ { 195, 392, 8192, 0, 240 },
+ { 195, 393, 8192, 0, 241 },
+ { 195, 394, 8192, 0, 243 },
+ { 196, 396, 8192, 0, 244 },
+ { 197, 398, 8192, 0, 245 },
+ { 198, 399, 8192, 0, 246 },
+ { 200, 402, 8192, 0, 248 },
+ { 190, 392, 8192, 0, 235 },
+ { 202, 405, 8192, 0, 250 },
+ { 201, 404, 8192, 0, 249 },
+ { 199, 404, 8192, 0, 247 },
+ { 204, 409, 8192, 0, 252 },
+ { 58, 264, 8192, 0, 73 },
+ { 206, 413, 16384, 0, 254 },
+ { 207, 415, 32768, 0, 255 },
+ { 208, 417, 8192, 0, 258 },
+ { 208, 418, 8192, 0, 256 },
+ { 208, 419, 8192, 0, 257 },
+ { 208, 420, 8192, 0, 259 },
+ { 209, 422, 8192, 0, 260 },
+ { 210, 424, 8192, 0, 261 },
+ { 211, 425, 8192, 0, 262 },
+ { 213, 428, 8192, 0, 264 },
+ { 203, 418, 8192, 0, 251 },
+ { 215, 431, 8192, 0, 266 },
+ { 214, 430, 8192, 0, 265 },
+ { 212, 430, 8192, 0, 263 },
+ { 217, 435, 8192, 0, 268 },
+ { 59, 278, 8192, 0, 74 },
+ { 219, 439, 16384, 0, 270 },
+ { 220, 441, 32768, 0, 271 },
+ { 221, 443, 8192, 0, 274 },
+ { 221, 444, 8192, 0, 272 },
+ { 221, 445, 8192, 0, 273 },
+ { 221, 446, 8192, 0, 275 },
+ { 222, 448, 8192, 0, 276 },
+ { 223, 450, 8192, 0, 277 },
+ { 224, 451, 8192, 0, 278 },
+ { 226, 454, 8192, 0, 280 },
+ { 216, 444, 8192, 0, 267 },
+ { 228, 457, 8192, 0, 282 },
+ { 227, 456, 8192, 0, 281 },
+ { 225, 456, 8192, 0, 279 },
+ { 230, 461, 8192, 0, 284 },
+ { 60, 292, 8192, 0, 75 },
+ { 232, 465, 16384, 0, 286 },
+ { 233, 467, 32768, 0, 287 },
+ { 234, 469, 8192, 0, 290 },
+ { 234, 470, 8192, 0, 288 },
+ { 234, 471, 8192, 0, 289 },
+ { 234, 472, 8192, 0, 291 },
+ { 235, 474, 8192, 0, 292 },
+ { 236, 476, 8192, 0, 293 },
+ { 237, 477, 8192, 0, 294 },
+ { 239, 480, 8192, 0, 296 },
+ { 229, 470, 8192, 0, 283 },
+ { 241, 483, 8192, 0, 298 },
+ { 240, 482, 8192, 0, 297 },
+ { 238, 482, 8192, 0, 295 },
+ { 243, 487, 8192, 0, 300 },
+ { 61, 306, 8192, 0, 76 },
+ { 245, 491, 16384, 0, 302 },
+ { 246, 493, 32768, 0, 303 },
+ { 247, 495, 8192, 0, 306 },
+ { 247, 496, 8192, 0, 304 },
+ { 247, 497, 8192, 0, 305 },
+ { 247, 498, 8192, 0, 307 },
+ { 248, 500, 8192, 0, 308 },
+ { 249, 502, 8192, 0, 309 },
+ { 250, 503, 8192, 0, 310 },
+ { 252, 506, 8192, 0, 312 },
+ { 242, 496, 8192, 0, 299 },
+ { 254, 509, 8192, 0, 314 },
+ { 253, 508, 8192, 0, 313 },
+ { 251, 508, 8192, 0, 311 },
+ { 256, 513, 8192, 0, 316 },
+ { 62, 320, 8192, 0, 77 },
+ { 258, 517, 16384, 0, 318 },
+ { 259, 519, 32768, 0, 319 },
+ { 260, 521, 8192, 0, 322 },
+ { 260, 522, 8192, 0, 320 },
+ { 260, 523, 8192, 0, 321 },
+ { 260, 524, 8192, 0, 323 },
+ { 261, 526, 8192, 0, 324 },
+ { 262, 528, 8192, 0, 325 },
+ { 263, 529, 8192, 0, 326 },
+ { 265, 532, 8192, 0, 328 },
+ { 255, 522, 8192, 0, 315 },
+ { 267, 535, 8192, 0, 330 },
+ { 266, 534, 8192, 0, 329 },
+ { 264, 534, 8192, 0, 327 },
+ { 269, 539, 8192, 0, 332 },
+ { 75, 346, 8192, 0, 93 },
+ { 88, 359, 8192, 0, 109 },
+ { 101, 372, 8192, 0, 125 },
+ { 114, 385, 8192, 0, 141 },
+ { 127, 398, 8192, 0, 157 },
+ { 140, 411, 8192, 0, 173 },
+ { 153, 424, 8192, 0, 189 },
+ { 166, 437, 8192, 0, 205 },
+ { 179, 450, 8192, 0, 221 },
+ { 192, 463, 8192, 0, 237 },
+ { 205, 476, 8192, 0, 253 },
+ { 218, 489, 8192, 0, 269 },
+ { 231, 502, 8192, 0, 285 },
+ { 244, 515, 8192, 0, 301 },
+ { 257, 528, 8192, 0, 317 },
+ { 271, 543, 131072, 0, 334 },
+ { 272, 545, 131072, 0, 335 },
+ { 273, 547, 131072, 0, 336 },
+ { 274, 549, 131072, 0, 337 },
+ { 275, 551, 1856, 0, 338 },
+ { 276, 553, 1856, 0, 339 },
+ { 270, 548, 8192, 0, 333 },
+ { 268, 547, 8192, 0, 331 }
+};
+
+// Generated from ssd_mobilenet_v2_int8.tflite
+std::vector<armnn::MemBlock> ssd_mobilenetv2
+{
+ { 0, 1, 1080000, 0, 0 },
+ { 1, 3, 270000, 0, 1 },
+ { 2, 5, 720000, 0, 2 },
+ { 3, 7, 720000, 0, 3 },
+ { 4, 9, 720000, 0, 4 },
+ { 5, 11, 720000, 0, 5 },
+ { 6, 13, 360000, 0, 6 },
+ { 7, 15, 2160000, 0, 7 },
+ { 8, 17, 2160000, 0, 8 },
+ { 9, 19, 540000, 0, 9 },
+ { 10, 21, 540000, 0, 10 },
+ { 12, 25, 810000, 0, 12 },
+ { 13, 27, 810000, 0, 13 },
+ { 14, 29, 810000, 0, 14 },
+ { 15, 31, 810000, 0, 15 },
+ { 11, 28, 135000, 0, 11 },
+ { 16, 33, 135000, 0, 16 },
+ { 17, 35, 135000, 0, 17 },
+ { 18, 37, 810000, 0, 18 },
+ { 19, 39, 810000, 0, 19 },
+ { 20, 41, 207936, 0, 20 },
+ { 21, 43, 207936, 0, 21 },
+ { 23, 47, 277248, 0, 23 },
+ { 24, 49, 277248, 0, 24 },
+ { 25, 51, 277248, 0, 25 },
+ { 26, 53, 277248, 0, 26 },
+ { 22, 50, 46208, 0, 22 },
+ { 27, 55, 46208, 0, 27 },
+ { 29, 59, 277248, 0, 29 },
+ { 30, 61, 277248, 0, 30 },
+ { 31, 63, 277248, 0, 31 },
+ { 32, 65, 277248, 0, 32 },
+ { 28, 62, 46208, 0, 28 },
+ { 33, 67, 46208, 0, 33 },
+ { 34, 69, 46208, 0, 34 },
+ { 35, 71, 277248, 0, 35 },
+ { 36, 73, 277248, 0, 36 },
+ { 37, 75, 69312, 0, 37 },
+ { 38, 77, 69312, 0, 38 },
+ { 40, 81, 138624, 0, 40 },
+ { 41, 83, 138624, 0, 41 },
+ { 42, 85, 138624, 0, 42 },
+ { 43, 87, 138624, 0, 43 },
+ { 39, 84, 23104, 0, 39 },
+ { 44, 89, 23104, 0, 44 },
+ { 46, 93, 138624, 0, 46 },
+ { 47, 95, 138624, 0, 47 },
+ { 48, 97, 138624, 0, 48 },
+ { 49, 99, 138624, 0, 49 },
+ { 45, 96, 23104, 0, 45 },
+ { 50, 101, 23104, 0, 50 },
+ { 52, 105, 138624, 0, 52 },
+ { 53, 107, 138624, 0, 53 },
+ { 54, 109, 138624, 0, 54 },
+ { 55, 111, 138624, 0, 55 },
+ { 51, 108, 23104, 0, 51 },
+ { 56, 113, 23104, 0, 56 },
+ { 57, 115, 23104, 0, 57 },
+ { 58, 117, 138624, 0, 58 },
+ { 59, 119, 138624, 0, 59 },
+ { 60, 121, 138624, 0, 60 },
+ { 61, 123, 138624, 0, 61 },
+ { 63, 127, 207936, 0, 63 },
+ { 64, 129, 207936, 0, 64 },
+ { 65, 131, 207936, 0, 65 },
+ { 66, 133, 207936, 0, 66 },
+ { 62, 130, 34656, 0, 62 },
+ { 67, 135, 34656, 0, 67 },
+ { 69, 139, 207936, 0, 69 },
+ { 70, 141, 207936, 0, 70 },
+ { 71, 143, 207936, 0, 71 },
+ { 72, 145, 207936, 0, 72 },
+ { 68, 142, 34656, 0, 68 },
+ { 73, 147, 34656, 0, 73 },
+ { 74, 149, 34656, 0, 74 },
+ { 75, 151, 207936, 0, 75 },
+ { 76, 155, 207936, 0, 76 },
+ { 77, 157, 4332, 0, 77 },
+ { 78, 159, 98553, 0, 78 },
+ { 79, 161, 57600, 0, 79 },
+ { 82, 165, 57600, 0, 82 },
+ { 84, 169, 96000, 0, 84 },
+ { 85, 171, 96000, 0, 85 },
+ { 86, 173, 96000, 0, 86 },
+ { 87, 175, 96000, 0, 87 },
+ { 83, 172, 16000, 0, 83 },
+ { 88, 177, 16000, 0, 88 },
+ { 90, 181, 96000, 0, 90 },
+ { 91, 183, 96000, 0, 91 },
+ { 92, 185, 96000, 0, 92 },
+ { 93, 187, 96000, 0, 93 },
+ { 89, 184, 16000, 0, 89 },
+ { 94, 189, 16000, 0, 94 },
+ { 95, 191, 16000, 0, 95 },
+ { 96, 193, 96000, 0, 96 },
+ { 97, 195, 96000, 0, 97 },
+ { 98, 197, 96000, 0, 98 },
+ { 99, 199, 96000, 0, 99 },
+ { 100, 201, 32000, 0, 100 },
+ { 101, 203, 128000, 0, 101 },
+ { 102, 207, 128000, 0, 102 },
+ { 103, 209, 2400, 0, 103 },
+ { 104, 211, 54600, 0, 104 },
+ { 105, 213, 25600, 0, 105 },
+ { 108, 217, 25600, 0, 108 },
+ { 106, 216, 2400, 0, 106 },
+ { 107, 218, 54600, 0, 107 },
+ { 109, 221, 12800, 0, 109 },
+ { 112, 227, 12800, 0, 112 },
+ { 113, 229, 600, 0, 113 },
+ { 114, 231, 13650, 0, 114 },
+ { 115, 233, 3200, 0, 115 },
+ { 118, 237, 3200, 0, 118 },
+ { 116, 236, 600, 0, 116 },
+ { 117, 238, 13650, 0, 117 },
+ { 119, 241, 2304, 0, 119 },
+ { 122, 247, 2304, 0, 122 },
+ { 123, 249, 216, 0, 123 },
+ { 124, 251, 4914, 0, 124 },
+ { 125, 253, 1152, 0, 125 },
+ { 128, 257, 1152, 0, 128 },
+ { 126, 256, 216, 0, 126 },
+ { 127, 258, 4914, 0, 127 },
+ { 129, 261, 1024, 0, 129 },
+ { 132, 267, 1024, 0, 132 },
+ { 133, 269, 96, 0, 133 },
+ { 134, 271, 2184, 0, 134 },
+ { 135, 273, 256, 0, 135 },
+ { 138, 277, 256, 0, 138 },
+ { 136, 276, 96, 0, 136 },
+ { 137, 278, 2184, 0, 137 },
+ { 139, 281, 128, 0, 139 },
+ { 142, 286, 128, 0, 142 },
+ { 143, 288, 24, 0, 143 },
+ { 144, 290, 546, 0, 144 },
+ { 145, 292, 24, 0, 145 },
+ { 146, 294, 546, 0, 146 },
+ { 80, 229, 4332, 0, 80 },
+ { 110, 259, 2400, 0, 110 },
+ { 120, 269, 600, 0, 120 },
+ { 130, 279, 216, 0, 130 },
+ { 140, 289, 96, 0, 140 },
+ { 147, 296, 24, 0, 147 },
+ { 81, 231, 98553, 0, 81 },
+ { 111, 261, 54600, 0, 111 },
+ { 121, 271, 13650, 0, 121 },
+ { 131, 281, 4914, 0, 131 },
+ { 141, 291, 2184, 0, 141 },
+ { 148, 298, 546, 0, 148 },
+ { 149, 300, 7668, 0, 149 },
+ { 150, 302, 174447, 0, 150 },
+ { 151, 304, 7668, 0, 151 },
+ { 152, 306, 174447, 0, 152 },
+ { 153, 308, 30672, 0, 153 },
+ { 154, 309, 697788, 0, 154 },
+ { 155, 311, 160, 0, 155 },
+ { 155, 312, 40, 0, 156 },
+ { 155, 313, 40, 0, 157 },
+ { 155, 314, 4, 0, 158 }
+}; \ No newline at end of file
diff --git a/tests/MemoryStrategyBenchmark/TestStrategy.cpp b/tests/MemoryStrategyBenchmark/TestStrategy.cpp
new file mode 100644
index 0000000000..9e9194972a
--- /dev/null
+++ b/tests/MemoryStrategyBenchmark/TestStrategy.cpp
@@ -0,0 +1,43 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "TestStrategy.hpp"
+
+namespace armnn
+{
+
+ std::string TestStrategy::GetName() const
+ {
+ return m_Name;
+ }
+
+ MemBlockStrategyType TestStrategy::GetMemBlockStrategyType() const
+ {
+ return m_MemBlockStrategyType;
+ }
+
+ // A IMemoryOptimizerStrategy must ensure that
+ // 1: All MemBlocks have been assigned to a MemBin
+ // 2: No MemBlock is assigned to multiple MemBins
+ // 3: No two Memblocks in a MemBin overlap in both the X and Y axis
+ std::vector<MemBin> TestStrategy::Optimize(std::vector<MemBlock>& memBlocks)
+ {
+ std::vector<MemBin> memBins;
+ memBins.reserve(memBlocks.size());
+
+ for (auto& memBlock : memBlocks)
+ {
+ MemBin memBin;
+ memBin.m_MemSize = memBlock.m_MemSize;
+ memBin.m_MemBlocks.reserve(1);
+ memBlock.m_Offset = 0;
+ memBin.m_MemBlocks.push_back(memBlock);
+ memBins.push_back(memBin);
+ }
+
+ return memBins;
+ }
+
+} // namespace armnn \ No newline at end of file
diff --git a/tests/MemoryStrategyBenchmark/TestStrategy.hpp b/tests/MemoryStrategyBenchmark/TestStrategy.hpp
new file mode 100644
index 0000000000..80d8d570ba
--- /dev/null
+++ b/tests/MemoryStrategyBenchmark/TestStrategy.hpp
@@ -0,0 +1,31 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/Types.hpp>
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
+
+namespace armnn
+{
+// ConstLayerMemoryOptimizer: Create a unique MemBin for each MemBlock and assign it an offset of 0
+ class TestStrategy : public IMemoryOptimizerStrategy
+ {
+ public:
+ TestStrategy()
+ : m_Name(std::string("TestStrategy"))
+ , m_MemBlockStrategyType(MemBlockStrategyType::MultiAxisPacking) {}
+
+ std::string GetName() const override;
+
+ MemBlockStrategyType GetMemBlockStrategyType() const override;
+
+ std::vector<MemBin> Optimize(std::vector<MemBlock>& memBlocks) override;
+
+ private:
+ std::string m_Name;
+ MemBlockStrategyType m_MemBlockStrategyType;
+ };
+
+} // namespace armnn \ No newline at end of file