2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
6 #include <backendsCommon/test/EndToEndTestImpl.hpp>
8 #include <backendsCommon/test/ArithmeticTestImpl.hpp>
9 #include <backendsCommon/test/ConcatTestImpl.hpp>
10 #include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
11 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
12 #include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
13 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
14 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
15 #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
17 #include <boost/test/unit_test.hpp>
19 BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
21 std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
23 BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
25 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
28 #if defined(ARMNNREF_ENABLED)
30 // This test unit needs the reference backend, it's not available if the reference backend is not built
32 BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
34 using namespace armnn;
36 // Create runtime in which test will run and allow fallback to CpuRef.
37 IRuntime::CreationOptions options;
38 IRuntimePtr runtime(IRuntime::Create(options));
40 // Builds up the structure of the network.
41 INetworkPtr net(INetwork::Create());
43 IConnectableLayer* input = net->AddInputLayer(0);
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);
49 IConnectableLayer* output = net->AddOutputLayer(0);
51 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
52 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
54 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
55 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
57 // optimize the network
58 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
59 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
61 // Load it into the runtime. It should pass.
63 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
68 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
70 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
71 0, 0, 0, 0, 0, 0, 0, 0 });
73 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
78 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
80 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
81 0, 0, 0, 0, 0, 0, 0, 0 });
83 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
88 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
90 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
93 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
98 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
100 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
103 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
108 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
110 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
113 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
115 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
118 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
120 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
123 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
125 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
128 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
130 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
133 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
135 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
138 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
140 DequantizeEndToEndSimple<armnn::DataType::QuantisedAsymm8>(defaultBackends);
143 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
145 DequantizeEndToEndOffset<armnn::DataType::QuantisedAsymm8>(defaultBackends);
148 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
150 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
153 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
155 PreluEndToEndPositiveTest<armnn::DataType::QuantisedAsymm8>(defaultBackends);
158 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest1)
160 SpaceToDepthNHWCEndToEndTest1(defaultBackends);
163 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest1)
165 SpaceToDepthNCHWEndToEndTest1(defaultBackends);
168 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNHWCEndToEndTest2)
170 SpaceToDepthNHWCEndToEndTest2(defaultBackends);
173 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNCHWEndToEndTest2)
175 SpaceToDepthNCHWEndToEndTest2(defaultBackends);
178 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
180 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
183 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
185 Splitter1dEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
188 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
190 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
193 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
195 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
198 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
200 Splitter2dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
203 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
205 Splitter2dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
208 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
210 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
213 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
215 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
218 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
220 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
223 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
225 Splitter3dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
228 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
230 Splitter3dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
233 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
235 Splitter3dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
238 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
240 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
243 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
245 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
248 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
250 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
253 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
255 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
258 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
260 Splitter4dDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
263 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
265 Splitter4dDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
268 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
270 Splitter4dDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
273 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
275 Splitter4dDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
278 BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
280 QuantizedLstmEndToEnd(defaultBackends);
283 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
285 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
286 defaultBackends, armnn::DataLayout::NCHW);
289 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
291 TransposeConvolution2dEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
292 defaultBackends, armnn::DataLayout::NCHW);
295 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
297 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
298 defaultBackends, armnn::DataLayout::NHWC);
301 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
303 TransposeConvolution2dEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
304 defaultBackends, armnn::DataLayout::NHWC);
307 BOOST_AUTO_TEST_SUITE_END()