1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include <backendsCommon/test/EndToEndTestImpl.hpp>
7
8 #include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
9 #include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
10 #include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
11 #include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
12 #include <backendsCommon/test/DepthToSpaceEndToEndTestImpl.hpp>
13 #include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
14 #include <backendsCommon/test/DetectionPostProcessEndToEndTestImpl.hpp>
15 #include <backendsCommon/test/ElementwiseUnaryEndToEndTestImpl.hpp>
16 #include <backendsCommon/test/FillEndToEndTestImpl.hpp>
17 #include <backendsCommon/test/InstanceNormalizationEndToEndTestImpl.hpp>
18 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
19 #include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
20 #include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
21 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
22 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
23 #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
24
25 #include <boost/test/unit_test.hpp>
26
27 BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
28
29 std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
30
31 // Abs
BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)32 BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
33 {
34 std::vector<float> expectedOutput =
35 {
36 1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
37 3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
38 };
39
40 ElementwiseUnarySimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
41 UnaryOperation::Abs,
42 expectedOutput);
43 }
44
45 // Constant
BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)46 BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
47 {
48 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
49 }
50
51 #if defined(ARMNNREF_ENABLED)
52
53 // This test unit needs the reference backend, it's not available if the reference backend is not built
54
BOOST_AUTO_TEST_CASE(FallbackToCpuRef)55 BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
56 {
57 using namespace armnn;
58
59 // Create runtime in which test will run and allow fallback to CpuRef.
60 IRuntime::CreationOptions options;
61 IRuntimePtr runtime(IRuntime::Create(options));
62
63 // Builds up the structure of the network.
64 INetworkPtr net(INetwork::Create());
65
66 IConnectableLayer* input = net->AddInputLayer(0);
67
68 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
69 NormalizationDescriptor descriptor;
70 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
71
72 IConnectableLayer* output = net->AddOutputLayer(0);
73
74 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
75 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
76
77 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
78 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
79
80 // optimize the network
81 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
82 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
83
84 // Load it into the runtime. It should pass.
85 NetworkId netId;
86 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
87 }
88
89 #endif
90
BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)91 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
92 {
93 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
94 0, 0, 0, 0, 0, 0, 0, 0 });
95
96 ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
97 ComparisonOperation::Greater,
98 expectedOutput);
99 }
100
BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)101 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
102 {
103 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
104 0, 0, 0, 0, 0, 0, 0, 0 });
105
106 ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
107 ComparisonOperation::Greater,
108 expectedOutput);
109 }
110
BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)111 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
112 {
113 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
114 1, 1, 1, 1, 1, 1 });
115
116 ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
117 ComparisonOperation::Greater,
118 expectedOutput);
119 }
120
BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)121 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
122 {
123 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
124 1, 1, 1, 1, 1, 1 });
125
126 ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
127 ComparisonOperation::Greater,
128 expectedOutput);
129 }
130
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)131 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
132 {
133 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
134 }
135
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)136 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
137 {
138 ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
139 }
140
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)141 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
142 {
143 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
144 }
145
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)146 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
147 {
148 ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
149 }
150
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)151 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
152 {
153 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
154 }
155
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)156 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
157 {
158 ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
159 }
160
161 // DepthToSpace
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)162 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
163 {
164 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
165 }
166
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)167 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
168 {
169 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
170 }
171
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)172 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
173 {
174 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
175 }
176
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)177 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
178 {
179 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
180 }
181
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)182 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
183 {
184 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
185 }
186
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)187 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
188 {
189 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
190 }
191
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)192 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
193 {
194 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
195 }
196
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)197 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
198 {
199 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
200 }
201
202 // Dequantize
BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)203 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
204 {
205 DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
206 }
207
BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)208 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
209 {
210 DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
211 }
212
BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)213 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)
214 {
215 EluEndToEndTest<armnn::DataType::Float32>(defaultBackends);
216 }
217
BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)218 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)
219 {
220 EluEndToEndTest<armnn::DataType::Float16>(defaultBackends);
221 }
222
223 // HardSwish
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)224 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)
225 {
226 HardSwishEndToEndTest<armnn::DataType::Float32>(defaultBackends);
227 }
228
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)229 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)
230 {
231 HardSwishEndToEndTest<armnn::DataType::Float16>(defaultBackends);
232 }
233
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)234 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)
235 {
236 HardSwishEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
237 }
238
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)239 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)
240 {
241 HardSwishEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
242 }
243
BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)244 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
245 {
246 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
247 }
248
BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)249 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
250 {
251 PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
252 }
253
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)254 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)
255 {
256 SpaceToDepthNhwcEndToEndTest1(defaultBackends);
257 }
258
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)259 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)
260 {
261 SpaceToDepthNchwEndToEndTest1(defaultBackends);
262 }
263
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)264 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)
265 {
266 SpaceToDepthNhwcEndToEndTest2(defaultBackends);
267 }
268
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)269 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)
270 {
271 SpaceToDepthNchwEndToEndTest2(defaultBackends);
272 }
273
BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)274 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
275 {
276 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
277 }
278
BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)279 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
280 {
281 Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
282 }
283
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)284 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
285 {
286 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
287 }
288
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)289 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
290 {
291 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
292 }
293
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)294 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
295 {
296 Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
297 }
298
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)299 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
300 {
301 Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
302 }
303
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)304 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
305 {
306 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
307 }
308
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)309 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
310 {
311 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
312 }
313
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)314 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
315 {
316 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
317 }
318
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)319 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
320 {
321 Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
322 }
323
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)324 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
325 {
326 Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
327 }
328
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)329 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
330 {
331 Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
332 }
333
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)334 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
335 {
336 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
337 }
338
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)339 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
340 {
341 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
342 }
343
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)344 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
345 {
346 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
347 }
348
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)349 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
350 {
351 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
352 }
353
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)354 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
355 {
356 Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
357 }
358
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)359 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
360 {
361 Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
362 }
363
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)364 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
365 {
366 Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
367 }
368
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)369 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
370 {
371 Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
372 }
373
BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)374 BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
375 {
376 QuantizedLstmEndToEnd(defaultBackends);
377 }
378
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)379 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
380 {
381 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
382 defaultBackends, armnn::DataLayout::NCHW);
383 }
384
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)385 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
386 {
387 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
388 defaultBackends, armnn::DataLayout::NCHW);
389 }
390
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)391 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
392 {
393 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
394 defaultBackends, armnn::DataLayout::NHWC);
395 }
396
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)397 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
398 {
399 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
400 defaultBackends, armnn::DataLayout::NHWC);
401 }
402
BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)403 BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)
404 {
405 ImportNonAlignedInputPointerTest(defaultBackends);
406 }
407
BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)408 BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)
409 {
410 ExportNonAlignedOutputPointerTest(defaultBackends);
411 }
412
BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest)413 BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest)
414 {
415 ImportAlignedPointerTest(defaultBackends);
416 }
417
BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload)418 BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload)
419 {
420 ImportOnlyWorkload(defaultBackends);
421 }
422
BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload)423 BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload)
424 {
425 ExportOnlyWorkload(defaultBackends);
426 }
427
BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload)428 BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload)
429 {
430 ImportAndExportWorkload(defaultBackends);
431 }
432
BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest)433 BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest)
434 {
435 ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
436 }
437
438 // InstanceNormalization
BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)439 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)
440 {
441 InstanceNormalizationNchwEndToEndTest1(defaultBackends);
442 }
443
BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)444 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)
445 {
446 InstanceNormalizationNchwEndToEndTest2(defaultBackends);
447 }
448
449 // Fill
BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)450 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)
451 {
452 FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
453 }
454
BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)455 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
456 {
457 FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
458 }
459
BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)460 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
461 {
462 FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
463 }
464
465 // ArgMinMax
BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)466 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)
467 {
468 ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
469 }
470
BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)471 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)
472 {
473 ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
474 }
475
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)476 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)
477 {
478 ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
479 }
480
BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)481 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)
482 {
483 ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
484 }
485
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)486 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)
487 {
488 ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
489 }
490
BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)491 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)
492 {
493 ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
494 }
495
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)496 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)
497 {
498 ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
499 }
500
BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)501 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)
502 {
503 ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
504 }
505
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)506 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)
507 {
508 ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
509 }
510
BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)511 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)
512 {
513 ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
514 }
515
BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)516 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)
517 {
518 ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
519 }
520
BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)521 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)
522 {
523 ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
524 }
525
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)526 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)
527 {
528 ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
529 }
530
BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)531 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)
532 {
533 ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
534 }
535
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)536 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)
537 {
538 ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
539 }
540
BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)541 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)
542 {
543 ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
544 }
545
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)546 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)
547 {
548 ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
549 }
550
BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)551 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)
552 {
553 ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
554 }
555
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)556 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)
557 {
558 ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
559 }
560
BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)561 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)
562 {
563 ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
564 }
565
BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)566 BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)
567 {
568 StridedSliceInvalidSliceEndToEndTest(defaultBackends);
569 }
570
571 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsTest, * boost::unit_test::disabled())
572 {
573 std::vector<float> boxEncodings({
574 0.0f, 0.0f, 0.0f, 0.0f,
575 0.0f, 1.0f, 0.0f, 0.0f,
576 0.0f, -1.0f, 0.0f, 0.0f,
577 0.0f, 0.0f, 0.0f, 0.0f,
578 0.0f, 1.0f, 0.0f, 0.0f,
579 0.0f, 0.0f, 0.0f, 0.0f
580 });
581 std::vector<float> scores({
582 0.0f, 0.9f, 0.8f,
583 0.0f, 0.75f, 0.72f,
584 0.0f, 0.6f, 0.5f,
585 0.0f, 0.93f, 0.95f,
586 0.0f, 0.5f, 0.4f,
587 0.0f, 0.3f, 0.2f
588 });
589 std::vector<float> anchors({
590 0.5f, 0.5f, 1.0f, 1.0f,
591 0.5f, 0.5f, 1.0f, 1.0f,
592 0.5f, 0.5f, 1.0f, 1.0f,
593 0.5f, 10.5f, 1.0f, 1.0f,
594 0.5f, 10.5f, 1.0f, 1.0f,
595 0.5f, 100.5f, 1.0f, 1.0f
596 });
597 DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
598 }
599
QuantizeData(uint8_t * quant,const float * dequant,const TensorInfo & info)600 inline void QuantizeData(uint8_t* quant, const float* dequant, const TensorInfo& info)
601 {
602 for (size_t i = 0; i < info.GetNumElements(); i++)
603 {
604 quant[i] = armnn::Quantize<uint8_t>(dequant[i], info.GetQuantizationScale(), info.GetQuantizationOffset());
605 }
606 }
607
608 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsUint8Test, * boost::unit_test::disabled())
609 {
610 armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
611 armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
612 armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
613
614 boxEncodingsInfo.SetQuantizationScale(1.0f);
615 boxEncodingsInfo.SetQuantizationOffset(1);
616 scoresInfo.SetQuantizationScale(0.01f);
617 scoresInfo.SetQuantizationOffset(0);
618 anchorsInfo.SetQuantizationScale(0.5f);
619 anchorsInfo.SetQuantizationOffset(0);
620
621 std::vector<float> boxEncodings({
622 0.0f, 0.0f, 0.0f, 0.0f,
623 0.0f, 1.0f, 0.0f, 0.0f,
624 0.0f, -1.0f, 0.0f, 0.0f,
625 0.0f, 0.0f, 0.0f, 0.0f,
626 0.0f, 1.0f, 0.0f, 0.0f,
627 0.0f, 0.0f, 0.0f, 0.0f
628 });
629 std::vector<float> scores({
630 0.0f, 0.9f, 0.8f,
631 0.0f, 0.75f, 0.72f,
632 0.0f, 0.6f, 0.5f,
633 0.0f, 0.93f, 0.95f,
634 0.0f, 0.5f, 0.4f,
635 0.0f, 0.3f, 0.2f
636 });
637 std::vector<float> anchors({
638 0.5f, 0.5f, 1.0f, 1.0f,
639 0.5f, 0.5f, 1.0f, 1.0f,
640 0.5f, 0.5f, 1.0f, 1.0f,
641 0.5f, 10.5f, 1.0f, 1.0f,
642 0.5f, 10.5f, 1.0f, 1.0f,
643 0.5f, 100.5f, 1.0f, 1.0f
644 });
645
646 std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
647 std::vector<uint8_t> qScores(scores.size(), 0);
648 std::vector<uint8_t> qAnchors(anchors.size(), 0);
649 QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
650 QuantizeData(qScores.data(), scores.data(), scoresInfo);
651 QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
652 DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
653 qScores, qAnchors,
654 1.0f, 1, 0.01f, 0, 0.5f, 0);
655 }
656
657 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsTest, * boost::unit_test::disabled())
658 {
659 std::vector<float> boxEncodings({
660 0.0f, 0.0f, 0.0f, 0.0f,
661 0.0f, 1.0f, 0.0f, 0.0f,
662 0.0f, -1.0f, 0.0f, 0.0f,
663 0.0f, 0.0f, 0.0f, 0.0f,
664 0.0f, 1.0f, 0.0f, 0.0f,
665 0.0f, 0.0f, 0.0f, 0.0f
666 });
667 std::vector<float> scores({
668 0.0f, 0.9f, 0.8f,
669 0.0f, 0.75f, 0.72f,
670 0.0f, 0.6f, 0.5f,
671 0.0f, 0.93f, 0.95f,
672 0.0f, 0.5f, 0.4f,
673 0.0f, 0.3f, 0.2f
674 });
675 std::vector<float> anchors({
676 0.5f, 0.5f, 1.0f, 1.0f,
677 0.5f, 0.5f, 1.0f, 1.0f,
678 0.5f, 0.5f, 1.0f, 1.0f,
679 0.5f, 10.5f, 1.0f, 1.0f,
680 0.5f, 10.5f, 1.0f, 1.0f,
681 0.5f, 100.5f, 1.0f, 1.0f
682 });
683 DetectionPostProcessFastNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
684 }
685
686 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsUint8Test, * boost::unit_test::disabled())
687 {
688 armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
689 armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
690 armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
691
692 boxEncodingsInfo.SetQuantizationScale(1.0f);
693 boxEncodingsInfo.SetQuantizationOffset(1);
694 scoresInfo.SetQuantizationScale(0.01f);
695 scoresInfo.SetQuantizationOffset(0);
696 anchorsInfo.SetQuantizationScale(0.5f);
697 anchorsInfo.SetQuantizationOffset(0);
698
699 std::vector<float> boxEncodings({
700 0.0f, 0.0f, 0.0f, 0.0f,
701 0.0f, 1.0f, 0.0f, 0.0f,
702 0.0f, -1.0f, 0.0f, 0.0f,
703 0.0f, 0.0f, 0.0f, 0.0f,
704 0.0f, 1.0f, 0.0f, 0.0f,
705 0.0f, 0.0f, 0.0f, 0.0f
706 });
707 std::vector<float> scores({
708 0.0f, 0.9f, 0.8f,
709 0.0f, 0.75f, 0.72f,
710 0.0f, 0.6f, 0.5f,
711 0.0f, 0.93f, 0.95f,
712 0.0f, 0.5f, 0.4f,
713 0.0f, 0.3f, 0.2f
714 });
715 std::vector<float> anchors({
716 0.5f, 0.5f, 1.0f, 1.0f,
717 0.5f, 0.5f, 1.0f, 1.0f,
718 0.5f, 0.5f, 1.0f, 1.0f,
719 0.5f, 10.5f, 1.0f, 1.0f,
720 0.5f, 10.5f, 1.0f, 1.0f,
721 0.5f, 100.5f, 1.0f, 1.0f
722 });
723
724 std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
725 std::vector<uint8_t> qScores(scores.size(), 0);
726 std::vector<uint8_t> qAnchors(anchors.size(), 0);
727 QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
728 QuantizeData(qScores.data(), scores.data(), scoresInfo);
729 QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
730 DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
731 qScores, qAnchors,
732 1.0f, 1, 0.01f, 0, 0.5f, 0);
733 }
734
BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)735 BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)
736 {
737 QLstmEndToEnd(defaultBackends);
738 }
739
740 BOOST_AUTO_TEST_SUITE_END()
741