From 70104000ddcf3bc1a1d21f16d1468456ca17b80a Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Wed, 24 Oct 2018 15:33:28 +0100 Subject: IVGCVSW-2073: Move remaining backend-specific tests from armnn to backends Change-Id: I45fd5b6dd32c435b78a54dc377a623e60978ce13 --- src/backends/cl/test/CMakeLists.txt | 3 + src/backends/cl/test/ClEndToEndTests.cpp | 18 ++++ src/backends/cl/test/ClJsonPrinterTests.cpp | 23 ++++++ src/backends/cl/test/ClOptimizedNetworkTests.cpp | 101 +++++++++++++++++++++++ 4 files changed, 145 insertions(+) create mode 100644 src/backends/cl/test/ClEndToEndTests.cpp create mode 100644 src/backends/cl/test/ClJsonPrinterTests.cpp create mode 100644 src/backends/cl/test/ClOptimizedNetworkTests.cpp (limited to 'src/backends/cl/test') diff --git a/src/backends/cl/test/CMakeLists.txt b/src/backends/cl/test/CMakeLists.txt index 69aa08d42b..c017377768 100644 --- a/src/backends/cl/test/CMakeLists.txt +++ b/src/backends/cl/test/CMakeLists.txt @@ -6,9 +6,12 @@ list(APPEND armnnClBackendUnitTests_sources ClContextControlFixture.hpp ClCreateWorkloadTests.cpp + ClEndToEndTests.cpp + ClJsonPrinterTests.cpp ClLayerSupportTests.cpp ClLayerTests.cpp ClMemCopyTests.cpp + ClOptimizedNetworkTests.cpp ClRuntimeTests.cpp OpenClTimerTest.cpp ) diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp new file mode 100644 index 0000000000..d6fd8875c4 --- /dev/null +++ b/src/backends/cl/test/ClEndToEndTests.cpp @@ -0,0 +1,18 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include + +#include + +BOOST_AUTO_TEST_SUITE(ClEndToEnd) + +BOOST_AUTO_TEST_CASE(ConstantUsage_Cl_Float32) +{ + std::vector backends = {armnn::Compute::GpuAcc}; + ConstantUsageFloat32Test(backends); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/backends/cl/test/ClJsonPrinterTests.cpp b/src/backends/cl/test/ClJsonPrinterTests.cpp new file mode 100644 index 0000000000..f0b4b7acae --- /dev/null +++ b/src/backends/cl/test/ClJsonPrinterTests.cpp @@ -0,0 +1,23 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include + +#include +#include + +#include + +#include + +BOOST_FIXTURE_TEST_SUITE(ClJsonPrinter, ClProfilingContextControlFixture) + +BOOST_AUTO_TEST_CASE(SoftmaxProfilerJsonPrinterGpuAccTest) +{ + std::vector backends = {armnn::Compute::GpuAcc}; + SetupSoftmaxProfilerWithSpecifiedBackendsAndValidateJsonPrinterResult(backends); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/src/backends/cl/test/ClOptimizedNetworkTests.cpp b/src/backends/cl/test/ClOptimizedNetworkTests.cpp new file mode 100644 index 0000000000..b39a4b1304 --- /dev/null +++ b/src/backends/cl/test/ClOptimizedNetworkTests.cpp @@ -0,0 +1,101 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include +#include + +#include + +#include + +#include + +BOOST_AUTO_TEST_SUITE(ClOptimizedNetwork) + +BOOST_AUTO_TEST_CASE(OptimizeValidateGpuDeviceSupportLayerNoFallback) +{ + // build up the structure of the network + armnn::INetworkPtr net(armnn::INetwork::Create()); + + armnn::IConnectableLayer* input = net->AddInputLayer(0); + armnn::IConnectableLayer* output = net->AddOutputLayer(0); + + input->GetOutputSlot(0).Connect(output->GetInputSlot(0)); + input->GetOutputSlot(0).SetTensorInfo(armnn::TensorInfo({ 1, 1, 4, 4 }, armnn::DataType::Float32)); + + armnn::IRuntime::CreationOptions options; + armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options)); + + std::vector backends = { armnn::Compute::GpuAcc }; + armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec()); + BOOST_CHECK(optNet); + // validate workloads + armnn::ClWorkloadFactory fact; + for (auto&& layer : static_cast(optNet.get())->GetGraph()) + { + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::GpuAcc); + BOOST_CHECK_NO_THROW( + layer->CreateWorkload(static_cast(optNet.get())->GetGraph(), fact)); + } +} + +BOOST_AUTO_TEST_CASE(FP16TurboModeTestOnGpuAcc) +{ + // Test to check when Fp16 Turbo mode set + // it converts the Fp32 network to Fp16 Network + // add Fp32ToFp16 conversion layer after the InputLayer + // add Fp16ToFp32 conversion layer after the OutputLayer + // checks the other layers if they are supported in Fp16 + // if they are not put the conversion layers before and after + // if they are not supported in Fp16 use Fp32 instead + // if there are inverse conversion layers remove them with optimization + // at the moment FloorLayer is not supported in Fp16 so it rolls back to Fp32 + // and inverse conversion layers are removed by the optimizer + armnn::Network net; + + // Defines layers. + auto input = net.AddInputLayer(0, "input layer"); + // ReLu1 + armnn::ActivationDescriptor activation1Descriptor; + activation1Descriptor.m_Function = armnn::ActivationFunction::BoundedReLu; + activation1Descriptor.m_A = 1.f; + activation1Descriptor.m_B = -1.f; + auto activation = net.AddActivationLayer(activation1Descriptor, "activation layer"); + auto output = net.AddOutputLayer(0, "output layer"); + + // Connects layers. + input->GetOutputSlot(0).Connect(activation->GetInputSlot(0)); + activation->GetOutputSlot(0).Connect(output->GetInputSlot(0)); + + armnn::TensorShape shape({4}); + armnn::TensorInfo info(shape, armnn::DataType::Float32); + input->GetOutputSlot(0).SetTensorInfo(info); + activation->GetOutputSlot(0).SetTensorInfo(info); + + armnn::IRuntime::CreationOptions options; + armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options)); + + std::vector backends = {armnn::Compute::GpuAcc}; + + armnn::OptimizerOptions optimizerOptions; + optimizerOptions.m_ReduceFp32ToFp16 = true; + + armnn::IOptimizedNetworkPtr optimizedNet = armnn::Optimize( + net, backends, runtime->GetDeviceSpec(), optimizerOptions); + + const armnn::Graph& graph = static_cast(optimizedNet.get())->GetGraph(); + + // Tests that all layers are present in the graph. + BOOST_TEST(graph.GetNumLayers() == 5); + + // Tests that the vertices exist and have correct names. + BOOST_TEST(GraphHasNamedLayer(graph, "input layer")); + BOOST_TEST(GraphHasNamedLayer(graph, "convert_fp32_to_fp16-0-input layer")); + BOOST_TEST(GraphHasNamedLayer(graph, "activation layer")); + BOOST_TEST(GraphHasNamedLayer(graph, "convert_fp16_to_fp32-0-output layer")); + BOOST_TEST(GraphHasNamedLayer(graph, "output layer")); +} + +BOOST_AUTO_TEST_SUITE_END(); \ No newline at end of file -- cgit v1.2.1