xref: /aosp_15_r20/external/armnn/src/backends/neon/test/NeonRuntimeTests.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #include <test/RuntimeTests.hpp>
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <LeakChecking.hpp>
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <backendsCommon/test/RuntimeTestImpl.hpp>
11*89c4ff92SAndroid Build Coastguard Worker #include <test/ProfilingTestUtils.hpp>
12*89c4ff92SAndroid Build Coastguard Worker 
13*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("NeonRuntime")
16*89c4ff92SAndroid Build Coastguard Worker {
17*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("RuntimeValidateCpuAccDeviceSupportLayerNoFallback")
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker     // build up the structure of the network
20*89c4ff92SAndroid Build Coastguard Worker     armnn::INetworkPtr net(armnn::INetwork::Create());
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker     armnn::IConnectableLayer* input = net->AddInputLayer(0);
23*89c4ff92SAndroid Build Coastguard Worker     armnn::IConnectableLayer* output = net->AddOutputLayer(0);
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker     input->GetOutputSlot(0).Connect(output->GetInputSlot(0));
26*89c4ff92SAndroid Build Coastguard Worker     input->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32));
27*89c4ff92SAndroid Build Coastguard Worker 
28*89c4ff92SAndroid Build Coastguard Worker     armnn::IRuntime::CreationOptions options;
29*89c4ff92SAndroid Build Coastguard Worker     armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
30*89c4ff92SAndroid Build Coastguard Worker 
31*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
32*89c4ff92SAndroid Build Coastguard Worker     armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec());
33*89c4ff92SAndroid Build Coastguard Worker     CHECK(optNet);
34*89c4ff92SAndroid Build Coastguard Worker 
35*89c4ff92SAndroid Build Coastguard Worker     // Load it into the runtime. It should success.
36*89c4ff92SAndroid Build Coastguard Worker     armnn::NetworkId netId;
37*89c4ff92SAndroid Build Coastguard Worker     CHECK(runtime->LoadNetwork(netId, std::move(optNet)) == armnn::Status::Success);
38*89c4ff92SAndroid Build Coastguard Worker }
39*89c4ff92SAndroid Build Coastguard Worker 
40*89c4ff92SAndroid Build Coastguard Worker #ifdef ARMNN_LEAK_CHECKING_ENABLED
41*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("RuntimeMemoryLeaksCpuAcc")
42*89c4ff92SAndroid Build Coastguard Worker {
43*89c4ff92SAndroid Build Coastguard Worker     CHECK(ARMNN_LEAK_CHECKER_IS_ACTIVE());
44*89c4ff92SAndroid Build Coastguard Worker     armnn::IRuntime::CreationOptions options;
45*89c4ff92SAndroid Build Coastguard Worker     armnn::RuntimeImpl runtime(options);
46*89c4ff92SAndroid Build Coastguard Worker     armnn::RuntimeLoadedNetworksReserve(&runtime);
47*89c4ff92SAndroid Build Coastguard Worker 
48*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc};
49*89c4ff92SAndroid Build Coastguard Worker     {
50*89c4ff92SAndroid Build Coastguard Worker         // Do a warmup of this so we make sure that all one-time
51*89c4ff92SAndroid Build Coastguard Worker         // initialization happens before we do the leak checking.
52*89c4ff92SAndroid Build Coastguard Worker         CreateAndDropDummyNetwork(backends, runtime);
53*89c4ff92SAndroid Build Coastguard Worker     }
54*89c4ff92SAndroid Build Coastguard Worker 
55*89c4ff92SAndroid Build Coastguard Worker     {
56*89c4ff92SAndroid Build Coastguard Worker         ARMNN_SCOPED_LEAK_CHECKER("LoadAndUnloadNetworkCpuAcc");
57*89c4ff92SAndroid Build Coastguard Worker         CHECK(ARMNN_NO_LEAKS_IN_SCOPE());
58*89c4ff92SAndroid Build Coastguard Worker         // In the second run we check for all remaining memory
59*89c4ff92SAndroid Build Coastguard Worker         // in use after the network was unloaded. If there is any
60*89c4ff92SAndroid Build Coastguard Worker         // then it will be treated as a memory leak.
61*89c4ff92SAndroid Build Coastguard Worker         CreateAndDropDummyNetwork(backends, runtime);
62*89c4ff92SAndroid Build Coastguard Worker         CHECK(ARMNN_NO_LEAKS_IN_SCOPE());
63*89c4ff92SAndroid Build Coastguard Worker         CHECK(ARMNN_BYTES_LEAKED_IN_SCOPE() == 0);
64*89c4ff92SAndroid Build Coastguard Worker         CHECK(ARMNN_OBJECTS_LEAKED_IN_SCOPE() == 0);
65*89c4ff92SAndroid Build Coastguard Worker     }
66*89c4ff92SAndroid Build Coastguard Worker }
67*89c4ff92SAndroid Build Coastguard Worker #endif
68*89c4ff92SAndroid Build Coastguard Worker 
69*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("ProfilingPostOptimisationStructureCpuAcc")
70*89c4ff92SAndroid Build Coastguard Worker {
71*89c4ff92SAndroid Build Coastguard Worker     VerifyPostOptimisationStructureTestImpl(armnn::Compute::CpuAcc);
72*89c4ff92SAndroid Build Coastguard Worker }
73*89c4ff92SAndroid Build Coastguard Worker 
74*89c4ff92SAndroid Build Coastguard Worker }