blob: 81e5d80cbeb008f684c835f0f2b67705cf0f1d97 [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>
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>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010015
16#include <boost/test/unit_test.hpp>
17
18BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
19
narpra01b9546cf2018-11-20 15:21:28 +000020std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
21
Aron Virginas-Tar70104002018-10-24 15:33:28 +010022BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
23{
narpra01b9546cf2018-11-20 15:21:28 +000024 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010025}
26
27BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
28{
29 using namespace armnn;
30
31 // Create runtime in which test will run and allow fallback to CpuRef.
32 IRuntime::CreationOptions options;
33 IRuntimePtr runtime(IRuntime::Create(options));
34
35 // Builds up the structure of the network.
36 INetworkPtr net(INetwork::Create());
37
38 IConnectableLayer* input = net->AddInputLayer(0);
39
40 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
41 NormalizationDescriptor descriptor;
42 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
43
44 IConnectableLayer* output = net->AddOutputLayer(0);
45
46 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
47 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
48
49 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
50 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
51
52 // optimize the network
53 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
54 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
55
56 // Load it into the runtime. It should pass.
57 NetworkId netId;
58 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
59}
60
kevmay01eed85922019-01-28 08:37:25 +000061BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
62{
63 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
64 0, 0, 0, 0, 0, 0, 0, 0 });
65
66 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
67 LayerType::Greater,
68 expectedOutput);
69}
70
71BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
72{
73 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
74 0, 0, 0, 0, 0, 0, 0, 0 });
75
76 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
77 LayerType::Greater,
78 expectedOutput);
79}
80
81BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
82{
83 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
84 1, 1, 1, 1, 1, 1 });
85
86 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
87 LayerType::Greater,
88 expectedOutput);
89}
90
91BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
92{
93 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
94 1, 1, 1, 1, 1, 1 });
95
96 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
97 LayerType::Greater,
98 expectedOutput);
99}
100
Jim Flynne242f2d2019-05-22 14:24:13 +0100101BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +0000102{
Jim Flynne242f2d2019-05-22 14:24:13 +0100103 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000104}
105
Jim Flynne242f2d2019-05-22 14:24:13 +0100106BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000107{
Jim Flynne242f2d2019-05-22 14:24:13 +0100108 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000109}
110
Jim Flynne242f2d2019-05-22 14:24:13 +0100111BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000112{
Jim Flynne242f2d2019-05-22 14:24:13 +0100113 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000114}
115
Jim Flynne242f2d2019-05-22 14:24:13 +0100116BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000117{
Jim Flynne242f2d2019-05-22 14:24:13 +0100118 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000119}
120
Jim Flynne242f2d2019-05-22 14:24:13 +0100121BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000122{
Jim Flynne242f2d2019-05-22 14:24:13 +0100123 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000124}
125
Jim Flynne242f2d2019-05-22 14:24:13 +0100126BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000127{
Jim Flynne242f2d2019-05-22 14:24:13 +0100128 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000129}
130
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100131BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
132{
133 DequantizeEndToEndSimple<armnn::DataType::QuantisedAsymm8>(defaultBackends);
134}
135
136BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
137{
138 DequantizeEndToEndOffset<armnn::DataType::QuantisedAsymm8>(defaultBackends);
139}
140
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100141BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
142{
143 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
144}
145
146BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
147{
148 PreluEndToEndPositiveTest<armnn::DataType::QuantisedAsymm8>(defaultBackends);
149}
150
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100151BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest1)
152{
153 SpaceToDepthNHWCEndToEndTest1(defaultBackends);
154}
155
156BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest1)
157{
158 SpaceToDepthNCHWEndToEndTest1(defaultBackends);
159}
160
161BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest2)
162{
163 SpaceToDepthNHWCEndToEndTest2(defaultBackends);
164}
165
166BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest2)
167{
168 SpaceToDepthNCHWEndToEndTest2(defaultBackends);
169}
170
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100171BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100172{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100173 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100174}
175
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100176BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100177{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100178 Splitter1dEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100179}
180
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100181BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100182{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100183 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100184}
185
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100186BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100187{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100188 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100189}
190
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100191BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100192{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100193 Splitter2dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100194}
195
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100196BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100197{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100198 Splitter2dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100199}
200
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100201BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100202{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100203 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100204}
205
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100206BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100207{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100208 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
209}
210
211BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
212{
213 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
214}
215
216BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
217{
218 Splitter3dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
219}
220
221BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
222{
223 Splitter3dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
224}
225
226BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
227{
228 Splitter3dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
229}
230
231BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
232{
233 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
234}
235
236BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
237{
238 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
239}
240
241BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
242{
243 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
244}
245
246BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
247{
248 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
249}
250
251BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
252{
253 Splitter4dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
254}
255
256BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
257{
258 Splitter4dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
259}
260
261BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
262{
263 Splitter4dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
264}
265
266BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
267{
268 Splitter4dDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100269}
270
Francis Murtaghb3fc2522019-08-09 13:20:50 +0100271BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
272{
273 QuantizedLstmEndToEnd(defaultBackends);
274}
275
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100276BOOST_AUTO_TEST_SUITE_END()