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 <armnnTestUtils/LayerTestResult.hpp> 7*89c4ff92SAndroid Build Coastguard Worker #include <armnnTestUtils/MemCopyTestImpl.hpp> 8*89c4ff92SAndroid Build Coastguard Worker #include <armnnTestUtils/MockBackend.hpp> 9*89c4ff92SAndroid Build Coastguard Worker #include <cl/ClWorkloadFactory.hpp> 10*89c4ff92SAndroid Build Coastguard Worker #include <cl/ClBackend.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::ClWorkloadFactory> 18*89c4ff92SAndroid Build Coastguard Worker { GetMemoryManager__anon9fcad6ad0111::MemCopyTestHelper19*89c4ff92SAndroid Build Coastguard Worker static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker armnn::ClBackend backend; 22*89c4ff92SAndroid Build Coastguard Worker return backend.CreateMemoryManager(); 23*89c4ff92SAndroid Build Coastguard Worker } 24*89c4ff92SAndroid Build Coastguard Worker GetFactory__anon9fcad6ad0111::MemCopyTestHelper25*89c4ff92SAndroid Build Coastguard Worker static armnn::ClWorkloadFactory 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::ClBackend backend; 30*89c4ff92SAndroid Build Coastguard Worker return armnn::ClWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::ClMemoryManager>(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 TEST_SUITE("ClMemCopy") 37*89c4ff92SAndroid Build Coastguard Worker { 38*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenCpuAndGpu") 39*89c4ff92SAndroid Build Coastguard Worker { 40*89c4ff92SAndroid Build Coastguard Worker LayerTestResult<float, 4> result = 41*89c4ff92SAndroid Build Coastguard Worker MemCopyTest<armnn::MockWorkloadFactory, armnn::ClWorkloadFactory, armnn::DataType::Float32>(false); 42*89c4ff92SAndroid Build Coastguard Worker auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData, 43*89c4ff92SAndroid Build Coastguard Worker result.m_ActualShape, result.m_ExpectedShape); 44*89c4ff92SAndroid Build Coastguard Worker CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str()); 45*89c4ff92SAndroid Build Coastguard Worker } 46*89c4ff92SAndroid Build Coastguard Worker 47*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenGpuAndCpu") 48*89c4ff92SAndroid Build Coastguard Worker { 49*89c4ff92SAndroid Build Coastguard Worker LayerTestResult<float, 4> result = 50*89c4ff92SAndroid Build Coastguard Worker MemCopyTest<armnn::ClWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(false); 51*89c4ff92SAndroid Build Coastguard Worker auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData, 52*89c4ff92SAndroid Build Coastguard Worker result.m_ActualShape, result.m_ExpectedShape); 53*89c4ff92SAndroid Build Coastguard Worker CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str()); 54*89c4ff92SAndroid Build Coastguard Worker } 55*89c4ff92SAndroid Build Coastguard Worker 56*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenCpuAndGpuWithSubtensors") 57*89c4ff92SAndroid Build Coastguard Worker { 58*89c4ff92SAndroid Build Coastguard Worker LayerTestResult<float, 4> result = 59*89c4ff92SAndroid Build Coastguard Worker MemCopyTest<armnn::MockWorkloadFactory, armnn::ClWorkloadFactory, armnn::DataType::Float32>(true); 60*89c4ff92SAndroid Build Coastguard Worker auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData, 61*89c4ff92SAndroid Build Coastguard Worker result.m_ActualShape, result.m_ExpectedShape); 62*89c4ff92SAndroid Build Coastguard Worker CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str()); 63*89c4ff92SAndroid Build Coastguard Worker } 64*89c4ff92SAndroid Build Coastguard Worker 65*89c4ff92SAndroid Build Coastguard Worker TEST_CASE("CopyBetweenGpuAndCpuWithSubtensors") 66*89c4ff92SAndroid Build Coastguard Worker { 67*89c4ff92SAndroid Build Coastguard Worker LayerTestResult<float, 4> result = 68*89c4ff92SAndroid Build Coastguard Worker MemCopyTest<armnn::ClWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(true); 69*89c4ff92SAndroid Build Coastguard Worker auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData, 70*89c4ff92SAndroid Build Coastguard Worker result.m_ActualShape, result.m_ExpectedShape); 71*89c4ff92SAndroid Build Coastguard Worker CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str()); 72*89c4ff92SAndroid Build Coastguard Worker } 73*89c4ff92SAndroid Build Coastguard Worker 74*89c4ff92SAndroid Build Coastguard Worker } 75