xref: /aosp_15_r20/external/ComputeLibrary/tests/validation/CL/Winograd.cpp (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1 /*
2  * Copyright (c) 2018-2021 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #include "arm_compute/core/Helpers.h"
25 #include "arm_compute/core/Types.h"
26 #include "arm_compute/core/utils/misc/ShapeCalculator.h"
27 #include "arm_compute/runtime/CL/CLTensor.h"
28 #include "arm_compute/runtime/CL/CLTensorAllocator.h"
29 #include "arm_compute/runtime/CL/functions/CLWinogradConvolutionLayer.h"
30 #include "tests/CL/CLAccessor.h"
31 #include "tests/CL/Helper.h"
32 #include "tests/PaddingCalculator.h"
33 #include "tests/datasets/LargeConvolutionLayerDataset.h"
34 #include "tests/datasets/ShapeDatasets.h"
35 #include "tests/datasets/SmallConvolutionLayerDataset.h"
36 #include "tests/datasets/WinogradInputTransformDataset.h"
37 #include "tests/datasets/WinogradOutputTransformDataset.h"
38 #include "tests/framework/Asserts.h"
39 #include "tests/framework/Macros.h"
40 #include "tests/framework/datasets/Datasets.h"
41 #include "tests/validation/Validation.h"
42 #include "tests/validation/fixtures/WinogradConvolutionLayerFixture.h"
43 
44 namespace arm_compute
45 {
46 namespace test
47 {
48 namespace validation
49 {
50 namespace
51 {
52 // *INDENT-OFF*
53 // clang-format off
54 const AbsoluteTolerance<half> tolerance_f16(half(1.f));
55 constexpr AbsoluteTolerance<float> tolerance_convolution_layer_f32(0.1f);
56 const AbsoluteTolerance<half> tolerance_convolution_layer_f16(half(0.4f));
57 RelativeTolerance<half_float::half> rel_tolerance_f16(half(0.2)); /**< Tolerance value for comparing reference's output against implementation's output for FP16 data types */
58 constexpr float                     tolerance_num   = 0.05f;  /**< Tolerance number */
59 constexpr float                     abs_tolerance_convolution_layer_f16   = 2.5f;  /**< Tolerance number */
60 constexpr float                      tolerance_num_f16 = 0.15f;                 /**< Tolerance number */
61 
62 //Activation Functions
63 const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
64 {
65     ActivationLayerInfo(),
66     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU),
67     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
68     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
69     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU)
70 });
71 const auto ActivationFunctionsSmallDataset = framework::dataset::make("ActivationInfo",
72 {
73     ActivationLayerInfo(),
74     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
75     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU),
76     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SOFT_RELU)
77 });
78 
79 } // namespace
80 
81 using namespace arm_compute::misc::shape_calculator;
82 
83 TEST_SUITE(CL)
TEST_SUITE(Winograd)84 TEST_SUITE(Winograd)
85 
86 TEST_SUITE(ConvolutionLayer)
87 DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
88                                                 framework::dataset::make("InputInfo", {
89                                                                                         TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F16),     // Insufficient padding
90                                                                                         TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F32),     // Datatype mismatch
91                                                                                         TensorInfo(TensorShape(23U, 27U, 5U, 4U), 1, DataType::F32), // Stride y not supported
92                                                                                         TensorInfo(TensorShape(16U, 16U, 8U), 1, DataType::F32),     // Padding needed
93                                                                                         TensorInfo(TensorShape(33U, 27U, 7U, 4U), 1, DataType::F32)  // Kernel size not supported
94                                                                                       }),
95                                                 framework::dataset::make("WeightsInfo", {
96                                                                                         TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::F16),
97                                                                                         TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::QASYMM8),
98                                                                                         TensorInfo(TensorShape(3U, 3U, 5U, 21U), 1, DataType::F32),
99                                                                                         TensorInfo(TensorShape(3U, 3U, 8U, 16U), 1, DataType::F32),
100                                                                                         TensorInfo(TensorShape(5U, 5U, 7U, 16U), 1, DataType::F16)
101                                                                                         })),
102                                                 framework::dataset::make("BiasesInfo", {
103                                                                                         TensorInfo(TensorShape(19U), 1, DataType::F16),
104                                                                                         TensorInfo(TensorShape(19U), 1, DataType::F32),
105                                                                                         TensorInfo(TensorShape(21U), 1, DataType::F32),
106                                                                                         TensorInfo(TensorShape(16U), 1, DataType::F32),
107                                                                                         TensorInfo(TensorShape(16U), 1, DataType::F32)
108                                                                                        })),
109                                                 framework::dataset::make("OutputInfo", {
110                                                                                         TensorInfo(TensorShape(17U, 31U, 19U), 1, DataType::F16),
111                                                                                         TensorInfo(TensorShape(15U, 15U, 19U), 1, DataType::F32),
112                                                                                         TensorInfo(TensorShape(21U, 25U, 21U, 4U), 1, DataType::F32),
113                                                                                         TensorInfo(TensorShape(16U, 16U, 16U), 1, DataType::F32),
114                                                                                         TensorInfo(TensorShape(11U, 12U, 16U, 4U), 1, DataType::F32)
115                                                                                        })),
116                                                 framework::dataset::make("ConvInfo", {
117                                                                                         PadStrideInfo(1, 1, 1, 1),
118                                                                                         PadStrideInfo(1, 1, 1, 1),
119                                                                                         PadStrideInfo(1, 2, 0, 0),
120                                                                                         PadStrideInfo(1, 1, 1, 1),
121                                                                                         PadStrideInfo(1, 1, 1, 0)
122                                                                                                                  })),
123                                                 framework::dataset::make("Expected", { false, false, false, false, false })),
124                input_info, weights_info, bias_info, output_info, conv_info, expected)
125 {
126     ARM_COMPUTE_EXPECT(bool(CLWinogradConvolutionLayer::validate(&input_info.clone()->set_is_resizable(false), &weights_info.clone()->set_is_resizable(false), &bias_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), conv_info)) == expected, framework::LogLevel::ERRORS);
127 }
128 
129 TEST_SUITE(FP32)
130 using CLWinogradConvolutionLayerFastMathFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>;
131 using CLWinogradConvolutionLayerFastMathMixedDataLayoutFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float, float, true, true>;
132 TEST_SUITE(Conv3x3)
133 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
134                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
135                                                framework::dataset::make("DataType", { DataType::F32 })),
136                                                ActivationFunctionsSmallDataset),
137                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
138 {
139     // Validate output
140     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
141 }
142 FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLWinogradConvolutionLayerFastMathMixedDataLayoutFixture, framework::DatasetMode::PRECOMMIT,
143                        combine(combine(combine(combine(combine(combine(combine(combine(
144                                                 framework::dataset::make("Input", TensorShape(8U, 8U, 32U)),
145                                                 framework::dataset::make("Weight", TensorShape(1U, 3U, 32U, 1U))),
146                                                 framework::dataset::make("Bias", TensorShape(1U))),
147                                                 framework::dataset::make("Output", TensorShape(8U, 6U, 1U))),
148                                                 framework::dataset::make("PadStrideInfo", PadStrideInfo(1, 1, 0, 0))),
149                                                 framework::dataset::make("Dilation", Size2D(1U, 1U))),
150                                                 framework::dataset::make("DataType", { DataType::F32 })),
151                                                 ActivationFunctionsSmallDataset),
152                                                 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
153 {
154     // Validate output
155     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
156 }
157 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
158                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
159                                                framework::dataset::make("DataType", { DataType::F32 })),
160                                                ActivationFunctionsDataset),
161                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
162 {
163     // Validate output
164     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
165 }
166 TEST_SUITE_END() // Conv3x3
167 
TEST_SUITE(Conv3x1)168 TEST_SUITE(Conv3x1)
169 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
170                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
171                                        framework::dataset::make("DataType", { DataType::F32 })),
172                                        ActivationFunctionsSmallDataset),
173                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
174 {
175     // Validate output
176     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
177 }
178 
179 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
180                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
181                                        framework::dataset::make("DataType", { DataType::F32 })),
182                                        ActivationFunctionsDataset),
183                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
184 {
185     // Validate output
186     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
187 }
188 TEST_SUITE_END() // Conv3x1
189 
TEST_SUITE(Conv1x3)190 TEST_SUITE(Conv1x3)
191 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
192                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
193                                        framework::dataset::make("DataType", { DataType::F32 })),
194                                        ActivationFunctionsSmallDataset),
195                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
196 {
197     // Validate output
198     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
199 }
200 
201 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
202                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
203                                        framework::dataset::make("DataType", { DataType::F32 })),
204                                        ActivationFunctionsDataset),
205                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
206 {
207     // Validate output
208     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
209 }
210 TEST_SUITE_END() // Conv1x3
211 
TEST_SUITE(Conv5x5)212 TEST_SUITE(Conv5x5)
213 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
214                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
215                                                framework::dataset::make("DataType", { DataType::F32 })),
216                                                ActivationFunctionsSmallDataset ),
217                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
218 
219 {
220     // Validate output
221     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
222 }
223 
224 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
225                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
226                                                framework::dataset::make("DataType", { DataType::F32 })),
227                                                ActivationFunctionsDataset ),
228                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
229 
230 {
231     // Validate output
232     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
233 }
234 TEST_SUITE_END() // Conv5x5
235 
TEST_SUITE(Conv5x1)236 TEST_SUITE(Conv5x1)
237 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
238                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
239                                                framework::dataset::make("DataType", { DataType::F32 })),
240                                                ActivationFunctionsSmallDataset),
241                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
242 
243 {
244     // Validate output
245     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
246 }
247 
248 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
249                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
250                                                framework::dataset::make("DataType", { DataType::F32 })),
251                                                ActivationFunctionsDataset),
252                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
253 
254 {
255     // Validate output
256     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
257 }
258 TEST_SUITE_END() // Conv5x1
259 
TEST_SUITE(Conv1x5)260 TEST_SUITE(Conv1x5)
261 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
262                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
263                                                framework::dataset::make("DataType", { DataType::F32 })),
264                                                ActivationFunctionsSmallDataset),
265                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
266 
267 {
268     // Validate output
269     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
270 }
271 
272 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
273                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
274                                                framework::dataset::make("DataType", { DataType::F32 })),
275                                                ActivationFunctionsDataset),
276                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
277 
278 {
279     // Validate output
280     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
281 }
282 TEST_SUITE_END() // Conv1x5
283 TEST_SUITE_END() // FP32
284 
285 
286 TEST_SUITE(FP16)
287 
288 using CLWinogradConvolutionLayerFastMathFixture16 = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, half, float>;
289 TEST_SUITE(Conv3x3)
290 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
291                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
292                                                framework::dataset::make("DataType", { DataType::F16 })),
293                                                ActivationFunctionsSmallDataset),
294                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
295 {
296     // Validate output
297     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
298 }
299 
300 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
301                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
302                                                framework::dataset::make("DataType", { DataType::F16 })),
303                                                ActivationFunctionsDataset),
304                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
305 {
306     // Validate output
307     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
308 }
309 TEST_SUITE_END() // Conv3x3
310 
TEST_SUITE(Conv3x1)311 TEST_SUITE(Conv3x1)
312 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
313                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
314                                        framework::dataset::make("DataType", { DataType::F16 })),
315                                        ActivationFunctionsSmallDataset),
316                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
317 {
318     // Validate output
319     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
320 }
321 
322 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
323                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
324                                        framework::dataset::make("DataType", { DataType::F16 })),
325                                        ActivationFunctionsDataset),
326                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
327 {
328     // Validate output
329     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
330 }
331 TEST_SUITE_END() // Conv3x1
332 
TEST_SUITE(Conv1x3)333 TEST_SUITE(Conv1x3)
334 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
335                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
336                                        framework::dataset::make("DataType", { DataType::F16 })),
337                                        ActivationFunctionsSmallDataset),
338                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
339 {
340     // Validate output
341     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
342 }
343 
344 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
345                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
346                                        framework::dataset::make("DataType", { DataType::F16 })),
347                                        ActivationFunctionsDataset),
348                                        framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
349 {
350     // Validate output
351     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
352 }
353 TEST_SUITE_END() // Conv1x3
354 
TEST_SUITE(Conv5x5)355 TEST_SUITE(Conv5x5)
356 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
357                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
358                                                framework::dataset::make("DataType", { DataType::F16 })),
359                                        ActivationFunctionsSmallDataset),
360                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
361 
362 {
363     // Validate output
364     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
365 }
366 
367 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
368                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
369                                                framework::dataset::make("DataType", { DataType::F16 })),
370                                                ActivationFunctionsDataset),
371                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
372 
373 {
374     // Validate output
375     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
376 }
377 TEST_SUITE_END() // Conv5x5
378 
TEST_SUITE(Conv5x1)379 TEST_SUITE(Conv5x1)
380 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
381                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
382                                                framework::dataset::make("DataType", { DataType::F16 })),
383                                        ActivationFunctionsSmallDataset),
384                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
385 
386 {
387     // Validate output
388     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
389 }
390 
391 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
392                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
393                                                framework::dataset::make("DataType", { DataType::F16 })),
394                                                ActivationFunctionsDataset),
395                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
396 
397 {
398     // Validate output
399     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
400 }
401 TEST_SUITE_END() // Conv5x1
402 
TEST_SUITE(Conv1x5)403 TEST_SUITE(Conv1x5)
404 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
405                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
406                                                framework::dataset::make("DataType", { DataType::F16 })),
407                                        ActivationFunctionsSmallDataset),
408                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
409 
410 {
411     // Validate output
412     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
413 }
414 
415 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
416                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
417                                                framework::dataset::make("DataType", { DataType::F16 })),
418                                                ActivationFunctionsDataset),
419                                                framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
420 
421 {
422     // Validate output
423     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
424 }
425 TEST_SUITE_END() // Conv1x5
426 
TEST_SUITE(Conv1x7)427 TEST_SUITE(Conv1x7)
428 FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
429                        combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x7Dataset(),
430                                                framework::dataset::make("DataType", { DataType::F16 })),
431                                        ActivationFunctionsSmallDataset),
432                                                framework::dataset::make("DataLayout", { DataLayout::NHWC })))
433 
434 {
435     // Validate output
436     validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
437 }
438 
439 FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
440                        combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x7Dataset(),
441                                                framework::dataset::make("DataType", { DataType::F16 })),
442                                                ActivationFunctionsDataset),
443                                                framework::dataset::make("DataLayout", { DataLayout::NHWC })))
444 
445 {
446     // Validate output
447     validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
448 }
449 TEST_SUITE_END() // Conv1x7
450 TEST_SUITE_END() // FP16
451 TEST_SUITE_END() // ConvolutionLayer
452 TEST_SUITE_END() // Winograd
453 TEST_SUITE_END() // CL
454 } // namespace validation
455 } // namespace test
456 } // namespace arm_compute
457