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