aboutsummaryrefslogtreecommitdiff
path: root/src/backends/cl
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/cl')
-rw-r--r--src/backends/cl/backend.mk3
-rw-r--r--src/backends/cl/test/CMakeLists.txt3
-rw-r--r--src/backends/cl/test/ClEndToEndTests.cpp18
-rw-r--r--src/backends/cl/test/ClJsonPrinterTests.cpp23
-rw-r--r--src/backends/cl/test/ClOptimizedNetworkTests.cpp101
5 files changed, 148 insertions, 0 deletions
diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk
index 1f89f3b0a4..996db3fbfd 100644
--- a/src/backends/cl/backend.mk
+++ b/src/backends/cl/backend.mk
@@ -44,9 +44,12 @@ BACKEND_SOURCES := \
BACKEND_TEST_SOURCES := \
test/ClCreateWorkloadTests.cpp \
+ test/ClEndToEndTests.cpp \
+ test/ClJsonPrinterTests.cpp \
test/ClLayerSupportTests.cpp \
test/ClLayerTests.cpp \
test/ClMemCopyTests.cpp \
+ test/ClOptimizedNetworkTests.cpp \
test/ClRuntimeTests.cpp \
test/Fp16SupportTest.cpp \
test/OpenClTimerTest.cpp
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 <backends/test/EndToEndTestImpl.hpp>
+
+#include <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_SUITE(ClEndToEnd)
+
+BOOST_AUTO_TEST_CASE(ConstantUsage_Cl_Float32)
+{
+ std::vector<armnn::BackendId> 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 <armnn/BackendId.hpp>
+
+#include <backends/cl/test/ClContextControlFixture.hpp>
+#include <backends/test/JsonPrinterTestImpl.hpp>
+
+#include <boost/test/unit_test.hpp>
+
+#include <vector>
+
+BOOST_FIXTURE_TEST_SUITE(ClJsonPrinter, ClProfilingContextControlFixture)
+
+BOOST_AUTO_TEST_CASE(SoftmaxProfilerJsonPrinterGpuAccTest)
+{
+ std::vector<armnn::BackendId> 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 <armnn/ArmNN.hpp>
+#include <armnn/Network.hpp>
+
+#include <armnn/test/GraphUtils.hpp>
+
+#include <backends/cl/ClWorkloadFactory.hpp>
+
+#include <boost/test/unit_test.hpp>
+
+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<armnn::BackendId> 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<armnn::OptimizedNetwork*>(optNet.get())->GetGraph())
+ {
+ BOOST_CHECK(layer->GetBackendId() == armnn::Compute::GpuAcc);
+ BOOST_CHECK_NO_THROW(
+ layer->CreateWorkload(static_cast<armnn::OptimizedNetwork*>(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<armnn::BackendId> 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<armnn::OptimizedNetwork*>(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