xref: /aosp_15_r20/external/armnn/src/backends/cl/test/ClLayerSupportTests.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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 <armnnTestUtils/TensorHelpers.hpp>
12 
13 #include <armnn/backends/TensorHandle.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 <doctest/doctest.h>
20 
21 #include <string>
22 
23 TEST_SUITE("ClLayerSupport")
24 {
25 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLayerSupportedFloat16Cl")
26 {
27     armnn::ClWorkloadFactory factory =
28         ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
29     IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::Float16>(&factory);
30 }
31 
32 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLayerSupportedFloat32Cl")
33 {
34     armnn::ClWorkloadFactory factory =
35         ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
36     IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::Float32>(&factory);
37 }
38 
39 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLayerSupportedQAsymmU8Cl")
40 {
41     armnn::ClWorkloadFactory factory =
42         ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
43     IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::QAsymmU8>(&factory);
44 }
45 
46 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLayerSupportedQAsymmS8Cl")
47 {
48     armnn::ClWorkloadFactory factory =
49         ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
50     IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::QAsymmS8>(&factory);
51 }
52 
53 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLayerSupportedQSymmS8Cl")
54 {
55     armnn::ClWorkloadFactory factory =
56         ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager());
57     IsLayerSupportedTests<armnn::ClWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
58 }
59 
60 TEST_CASE_FIXTURE(ClContextControlFixture, "IsConvertFp16ToFp32SupportedCl")
61 {
62     std::string reasonIfUnsupported;
63 
64     bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
65       armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
66 
67     CHECK(result);
68 }
69 
70 TEST_CASE_FIXTURE(ClContextControlFixture, "IsConvertFp16ToFp32SupportedFp32InputCl")
71 {
72     std::string reasonIfUnsupported;
73 
74     bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
75       armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
76 
77     CHECK(!result);
78     CHECK_EQ(reasonIfUnsupported, "Input should be Float16");
79 }
80 
81 TEST_CASE_FIXTURE(ClContextControlFixture, "IsConvertFp16ToFp32SupportedFp16OutputCl")
82 {
83     std::string reasonIfUnsupported;
84 
85     bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
86       armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
87 
88     CHECK(!result);
89     CHECK_EQ(reasonIfUnsupported, "Output should be Float32");
90 }
91 
92 TEST_CASE_FIXTURE(ClContextControlFixture, "IsConvertFp32ToFp16SupportedCl")
93 {
94     std::string reasonIfUnsupported;
95 
96     bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
97       armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
98 
99     CHECK(result);
100 }
101 
102 TEST_CASE_FIXTURE(ClContextControlFixture, "IsConvertFp32ToFp16SupportedFp16InputCl")
103 {
104     std::string reasonIfUnsupported;
105 
106     bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
107       armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
108 
109     CHECK(!result);
110     CHECK_EQ(reasonIfUnsupported, "Input should be Float32");
111 }
112 
113 TEST_CASE_FIXTURE(ClContextControlFixture, "IsConvertFp32ToFp16SupportedFp32OutputCl")
114 {
115     std::string reasonIfUnsupported;
116 
117     bool result = IsConvertLayerSupportedTests<armnn::ClWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
118       armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
119 
120     CHECK(!result);
121     CHECK_EQ(reasonIfUnsupported, "Output should be Float16");
122 }
123 
124 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLogicalBinarySupportedCl")
125 {
126     std::string reasonIfUnsupported;
127 
128     bool result = IsLogicalBinaryLayerSupportedTests<armnn::ClWorkloadFactory,
129       armnn::DataType::Boolean, armnn::DataType::Boolean>(reasonIfUnsupported);
130 
131     CHECK(result);
132 }
133 
134 TEST_CASE_FIXTURE(ClContextControlFixture, "IsLogicalBinaryBroadcastSupportedCl")
135 {
136     std::string reasonIfUnsupported;
137 
138     bool result = IsLogicalBinaryLayerBroadcastSupportedTests<armnn::ClWorkloadFactory,
139       armnn::DataType::Boolean, armnn::DataType::Boolean>(reasonIfUnsupported);
140 
141     CHECK(result);
142 }
143 
144 TEST_CASE_FIXTURE(ClContextControlFixture, "IsMeanSupportedCl")
145 {
146     std::string reasonIfUnsupported;
147 
148     bool result = IsMeanLayerSupportedTests<armnn::ClWorkloadFactory,
149       armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
150 
151     CHECK(result);
152 }
153 
154 TEST_CASE("IsConstantSupportedCl")
155 {
156     std::string reasonIfUnsupported;
157 
158     bool result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
159             armnn::DataType::Float16>(reasonIfUnsupported);
160     CHECK(result);
161 
162     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
163             armnn::DataType::Float32>(reasonIfUnsupported);
164     CHECK(result);
165 
166     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
167             armnn::DataType::QAsymmU8>(reasonIfUnsupported);
168     CHECK(result);
169 
170     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
171             armnn::DataType::Boolean>(reasonIfUnsupported);
172     CHECK(!result);
173 
174     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
175             armnn::DataType::QSymmS16>(reasonIfUnsupported);
176     CHECK(result);
177 
178     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
179             armnn::DataType::QSymmS8>(reasonIfUnsupported);
180     CHECK(result);
181 
182     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
183             armnn::DataType::QAsymmS8>(reasonIfUnsupported);
184     CHECK(result);
185 
186     result = IsConstantLayerSupportedTests<armnn::ClWorkloadFactory,
187             armnn::DataType::BFloat16>(reasonIfUnsupported);
188     CHECK(!result);
189 }
190 
191 }
192