blob: dc0a609ff7ca5e9248ffc0598ab0f217317b1428 [file] [log] [blame]
Aron Virginas-Tar70104002018-10-24 15:33:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00006#include <backendsCommon/test/EndToEndTestImpl.hpp>
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +01007
Jan Eilersbca73e12020-03-11 12:52:46 +00008#include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
James Conroy68a4dbc2019-11-13 15:35:59 +00009#include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010010#include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010011#include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +010012#include <backendsCommon/test/DepthToSpaceEndToEndTestImpl.hpp>
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +010013#include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
Derek Lamberti6a5e5e82019-12-05 14:41:20 +000014#include <backendsCommon/test/DetectionPostProcessEndToEndTestImpl.hpp>
josh minor4a3c6102020-01-06 16:40:46 -060015#include <backendsCommon/test/ElementwiseUnaryEndToEndTestImpl.hpp>
Teresa Charlin44088502020-07-27 11:27:19 +010016#include <backendsCommon/test/FillEndToEndTestImpl.hpp>
Sadik Armagan062e0e92019-10-14 10:31:43 +010017#include <backendsCommon/test/InstanceNormalizationEndToEndTestImpl.hpp>
Nikhil Raj1c8adac2019-07-22 11:27:29 +010018#include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
James Conroy0800bf52020-05-14 12:46:44 +010019#include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
Francis Murtaghb3fc2522019-08-09 13:20:50 +010020#include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010021#include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +010022#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Sadik Armagan581742d2019-08-12 14:11:37 +010023#include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010024
25#include <boost/test/unit_test.hpp>
26
27BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
28
narpra01b9546cf2018-11-20 15:21:28 +000029std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
30
Aron Virginas-Tar914e4db2019-09-09 13:36:45 +010031// Abs
32BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
33{
josh minor4a3c6102020-01-06 16:40:46 -060034 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);
Aron Virginas-Tar914e4db2019-09-09 13:36:45 +010043}
44
45// Constant
Aron Virginas-Tar70104002018-10-24 15:33:28 +010046BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
47{
narpra01b9546cf2018-11-20 15:21:28 +000048 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010049}
50
Matteo Martincighdb16dd32019-08-27 16:41:11 +010051#if defined(ARMNNREF_ENABLED)
Matteo Martincighe67edb22019-08-14 14:05:46 +010052
53// This test unit needs the reference backend, it's not available if the reference backend is not built
54
Aron Virginas-Tar70104002018-10-24 15:33:28 +010055BOOST_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
Matteo Martincighe67edb22019-08-14 14:05:46 +010089#endif
90
kevmay01eed85922019-01-28 08:37:25 +000091BOOST_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
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010096 ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
97 ComparisonOperation::Greater,
98 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +000099}
100
101BOOST_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
Derek Lambertif90c56d2020-01-10 17:14:08 +0000106 ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100107 ComparisonOperation::Greater,
108 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +0000109}
110
111BOOST_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
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100116 ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
117 ComparisonOperation::Greater,
118 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +0000119}
120
121BOOST_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
Derek Lambertif90c56d2020-01-10 17:14:08 +0000126 ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100127 ComparisonOperation::Greater,
128 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +0000129}
130
Jim Flynne242f2d2019-05-22 14:24:13 +0100131BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +0000132{
Jim Flynne242f2d2019-05-22 14:24:13 +0100133 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000134}
135
Jim Flynne242f2d2019-05-22 14:24:13 +0100136BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000137{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000138 ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000139}
140
Jim Flynne242f2d2019-05-22 14:24:13 +0100141BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000142{
Jim Flynne242f2d2019-05-22 14:24:13 +0100143 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000144}
145
Jim Flynne242f2d2019-05-22 14:24:13 +0100146BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000147{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000148 ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000149}
150
Jim Flynne242f2d2019-05-22 14:24:13 +0100151BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000152{
Jim Flynne242f2d2019-05-22 14:24:13 +0100153 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000154}
155
Jim Flynne242f2d2019-05-22 14:24:13 +0100156BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000157{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000158 ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000159}
160
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100161// DepthToSpace
162BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
163{
164 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
165}
166
167BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
168{
169 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
170}
171
172BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
173{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000174 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100175}
176
177BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
178{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000179 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100180}
181
182BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
183{
184 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
185}
186
187BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
188{
189 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
190}
191
192BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
193{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000194 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100195}
196
197BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
198{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000199 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100200}
201
202// Dequantize
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100203BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
204{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000205 DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100206}
207
208BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
209{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000210 DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100211}
212
Jan Eilersbca73e12020-03-11 12:52:46 +0000213BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)
214{
215 EluEndToEndTest<armnn::DataType::Float32>(defaultBackends);
216}
217
218BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)
219{
220 EluEndToEndTest<armnn::DataType::Float16>(defaultBackends);
221}
222
Jan Eilersa83af7b2020-03-18 15:58:11 +0000223// HardSwish
224BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)
225{
226 HardSwishEndToEndTest<armnn::DataType::Float32>(defaultBackends);
227}
228
229BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)
230{
231 HardSwishEndToEndTest<armnn::DataType::Float16>(defaultBackends);
232}
233
234BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)
235{
236 HardSwishEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
237}
238
239BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)
240{
241 HardSwishEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
242}
243
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100244BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
245{
246 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
247}
248
249BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
250{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000251 PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100252}
253
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100254BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100255{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100256 SpaceToDepthNhwcEndToEndTest1(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100257}
258
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100259BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100260{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100261 SpaceToDepthNchwEndToEndTest1(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100262}
263
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100264BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100265{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100266 SpaceToDepthNhwcEndToEndTest2(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100267}
268
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100269BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100270{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100271 SpaceToDepthNchwEndToEndTest2(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100272}
273
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100274BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100275{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100276 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100277}
278
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100279BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100280{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000281 Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100282}
283
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100284BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100285{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100286 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100287}
288
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100289BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100290{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100291 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100292}
293
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100294BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100295{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000296 Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100297}
298
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100299BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100300{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000301 Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100302}
303
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100304BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100305{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100306 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100307}
308
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100309BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100310{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100311 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
312}
313
314BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
315{
316 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
317}
318
319BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
320{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000321 Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100322}
323
324BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
325{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000326 Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100327}
328
329BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
330{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000331 Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100332}
333
334BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
335{
336 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
337}
338
339BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
340{
341 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
342}
343
344BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
345{
346 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
347}
348
349BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
350{
351 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
352}
353
354BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
355{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000356 Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100357}
358
359BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
360{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000361 Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100362}
363
364BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
365{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000366 Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100367}
368
369BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
370{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000371 Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100372}
373
Francis Murtaghb3fc2522019-08-09 13:20:50 +0100374BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
375{
376 QuantizedLstmEndToEnd(defaultBackends);
377}
378
Sadik Armagan581742d2019-08-12 14:11:37 +0100379BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
380{
381 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
382 defaultBackends, armnn::DataLayout::NCHW);
383}
384
385BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
386{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000387 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
Sadik Armagan581742d2019-08-12 14:11:37 +0100388 defaultBackends, armnn::DataLayout::NCHW);
389}
390
391BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
392{
393 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
394 defaultBackends, armnn::DataLayout::NHWC);
395}
396
397BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
398{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000399 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
Sadik Armagan581742d2019-08-12 14:11:37 +0100400 defaultBackends, armnn::DataLayout::NHWC);
401}
402
David Monahan3fb7e102019-08-20 11:25:29 +0100403BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)
404{
405 ImportNonAlignedInputPointerTest(defaultBackends);
406}
407
Ferran Balaguer83239f92019-09-19 11:49:25 +0100408BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)
David Monahan3fb7e102019-08-20 11:25:29 +0100409{
Ferran Balaguer83239f92019-09-19 11:49:25 +0100410 ExportNonAlignedOutputPointerTest(defaultBackends);
411}
412
Narumol Prangnawaratb8d771a2020-08-14 11:51:12 +0100413BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest)
Ferran Balaguer83239f92019-09-19 11:49:25 +0100414{
415 ImportAlignedPointerTest(defaultBackends);
David Monahan3fb7e102019-08-20 11:25:29 +0100416}
417
Narumol Prangnawaratb8d771a2020-08-14 11:51:12 +0100418BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload)
David Monahan3fb7e102019-08-20 11:25:29 +0100419{
Ferran Balaguer83239f92019-09-19 11:49:25 +0100420 ImportOnlyWorkload(defaultBackends);
421}
David Monahan3fb7e102019-08-20 11:25:29 +0100422
Narumol Prangnawaratb8d771a2020-08-14 11:51:12 +0100423BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload)
Ferran Balaguer83239f92019-09-19 11:49:25 +0100424{
425 ExportOnlyWorkload(defaultBackends);
426}
David Monahan3fb7e102019-08-20 11:25:29 +0100427
Narumol Prangnawaratb8d771a2020-08-14 11:51:12 +0100428BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload)
Ferran Balaguer83239f92019-09-19 11:49:25 +0100429{
430 ImportAndExportWorkload(defaultBackends);
431}
David Monahan3fb7e102019-08-20 11:25:29 +0100432
Narumol Prangnawaratb8d771a2020-08-14 11:51:12 +0100433BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest)
Ferran Balaguer83239f92019-09-19 11:49:25 +0100434{
435 ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
David Monahan3fb7e102019-08-20 11:25:29 +0100436}
437
Sadik Armagan062e0e92019-10-14 10:31:43 +0100438// InstanceNormalization
439BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)
440{
441 InstanceNormalizationNchwEndToEndTest1(defaultBackends);
442}
443
444BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)
445{
446 InstanceNormalizationNchwEndToEndTest2(defaultBackends);
447}
448
Teresa Charlin44088502020-07-27 11:27:19 +0100449// Fill
450BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)
451{
452 FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
453}
454
Teresa Charlin4b10fef2020-07-29 09:36:41 +0100455BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
456{
457 FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
458}
459
Teresa Charlin44088502020-07-27 11:27:19 +0100460BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
461{
462 FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
463}
464
James Conroy68a4dbc2019-11-13 15:35:59 +0000465// ArgMinMax
466BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)
467{
468 ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
469}
470
471BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)
472{
473 ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
474}
475
476BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)
477{
478 ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
479}
480
481BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)
482{
483 ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
484}
485
486BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)
487{
488 ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
489}
490
491BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)
492{
493 ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
494}
495
496BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)
497{
498 ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
499}
500
501BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)
502{
503 ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
504}
505
506BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)
507{
508 ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
509}
510
511BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)
512{
513 ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
514}
515
Francis Murtagh52ec3462019-11-19 12:24:19 +0000516BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)
517{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000518 ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000519}
520
521BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)
522{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000523 ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000524}
525
526BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)
527{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000528 ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000529}
530
531BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)
532{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000533 ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000534}
535
536BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)
537{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000538 ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000539}
540
541BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)
542{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000543 ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000544}
545
546BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)
547{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000548 ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000549}
550
551BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)
552{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000553 ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000554}
555
556BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)
557{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000558 ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000559}
560
561BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)
562{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000563 ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000564}
565
David Monahan0a99a142020-03-13 07:52:54 +0000566BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)
567{
568 StridedSliceInvalidSliceEndToEndTest(defaultBackends);
569}
570
James Conroyd9fb6e22020-02-21 16:52:44 +0000571BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsTest, * boost::unit_test::disabled())
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000572{
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
600inline 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
James Conroyd9fb6e22020-02-21 16:52:44 +0000608BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsUint8Test, * boost::unit_test::disabled())
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000609{
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);
Derek Lambertif90c56d2020-01-10 17:14:08 +0000652 DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000653 qScores, qAnchors,
654 1.0f, 1, 0.01f, 0, 0.5f, 0);
655}
656
James Conroyd9fb6e22020-02-21 16:52:44 +0000657BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsTest, * boost::unit_test::disabled())
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000658{
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
James Conroyd9fb6e22020-02-21 16:52:44 +0000686BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsUint8Test, * boost::unit_test::disabled())
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000687{
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);
Derek Lambertif90c56d2020-01-10 17:14:08 +0000730 DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000731 qScores, qAnchors,
732 1.0f, 1, 0.01f, 0, 0.5f, 0);
733}
734
James Conroy0800bf52020-05-14 12:46:44 +0100735BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)
736{
737 QLstmEndToEnd(defaultBackends);
738}
739
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100740BOOST_AUTO_TEST_SUITE_END()