blob: 15f5fc330e27b4bef42f974283ed5e295c444590 [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>
Jim Flynne242f2d2019-05-22 14:24:13 +01007#include <backendsCommon/test/ConcatTestImpl.hpp>
kevmay01eed85922019-01-28 08:37:25 +00008#include <backendsCommon/test/ArithmeticTestImpl.hpp>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +01009#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010010
11#include <boost/test/unit_test.hpp>
12
13BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
14
narpra01b9546cf2018-11-20 15:21:28 +000015std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
16
Aron Virginas-Tar70104002018-10-24 15:33:28 +010017BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
18{
narpra01b9546cf2018-11-20 15:21:28 +000019 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010020}
21
22BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
23{
24 using namespace armnn;
25
26 // Create runtime in which test will run and allow fallback to CpuRef.
27 IRuntime::CreationOptions options;
28 IRuntimePtr runtime(IRuntime::Create(options));
29
30 // Builds up the structure of the network.
31 INetworkPtr net(INetwork::Create());
32
33 IConnectableLayer* input = net->AddInputLayer(0);
34
35 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
36 NormalizationDescriptor descriptor;
37 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
38
39 IConnectableLayer* output = net->AddOutputLayer(0);
40
41 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
42 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
43
44 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
45 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
46
47 // optimize the network
48 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
49 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
50
51 // Load it into the runtime. It should pass.
52 NetworkId netId;
53 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
54}
55
kevmay01eed85922019-01-28 08:37:25 +000056BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
57{
58 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
59 0, 0, 0, 0, 0, 0, 0, 0 });
60
61 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
62 LayerType::Greater,
63 expectedOutput);
64}
65
66BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
67{
68 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
69 0, 0, 0, 0, 0, 0, 0, 0 });
70
71 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
72 LayerType::Greater,
73 expectedOutput);
74}
75
76BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
77{
78 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
79 1, 1, 1, 1, 1, 1 });
80
81 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
82 LayerType::Greater,
83 expectedOutput);
84}
85
86BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
87{
88 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
89 1, 1, 1, 1, 1, 1 });
90
91 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
92 LayerType::Greater,
93 expectedOutput);
94}
95
Jim Flynne242f2d2019-05-22 14:24:13 +010096BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +000097{
Jim Flynne242f2d2019-05-22 14:24:13 +010098 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +000099}
100
Jim Flynne242f2d2019-05-22 14:24:13 +0100101BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000102{
Jim Flynne242f2d2019-05-22 14:24:13 +0100103 ConcatDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000104}
105
Jim Flynne242f2d2019-05-22 14:24:13 +0100106BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000107{
Jim Flynne242f2d2019-05-22 14:24:13 +0100108 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000109}
110
Jim Flynne242f2d2019-05-22 14:24:13 +0100111BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000112{
Jim Flynne242f2d2019-05-22 14:24:13 +0100113 ConcatDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000114}
115
Jim Flynne242f2d2019-05-22 14:24:13 +0100116BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000117{
Jim Flynne242f2d2019-05-22 14:24:13 +0100118 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000119}
120
Jim Flynne242f2d2019-05-22 14:24:13 +0100121BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000122{
Jim Flynne242f2d2019-05-22 14:24:13 +0100123 ConcatDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000124}
125
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100126BOOST_AUTO_TEST_CASE(NeonSplitDim0EndToEndTest)
127{
128 SplitterDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
129}
130
131BOOST_AUTO_TEST_CASE(NeonSplitDim1EndToEndTest)
132{
133 SplitterDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
134}
135
136BOOST_AUTO_TEST_CASE(NeonSplitDim2EndToEndTest)
137{
138 SplitterDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
139}
140
141BOOST_AUTO_TEST_CASE(NeonSplitDim3EndToEndTest)
142{
143 SplitterDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
144}
145
146BOOST_AUTO_TEST_CASE(NeonSplitDim0EndToEndUint8Test)
147{
148 SplitterDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
149}
150
151BOOST_AUTO_TEST_CASE(NeonSplitDim1EndToEndUint8Test)
152{
153 SplitterDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
154}
155
156BOOST_AUTO_TEST_CASE(NeonSplitDim2EndToEndUint8Test)
157{
158 SplitterDim2EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
159}
160
161BOOST_AUTO_TEST_CASE(NeonSplitDim3EndToEndUint8Test)
162{
163 SplitterDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
164}
165
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100166BOOST_AUTO_TEST_SUITE_END()