blob: 18af99e81b7f447101aec2fdd9893e342bd12ee3 [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>
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +01009#include <backendsCommon/test/ConcatTestImpl.hpp>
10#include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
Nikhil Raj1c8adac2019-07-22 11:27:29 +010011#include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010012#include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +010013#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010014
15#include <boost/test/unit_test.hpp>
16
17BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
18
narpra01b9546cf2018-11-20 15:21:28 +000019std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
20
Aron Virginas-Tar70104002018-10-24 15:33:28 +010021BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
22{
narpra01b9546cf2018-11-20 15:21:28 +000023 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010024}
25
26BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
27{
28 using namespace armnn;
29
30 // Create runtime in which test will run and allow fallback to CpuRef.
31 IRuntime::CreationOptions options;
32 IRuntimePtr runtime(IRuntime::Create(options));
33
34 // Builds up the structure of the network.
35 INetworkPtr net(INetwork::Create());
36
37 IConnectableLayer* input = net->AddInputLayer(0);
38
39 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
40 NormalizationDescriptor descriptor;
41 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
42
43 IConnectableLayer* output = net->AddOutputLayer(0);
44
45 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
46 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
47
48 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
49 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
50
51 // optimize the network
52 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
53 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
54
55 // Load it into the runtime. It should pass.
56 NetworkId netId;
57 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
58}
59
kevmay01eed85922019-01-28 08:37:25 +000060BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
61{
62 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
63 0, 0, 0, 0, 0, 0, 0, 0 });
64
65 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
66 LayerType::Greater,
67 expectedOutput);
68}
69
70BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
71{
72 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
73 0, 0, 0, 0, 0, 0, 0, 0 });
74
75 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
76 LayerType::Greater,
77 expectedOutput);
78}
79
80BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
81{
82 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
83 1, 1, 1, 1, 1, 1 });
84
85 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
86 LayerType::Greater,
87 expectedOutput);
88}
89
90BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
91{
92 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
93 1, 1, 1, 1, 1, 1 });
94
95 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
96 LayerType::Greater,
97 expectedOutput);
98}
99
Jim Flynne242f2d2019-05-22 14:24:13 +0100100BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +0000101{
Jim Flynne242f2d2019-05-22 14:24:13 +0100102 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000103}
104
Jim Flynne242f2d2019-05-22 14:24:13 +0100105BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000106{
Jim Flynne242f2d2019-05-22 14:24:13 +0100107 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000108}
109
Jim Flynne242f2d2019-05-22 14:24:13 +0100110BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000111{
Jim Flynne242f2d2019-05-22 14:24:13 +0100112 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000113}
114
Jim Flynne242f2d2019-05-22 14:24:13 +0100115BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000116{
Jim Flynne242f2d2019-05-22 14:24:13 +0100117 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000118}
119
Jim Flynne242f2d2019-05-22 14:24:13 +0100120BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000121{
Jim Flynne242f2d2019-05-22 14:24:13 +0100122 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000123}
124
Jim Flynne242f2d2019-05-22 14:24:13 +0100125BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000126{
Jim Flynne242f2d2019-05-22 14:24:13 +0100127 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000128}
129
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100130BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
131{
132 DequantizeEndToEndSimple<armnn::DataType::QuantisedAsymm8>(defaultBackends);
133}
134
135BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
136{
137 DequantizeEndToEndOffset<armnn::DataType::QuantisedAsymm8>(defaultBackends);
138}
139
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100140BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
141{
142 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
143}
144
145BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
146{
147 PreluEndToEndPositiveTest<armnn::DataType::QuantisedAsymm8>(defaultBackends);
148}
149
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100150BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest1)
151{
152 SpaceToDepthNHWCEndToEndTest1(defaultBackends);
153}
154
155BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest1)
156{
157 SpaceToDepthNCHWEndToEndTest1(defaultBackends);
158}
159
160BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest2)
161{
162 SpaceToDepthNHWCEndToEndTest2(defaultBackends);
163}
164
165BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest2)
166{
167 SpaceToDepthNCHWEndToEndTest2(defaultBackends);
168}
169
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100170BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100171{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100172 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100173}
174
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100175BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100176{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100177 Splitter1dEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100178}
179
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100180BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100181{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100182 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100183}
184
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100185BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100186{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100187 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100188}
189
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100190BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100191{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100192 Splitter2dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100193}
194
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100195BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100196{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100197 Splitter2dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100198}
199
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100200BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100201{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100202 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100203}
204
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100205BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100206{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100207 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
208}
209
210BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
211{
212 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
213}
214
215BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
216{
217 Splitter3dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
218}
219
220BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
221{
222 Splitter3dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
223}
224
225BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
226{
227 Splitter3dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
228}
229
230BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
231{
232 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
233}
234
235BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
236{
237 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
238}
239
240BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
241{
242 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
243}
244
245BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
246{
247 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
248}
249
250BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
251{
252 Splitter4dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
253}
254
255BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
256{
257 Splitter4dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
258}
259
260BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
261{
262 Splitter4dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
263}
264
265BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
266{
267 Splitter4dDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100268}
269
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100270BOOST_AUTO_TEST_SUITE_END()