blob: 7b7d4ffb9e5457831ebfa951a6f15a8a0380e008 [file] [log] [blame]
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00006#include <aclCommon/ArmComputeTensorUtils.hpp>
Aron Virginas-Tar56055192018-11-12 18:10:43 +00007
Matteo Martincighd95e9062019-01-31 15:35:59 +00008#if defined(ARMCOMPUTECL_ENABLED) && defined(ARMCOMPUTENEON_ENABLED)
Colm Donelanc42a9872022-02-02 16:35:09 +00009#include <armnnTestUtils/LayerTestResult.hpp>
10#include <armnnTestUtils/MemCopyTestImpl.hpp>
Matteo Martincighd95e9062019-01-31 15:35:59 +000011#include <cl/ClWorkloadFactory.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000012#include <cl/test/ClContextControlFixture.hpp>
Aron Virginas-Tar56055192018-11-12 18:10:43 +000013#include <cl/test/ClWorkloadFactoryHelper.hpp>
Matteo Martincighd95e9062019-01-31 15:35:59 +000014#include <neon/NeonWorkloadFactory.hpp>
Aron Virginas-Tar56055192018-11-12 18:10:43 +000015#include <neon/test/NeonWorkloadFactoryHelper.hpp>
David Beck39fedf02018-10-16 12:58:49 +010016#endif
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010017
Sadik Armagan1625efc2021-06-10 18:24:34 +010018#include <doctest/doctest.h>
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010019
Sadik Armagan1625efc2021-06-10 18:24:34 +010020TEST_SUITE("MemCopyCommon")
21{
22TEST_CASE("AclTypeConversions")
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010023{
24 arm_compute::Strides strides(1, 2, 3, 4);
25 armnn::TensorShape convertedStrides = armnn::armcomputetensorutils::GetStrides(strides);
26
Sadik Armagan1625efc2021-06-10 18:24:34 +010027 CHECK(convertedStrides[0] == 4);
28 CHECK(convertedStrides[1] == 3);
29 CHECK(convertedStrides[2] == 2);
30 CHECK(convertedStrides[3] == 1);
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010031
32 arm_compute::TensorShape shape(5, 6, 7, 8);
33 armnn::TensorShape convertedshape = armnn::armcomputetensorutils::GetShape(shape);
34
Sadik Armagan1625efc2021-06-10 18:24:34 +010035 CHECK(convertedshape[0] == 8);
36 CHECK(convertedshape[1] == 7);
37 CHECK(convertedshape[2] == 6);
38 CHECK(convertedshape[3] == 5);
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010039}
40
Sadik Armagan1625efc2021-06-10 18:24:34 +010041}
Aron Virginas-Tarceae3aa2018-10-18 10:39:38 +010042
Matteo Martincighd95e9062019-01-31 15:35:59 +000043#if defined(ARMCOMPUTECL_ENABLED) && defined(ARMCOMPUTENEON_ENABLED)
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010044
Colm Donelanc42a9872022-02-02 16:35:09 +000045namespace
46{
47
48template <>
49struct MemCopyTestHelper<armnn::NeonWorkloadFactory>
50{
51 static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager()
52 {
53 armnn::NeonBackend backend;
54 return backend.CreateMemoryManager();
55 }
56
57 static armnn::NeonWorkloadFactory GetFactory(
58 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
59 const armnn::ModelOptions& modelOptions = {})
60 {
61 armnn::NeonBackend backend;
62 return armnn::NeonWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::NeonMemoryManager>(memoryManager),
63 backend.CreateBackendSpecificModelContext(modelOptions));
64 }
65};
66
67template <>
68struct MemCopyTestHelper<armnn::ClWorkloadFactory>
69{
70 static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager()
71 {
72 armnn::ClBackend backend;
73 return backend.CreateMemoryManager();
74 }
75
76 static armnn::ClWorkloadFactory GetFactory(
77 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
78 const armnn::ModelOptions& modelOptions = {})
79 {
80 armnn::ClBackend backend;
81 return armnn::ClWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::ClMemoryManager>(memoryManager),
82 backend.CreateBackendSpecificModelContext(modelOptions));
83 }
84};
85} // namespace
86
87
88
Sadik Armagan1625efc2021-06-10 18:24:34 +010089TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenNeonAndGpu")
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010090{
Matteo Martincigh49124022019-01-11 13:25:59 +000091 LayerTestResult<float, 4> result =
92 MemCopyTest<armnn::NeonWorkloadFactory, armnn::ClWorkloadFactory, armnn::DataType::Float32>(false);
Sadik Armagan483c8112021-06-01 09:24:52 +010093 auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData,
94 result.m_ActualShape, result.m_ExpectedShape);
Sadik Armagan1625efc2021-06-10 18:24:34 +010095 CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010096}
97
Sadik Armagan1625efc2021-06-10 18:24:34 +010098TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenGpuAndNeon")
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +010099{
Matteo Martincigh49124022019-01-11 13:25:59 +0000100 LayerTestResult<float, 4> result =
101 MemCopyTest<armnn::ClWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(false);
Sadik Armagan483c8112021-06-01 09:24:52 +0100102 auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData,
103 result.m_ActualShape, result.m_ExpectedShape);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100104 CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +0100105}
106
Sadik Armagan1625efc2021-06-10 18:24:34 +0100107TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenNeonAndGpuWithSubtensors")
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +0100108{
Matteo Martincigh49124022019-01-11 13:25:59 +0000109 LayerTestResult<float, 4> result =
110 MemCopyTest<armnn::NeonWorkloadFactory, armnn::ClWorkloadFactory, armnn::DataType::Float32>(true);
Sadik Armagan483c8112021-06-01 09:24:52 +0100111 auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData,
112 result.m_ActualShape, result.m_ExpectedShape);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100113 CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +0100114}
115
Sadik Armagan1625efc2021-06-10 18:24:34 +0100116TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenGpuAndNeonWithSubtensors")
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +0100117{
Matteo Martincigh49124022019-01-11 13:25:59 +0000118 LayerTestResult<float, 4> result =
119 MemCopyTest<armnn::ClWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(true);
Sadik Armagan483c8112021-06-01 09:24:52 +0100120 auto predResult = CompareTensors(result.m_ActualData, result.m_ExpectedData,
121 result.m_ActualShape, result.m_ExpectedShape);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100122 CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
Aron Virginas-Tar3b278e92018-10-12 13:00:55 +0100123}
124
Matteo Martincighd95e9062019-01-31 15:35:59 +0000125#endif