xref: /aosp_15_r20/external/armnn/src/backends/neon/test/NeonMemCopyTests.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 "../NeonWorkloadFactory.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include <neon/NeonBackend.hpp>
8*89c4ff92SAndroid Build Coastguard Worker #include <armnnTestUtils/LayerTestResult.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <armnnTestUtils/MemCopyTestImpl.hpp>
10*89c4ff92SAndroid Build Coastguard Worker #include <armnnTestUtils/MockBackend.hpp>
11*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
12*89c4ff92SAndroid Build Coastguard Worker 
13*89c4ff92SAndroid Build Coastguard Worker namespace
14*89c4ff92SAndroid Build Coastguard Worker {
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker template <>
17*89c4ff92SAndroid Build Coastguard Worker struct MemCopyTestHelper<armnn::NeonWorkloadFactory>
18*89c4ff92SAndroid Build Coastguard Worker {
GetMemoryManager__anon902cea6f0111::MemCopyTestHelper19*89c4ff92SAndroid Build Coastguard Worker     static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager()
20*89c4ff92SAndroid Build Coastguard Worker     {
21*89c4ff92SAndroid Build Coastguard Worker         armnn::NeonBackend backend;
22*89c4ff92SAndroid Build Coastguard Worker         return backend.CreateMemoryManager();
23*89c4ff92SAndroid Build Coastguard Worker     }
24*89c4ff92SAndroid Build Coastguard Worker 
GetFactory__anon902cea6f0111::MemCopyTestHelper25*89c4ff92SAndroid Build Coastguard Worker     static armnn::NeonWorkloadFactory GetFactory(
26*89c4ff92SAndroid Build Coastguard Worker         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
27*89c4ff92SAndroid Build Coastguard Worker         const armnn::ModelOptions& modelOptions = {})
28*89c4ff92SAndroid Build Coastguard Worker     {
29*89c4ff92SAndroid Build Coastguard Worker         armnn::NeonBackend backend;
30*89c4ff92SAndroid Build Coastguard Worker         return armnn::NeonWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::NeonMemoryManager>(memoryManager),
31*89c4ff92SAndroid Build Coastguard Worker                                           backend.CreateBackendSpecificModelContext(modelOptions));
32*89c4ff92SAndroid Build Coastguard Worker     }
33*89c4ff92SAndroid Build Coastguard Worker };
34*89c4ff92SAndroid Build Coastguard Worker }    // namespace
35*89c4ff92SAndroid Build Coastguard Worker 
36*89c4ff92SAndroid Build Coastguard Worker 
37*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("NeonMemCopy")
38*89c4ff92SAndroid Build Coastguard Worker {
39*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenCpuAndNeon")
40*89c4ff92SAndroid Build Coastguard Worker {
41*89c4ff92SAndroid Build Coastguard Worker     LayerTestResult<float, 4> result =
42*89c4ff92SAndroid Build Coastguard Worker         MemCopyTest<armnn::MockWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(false);
43*89c4ff92SAndroid Build Coastguard Worker     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
44*89c4ff92SAndroid Build Coastguard Worker                                      result.m_ActualShape, result.m_ExpectedShape);
45*89c4ff92SAndroid Build Coastguard Worker     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
46*89c4ff92SAndroid Build Coastguard Worker }
47*89c4ff92SAndroid Build Coastguard Worker 
48*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenNeonAndCpu")
49*89c4ff92SAndroid Build Coastguard Worker {
50*89c4ff92SAndroid Build Coastguard Worker     LayerTestResult<float, 4> result =
51*89c4ff92SAndroid Build Coastguard Worker         MemCopyTest<armnn::NeonWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(false);
52*89c4ff92SAndroid Build Coastguard Worker     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
53*89c4ff92SAndroid Build Coastguard Worker                                      result.m_ActualShape, result.m_ExpectedShape);
54*89c4ff92SAndroid Build Coastguard Worker     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
55*89c4ff92SAndroid Build Coastguard Worker }
56*89c4ff92SAndroid Build Coastguard Worker 
57*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenCpuAndNeonWithSubtensors")
58*89c4ff92SAndroid Build Coastguard Worker {
59*89c4ff92SAndroid Build Coastguard Worker     LayerTestResult<float, 4> result =
60*89c4ff92SAndroid Build Coastguard Worker         MemCopyTest<armnn::MockWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(true);
61*89c4ff92SAndroid Build Coastguard Worker     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
62*89c4ff92SAndroid Build Coastguard Worker                                      result.m_ActualShape, result.m_ExpectedShape);
63*89c4ff92SAndroid Build Coastguard Worker     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
64*89c4ff92SAndroid Build Coastguard Worker }
65*89c4ff92SAndroid Build Coastguard Worker 
66*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenNeonAndCpuWithSubtensors")
67*89c4ff92SAndroid Build Coastguard Worker {
68*89c4ff92SAndroid Build Coastguard Worker     LayerTestResult<float, 4> result =
69*89c4ff92SAndroid Build Coastguard Worker         MemCopyTest<armnn::NeonWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(true);
70*89c4ff92SAndroid Build Coastguard Worker     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
71*89c4ff92SAndroid Build Coastguard Worker                                      result.m_ActualShape, result.m_ExpectedShape);
72*89c4ff92SAndroid Build Coastguard Worker     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
73*89c4ff92SAndroid Build Coastguard Worker }
74*89c4ff92SAndroid Build Coastguard Worker 
75*89c4ff92SAndroid Build Coastguard Worker }
76