• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2019-2022 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/KernelDescriptors.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 "src/core/CL/kernels/CLDepthwiseConvolutionLayerNativeKernel.h"
30 #include "tests/CL/CLAccessor.h"
31 #include "tests/CL/Helper.h"
32 #include "tests/PaddingCalculator.h"
33 #include "tests/framework/Asserts.h"
34 #include "tests/framework/Macros.h"
35 #include "tests/framework/datasets/Datasets.h"
36 #include "tests/validation/Validation.h"
37 #include "tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h"
38 
39 namespace arm_compute
40 {
41 namespace test
42 {
43 namespace validation
44 {
45 using namespace arm_compute::misc::shape_calculator;
46 
47 // Create function for CLDepthwiseConvolutionLayerNativeKernel
48 using CLDepthwiseConvolutionLayerNative = CLSynthetizeFunction<CLDepthwiseConvolutionLayerNativeKernel>;
49 
50 // Fixture for CLDepthwiseConvolutionLayerNative
51 template <typename T>
52 using CLDepthwiseConvolutionLayerNativeFixture = DepthwiseConvolutionLayerNativeConfigurableValidationFixture<CLTensor, CLAccessor, CLDepthwiseConvolutionLayerNative, T>;
53 
54 namespace
55 {
56 // *INDENT-OFF*
57 // clang-format off
58 RelativeTolerance<float> rel_tolerance_f32(0.001f);
59 constexpr float          abs_tolerance_f32(0.0001f);
60 
61 RelativeTolerance<half_float::half>  rel_tolerance_f16(half_float::half(0.01f));
62 constexpr float                      abs_tolerance_f16(0.03f);
63 
64 /** Width values to test - Precommit */
65 const auto width_values_precommit = framework::dataset::make("width", { 1U, 33U } );
66 
67 /** Width values to test - Nightly */
68 const auto width_values_nightly = framework::dataset::make("width", { 53U, 47U } );
69 
70 /** Height values to test - Precommit */
71 const auto height_values_precommit = framework::dataset::make("height", { 19U } );
72 
73 /** Height values to test - Nightly */
74 const auto height_values_nightly = framework::dataset::make("height", { 39U, 43U } );
75 
76 /** Channel values to test - Precommit */
77 const auto channel_values_precommit = framework::dataset::make("channels", { 15U });
78 
79 /** Channel values to test - Nightly */
80 const auto channel_values_nightly = framework::dataset::make("channels", { 33U, 19U });
81 
82 /** Channel values to test with cl_image support - Precommit */
83 const auto channel_values_export_to_cl_image_precommit = framework::dataset::make("channels", { 16U });
84 
85 /** Channel values to test with cl_image support - Nightly */
86 const auto channel_values_export_to_cl_image_nightly = framework::dataset::make("channels", { 32U });
87 
88 /** Batch values to test - Precommit */
89 const auto batch_values_precommit = framework::dataset::make("batch", { 1U, 2U });
90 
91 /** Batch values to test - Nightly */
92 const auto batch_values_nightly = framework::dataset::make("batch", { 1U, 3U });
93 
94 /** Kernel size values to test - Precommit */
95 const auto kernel_sz_values_precommit = framework::dataset::make("kernel_size", { Size2D(1U, 1U), Size2D(1U, 3U), Size2D(5U, 5U) });
96 
97 /** Kernel size values to test - Nightly */
98 const auto kernel_sz_values_nightly = framework::dataset::make("kernel_size", { Size2D(3U, 5U), Size2D(5U, 1U), Size2D(1U, 7U), Size2D(9U, 7U) });
99 
100 /** Depth multiplier values to test - All */
101 const auto depth_multiplier_values = framework::dataset::make("depth_multiplier", {3U});
102 
103 /** Dilation values to test - All */
104 const auto dilation_values = framework::dataset::make("dilation", { Size2D(1U, 1U), Size2D(3U, 3U) });
105 
106 /** Stride values to test - All */
107 const auto stride_values = framework::dataset::make("stride", { Size2D(1U, 1U), Size2D(3U, 2U) });
108 
109 /** Padding values to test - All */
110 const auto padding_valid_values = framework::dataset::make("padding_valid", { true, false });
111 
112 /** Data type values to test - All */
113 const auto data_type_values = framework::dataset::make("data_type", { DataType::F32, DataType::F16 });
114 
115 /** Data layout values to test - All */
116 const auto data_layout_values = framework::dataset::make("data_layout", { DataLayout::NHWC });
117 
118 /** N0 values to test - Precommit */
119 const auto n0_values_precommit = framework::dataset::make("N0", {2, 4});
120 
121 /** N0 values to test - Nightly */
122 const auto n0_values_nightly = framework::dataset::make("N0", {3, 8});
123 
124 /** N0 values to test with cl_image support - Precommit */
125 const auto n0_values_export_to_cl_image_precommit = framework::dataset::make("N0", {4});
126 
127 /** N0 values to test with cl_image support - Nightly */
128 const auto n0_values_export_to_cl_image_nightly = framework::dataset::make("N0", {8});
129 
130 /** Activation values to test */
131 const auto act_values = framework::dataset::make("Activation",
132 {
133     ActivationLayerInfo(),
134     ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, 6.0f, 0.5f),
135 });
136 
137 } // namespace
138 
139 TEST_SUITE(CL)
TEST_SUITE(DepthwiseConvolutionLayerNative)140 TEST_SUITE(DepthwiseConvolutionLayerNative)
141 TEST_SUITE(Float)
142 TEST_SUITE(FP32)
143 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::ALL,
144                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
145                                                                                                 width_values_precommit,
146                                                                                                 height_values_precommit),
147                                                                                                 channel_values_precommit),
148                                                                                                 batch_values_precommit),
149                                                                                                 kernel_sz_values_precommit),
150                                                                                                 framework::dataset::make("depth_multiplier", 1)),
151                                                                                                 dilation_values),
152                                                                                                 stride_values),
153                                                                                                 padding_valid_values),
154                                                                                                 framework::dataset::make("DataType", DataType::F32)),
155                                                                                                 data_layout_values),
156                                                                                                 act_values),
157                                                                                                 n0_values_precommit),
158                                                                                                 framework::dataset::make("ExportToCLImage", false)))
159 {
160     // Validate output
161     validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
162 }
163 
164 FIXTURE_DATA_TEST_CASE_NEW(RunLarge, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::NIGHTLY,
165                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
166                                                                                                 width_values_nightly,
167                                                                                                 height_values_nightly),
168                                                                                                 channel_values_nightly),
169                                                                                                 batch_values_nightly),
170                                                                                                 kernel_sz_values_nightly),
171                                                                                                 framework::dataset::make("depth_multiplier", 1)),
172                                                                                                 dilation_values),
173                                                                                                 stride_values),
174                                                                                                 padding_valid_values),
175                                                                                                 framework::dataset::make("DataType", DataType::F32)),
176                                                                                                 data_layout_values),
177                                                                                                 act_values),
178                                                                                                 n0_values_nightly),
179                                                                                                 framework::dataset::make("ExportToCLImage", false)))
180 {
181     // Validate output
182     validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
183 }
184 
185 TEST_SUITE(ExportWeightsToCLImage)
186 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::ALL,
187                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
188                                                                                                 width_values_precommit,
189                                                                                                 height_values_precommit),
190                                                                                                 channel_values_export_to_cl_image_precommit),
191                                                                                                 batch_values_precommit),
192                                                                                                 kernel_sz_values_precommit),
193                                                                                                 framework::dataset::make("depth_multiplier", 1)),
194                                                                                                 dilation_values),
195                                                                                                 stride_values),
196                                                                                                 padding_valid_values),
197                                                                                                 framework::dataset::make("DataType", DataType::F32)),
198                                                                                                 data_layout_values),
199                                                                                                 act_values),
200                                                                                                 n0_values_export_to_cl_image_precommit),
201                                                                                                 framework::dataset::make("ExportToCLImage", true)))
202 {
203    // Validate output
204     if(_validate_output)
205     {
206         // Validate output
207         validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
208     }
209     else
210     {
211         ARM_COMPUTE_TEST_INFO("cl_khr_image2d_from_buffer not supported. TEST skipped");
212         framework::ARM_COMPUTE_PRINT_INFO();
213     }
214 }
215 
216 FIXTURE_DATA_TEST_CASE_NEW(RunLarge, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::NIGHTLY,
217                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
218                                                                                                 width_values_nightly,
219                                                                                                 height_values_nightly),
220                                                                                                 channel_values_export_to_cl_image_nightly),
221                                                                                                 batch_values_nightly),
222                                                                                                 kernel_sz_values_nightly),
223                                                                                                 framework::dataset::make("depth_multiplier", 1)),
224                                                                                                 dilation_values),
225                                                                                                 stride_values),
226                                                                                                 padding_valid_values),
227                                                                                                 framework::dataset::make("DataType", DataType::F32)),
228                                                                                                 data_layout_values),
229                                                                                                 act_values),
230                                                                                                 n0_values_export_to_cl_image_nightly),
231                                                                                                 framework::dataset::make("ExportToCLImage", true)))
232 {
233    // Validate output
234     if(_validate_output)
235     {
236         // Validate output
237         validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
238     }
239     else
240     {
241         ARM_COMPUTE_TEST_INFO("cl_khr_image2d_from_buffer not supported. TEST skipped");
242         framework::ARM_COMPUTE_PRINT_INFO();
243     }
244 }
245 
246 TEST_SUITE_END() // ExportWeightsToCLImage
TEST_SUITE_END()247 TEST_SUITE_END() // FP32
248 
249 TEST_SUITE(FP16)
250 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::ALL,
251                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
252                                                                                                 width_values_precommit,
253                                                                                                 height_values_precommit),
254                                                                                                 channel_values_precommit),
255                                                                                                 batch_values_precommit),
256                                                                                                 kernel_sz_values_precommit),
257                                                                                                 framework::dataset::make("depth_multiplier", 1)),
258                                                                                                 dilation_values),
259                                                                                                 stride_values),
260                                                                                                 padding_valid_values),
261                                                                                                 framework::dataset::make("DataType", DataType::F16)),
262                                                                                                 data_layout_values),
263                                                                                                 act_values),
264                                                                                                 n0_values_precommit),
265                                                                                                 framework::dataset::make("ExportToCLImage", false)))
266 {
267     // Validate output
268         validate(CLAccessor(_target), _reference, rel_tolerance_f16);
269 }
270 
271 FIXTURE_DATA_TEST_CASE_NEW(RunLarge, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::NIGHTLY,
272                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
273                                                                                                 width_values_nightly,
274                                                                                                 height_values_nightly),
275                                                                                                 channel_values_nightly),
276                                                                                                 batch_values_nightly),
277                                                                                                 kernel_sz_values_nightly),
278                                                                                                 framework::dataset::make("depth_multiplier", 1)),
279                                                                                                 dilation_values),
280                                                                                                 stride_values),
281                                                                                                 padding_valid_values),
282                                                                                                 framework::dataset::make("DataType", DataType::F16)),
283                                                                                                 data_layout_values),
284                                                                                                 act_values),
285                                                                                                 n0_values_nightly),
286                                                                                                 framework::dataset::make("ExportToCLImage", false)))
287 {
288     // Validate output
289     validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
290 }
291 
292 TEST_SUITE(ExportWeightsToCLImage)
293 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::ALL,
294                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
295                                                                                                 width_values_precommit,
296                                                                                                 height_values_precommit),
297                                                                                                 channel_values_export_to_cl_image_precommit),
298                                                                                                 batch_values_precommit),
299                                                                                                 kernel_sz_values_precommit),
300                                                                                                 framework::dataset::make("depth_multiplier", 1)),
301                                                                                                 dilation_values),
302                                                                                                 stride_values),
303                                                                                                 padding_valid_values),
304                                                                                                 framework::dataset::make("DataType", DataType::F16)),
305                                                                                                 data_layout_values),
306                                                                                                 act_values),
307                                                                                                 n0_values_export_to_cl_image_precommit),
308                                                                                                 framework::dataset::make("ExportToCLImage", true)))
309 {
310    // Validate output
311     if(_validate_output)
312     {
313         // Validate output
314         validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
315     }
316     else
317     {
318         ARM_COMPUTE_TEST_INFO("cl_khr_image2d_from_buffer not supported. TEST skipped");
319         framework::ARM_COMPUTE_PRINT_INFO();
320     }
321 }
322 
323 FIXTURE_DATA_TEST_CASE_NEW(RunLarge, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::NIGHTLY,
324                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
325                                                                                                 width_values_nightly,
326                                                                                                 height_values_nightly),
327                                                                                                 channel_values_export_to_cl_image_nightly),
328                                                                                                 batch_values_nightly),
329                                                                                                 kernel_sz_values_nightly),
330                                                                                                 framework::dataset::make("depth_multiplier", 1)),
331                                                                                                 dilation_values),
332                                                                                                 stride_values),
333                                                                                                 padding_valid_values),
334                                                                                                 framework::dataset::make("DataType", DataType::F16)),
335                                                                                                 data_layout_values),
336                                                                                                 act_values),
337                                                                                                 n0_values_export_to_cl_image_nightly),
338                                                                                                 framework::dataset::make("ExportToCLImage", true)))
339 {
340    // Validate output
341     if(_validate_output)
342     {
343         // Validate output
344         validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
345     }
346     else
347     {
348         ARM_COMPUTE_TEST_INFO("cl_khr_image2d_from_buffer not supported. TEST skipped");
349         framework::ARM_COMPUTE_PRINT_INFO();
350     }
351 }
352 
353 TEST_SUITE_END() // ExportWeightsToCLImage
TEST_SUITE_END()354 TEST_SUITE_END() // FP16
355 TEST_SUITE_END() // Float
356 TEST_SUITE(DepthMultiplier)
357 TEST_SUITE(Float)
358 TEST_SUITE(FP32)
359 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::ALL,
360                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
361                                                                                                 framework::dataset::make("width", { 33U } ),
362                                                                                                 height_values_precommit),
363                                                                                                 channel_values_precommit),
364                                                                                                 batch_values_precommit),
365                                                                                                 kernel_sz_values_precommit),
366                                                                                                 depth_multiplier_values),
367                                                                                                 dilation_values),
368                                                                                                 stride_values),
369                                                                                                 padding_valid_values),
370                                                                                                 framework::dataset::make("DataType", DataType::F32)),
371                                                                                                 data_layout_values),
372                                                                                                 act_values),
373                                                                                                 framework::dataset::make("N0", 1)),
374                                                                                                 framework::dataset::make("ExportToCLImage", false)))
375 {
376     // Validate output
377     validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
378 }
379 
380 FIXTURE_DATA_TEST_CASE_NEW(RunLarge, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::NIGHTLY,
381                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
382                                                                                                 framework::dataset::make("width", { 53U } ),
383                                                                                                 height_values_nightly),
384                                                                                                 channel_values_nightly),
385                                                                                                 batch_values_nightly),
386                                                                                                 kernel_sz_values_nightly),
387                                                                                                 depth_multiplier_values),
388                                                                                                 dilation_values),
389                                                                                                 stride_values),
390                                                                                                 padding_valid_values),
391                                                                                                 framework::dataset::make("DataType", DataType::F32)),
392                                                                                                 data_layout_values),
393                                                                                                 act_values),
394                                                                                                 framework::dataset::make("N0", 1)),
395                                                                                                 framework::dataset::make("ExportToCLImage", false)))
396 {
397     // Validate output
398     validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
399 }
400 
401 TEST_SUITE(DepthMultiplierMultipleOfOutputChannels)
402 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::ALL,
403                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
404                                                                                                 framework::dataset::make("width", { 33U } ),
405                                                                                                 height_values_precommit),
406                                                                                                 channel_values_precommit),
407                                                                                                 batch_values_precommit),
408                                                                                                 kernel_sz_values_precommit),
409                                                                                                 framework::dataset::make("depth_multiplier", 2)),
410                                                                                                 dilation_values),
411                                                                                                 stride_values),
412                                                                                                 padding_valid_values),
413                                                                                                 framework::dataset::make("DataType", DataType::F32)),
414                                                                                                 data_layout_values),
415                                                                                                 act_values),
416                                                                                                 framework::dataset::make("N0", {2})),
417                                                                                                 framework::dataset::make("ExportToCLImage", false)))
418 {
419     // Validate output
420     validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
421 }
422 
423 TEST_SUITE(ExportWeightsToCLImage)
424 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<float>, framework::DatasetMode::ALL,
425                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
426                                                                                                 framework::dataset::make("width", { 33U } ),
427                                                                                                 height_values_precommit),
428                                                                                                 channel_values_precommit),
429                                                                                                 batch_values_precommit),
430                                                                                                 kernel_sz_values_precommit),
431                                                                                                 framework::dataset::make("depth_multiplier", 4)),
432                                                                                                 dilation_values),
433                                                                                                 stride_values),
434                                                                                                 padding_valid_values),
435                                                                                                 framework::dataset::make("DataType", DataType::F32)),
436                                                                                                 data_layout_values),
437                                                                                                 act_values),
438                                                                                                 framework::dataset::make("N0", {4})),
439                                                                                                 framework::dataset::make("ExportToCLImage", true)))
440 {
441    // Validate output
442     if(_validate_output)
443     {
444         // Validate output
445         validate(CLAccessor(_target), _reference, rel_tolerance_f32, 0.f, abs_tolerance_f32);
446     }
447     else
448     {
449         ARM_COMPUTE_TEST_INFO("cl_khr_image2d_from_buffer not supported. TEST skipped");
450         framework::ARM_COMPUTE_PRINT_INFO();
451     }
452 }
453 TEST_SUITE_END() // ExportWeightsToCLImage
TEST_SUITE_END()454 TEST_SUITE_END() // DepthMultiplierMultipleOfOutputChannels
455 TEST_SUITE_END() // FP32
456 
457 TEST_SUITE(FP16)
458 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::ALL,
459                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
460                                                                                                 framework::dataset::make("width", { 33U } ),
461                                                                                                 height_values_precommit),
462                                                                                                 channel_values_precommit),
463                                                                                                 batch_values_precommit),
464                                                                                                 kernel_sz_values_precommit),
465                                                                                                 depth_multiplier_values),
466                                                                                                 dilation_values),
467                                                                                                 stride_values),
468                                                                                                 padding_valid_values),
469                                                                                                 framework::dataset::make("DataType", DataType::F16)),
470                                                                                                 data_layout_values),
471                                                                                                 act_values),
472                                                                                                 framework::dataset::make("N0", 1)),
473                                                                                                 framework::dataset::make("ExportToCLImage", false)))
474 {
475     // Validate output
476         validate(CLAccessor(_target), _reference, rel_tolerance_f16);
477 }
478 
479 FIXTURE_DATA_TEST_CASE_NEW(RunLarge, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::NIGHTLY,
480                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
481                                                                                                 framework::dataset::make("width", { 53U } ),
482                                                                                                 height_values_nightly),
483                                                                                                 channel_values_nightly),
484                                                                                                 batch_values_nightly),
485                                                                                                 kernel_sz_values_nightly),
486                                                                                                 depth_multiplier_values),
487                                                                                                 dilation_values),
488                                                                                                 stride_values),
489                                                                                                 padding_valid_values),
490                                                                                                 framework::dataset::make("DataType", DataType::F16)),
491                                                                                                 data_layout_values),
492                                                                                                 act_values),
493                                                                                                 framework::dataset::make("N0", 1)),
494                                                                                                 framework::dataset::make("ExportToCLImage", false)))
495 {
496     // Validate output
497     validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
498 }
499 
500 TEST_SUITE(DepthMultiplierMultipleOfOutputChannels)
501 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::ALL,
502                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
503                                                                                                 framework::dataset::make("width", { 33U } ),
504                                                                                                 height_values_precommit),
505                                                                                                 channel_values_precommit),
506                                                                                                 batch_values_precommit),
507                                                                                                 kernel_sz_values_precommit),
508                                                                                                 framework::dataset::make("depth_multiplier", 2)),
509                                                                                                 dilation_values),
510                                                                                                 stride_values),
511                                                                                                 padding_valid_values),
512                                                                                                 framework::dataset::make("DataType", DataType::F16)),
513                                                                                                 data_layout_values),
514                                                                                                 act_values),
515                                                                                                 framework::dataset::make("N0", {2})),
516                                                                                                 framework::dataset::make("ExportToCLImage", false)))
517 {
518     // Validate output
519     validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
520 }
521 
522 TEST_SUITE(ExportWeightsToCLImage)
523 FIXTURE_DATA_TEST_CASE_NEW(RunSmall, CLDepthwiseConvolutionLayerNativeFixture<half>, framework::DatasetMode::ALL,
524                 combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(combine(
525                                                                                                 framework::dataset::make("width", { 33U } ),
526                                                                                                 height_values_precommit),
527                                                                                                 channel_values_precommit),
528                                                                                                 batch_values_precommit),
529                                                                                                 kernel_sz_values_precommit),
530                                                                                                 framework::dataset::make("depth_multiplier", 4)),
531                                                                                                 dilation_values),
532                                                                                                 stride_values),
533                                                                                                 padding_valid_values),
534                                                                                                 framework::dataset::make("DataType", DataType::F16)),
535                                                                                                 data_layout_values),
536                                                                                                 act_values),
537                                                                                                 framework::dataset::make("N0", {4})),
538                                                                                                 framework::dataset::make("ExportToCLImage", true)))
539 {
540    // Validate output
541     if(_validate_output)
542     {
543         // Validate output
544         validate(CLAccessor(_target), _reference, rel_tolerance_f16, 0.f, abs_tolerance_f16);
545     }
546     else
547     {
548         ARM_COMPUTE_TEST_INFO("cl_khr_image2d_from_buffer not supported. TEST skipped");
549         framework::ARM_COMPUTE_PRINT_INFO();
550     }
551 }
552 TEST_SUITE_END() // ExportWeightsToCLImage
553 TEST_SUITE_END() // DepthMultiplierMultipleOfOutputChannels
554 TEST_SUITE_END() // FP16
555 TEST_SUITE_END() // Float
556 TEST_SUITE_END() // DepthMultiplier
557 TEST_SUITE_END() // DepthwiseConvolutionLayerNative
558 TEST_SUITE_END() // CL
559 } // namespace validation
560 } // namespace test
561 } // namespace arm_compute
562