blob: 09e231bfd7a81faa13bc7fc90cab12ccd3e72cdb [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-Tar56055192018-11-12 18:10:43 +00006#include "NeonWorkloadFactoryHelper.hpp"
7
Aron Virginas-Tar70104002018-10-24 15:33:28 +01008#include <armnn/ArmNN.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00009#include <Graph.hpp>
10#include <Network.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010011
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000012#include <neon/NeonWorkloadFactory.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010013
14#include <boost/test/unit_test.hpp>
15
16BOOST_AUTO_TEST_SUITE(NeonOptimizedNetwork)
17
18BOOST_AUTO_TEST_CASE(OptimizeValidateCpuAccDeviceSupportLayerNoFallback)
19{
20 // build up the structure of the network
21 armnn::INetworkPtr net(armnn::INetwork::Create());
22
23 armnn::IConnectableLayer* input = net->AddInputLayer(0);
24 armnn::IConnectableLayer* output = net->AddOutputLayer(0);
25
26 input->GetOutputSlot(0).Connect(output->GetInputSlot(0));
27 input->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32));
28
29 armnn::IRuntime::CreationOptions options;
30 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
31
32 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
33 armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec());
34 BOOST_CHECK(optNet);
35 // validate workloads
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000036 armnn::NeonWorkloadFactory fact =
37 NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
38
Aron Virginas-Tar70104002018-10-24 15:33:28 +010039 for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph())
40 {
41 BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuAcc);
42 BOOST_CHECK_NO_THROW(
43 layer->CreateWorkload(static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph(), fact));
44 }
45}
46
47BOOST_AUTO_TEST_CASE(OptimizeValidateDeviceNonSupportLayerNoFallback)
48{
49 // build up the structure of the network
50 armnn::INetworkPtr net(armnn::INetwork::Create());
51
52 armnn::IConnectableLayer* input = net->AddInputLayer(0);
53
54 // This layer configuration isn't supported by CpuAcc and isn't allowed to fall back, so Optimize will return null.
55 armnn::NormalizationDescriptor descriptor;
56 armnn::IConnectableLayer* normalize = net->AddNormalizationLayer(descriptor);
57
58 armnn::IConnectableLayer* output = net->AddOutputLayer(0);
59
60 input->GetOutputSlot(0).Connect(normalize->GetInputSlot(0));
61 normalize->GetOutputSlot(0).Connect(output->GetInputSlot(0));
62
63 input->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32));
64 normalize->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32));
65
66 armnn::IRuntime::CreationOptions options;
67 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
68
69 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
70 armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec());
71 BOOST_CHECK(!optNet);
72}
73
74BOOST_AUTO_TEST_SUITE_END()