blob: 7a22b458c99f4ab23f5554466864da366a75ce61 [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>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +010011#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010012
13#include <boost/test/unit_test.hpp>
14
15BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
16
narpra01b9546cf2018-11-20 15:21:28 +000017std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
18
Aron Virginas-Tar70104002018-10-24 15:33:28 +010019BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
20{
narpra01b9546cf2018-11-20 15:21:28 +000021 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010022}
23
24BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
25{
26 using namespace armnn;
27
28 // Create runtime in which test will run and allow fallback to CpuRef.
29 IRuntime::CreationOptions options;
30 IRuntimePtr runtime(IRuntime::Create(options));
31
32 // Builds up the structure of the network.
33 INetworkPtr net(INetwork::Create());
34
35 IConnectableLayer* input = net->AddInputLayer(0);
36
37 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
38 NormalizationDescriptor descriptor;
39 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
40
41 IConnectableLayer* output = net->AddOutputLayer(0);
42
43 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
44 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
45
46 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
47 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
48
49 // optimize the network
50 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
51 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
52
53 // Load it into the runtime. It should pass.
54 NetworkId netId;
55 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
56}
57
kevmay01eed85922019-01-28 08:37:25 +000058BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
59{
60 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
61 0, 0, 0, 0, 0, 0, 0, 0 });
62
63 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
64 LayerType::Greater,
65 expectedOutput);
66}
67
68BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
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::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
74 LayerType::Greater,
75 expectedOutput);
76}
77
78BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
79{
80 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
81 1, 1, 1, 1, 1, 1 });
82
83 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
84 LayerType::Greater,
85 expectedOutput);
86}
87
88BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
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::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
94 LayerType::Greater,
95 expectedOutput);
96}
97
Jim Flynne242f2d2019-05-22 14:24:13 +010098BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +000099{
Jim Flynne242f2d2019-05-22 14:24:13 +0100100 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000101}
102
Jim Flynne242f2d2019-05-22 14:24:13 +0100103BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000104{
Jim Flynne242f2d2019-05-22 14:24:13 +0100105 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000106}
107
Jim Flynne242f2d2019-05-22 14:24:13 +0100108BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000109{
Jim Flynne242f2d2019-05-22 14:24:13 +0100110 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000111}
112
Jim Flynne242f2d2019-05-22 14:24:13 +0100113BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000114{
Jim Flynne242f2d2019-05-22 14:24:13 +0100115 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000116}
117
Jim Flynne242f2d2019-05-22 14:24:13 +0100118BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000119{
Jim Flynne242f2d2019-05-22 14:24:13 +0100120 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000121}
122
Jim Flynne242f2d2019-05-22 14:24:13 +0100123BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000124{
Jim Flynne242f2d2019-05-22 14:24:13 +0100125 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000126}
127
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100128BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
129{
130 DequantizeEndToEndSimple<armnn::DataType::QuantisedAsymm8>(defaultBackends);
131}
132
133BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
134{
135 DequantizeEndToEndOffset<armnn::DataType::QuantisedAsymm8>(defaultBackends);
136}
137
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100138BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100139{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100140 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100141}
142
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100143BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100144{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100145 Splitter1dEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100146}
147
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100148BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100149{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100150 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100151}
152
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100153BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100154{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100155 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100156}
157
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100158BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100159{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100160 Splitter2dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100161}
162
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100163BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100164{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100165 Splitter2dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100166}
167
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100168BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100169{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100170 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100171}
172
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100173BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100174{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100175 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
176}
177
178BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
179{
180 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
181}
182
183BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
184{
185 Splitter3dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
186}
187
188BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
189{
190 Splitter3dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
191}
192
193BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
194{
195 Splitter3dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
196}
197
198BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
199{
200 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
201}
202
203BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
204{
205 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
206}
207
208BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
209{
210 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
211}
212
213BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
214{
215 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
216}
217
218BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
219{
220 Splitter4dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
221}
222
223BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
224{
225 Splitter4dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
226}
227
228BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
229{
230 Splitter4dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
231}
232
233BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
234{
235 Splitter4dDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100236}
237
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100238BOOST_AUTO_TEST_SUITE_END()