blob: 66cace69089025515f9a44c660aee5ed7e73ce0d [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>
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010011#include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +010012#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010013
14#include <boost/test/unit_test.hpp>
15
16BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
17
narpra01b9546cf2018-11-20 15:21:28 +000018std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
19
Aron Virginas-Tar70104002018-10-24 15:33:28 +010020BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
21{
narpra01b9546cf2018-11-20 15:21:28 +000022 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010023}
24
25BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
26{
27 using namespace armnn;
28
29 // Create runtime in which test will run and allow fallback to CpuRef.
30 IRuntime::CreationOptions options;
31 IRuntimePtr runtime(IRuntime::Create(options));
32
33 // Builds up the structure of the network.
34 INetworkPtr net(INetwork::Create());
35
36 IConnectableLayer* input = net->AddInputLayer(0);
37
38 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
39 NormalizationDescriptor descriptor;
40 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
41
42 IConnectableLayer* output = net->AddOutputLayer(0);
43
44 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
45 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
46
47 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
48 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
49
50 // optimize the network
51 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
52 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
53
54 // Load it into the runtime. It should pass.
55 NetworkId netId;
56 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
57}
58
kevmay01eed85922019-01-28 08:37:25 +000059BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
60{
61 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
62 0, 0, 0, 0, 0, 0, 0, 0 });
63
64 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
65 LayerType::Greater,
66 expectedOutput);
67}
68
69BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
70{
71 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
72 0, 0, 0, 0, 0, 0, 0, 0 });
73
74 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
75 LayerType::Greater,
76 expectedOutput);
77}
78
79BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
80{
81 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
82 1, 1, 1, 1, 1, 1 });
83
84 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
85 LayerType::Greater,
86 expectedOutput);
87}
88
89BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
90{
91 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
92 1, 1, 1, 1, 1, 1 });
93
94 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
95 LayerType::Greater,
96 expectedOutput);
97}
98
Jim Flynne242f2d2019-05-22 14:24:13 +010099BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +0000100{
Jim Flynne242f2d2019-05-22 14:24:13 +0100101 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000102}
103
Jim Flynne242f2d2019-05-22 14:24:13 +0100104BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000105{
Jim Flynne242f2d2019-05-22 14:24:13 +0100106 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000107}
108
Jim Flynne242f2d2019-05-22 14:24:13 +0100109BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000110{
Jim Flynne242f2d2019-05-22 14:24:13 +0100111 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000112}
113
Jim Flynne242f2d2019-05-22 14:24:13 +0100114BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000115{
Jim Flynne242f2d2019-05-22 14:24:13 +0100116 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000117}
118
Jim Flynne242f2d2019-05-22 14:24:13 +0100119BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000120{
Jim Flynne242f2d2019-05-22 14:24:13 +0100121 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000122}
123
Jim Flynne242f2d2019-05-22 14:24:13 +0100124BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000125{
Jim Flynne242f2d2019-05-22 14:24:13 +0100126 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000127}
128
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100129BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
130{
131 DequantizeEndToEndSimple<armnn::DataType::QuantisedAsymm8>(defaultBackends);
132}
133
134BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
135{
136 DequantizeEndToEndOffset<armnn::DataType::QuantisedAsymm8>(defaultBackends);
137}
138
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100139BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest1)
140{
141 SpaceToDepthNHWCEndToEndTest1(defaultBackends);
142}
143
144BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest1)
145{
146 SpaceToDepthNCHWEndToEndTest1(defaultBackends);
147}
148
149BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest2)
150{
151 SpaceToDepthNHWCEndToEndTest2(defaultBackends);
152}
153
154BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest2)
155{
156 SpaceToDepthNCHWEndToEndTest2(defaultBackends);
157}
158
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100159BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100160{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100161 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100162}
163
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100164BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100165{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100166 Splitter1dEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100167}
168
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100169BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100170{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100171 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100172}
173
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100174BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100175{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100176 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100177}
178
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100179BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100180{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100181 Splitter2dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100182}
183
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100184BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100185{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100186 Splitter2dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100187}
188
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100189BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100190{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100191 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100192}
193
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100194BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100195{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100196 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
197}
198
199BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
200{
201 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
202}
203
204BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
205{
206 Splitter3dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
207}
208
209BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
210{
211 Splitter3dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
212}
213
214BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
215{
216 Splitter3dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
217}
218
219BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
220{
221 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
222}
223
224BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
225{
226 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
227}
228
229BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
230{
231 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
232}
233
234BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
235{
236 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
237}
238
239BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
240{
241 Splitter4dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
242}
243
244BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
245{
246 Splitter4dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
247}
248
249BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
250{
251 Splitter4dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
252}
253
254BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
255{
256 Splitter4dDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100257}
258
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100259BOOST_AUTO_TEST_SUITE_END()