1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "ClWorkloadFactoryHelper.hpp"
7
8 #include <layers/ConvertFp16ToFp32Layer.hpp>
9 #include <layers/ConvertFp32ToFp16Layer.hpp>
10 #include <layers/MeanLayer.hpp>
11 #include <test/TensorHelpers.hpp>
12
13 #include <backendsCommon/CpuTensorHandle.hpp>
14 #include <cl/ClWorkloadFactory.hpp>
15 #include <cl/test/ClContextControlFixture.hpp>
16 #include <backendsCommon/test/IsLayerSupportedTestImpl.hpp>
17 #include <backendsCommon/test/LayerTests.hpp>
18
19 #include <boost/test/unit_test.hpp>
20
21 #include <string>
22
23 BOOST_AUTO_TEST_SUITE(ClLayerSupport)
24
BOOST_FIXTURE_TEST_CASE(IsLayerSupportedFloat16Cl,ClContextControlFixture)25 BOOST_FIXTURE_TEST_CASE(IsLayerSupportedFloat16Cl, ClContextControlFixture)
26 {
27 armnn::ClWorkloadFactory factory =
28 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
29 IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::Float16>(&factory);
30 }
31
BOOST_FIXTURE_TEST_CASE(IsLayerSupportedFloat32Cl,ClContextControlFixture)32 BOOST_FIXTURE_TEST_CASE(IsLayerSupportedFloat32Cl, ClContextControlFixture)
33 {
34 armnn::ClWorkloadFactory factory =
35 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
36 IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::Float32>(&factory);
37 }
38
BOOST_FIXTURE_TEST_CASE(IsLayerSupportedQAsymmU8Cl,ClContextControlFixture)39 BOOST_FIXTURE_TEST_CASE(IsLayerSupportedQAsymmU8Cl, ClContextControlFixture)
40 {
41 armnn::ClWorkloadFactory factory =
42 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
43 IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::QAsymmU8>(&factory);
44 }
45
BOOST_FIXTURE_TEST_CASE(IsLayerSupportedQAsymmS8Cl,ClContextControlFixture)46 BOOST_FIXTURE_TEST_CASE(IsLayerSupportedQAsymmS8Cl, ClContextControlFixture)
47 {
48 armnn::ClWorkloadFactory factory =
49 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
50 IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::QAsymmS8>(&factory);
51 }
52
BOOST_FIXTURE_TEST_CASE(IsLayerSupportedQSymmS8Cl,ClContextControlFixture)53 BOOST_FIXTURE_TEST_CASE(IsLayerSupportedQSymmS8Cl, ClContextControlFixture)
54 {
55 armnn::ClWorkloadFactory factory =
56 ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
57 IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
58 }
59
BOOST_FIXTURE_TEST_CASE(IsConvertFp16ToFp32SupportedCl,ClContextControlFixture)60 BOOST_FIXTURE_TEST_CASE(IsConvertFp16ToFp32SupportedCl, ClContextControlFixture)
61 {
62 std::string reasonIfUnsupported;
63
64 bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
65 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
66
67 BOOST_CHECK(result);
68 }
69
BOOST_FIXTURE_TEST_CASE(IsConvertFp16ToFp32SupportedFp32InputCl,ClContextControlFixture)70 BOOST_FIXTURE_TEST_CASE(IsConvertFp16ToFp32SupportedFp32InputCl, ClContextControlFixture)
71 {
72 std::string reasonIfUnsupported;
73
74 bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
75 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
76
77 BOOST_CHECK(!result);
78 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Input should be Float16");
79 }
80
BOOST_FIXTURE_TEST_CASE(IsConvertFp16ToFp32SupportedFp16OutputCl,ClContextControlFixture)81 BOOST_FIXTURE_TEST_CASE(IsConvertFp16ToFp32SupportedFp16OutputCl, ClContextControlFixture)
82 {
83 std::string reasonIfUnsupported;
84
85 bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
86 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
87
88 BOOST_CHECK(!result);
89 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Output should be Float32");
90 }
91
BOOST_FIXTURE_TEST_CASE(IsConvertFp32ToFp16SupportedCl,ClContextControlFixture)92 BOOST_FIXTURE_TEST_CASE(IsConvertFp32ToFp16SupportedCl, ClContextControlFixture)
93 {
94 std::string reasonIfUnsupported;
95
96 bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
97 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
98
99 BOOST_CHECK(result);
100 }
101
BOOST_FIXTURE_TEST_CASE(IsConvertFp32ToFp16SupportedFp16InputCl,ClContextControlFixture)102 BOOST_FIXTURE_TEST_CASE(IsConvertFp32ToFp16SupportedFp16InputCl, ClContextControlFixture)
103 {
104 std::string reasonIfUnsupported;
105
106 bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
107 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
108
109 BOOST_CHECK(!result);
110 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Input should be Float32");
111 }
112
BOOST_FIXTURE_TEST_CASE(IsConvertFp32ToFp16SupportedFp32OutputCl,ClContextControlFixture)113 BOOST_FIXTURE_TEST_CASE(IsConvertFp32ToFp16SupportedFp32OutputCl, ClContextControlFixture)
114 {
115 std::string reasonIfUnsupported;
116
117 bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
118 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
119
120 BOOST_CHECK(!result);
121 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Output should be Float16");
122 }
123
BOOST_FIXTURE_TEST_CASE(IsLogicalBinarySupportedCl,ClContextControlFixture)124 BOOST_FIXTURE_TEST_CASE(IsLogicalBinarySupportedCl, ClContextControlFixture)
125 {
126 std::string reasonIfUnsupported;
127
128 bool result = IsLogicalBinaryLayerSupportedTests<armnn::ClWorkloadFactory,
129 armnn::DataType::Boolean, armnn::DataType::Boolean>(reasonIfUnsupported);
130
131 BOOST_CHECK(result);
132 }
133
BOOST_FIXTURE_TEST_CASE(IsLogicalBinaryBroadcastSupportedCl,ClContextControlFixture)134 BOOST_FIXTURE_TEST_CASE(IsLogicalBinaryBroadcastSupportedCl, ClContextControlFixture)
135 {
136 std::string reasonIfUnsupported;
137
138 bool result = IsLogicalBinaryLayerBroadcastSupportedTests<armnn::ClWorkloadFactory,
139 armnn::DataType::Boolean, armnn::DataType::Boolean>(reasonIfUnsupported);
140
141 BOOST_CHECK(result);
142 }
143
BOOST_FIXTURE_TEST_CASE(IsMeanSupportedCl,ClContextControlFixture)144 BOOST_FIXTURE_TEST_CASE(IsMeanSupportedCl, ClContextControlFixture)
145 {
146 std::string reasonIfUnsupported;
147
148 bool result = IsMeanLayerSupportedTests<armnn::ClWorkloadFactory,
149 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
150
151 BOOST_CHECK(result);
152 }
153
BOOST_AUTO_TEST_CASE(IsConstantSupportedCl)154 BOOST_AUTO_TEST_CASE(IsConstantSupportedCl)
155 {
156 std::string reasonIfUnsupported;
157
158 bool result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
159 armnn::DataType::Float16>(reasonIfUnsupported);
160 BOOST_CHECK(result);
161
162 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
163 armnn::DataType::Float32>(reasonIfUnsupported);
164 BOOST_CHECK(result);
165
166 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
167 armnn::DataType::QAsymmU8>(reasonIfUnsupported);
168 BOOST_CHECK(result);
169
170 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
171 armnn::DataType::Boolean>(reasonIfUnsupported);
172 BOOST_CHECK(!result);
173
174 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
175 armnn::DataType::QSymmS16>(reasonIfUnsupported);
176 BOOST_CHECK(result);
177
178 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
179 armnn::DataType::QSymmS8>(reasonIfUnsupported);
180 BOOST_CHECK(result);
181
182 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
183 armnn::DataType::QAsymmS8>(reasonIfUnsupported);
184 BOOST_CHECK(result);
185
186 result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
187 armnn::DataType::BFloat16>(reasonIfUnsupported);
188 BOOST_CHECK(!result);
189 }
190
191 BOOST_AUTO_TEST_SUITE_END()
192