xref: /aosp_15_r20/external/armnn/src/backends/cl/test/ClMemCopyTests.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <armnnTestUtils/LayerTestResult.hpp>
7 #include <armnnTestUtils/MemCopyTestImpl.hpp>
8 #include <armnnTestUtils/MockBackend.hpp>
9 #include <cl/ClWorkloadFactory.hpp>
10 #include <cl/ClBackend.hpp>
11 #include <doctest/doctest.h>
12 
13 namespace
14 {
15 
16 template <>
17 struct MemCopyTestHelper<armnn::ClWorkloadFactory>
18 {
GetMemoryManager__anon9fcad6ad0111::MemCopyTestHelper19     static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager()
20     {
21         armnn::ClBackend backend;
22         return backend.CreateMemoryManager();
23     }
24 
GetFactory__anon9fcad6ad0111::MemCopyTestHelper25     static armnn::ClWorkloadFactory GetFactory(
26         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
27         const armnn::ModelOptions& modelOptions = {})
28     {
29         armnn::ClBackend backend;
30         return armnn::ClWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::ClMemoryManager>(memoryManager),
31                                         backend.CreateBackendSpecificModelContext(modelOptions));
32     }
33 };
34 }    // namespace
35 
36 TEST_SUITE("ClMemCopy")
37 {
38 TEST_CASE("CopyBetweenCpuAndGpu")
39 {
40     LayerTestResult<float, 4> result =
41         MemCopyTest<armnn::MockWorkloadFactory, armnn::ClWorkloadFactory, armnn::DataType::Float32>(false);
42     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
43                                      result.m_ActualShape, result.m_ExpectedShape);
44     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
45 }
46 
47 TEST_CASE("CopyBetweenGpuAndCpu")
48 {
49     LayerTestResult<float, 4> result =
50         MemCopyTest<armnn::ClWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(false);
51     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
52                                      result.m_ActualShape, result.m_ExpectedShape);
53     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
54 }
55 
56 TEST_CASE("CopyBetweenCpuAndGpuWithSubtensors")
57 {
58     LayerTestResult<float, 4> result =
59         MemCopyTest<armnn::MockWorkloadFactory, armnn::ClWorkloadFactory, armnn::DataType::Float32>(true);
60     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
61                                      result.m_ActualShape, result.m_ExpectedShape);
62     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
63 }
64 
65 TEST_CASE("CopyBetweenGpuAndCpuWithSubtensors")
66 {
67     LayerTestResult<float, 4> result =
68         MemCopyTest<armnn::ClWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(true);
69     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
70                                      result.m_ActualShape, result.m_ExpectedShape);
71     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
72 }
73 
74 }
75