aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2020-06-24 11:42:20 +0100
committerSadik Armagan <sadik.armagan@arm.com>2020-06-24 10:44:09 +0000
commit66aecb0bcab0de55afd6a9f217b17fa6107dd308 (patch)
tree34ae00ad11750123e8105a244a3c0ccaf11979f3 /src
parent307fd34ba8b19a36ddfe70eb6c70e5386ed99b34 (diff)
downloadarmnn-66aecb0bcab0de55afd6a9f217b17fa6107dd308.tar.gz
IVGCVSW-4621 Add CL FILL Workload
* Add CL workload for Fill Operator * Enabled Fill operator tests on CL * CLFill function does not have validate() function yet IsLayerSupported() function return true at the moment * Enabled int32 to tests on backends Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: I9f8cc6d1c86f832ba46a8d170572f4cfcde9ab17
Diffstat (limited to 'src')
-rw-r--r--src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp5
-rw-r--r--src/backends/cl/ClLayerSupport.cpp9
-rw-r--r--src/backends/cl/ClLayerSupport.hpp5
-rw-r--r--src/backends/cl/ClWorkloadFactory.cpp6
-rw-r--r--src/backends/cl/ClWorkloadFactory.hpp3
-rw-r--r--src/backends/cl/backend.mk1
-rw-r--r--src/backends/cl/test/ClLayerTests.cpp5
-rw-r--r--src/backends/cl/workloads/CMakeLists.txt2
-rw-r--r--src/backends/cl/workloads/ClFillWorkload.cpp35
-rw-r--r--src/backends/cl/workloads/ClFillWorkload.hpp24
-rw-r--r--src/backends/cl/workloads/ClWorkloads.hpp1
-rw-r--r--src/backends/neon/test/NeonLayerTests.cpp1
-rw-r--r--src/backends/reference/RefWorkloadFactory.hpp2
-rw-r--r--src/backends/reference/test/RefLayerTests.cpp1
14 files changed, 99 insertions, 1 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
index 00a185ca2d..64970fecdf 100644
--- a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
@@ -67,4 +67,9 @@ SimpleFillTest<armnn::DataType::Float32>(
template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
SimpleFillTest<armnn::DataType::Float16>(
armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
+template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 4>
+SimpleFillTest<armnn::DataType::Signed32>(
+ armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); \ No newline at end of file
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp
index 9c0cf61f9c..44da423f92 100644
--- a/src/backends/cl/ClLayerSupport.cpp
+++ b/src/backends/cl/ClLayerSupport.cpp
@@ -32,6 +32,7 @@
#include "workloads/ClDequantizeWorkload.hpp"
#include "workloads/ClDivisionFloatWorkload.hpp"
#include "workloads/ClExpWorkload.hpp"
+#include "workloads/ClFillWorkload.hpp"
#include "workloads/ClFloorFloatWorkload.hpp"
#include "workloads/ClFullyConnectedWorkload.hpp"
#include "workloads/ClGatherWorkload.hpp"
@@ -428,6 +429,14 @@ bool ClLayerSupport::IsElementwiseUnarySupported(const TensorInfo& input,
}
}
+bool ClLayerSupport::IsFillSupported(const TensorInfo&,
+ const TensorInfo&,
+ const FillDescriptor&,
+ Optional<std::string&>) const
+{
+ return true;
+}
+
bool ClLayerSupport::IsFloorSupported(const TensorInfo& input,
const TensorInfo& output,
Optional<std::string&> reasonIfUnsupported) const
diff --git a/src/backends/cl/ClLayerSupport.hpp b/src/backends/cl/ClLayerSupport.hpp
index 67fd230ea2..d3c3295d2f 100644
--- a/src/backends/cl/ClLayerSupport.hpp
+++ b/src/backends/cl/ClLayerSupport.hpp
@@ -108,6 +108,11 @@ public:
const ElementwiseUnaryDescriptor& descriptor,
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
+ bool IsFillSupported(const TensorInfo& input,
+ const TensorInfo& output,
+ const FillDescriptor& descriptor,
+ Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
+
bool IsFloorSupported(const TensorInfo& input,
const TensorInfo& output,
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp
index 905930ea55..9bbf661c3c 100644
--- a/src/backends/cl/ClWorkloadFactory.cpp
+++ b/src/backends/cl/ClWorkloadFactory.cpp
@@ -287,6 +287,12 @@ std::unique_ptr<IWorkload> ClWorkloadFactory::CreateEqual(const EqualQueueDescri
return CreateComparison(comparisonDescriptor, info);
}
+std::unique_ptr<IWorkload> ClWorkloadFactory::CreateFill(const FillQueueDescriptor& descriptor,
+ const WorkloadInfo& info) const
+{
+ return std::make_unique<ClFillWorkload>(descriptor, info);
+}
+
std::unique_ptr<IWorkload> ClWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor,
const WorkloadInfo& info) const
{
diff --git a/src/backends/cl/ClWorkloadFactory.hpp b/src/backends/cl/ClWorkloadFactory.hpp
index 2ea7c6004f..d1e41b0e07 100644
--- a/src/backends/cl/ClWorkloadFactory.hpp
+++ b/src/backends/cl/ClWorkloadFactory.hpp
@@ -100,6 +100,9 @@ public:
std::unique_ptr<IWorkload> CreateEqual(const EqualQueueDescriptor& descriptor,
const WorkloadInfo& info) const override;
+ std::unique_ptr<IWorkload> CreateFill(const FillQueueDescriptor& descriptor,
+ const WorkloadInfo& info) const override;
+
std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& descriptor,
const WorkloadInfo& info) const override;
diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk
index 721a9ec26e..87be2caeb2 100644
--- a/src/backends/cl/backend.mk
+++ b/src/backends/cl/backend.mk
@@ -39,6 +39,7 @@ BACKEND_SOURCES := \
workloads/ClDequantizeWorkload.cpp \
workloads/ClDivisionFloatWorkload.cpp \
workloads/ClExpWorkload.cpp \
+ workloads/ClFillWorkload.cpp \
workloads/ClFloorFloatWorkload.cpp \
workloads/ClFullyConnectedWorkload.cpp \
workloads/ClGatherWorkload.cpp \
diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp
index cbe8dfed61..2f2aa1782e 100644
--- a/src/backends/cl/test/ClLayerTests.cpp
+++ b/src/backends/cl/test/ClLayerTests.cpp
@@ -462,6 +462,11 @@ ARMNN_AUTO_TEST_CASE(DepthToSpaceNhwcInt16_2, DepthToSpaceTest2<DataType::QSymmS
ARMNN_AUTO_TEST_CASE(DepthToSpaceNhwcInt16_3, DepthToSpaceTest3<DataType::QSymmS16>, DataLayout::NHWC);
ARMNN_AUTO_TEST_CASE(DepthToSpaceNhwcInt16_4, DepthToSpaceTest4<DataType::QSymmS16>, DataLayout::NHWC);
+// Fill
+ARMNN_AUTO_TEST_CASE(SimpleFill, SimpleFillTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE(SimpleFillF16, SimpleFillTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE(SimpleFillS32, SimpleFillTest<DataType::Signed32>)
+
// Floor
ARMNN_AUTO_TEST_CASE(SimpleFloor, SimpleFloorTest<DataType::Float32>)
diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt
index 6baeae0a80..fe9c9fa5c7 100644
--- a/src/backends/cl/workloads/CMakeLists.txt
+++ b/src/backends/cl/workloads/CMakeLists.txt
@@ -38,6 +38,8 @@ list(APPEND armnnClBackendWorkloads_sources
ClDivisionFloatWorkload.hpp
ClExpWorkload.cpp
ClExpWorkload.hpp
+ ClFillWorkload.cpp
+ ClFillWorkload.hpp
ClFloorFloatWorkload.cpp
ClFloorFloatWorkload.hpp
ClFullyConnectedWorkload.cpp
diff --git a/src/backends/cl/workloads/ClFillWorkload.cpp b/src/backends/cl/workloads/ClFillWorkload.cpp
new file mode 100644
index 0000000000..47a70bc677
--- /dev/null
+++ b/src/backends/cl/workloads/ClFillWorkload.cpp
@@ -0,0 +1,35 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "ClFillWorkload.hpp"
+
+#include "ClWorkloadUtils.hpp"
+
+#include <cl/ClTensorHandle.hpp>
+#include <aclCommon/ArmComputeTensorUtils.hpp>
+#include <arm_compute/core/Types.h>
+
+namespace armnn
+{
+using namespace armcomputetensorutils;
+
+ClFillWorkload::ClFillWorkload(const FillQueueDescriptor& descriptor, const WorkloadInfo& info)
+ : BaseWorkload<FillQueueDescriptor>(descriptor, info)
+{
+ m_Data.ValidateInputsOutputs("ClFillWorkload", 1, 1);
+
+ arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
+ arm_compute::PixelValue pixelValue = GetPixelValue(output, descriptor.m_Parameters.m_Value);
+
+ m_Layer.configure(&output, pixelValue);
+}
+
+void ClFillWorkload::Execute() const
+{
+ ARMNN_SCOPED_PROFILING_EVENT_CL("ClFillWorkload_Execute");
+ RunClFunction(m_Layer, CHECK_LOCATION());
+}
+
+} // namespace armnn
diff --git a/src/backends/cl/workloads/ClFillWorkload.hpp b/src/backends/cl/workloads/ClFillWorkload.hpp
new file mode 100644
index 0000000000..8919445d0c
--- /dev/null
+++ b/src/backends/cl/workloads/ClFillWorkload.hpp
@@ -0,0 +1,24 @@
+//
+// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <backendsCommon/WorkloadData.hpp>
+#include <backendsCommon/Workload.hpp>
+#include <arm_compute/runtime/CL/functions/CLFill.h>
+
+namespace armnn {
+
+class ClFillWorkload : public BaseWorkload<FillQueueDescriptor>
+{
+public:
+ ClFillWorkload(const FillQueueDescriptor& descriptor, const WorkloadInfo& info);
+ void Execute() const override;
+
+private:
+ mutable arm_compute::CLFill m_Layer;
+};
+
+} //namespace armnn
diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp
index 5c81079ad7..99f3e62de7 100644
--- a/src/backends/cl/workloads/ClWorkloads.hpp
+++ b/src/backends/cl/workloads/ClWorkloads.hpp
@@ -18,6 +18,7 @@
#include "ClDequantizeWorkload.hpp"
#include "ClDivisionFloatWorkload.hpp"
#include "ClExpWorkload.hpp"
+#include "ClFillWorkload.hpp"
#include "ClFloorFloatWorkload.hpp"
#include "ClFullyConnectedWorkload.hpp"
#include "ClGatherWorkload.hpp"
diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp
index c4b5d18f08..acadf6e8a3 100644
--- a/src/backends/neon/test/NeonLayerTests.cpp
+++ b/src/backends/neon/test/NeonLayerTests.cpp
@@ -1224,6 +1224,7 @@ ARMNN_AUTO_TEST_CASE(ExpNegative, ExpNegativeTest<DataType::Float32>)
// Fill
ARMNN_AUTO_TEST_CASE(SimpleFill, SimpleFillTest<DataType::Float32>)
ARMNN_AUTO_TEST_CASE(SimpleFillF16, SimpleFillTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE(SimpleFillS32, SimpleFillTest<DataType::Signed32>)
#if defined(ARMNNREF_ENABLED)
diff --git a/src/backends/reference/RefWorkloadFactory.hpp b/src/backends/reference/RefWorkloadFactory.hpp
index 0b419303cc..941f1a6636 100644
--- a/src/backends/reference/RefWorkloadFactory.hpp
+++ b/src/backends/reference/RefWorkloadFactory.hpp
@@ -130,7 +130,7 @@ public:
const WorkloadInfo& info) const override;
std::unique_ptr<IWorkload> CreateFill(const FillQueueDescriptor& descriptor,
- const WorkloadInfo& info) const override;
+ const WorkloadInfo& info) const override;
std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& descriptor,
const WorkloadInfo& info) const override;
diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp
index 4d347cab46..d96fa8be59 100644
--- a/src/backends/reference/test/RefLayerTests.cpp
+++ b/src/backends/reference/test/RefLayerTests.cpp
@@ -1217,6 +1217,7 @@ ARMNN_AUTO_TEST_CASE(Concat4dDiffShapeDim3Uint8, Concat4dDiffShapeDim3Uint8Test,
// Fill
ARMNN_AUTO_TEST_CASE(SimpleFill, SimpleFillTest<DataType::Float32>)
ARMNN_AUTO_TEST_CASE(SimpleFillF16, SimpleFillTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE(SimpleFillS32, SimpleFillTest<DataType::Signed32>)
// Floor
ARMNN_AUTO_TEST_CASE(SimpleFloor, SimpleFloorTest<DataType::Float32>)