blob: 29ff60a48a21de7a14c254e71adb6f3921bd5a59 [file] [log] [blame]
John Richardson32af1f82018-06-05 12:47:20 +01001/*
2 * Copyright (c) 2018 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/Types.h"
25#include "arm_compute/runtime//Tensor.h"
26#include "arm_compute/runtime/NEON/functions/NEConvolution.h"
27#include "tests/NEON/Accessor.h"
28#include "tests/benchmark/fixtures/ConvolutionFixture.h"
29#include "tests/datasets/BorderModeDataset.h"
30#include "tests/datasets/ShapeDatasets.h"
31#include "tests/framework/Macros.h"
32#include "tests/framework/datasets/Datasets.h"
33#include "utils/TypePrinter.h"
34
35namespace arm_compute
36{
37namespace test
38{
39namespace benchmark
40{
41namespace
42{
43// *INDENT-OFF*
44// clang-format off
45
46#define CONVOLUTION_SQUARE_DATA_TEST_CASE(TEST_NAME, MODE, SHAPES, DT, FILTER_SIZE) \
47 REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, NEConvolutionFixture, framework::DatasetMode::MODE, \
48 combine(combine(combine( \
49 datasets::SHAPES, \
50 framework::dataset::make("DataType", DataType::DT)), \
51 datasets::BorderModes()), \
52 framework::dataset::make("FilterSize", { FILTER_SIZE })));
53
54#define CONVOLUTION_RECTANGLE_DATA_TEST_CASE(TEST_NAME, MODE, SHAPES, DT) \
55 REGISTER_FIXTURE_DATA_TEST_CASE(TEST_NAME, NEConvolutionFixture, framework::DatasetMode::MODE, \
56 combine(combine(combine(combine( \
57 datasets::SHAPES, \
58 framework::dataset::make("DataType", DataType::DT)), \
59 datasets::BorderModes()), \
60 framework::dataset::make("FilterSize", { 3, 5, 7, 9 })), \
61 framework::dataset::make("FilterSize", { 3, 5, 7, 9 })));
62
63#define CONVOLUTION_SEPARABLE_DATA_TEST_CASE(TEST_NAME, MODE, SHAPES, DT, FILTER_SIZE) \
64 CONVOLUTION_SQUARE_DATA_TEST_CASE(TEST_NAME, MODE, SHAPES, DT, FILTER_SIZE)
65
66// clang-format on
67// *INDENT-ON*
68
69} // namespace
70
71TEST_SUITE(NEON)
72TEST_SUITE(CustomConvolution)
73
74TEST_SUITE(Square3x3)
75
76using NEConvolutionFixture = ConvolutionSquareFixture<Tensor, NEConvolution3x3, Accessor>;
77
78TEST_SUITE(U8)
79CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 3)
80CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 3)
81TEST_SUITE_END() // U8
82
83TEST_SUITE(S16)
84CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 3)
85CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 3)
86TEST_SUITE_END() // S16
87
88TEST_SUITE_END() // Square3x3
89
90TEST_SUITE(Square5x5)
91
92using NEConvolutionFixture = ConvolutionSquareFixture<Tensor, NEConvolution5x5, Accessor>;
93
94TEST_SUITE(U8)
95CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 5)
96CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 5)
97TEST_SUITE_END() // U8
98
99TEST_SUITE(S16)
100CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 5)
101CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 5)
102TEST_SUITE_END() // S16
103
104TEST_SUITE_END() // Square5x5
105
106TEST_SUITE(Square7x7)
107
108using NEConvolutionFixture = ConvolutionSquareFixture<Tensor, NEConvolution7x7, Accessor>;
109
110TEST_SUITE(U8)
111CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 7)
112CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 7)
113TEST_SUITE_END() // U8
114
115TEST_SUITE(S16)
116CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 7)
117CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 7)
118TEST_SUITE_END() // S16
119
120TEST_SUITE_END() // Square7x7
121
122TEST_SUITE(Square9x9)
123
124using NEConvolutionFixture = ConvolutionSquareFixture<Tensor, NEConvolution9x9, Accessor>;
125
126TEST_SUITE(U8)
127CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 9)
128CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 9)
129TEST_SUITE_END() // U8
130
131TEST_SUITE(S16)
132CONVOLUTION_SQUARE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 9)
133CONVOLUTION_SQUARE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 9)
134TEST_SUITE_END() // S16
135
136TEST_SUITE_END() // Square9x9
137
138TEST_SUITE(Rectangle)
139
140using NEConvolutionFixture = ConvolutionRectangleFixture<Tensor, NEConvolutionRectangle, Accessor>;
141
142TEST_SUITE(U8)
143CONVOLUTION_RECTANGLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8)
144CONVOLUTION_RECTANGLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8)
145TEST_SUITE_END() // U8
146
147TEST_SUITE(S16)
148CONVOLUTION_RECTANGLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16)
149CONVOLUTION_RECTANGLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16)
150TEST_SUITE_END() // S16
151
152TEST_SUITE_END() // Rectangle
153
154TEST_SUITE(Separable5x5)
155
156using NEConvolutionFixture = ConvolutionSeperableFixture<Tensor, NEConvolution5x5, Accessor>;
157
158TEST_SUITE(U8)
159CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 5)
160CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 5)
161TEST_SUITE_END() // U8
162
163TEST_SUITE(S16)
164CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 5)
165CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 5)
166TEST_SUITE_END() // S16
167
168TEST_SUITE_END() // Separable5x5
169
170TEST_SUITE(Separable7x7)
171
172using NEConvolutionFixture = ConvolutionSeperableFixture<Tensor, NEConvolution7x7, Accessor>;
173
174TEST_SUITE(U8)
175CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 7)
176CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 7)
177TEST_SUITE_END() // U8
178
179TEST_SUITE(S16)
180CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 7)
181CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 7)
182TEST_SUITE_END() // S16
183
184TEST_SUITE_END() // Separable7x7
185
186TEST_SUITE(Separable9x9)
187
188using NEConvolutionFixture = ConvolutionSeperableFixture<Tensor, NEConvolution9x9, Accessor>;
189
190TEST_SUITE(U8)
191CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), U8, 9)
192CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), U8, 9)
193TEST_SUITE_END() // U8
194
195TEST_SUITE(S16)
196CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunSmall, PRECOMMIT, SmallShapes(), S16, 9)
197CONVOLUTION_SEPARABLE_DATA_TEST_CASE(RunLarge, NIGHTLY, LargeShapes(), S16, 9)
198TEST_SUITE_END() // S16
199
200TEST_SUITE_END() // Separable9x9
201
202TEST_SUITE_END() // CustomConvolution
203TEST_SUITE_END() // NEON
204} // namespace benchmark
205} // namespace test
206} // namespace arm_compute