aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp')
-rw-r--r--src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp b/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp
new file mode 100644
index 0000000000..a5bf17c8b1
--- /dev/null
+++ b/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp
@@ -0,0 +1,125 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <armnn/IRuntime.hpp>
+#include <armnn/Utils.hpp>
+#include <armnn/BackendRegistry.hpp>
+
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
+
+#if defined(ARMNNREF_ENABLED)
+#include <reference/RefBackend.hpp>
+#endif
+
+#if defined(ARMCOMPUTENEON_ENABLED)
+#include <neon/NeonBackend.hpp>
+#endif
+
+#include <doctest/doctest.h>
+
+
+// Sample implementation of IMemoryOptimizerStrategy..
+class SampleMemoryOptimizerStrategy : public armnn::IMemoryOptimizerStrategy
+{
+public:
+ SampleMemoryOptimizerStrategy() = default;
+
+ std::string GetName() const
+ {
+ return std::string("SampleMemoryOptimizerStrategy");
+ }
+
+ armnn::MemBlockStrategyType GetMemBlockStrategyType() const
+ {
+ return armnn::MemBlockStrategyType::SingleAxisPacking;
+ }
+
+ std::vector<armnn::MemBin> Optimize(std::vector<armnn::MemBlock>& memBlocks)
+ {
+ std::vector<armnn::MemBin> memBins;
+ memBins.reserve(memBlocks.size());
+ return memBins;
+ }
+};
+
+TEST_SUITE("CustomMemoryOptimizerStrategyTests")
+{
+
+// Only run this test if CpuRef is enabled
+#if defined(ARMNNREF_ENABLED)
+TEST_CASE("RefCustomMemoryOptimizerStrategyTest")
+{
+ using namespace armnn;
+
+ // Create ArmNN runtime
+ IRuntime::CreationOptions options; // default options
+ auto customMemoryOptimizerStrategy = std::make_shared<SampleMemoryOptimizerStrategy>();
+ options.m_MemoryOptimizerStrategyMap = {{"CpuRef", std::move(customMemoryOptimizerStrategy)}};
+ IRuntimePtr run = IRuntime::Create(options);
+
+ 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("SampleMemoryOptimizerStrategy"));
+
+ // De-register the memory optimizer
+ BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(RefBackend::GetIdStatic());
+ CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
+
+}
+
+TEST_CASE("CpuRefSetMemoryOptimizerStrategyTest")
+{
+ using namespace armnn;
+
+ // Create ArmNN runtime
+ IRuntime::CreationOptions options; // default options
+ options.m_BackendOptions.emplace_back(
+ BackendOptions{"CpuRef",
+ {
+ {"MemoryOptimizerStrategy", "ConstLayerMemoryOptimizerStrategy"}
+ }
+ });
+
+ IRuntimePtr run = IRuntime::Create(options);
+
+ // ConstLayerMemoryOptimizerStrategy 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"));
+ armnn::BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(RefBackend::GetIdStatic());
+}
+
+#endif
+
+// Only run this test if CpuAcc is enabled
+#if defined(ARMCOMPUTENEON_ENABLED)
+
+TEST_CASE("CpuAccSetMemoryOptimizerStrategyTest")
+{
+ using namespace armnn;
+
+ // Create ArmNN runtime
+ IRuntime::CreationOptions options; // default options
+ options.m_BackendOptions.emplace_back(
+ BackendOptions{"CpuAcc",
+ {
+ {"MemoryOptimizerStrategy", "NotExistMemoryOptimizerStrategy"}
+ }
+ });
+
+ IRuntimePtr run = IRuntime::Create(options);
+
+ // No MemoryOptimizerStrategy should be registered..
+ CHECK(armnn::BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
+ armnn::BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(NeonBackend::GetIdStatic());
+}
+
+#endif
+
+} // test suite CustomMemoryOptimizerStrategyTests \ No newline at end of file