blob: 33c377f443bad480c6f212b346569037060ed219 [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
kevmay01eed85922019-01-28 08:37:25 +00008#include <backendsCommon/test/ArithmeticTestImpl.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01009#include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +010010#include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
Nikhil Raj1c8adac2019-07-22 11:27:29 +010011#include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
Francis Murtaghb3fc2522019-08-09 13:20:50 +010012#include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010013#include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +010014#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Sadik Armagan581742d2019-08-12 14:11:37 +010015#include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010016
17#include <boost/test/unit_test.hpp>
18
19BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
20
narpra01b9546cf2018-11-20 15:21:28 +000021std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
22
Aron Virginas-Tar70104002018-10-24 15:33:28 +010023BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
24{
narpra01b9546cf2018-11-20 15:21:28 +000025 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010026}
27
Matteo Martincighdb16dd32019-08-27 16:41:11 +010028#if defined(ARMNNREF_ENABLED)
Matteo Martincighe67edb22019-08-14 14:05:46 +010029
30// This test unit needs the reference backend, it's not available if the reference backend is not built
31
Aron Virginas-Tar70104002018-10-24 15:33:28 +010032BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
33{
34 using namespace armnn;
35
36 // Create runtime in which test will run and allow fallback to CpuRef.
37 IRuntime::CreationOptions options;
38 IRuntimePtr runtime(IRuntime::Create(options));
39
40 // Builds up the structure of the network.
41 INetworkPtr net(INetwork::Create());
42
43 IConnectableLayer* input = net->AddInputLayer(0);
44
45 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
46 NormalizationDescriptor descriptor;
47 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
48
49 IConnectableLayer* output = net->AddOutputLayer(0);
50
51 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
52 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
53
54 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
55 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
56
57 // optimize the network
58 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
59 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
60
61 // Load it into the runtime. It should pass.
62 NetworkId netId;
63 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
64}
65
Matteo Martincighe67edb22019-08-14 14:05:46 +010066#endif
67
kevmay01eed85922019-01-28 08:37:25 +000068BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
69{
70 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
71 0, 0, 0, 0, 0, 0, 0, 0 });
72
73 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
74 LayerType::Greater,
75 expectedOutput);
76}
77
78BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
79{
80 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
81 0, 0, 0, 0, 0, 0, 0, 0 });
82
83 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
84 LayerType::Greater,
85 expectedOutput);
86}
87
88BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
89{
90 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
91 1, 1, 1, 1, 1, 1 });
92
93 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
94 LayerType::Greater,
95 expectedOutput);
96}
97
98BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
99{
100 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
101 1, 1, 1, 1, 1, 1 });
102
103 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
104 LayerType::Greater,
105 expectedOutput);
106}
107
Jim Flynne242f2d2019-05-22 14:24:13 +0100108BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +0000109{
Jim Flynne242f2d2019-05-22 14:24:13 +0100110 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000111}
112
Jim Flynne242f2d2019-05-22 14:24:13 +0100113BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000114{
Jim Flynne242f2d2019-05-22 14:24:13 +0100115 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000116}
117
Jim Flynne242f2d2019-05-22 14:24:13 +0100118BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000119{
Jim Flynne242f2d2019-05-22 14:24:13 +0100120 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000121}
122
Jim Flynne242f2d2019-05-22 14:24:13 +0100123BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000124{
Jim Flynne242f2d2019-05-22 14:24:13 +0100125 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000126}
127
Jim Flynne242f2d2019-05-22 14:24:13 +0100128BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000129{
Jim Flynne242f2d2019-05-22 14:24:13 +0100130 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000131}
132
Jim Flynne242f2d2019-05-22 14:24:13 +0100133BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000134{
Jim Flynne242f2d2019-05-22 14:24:13 +0100135 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000136}
137
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100138BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
139{
140 DequantizeEndToEndSimple<armnn::DataType::QuantisedAsymm8>(defaultBackends);
141}
142
143BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
144{
145 DequantizeEndToEndOffset<armnn::DataType::QuantisedAsymm8>(defaultBackends);
146}
147
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100148BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
149{
150 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
151}
152
153BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
154{
155 PreluEndToEndPositiveTest<armnn::DataType::QuantisedAsymm8>(defaultBackends);
156}
157
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100158BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest1)
159{
160 SpaceToDepthNHWCEndToEndTest1(defaultBackends);
161}
162
163BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest1)
164{
165 SpaceToDepthNCHWEndToEndTest1(defaultBackends);
166}
167
168BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest2)
169{
170 SpaceToDepthNHWCEndToEndTest2(defaultBackends);
171}
172
173BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest2)
174{
175 SpaceToDepthNCHWEndToEndTest2(defaultBackends);
176}
177
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100178BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100179{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100180 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100181}
182
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100183BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100184{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100185 Splitter1dEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100186}
187
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100188BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100189{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100190 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100191}
192
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100193BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100194{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100195 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100196}
197
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100198BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100199{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100200 Splitter2dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100201}
202
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100203BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100204{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100205 Splitter2dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100206}
207
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100208BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100209{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100210 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100211}
212
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100213BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100214{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100215 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
216}
217
218BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
219{
220 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
221}
222
223BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
224{
225 Splitter3dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
226}
227
228BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
229{
230 Splitter3dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
231}
232
233BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
234{
235 Splitter3dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
236}
237
238BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
239{
240 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
241}
242
243BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
244{
245 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
246}
247
248BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
249{
250 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
251}
252
253BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
254{
255 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
256}
257
258BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
259{
260 Splitter4dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
261}
262
263BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
264{
265 Splitter4dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
266}
267
268BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
269{
270 Splitter4dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
271}
272
273BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
274{
275 Splitter4dDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100276}
277
Francis Murtaghb3fc2522019-08-09 13:20:50 +0100278BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
279{
280 QuantizedLstmEndToEnd(defaultBackends);
281}
282
Sadik Armagan581742d2019-08-12 14:11:37 +0100283BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
284{
285 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
286 defaultBackends, armnn::DataLayout::NCHW);
287}
288
289BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
290{
291 TransposeConvolution2dEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
292 defaultBackends, armnn::DataLayout::NCHW);
293}
294
295BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
296{
297 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
298 defaultBackends, armnn::DataLayout::NHWC);
299}
300
301BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
302{
303 TransposeConvolution2dEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
304 defaultBackends, armnn::DataLayout::NHWC);
305}
306
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100307BOOST_AUTO_TEST_SUITE_END()