xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/CustomMemoryOptimizerStrategyTests.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <armnn/IRuntime.hpp>
7 #include <armnn/Utils.hpp>
8 #include <armnn/BackendRegistry.hpp>
9 
10 #include <armnn/backends/IMemoryOptimizerStrategy.hpp>
11 
12 #if defined(ARMNNREF_ENABLED)
13 #include <reference/RefBackend.hpp>
14 #endif
15 
16 #if defined(ARMCOMPUTENEON_ENABLED)
17 #include <neon/NeonBackend.hpp>
18 #endif
19 
20 #include <doctest/doctest.h>
21 
22 
23 // Sample implementation of IMemoryOptimizerStrategy..
24 class SampleMemoryOptimizerStrategy : public armnn::IMemoryOptimizerStrategy
25 {
26 public:
27     SampleMemoryOptimizerStrategy() = default;
28 
GetName() const29     std::string GetName() const
30     {
31         return std::string("SampleMemoryOptimizerStrategy");
32     }
33 
GetMemBlockStrategyType() const34     armnn::MemBlockStrategyType GetMemBlockStrategyType() const
35     {
36         return armnn::MemBlockStrategyType::SingleAxisPacking;
37     }
38 
Optimize(std::vector<armnn::MemBlock> & memBlocks)39     std::vector<armnn::MemBin> Optimize(std::vector<armnn::MemBlock>& memBlocks)
40     {
41         std::vector<armnn::MemBin> memBins;
42         memBins.reserve(memBlocks.size());
43         return memBins;
44     }
45 };
46 
47 TEST_SUITE("CustomMemoryOptimizerStrategyTests")
48 {
49 
50 // Only run this test if CpuRef is enabled
51 #if defined(ARMNNREF_ENABLED)
52 TEST_CASE("RefCustomMemoryOptimizerStrategyTest")
53 {
54     using namespace armnn;
55 
56     // Create ArmNN runtime
57     IRuntime::CreationOptions options; // default options
58     auto customMemoryOptimizerStrategy = std::make_shared<SampleMemoryOptimizerStrategy>();
59     options.m_MemoryOptimizerStrategyMap = {{"CpuRef", std::move(customMemoryOptimizerStrategy)}};
60     IRuntimePtr run = IRuntime::Create(options);
61 
62     CHECK(!BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
63     CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().size() == 1);
64     CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().at(RefBackend::GetIdStatic()));
65     auto optimizerStrategy = BackendRegistryInstance().GetMemoryOptimizerStrategies().at(RefBackend::GetIdStatic());
66     CHECK(optimizerStrategy->GetName() == std::string("SampleMemoryOptimizerStrategy"));
67 
68     // De-register the memory optimizer
69     BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(RefBackend::GetIdStatic());
70     CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
71 
72 }
73 
74 TEST_CASE("CpuRefSetMemoryOptimizerStrategyTest")
75 {
76     using namespace armnn;
77 
78     // Create ArmNN runtime
79     IRuntime::CreationOptions options; // default options
80     options.m_BackendOptions.emplace_back(
81          BackendOptions{"CpuRef",
82          {
83              {"MemoryOptimizerStrategy", "ConstantMemoryStrategy"}
84          }
85     });
86 
87     IRuntimePtr run = IRuntime::Create(options);
88 
89     // ConstantMemoryStrategy should be registered for CpuRef
90     CHECK(!BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
91     CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().size() == 1);
92     CHECK(BackendRegistryInstance().GetMemoryOptimizerStrategies().at(RefBackend::GetIdStatic()));
93     auto optimizerStrategy = BackendRegistryInstance().GetMemoryOptimizerStrategies().at(RefBackend::GetIdStatic());
94     CHECK(optimizerStrategy->GetName() == std::string("ConstantMemoryStrategy"));
95     armnn::BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(RefBackend::GetIdStatic());
96 }
97 
98 #endif
99 
100 // Only run this test if CpuAcc is enabled
101 #if defined(ARMCOMPUTENEON_ENABLED)
102 
103 TEST_CASE("CpuAccSetMemoryOptimizerStrategyTest")
104 {
105     using namespace armnn;
106 
107     // Create ArmNN runtime
108     IRuntime::CreationOptions options; // default options
109     options.m_BackendOptions.emplace_back(
110          BackendOptions{"CpuAcc",
111          {
112              {"MemoryOptimizerStrategy", "NotExistMemoryOptimizerStrategy"}
113          }
114     });
115 
116     IRuntimePtr run = IRuntime::Create(options);
117 
118     // No MemoryOptimizerStrategy should be registered..
119     CHECK(armnn::BackendRegistryInstance().GetMemoryOptimizerStrategies().empty());
120     armnn::BackendRegistryInstance().DeregisterMemoryOptimizerStrategy(NeonBackend::GetIdStatic());
121 }
122 
123 #endif
124 
125 } // test suite CustomMemoryOptimizerStrategyTests