aboutsummaryrefslogtreecommitdiff
path: root/src/backends/cl/workloads
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/cl/workloads')
-rw-r--r--src/backends/cl/workloads/CMakeLists.txt107
-rw-r--r--src/backends/cl/workloads/ClAbsWorkload.cpp44
-rw-r--r--src/backends/cl/workloads/ClAbsWorkload.hpp28
-rw-r--r--src/backends/cl/workloads/ClActivationWorkload.cpp52
-rw-r--r--src/backends/cl/workloads/ClActivationWorkload.hpp28
-rw-r--r--src/backends/cl/workloads/ClAdditionWorkload.cpp54
-rw-r--r--src/backends/cl/workloads/ClAdditionWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClArgMinMaxWorkload.cpp82
-rw-r--r--src/backends/cl/workloads/ClArgMinMaxWorkload.hpp30
-rw-r--r--src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.cpp106
-rw-r--r--src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.hpp47
-rw-r--r--src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp64
-rw-r--r--src/backends/cl/workloads/ClBatchToSpaceNdWorkload.hpp30
-rw-r--r--src/backends/cl/workloads/ClConcatWorkload.cpp102
-rw-r--r--src/backends/cl/workloads/ClConcatWorkload.hpp31
-rw-r--r--src/backends/cl/workloads/ClConstantWorkload.cpp68
-rw-r--r--src/backends/cl/workloads/ClConstantWorkload.hpp23
-rw-r--r--src/backends/cl/workloads/ClConvertFp16ToFp32Workload.cpp56
-rw-r--r--src/backends/cl/workloads/ClConvertFp16ToFp32Workload.hpp28
-rw-r--r--src/backends/cl/workloads/ClConvertFp32ToFp16Workload.cpp56
-rw-r--r--src/backends/cl/workloads/ClConvertFp32ToFp16Workload.hpp28
-rw-r--r--src/backends/cl/workloads/ClConvolution2dWorkload.cpp122
-rw-r--r--src/backends/cl/workloads/ClConvolution2dWorkload.hpp44
-rw-r--r--src/backends/cl/workloads/ClDepthToSpaceWorkload.cpp66
-rw-r--r--src/backends/cl/workloads/ClDepthToSpaceWorkload.hpp31
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp156
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp42
-rw-r--r--src/backends/cl/workloads/ClDequantizeWorkload.cpp57
-rw-r--r--src/backends/cl/workloads/ClDequantizeWorkload.hpp28
-rw-r--r--src/backends/cl/workloads/ClDivisionFloatWorkload.cpp46
-rw-r--r--src/backends/cl/workloads/ClDivisionFloatWorkload.hpp32
-rw-r--r--src/backends/cl/workloads/ClFloorFloatWorkload.cpp40
-rw-r--r--src/backends/cl/workloads/ClFloorFloatWorkload.hpp33
-rw-r--r--src/backends/cl/workloads/ClFullyConnectedWorkload.cpp96
-rw-r--r--src/backends/cl/workloads/ClFullyConnectedWorkload.hpp43
-rw-r--r--src/backends/cl/workloads/ClGreaterWorkload.cpp65
-rw-r--r--src/backends/cl/workloads/ClGreaterWorkload.hpp34
-rw-r--r--src/backends/cl/workloads/ClInstanceNormalizationWorkload.cpp59
-rw-r--r--src/backends/cl/workloads/ClInstanceNormalizationWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClL2NormalizationFloatWorkload.cpp53
-rw-r--r--src/backends/cl/workloads/ClL2NormalizationFloatWorkload.hpp35
-rw-r--r--src/backends/cl/workloads/ClLstmFloatWorkload.cpp435
-rw-r--r--src/backends/cl/workloads/ClLstmFloatWorkload.hpp59
-rw-r--r--src/backends/cl/workloads/ClMaximumWorkload.cpp58
-rw-r--r--src/backends/cl/workloads/ClMaximumWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClMeanWorkload.cpp52
-rw-r--r--src/backends/cl/workloads/ClMeanWorkload.hpp31
-rw-r--r--src/backends/cl/workloads/ClMinimumWorkload.cpp58
-rw-r--r--src/backends/cl/workloads/ClMinimumWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClMultiplicationWorkload.cpp58
-rw-r--r--src/backends/cl/workloads/ClMultiplicationWorkload.hpp34
-rw-r--r--src/backends/cl/workloads/ClNormalizationFloatWorkload.cpp55
-rw-r--r--src/backends/cl/workloads/ClNormalizationFloatWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClPadWorkload.cpp67
-rw-r--r--src/backends/cl/workloads/ClPadWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClPermuteWorkload.cpp51
-rw-r--r--src/backends/cl/workloads/ClPermuteWorkload.hpp40
-rw-r--r--src/backends/cl/workloads/ClPooling2dWorkload.cpp60
-rw-r--r--src/backends/cl/workloads/ClPooling2dWorkload.hpp33
-rw-r--r--src/backends/cl/workloads/ClPreluWorkload.cpp48
-rw-r--r--src/backends/cl/workloads/ClPreluWorkload.hpp28
-rw-r--r--src/backends/cl/workloads/ClQuantizeWorkload.cpp49
-rw-r--r--src/backends/cl/workloads/ClQuantizeWorkload.hpp28
-rw-r--r--src/backends/cl/workloads/ClQuantizedLstmWorkload.cpp158
-rw-r--r--src/backends/cl/workloads/ClQuantizedLstmWorkload.hpp49
-rw-r--r--src/backends/cl/workloads/ClReshapeWorkload.cpp41
-rw-r--r--src/backends/cl/workloads/ClReshapeWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClResizeWorkload.cpp77
-rw-r--r--src/backends/cl/workloads/ClResizeWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClRsqrtWorkload.cpp44
-rw-r--r--src/backends/cl/workloads/ClRsqrtWorkload.hpp28
-rw-r--r--src/backends/cl/workloads/ClSliceWorkload.cpp56
-rw-r--r--src/backends/cl/workloads/ClSliceWorkload.hpp30
-rw-r--r--src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp27
-rw-r--r--src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp19
-rw-r--r--src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp36
-rw-r--r--src/backends/cl/workloads/ClSoftmaxFloatWorkload.hpp30
-rw-r--r--src/backends/cl/workloads/ClSoftmaxUint8Workload.cpp46
-rw-r--r--src/backends/cl/workloads/ClSoftmaxUint8Workload.hpp31
-rw-r--r--src/backends/cl/workloads/ClSpaceToBatchNdWorkload.cpp85
-rw-r--r--src/backends/cl/workloads/ClSpaceToBatchNdWorkload.hpp33
-rw-r--r--src/backends/cl/workloads/ClSpaceToDepthWorkload.cpp61
-rw-r--r--src/backends/cl/workloads/ClSpaceToDepthWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClSplitterWorkload.cpp115
-rw-r--r--src/backends/cl/workloads/ClSplitterWorkload.hpp33
-rw-r--r--src/backends/cl/workloads/ClStackWorkload.cpp74
-rw-r--r--src/backends/cl/workloads/ClStackWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClStridedSliceWorkload.cpp96
-rw-r--r--src/backends/cl/workloads/ClStridedSliceWorkload.hpp32
-rw-r--r--src/backends/cl/workloads/ClSubtractionWorkload.cpp54
-rw-r--r--src/backends/cl/workloads/ClSubtractionWorkload.hpp29
-rw-r--r--src/backends/cl/workloads/ClTransposeConvolution2dWorkload.cpp110
-rw-r--r--src/backends/cl/workloads/ClTransposeConvolution2dWorkload.hpp46
-rw-r--r--src/backends/cl/workloads/ClWorkloadUtils.hpp143
-rw-r--r--src/backends/cl/workloads/ClWorkloads.hpp51
95 files changed, 0 insertions, 5314 deletions
diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt
deleted file mode 100644
index de62ca9496..0000000000
--- a/src/backends/cl/workloads/CMakeLists.txt
+++ /dev/null
@@ -1,107 +0,0 @@
-#
-# Copyright © 2017 Arm Ltd. All rights reserved.
-# SPDX-License-Identifier: MIT
-#
-
-list(APPEND armnnClBackendWorkloads_sources
- ClAbsWorkload.cpp
- ClAbsWorkload.hpp
- ClActivationWorkload.cpp
- ClActivationWorkload.hpp
- ClAdditionWorkload.cpp
- ClAdditionWorkload.hpp
- ClArgMinMaxWorkload.cpp
- ClArgMinMaxWorkload.hpp
- ClBatchNormalizationFloatWorkload.cpp
- ClBatchNormalizationFloatWorkload.hpp
- ClBatchToSpaceNdWorkload.cpp
- ClBatchToSpaceNdWorkload.hpp
- ClConcatWorkload.cpp
- ClConcatWorkload.hpp
- ClConstantWorkload.cpp
- ClConstantWorkload.hpp
- ClConvertFp16ToFp32Workload.cpp
- ClConvertFp16ToFp32Workload.hpp
- ClConvertFp32ToFp16Workload.cpp
- ClConvertFp32ToFp16Workload.hpp
- ClConvolution2dWorkload.cpp
- ClConvolution2dWorkload.hpp
- ClDepthToSpaceWorkload.cpp
- ClDepthToSpaceWorkload.hpp
- ClDepthwiseConvolutionWorkload.cpp
- ClDepthwiseConvolutionWorkload.hpp
- ClDequantizeWorkload.cpp
- ClDequantizeWorkload.hpp
- ClDivisionFloatWorkload.cpp
- ClDivisionFloatWorkload.hpp
- ClFloorFloatWorkload.cpp
- ClFloorFloatWorkload.hpp
- ClFullyConnectedWorkload.cpp
- ClFullyConnectedWorkload.hpp
- ClGreaterWorkload.cpp
- ClGreaterWorkload.hpp
- ClInstanceNormalizationWorkload.cpp
- ClInstanceNormalizationWorkload.hpp
- ClL2NormalizationFloatWorkload.cpp
- ClL2NormalizationFloatWorkload.hpp
- ClLstmFloatWorkload.cpp
- ClLstmFloatWorkload.hpp
- ClMaximumWorkload.cpp
- ClMaximumWorkload.hpp
- ClMeanWorkload.cpp
- ClMeanWorkload.hpp
- ClMinimumWorkload.cpp
- ClMinimumWorkload.hpp
- ClMultiplicationWorkload.cpp
- ClMultiplicationWorkload.hpp
- ClNormalizationFloatWorkload.cpp
- ClNormalizationFloatWorkload.hpp
- ClPadWorkload.cpp
- ClPadWorkload.hpp
- ClPermuteWorkload.cpp
- ClPermuteWorkload.hpp
- ClPooling2dWorkload.cpp
- ClPooling2dWorkload.hpp
- ClPreluWorkload.cpp
- ClPreluWorkload.hpp
- ClQuantizedLstmWorkload.cpp
- ClQuantizedLstmWorkload.hpp
- ClQuantizeWorkload.cpp
- ClQuantizeWorkload.hpp
- ClReshapeWorkload.cpp
- ClReshapeWorkload.hpp
- ClResizeWorkload.cpp
- ClResizeWorkload.hpp
- ClRsqrtWorkload.cpp
- ClRsqrtWorkload.hpp
- ClSliceWorkload.cpp
- ClSliceWorkload.hpp
- ClSoftmaxBaseWorkload.cpp
- ClSoftmaxBaseWorkload.hpp
- ClSoftmaxFloatWorkload.cpp
- ClSoftmaxFloatWorkload.hpp
- ClSoftmaxUint8Workload.cpp
- ClSoftmaxUint8Workload.hpp
- ClSpaceToBatchNdWorkload.hpp
- ClSpaceToBatchNdWorkload.cpp
- ClSpaceToDepthWorkload.cpp
- ClSpaceToDepthWorkload.hpp
- ClSplitterWorkload.cpp
- ClSplitterWorkload.hpp
- ClStackWorkload.cpp
- ClStackWorkload.hpp
- ClStridedSliceWorkload.cpp
- ClStridedSliceWorkload.hpp
- ClSubtractionWorkload.cpp
- ClSubtractionWorkload.hpp
- ClTransposeConvolution2dWorkload.cpp
- ClTransposeConvolution2dWorkload.hpp
- ClWorkloads.hpp
- ClWorkloadUtils.hpp
-)
-
-add_library(armnnClBackendWorkloads OBJECT ${armnnClBackendWorkloads_sources})
-target_include_directories(armnnClBackendWorkloads PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnClBackendWorkloads PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
-target_include_directories(armnnClBackendWorkloads PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
-target_include_directories(armnnClBackendWorkloads PRIVATE ${PROJECT_SOURCE_DIR}/src/profiling)
diff --git a/src/backends/cl/workloads/ClAbsWorkload.cpp b/src/backends/cl/workloads/ClAbsWorkload.cpp
deleted file mode 100644
index 058c453c6b..0000000000
--- a/src/backends/cl/workloads/ClAbsWorkload.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClAbsWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-
-#include <boost/cast.hpp>
-
-namespace armnn
-{
-
-arm_compute::Status ClAbsWorkloadValidate(const TensorInfo& input, const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLAbsLayer::validate(&aclInput, &aclOutput);
-}
-
-ClAbsWorkload::ClAbsWorkload(const AbsQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<AbsQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClAbsWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = boost::polymorphic_downcast<ClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = boost::polymorphic_downcast<ClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_AbsLayer.configure(&input, &output);
-}
-
-void ClAbsWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClAbsWorkload_Execute");
- RunClFunction(m_AbsLayer, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClAbsWorkload.hpp b/src/backends/cl/workloads/ClAbsWorkload.hpp
deleted file mode 100644
index 763cafcfbd..0000000000
--- a/src/backends/cl/workloads/ClAbsWorkload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/CL/functions/CLElementWiseUnaryLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClAbsWorkloadValidate(const TensorInfo& input, const TensorInfo& output);
-
-class ClAbsWorkload : public BaseWorkload<AbsQueueDescriptor>
-{
-public:
- ClAbsWorkload(const AbsQueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- mutable arm_compute::CLAbsLayer m_AbsLayer;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClActivationWorkload.cpp b/src/backends/cl/workloads/ClActivationWorkload.cpp
deleted file mode 100644
index 685652036b..0000000000
--- a/src/backends/cl/workloads/ClActivationWorkload.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClActivationWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-
-namespace armnn
-{
-arm_compute::Status ClActivationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const ActivationDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- const arm_compute::ActivationLayerInfo activationLayerInfo =
- ConvertActivationDescriptorToAclActivationLayerInfo(descriptor);
-
- return arm_compute::CLActivationLayer::validate(&aclInput,
- &aclOutput,
- activationLayerInfo);
-}
-
-ClActivationWorkload::ClActivationWorkload(const ActivationQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<ActivationQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClActivationWorkload", 1, 1);
-
- const arm_compute::ActivationLayerInfo activationLayerInfo =
- ConvertActivationDescriptorToAclActivationLayerInfo(m_Data.m_Parameters);
-
- arm_compute::ICLTensor& input = static_cast<ClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<ClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- m_ActivationLayer.configure(&input, &output, activationLayerInfo);
-}
-
-void ClActivationWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClActivationWorkload_Execute");
- RunClFunction(m_ActivationLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClActivationWorkload.hpp b/src/backends/cl/workloads/ClActivationWorkload.hpp
deleted file mode 100644
index 35166332e6..0000000000
--- a/src/backends/cl/workloads/ClActivationWorkload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLActivationLayer.h>
-
-namespace armnn
-{
-arm_compute::Status ClActivationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const ActivationDescriptor& descriptor);
-
-class ClActivationWorkload : public BaseWorkload<ActivationQueueDescriptor>
-{
-public:
- ClActivationWorkload(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLActivationLayer m_ActivationLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClAdditionWorkload.cpp b/src/backends/cl/workloads/ClAdditionWorkload.cpp
deleted file mode 100644
index 18e2400ccd..0000000000
--- a/src/backends/cl/workloads/ClAdditionWorkload.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClAdditionWorkload.hpp"
-
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-static constexpr arm_compute::ConvertPolicy g_AclConvertPolicy = arm_compute::ConvertPolicy::SATURATE;
-
-ClAdditionWorkload::ClAdditionWorkload(const AdditionQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<AdditionQueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("ClAdditionWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
- m_Layer.configure(&input0, &input1, &output, g_AclConvertPolicy);
-}
-
-void ClAdditionWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClAdditionWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClAdditionValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLArithmeticAddition::validate(&aclInput0Info,
- &aclInput1Info,
- &aclOutputInfo,
- g_AclConvertPolicy);
-
- return aclStatus;
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClAdditionWorkload.hpp b/src/backends/cl/workloads/ClAdditionWorkload.hpp
deleted file mode 100644
index 62bd0ae20b..0000000000
--- a/src/backends/cl/workloads/ClAdditionWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLElementwiseOperations.h>
-
-namespace armnn
-{
-
-class ClAdditionWorkload : public BaseWorkload<AdditionQueueDescriptor>
-{
-public:
- ClAdditionWorkload(const AdditionQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLArithmeticAddition m_Layer;
-};
-
-arm_compute::Status ClAdditionValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClArgMinMaxWorkload.cpp b/src/backends/cl/workloads/ClArgMinMaxWorkload.cpp
deleted file mode 100644
index a79a7b286d..0000000000
--- a/src/backends/cl/workloads/ClArgMinMaxWorkload.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClArgMinMaxWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <armnnUtils/TensorUtils.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-namespace
-{
-unsigned int CalcAclAxis(unsigned int numDimensions, unsigned int axisIndex)
-{
- return (numDimensions - axisIndex) - 1;
-}
-
-} //namespace
-
-namespace armnn
-{
-
-arm_compute::Status ClArgMinMaxWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const ArgMinMaxDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- auto numDims = input.GetNumDimensions();
- auto unsignedAxis = armnnUtils::GetUnsignedAxis(numDims, descriptor.m_Axis);
- int aclAxis = boost::numeric_cast<int>(CalcAclAxis(numDims, unsignedAxis));
-
- if (descriptor.m_Function == ArgMinMaxFunction::Max)
- {
- return arm_compute::CLArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,
- arm_compute::ReductionOperation::ARG_IDX_MAX);
- }
- else
- {
- return arm_compute::CLArgMinMaxLayer::validate(&aclInput, aclAxis, &aclOutput,
- arm_compute::ReductionOperation::ARG_IDX_MIN);
- }
-}
-
-
-ClArgMinMaxWorkload::ClArgMinMaxWorkload(const ArgMinMaxQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<ArgMinMaxQueueDescriptor>(descriptor, info)
-{
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
-
- auto numDims = info.m_InputTensorInfos[0].GetNumDimensions();
- auto unsignedAxis = armnnUtils::GetUnsignedAxis(numDims, m_Data.m_Parameters.m_Axis);
- int aclAxis = boost::numeric_cast<int>(CalcAclAxis(numDims, unsignedAxis));
-
- if (m_Data.m_Parameters.m_Function == ArgMinMaxFunction::Max)
- {
- m_ArgMinMaxLayer.configure(&input, aclAxis, &output, arm_compute::ReductionOperation::ARG_IDX_MAX);
- }
- else
- {
- m_ArgMinMaxLayer.configure(&input, aclAxis, &output, arm_compute::ReductionOperation::ARG_IDX_MIN);
- }
-}
-
-void ClArgMinMaxWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClArgMinMaxWorkload_Execute");
- RunClFunction(m_ArgMinMaxLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClArgMinMaxWorkload.hpp b/src/backends/cl/workloads/ClArgMinMaxWorkload.hpp
deleted file mode 100644
index 54f28e6175..0000000000
--- a/src/backends/cl/workloads/ClArgMinMaxWorkload.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/CL/functions/CLArgMinMaxLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClArgMinMaxWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const ArgMinMaxDescriptor& descriptor);
-
-class ClArgMinMaxWorkload : public BaseWorkload<ArgMinMaxQueueDescriptor>
-{
-public:
- ClArgMinMaxWorkload(const ArgMinMaxQueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- mutable arm_compute::CLArgMinMaxLayer m_ArgMinMaxLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.cpp b/src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.cpp
deleted file mode 100644
index fa0be85100..0000000000
--- a/src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClBatchNormalizationFloatWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClBatchNormalizationValidate(const TensorInfo& input,
- const TensorInfo& output,
- const TensorInfo& mean,
- const TensorInfo& var,
- const TensorInfo& beta,
- const TensorInfo& gamma,
- const BatchNormalizationDescriptor &desc)
-{
- const arm_compute::TensorInfo aclInputInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(input, desc.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(output, desc.m_DataLayout);
- const arm_compute::TensorInfo aclMeanInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(mean, desc.m_DataLayout);
- const arm_compute::TensorInfo aclVarInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(var, desc.m_DataLayout);
- const arm_compute::TensorInfo aclBetaInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(beta, desc.m_DataLayout);
- const arm_compute::TensorInfo aclGammaInfo =
- armcomputetensorutils::BuildArmComputeTensorInfo(gamma, desc.m_DataLayout);
-
- return arm_compute::CLBatchNormalizationLayer::validate(&aclInputInfo,
- &aclOutputInfo,
- &aclMeanInfo,
- &aclVarInfo,
- &aclBetaInfo,
- &aclGammaInfo,
- desc.m_Eps);
-}
-
-ClBatchNormalizationFloatWorkload::ClBatchNormalizationFloatWorkload(
- const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info)
- : FloatWorkload<BatchNormalizationQueueDescriptor>(descriptor, info)
-{
- m_Mean = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_Mean, m_Data.m_Mean->GetTensorInfo());
-
- m_Variance = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_Variance, m_Data.m_Variance->GetTensorInfo());
-
- m_Gamma = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_Gamma, m_Data.m_Gamma->GetTensorInfo());
-
- m_Beta = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_Beta, m_Data.m_Beta->GetTensorInfo());
-
- m_Data.ValidateInputsOutputs("ClBatchNormalizationFloatWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- m_Layer.configure(&input,
- &output,
- m_Mean.get(),
- m_Variance.get(),
- m_Beta.get(),
- m_Gamma.get(),
- m_Data.m_Parameters.m_Eps);
-
- InitializeArmComputeClTensorData(*m_Mean, m_Data.m_Mean);
- InitializeArmComputeClTensorData(*m_Variance, m_Data.m_Variance);
- InitializeArmComputeClTensorData(*m_Beta, m_Data.m_Beta);
- InitializeArmComputeClTensorData(*m_Gamma, m_Data.m_Gamma);
-
- // Force Compute Library to perform the necessary copying and reshaping, after which
- // delete all the input tensors that will no longer be needed
- m_Layer.prepare();
- FreeUnusedTensors();
-}
-
-void ClBatchNormalizationFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClBatchNormalizationFloatWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-void ClBatchNormalizationFloatWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_Mean);
- FreeTensorIfUnused(m_Variance);
- FreeTensorIfUnused(m_Gamma);
- FreeTensorIfUnused(m_Beta);
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.hpp b/src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.hpp
deleted file mode 100644
index e94bef20ac..0000000000
--- a/src/backends/cl/workloads/ClBatchNormalizationFloatWorkload.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/CLTensor.h>
-#include <arm_compute/runtime/CL/functions/CLBatchNormalizationLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClBatchNormalizationValidate(const TensorInfo& input,
- const TensorInfo& output,
- const TensorInfo& mean,
- const TensorInfo& var,
- const TensorInfo& beta,
- const TensorInfo& gamma,
- const BatchNormalizationDescriptor& desc);
-
-class ClBatchNormalizationFloatWorkload : public FloatWorkload<BatchNormalizationQueueDescriptor>
-{
-public:
- ClBatchNormalizationFloatWorkload(const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- using FloatWorkload<BatchNormalizationQueueDescriptor>::FloatWorkload;
- void Execute() const override;
-
-private:
- mutable arm_compute::CLBatchNormalizationLayer m_Layer;
-
- std::unique_ptr<arm_compute::CLTensor> m_Mean;
- std::unique_ptr<arm_compute::CLTensor> m_Variance;
- std::unique_ptr<arm_compute::CLTensor> m_Gamma;
- std::unique_ptr<arm_compute::CLTensor> m_Beta;
-
- void FreeUnusedTensors();
-};
-
-} //namespace armnn
-
-
-
-
diff --git a/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp b/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp
deleted file mode 100644
index a714e031e4..0000000000
--- a/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClBatchToSpaceNdWorkload.hpp"
-
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-ClBatchToSpaceNdWorkload::ClBatchToSpaceNdWorkload(const BatchToSpaceNdQueueDescriptor& desc,
- const WorkloadInfo& info)
- : BaseWorkload<BatchToSpaceNdQueueDescriptor>(desc, info)
-{
- m_Data.ValidateInputsOutputs("ClBatchToSpaceNdWorkload", 1, 1);
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- input.info()->set_data_layout(aclDataLayout);
-
- // ArmNN blockShape is [H, W] Cl asks for W, H
- int32_t blockHeight = boost::numeric_cast<int32_t>(desc.m_Parameters.m_BlockShape[0]);
- int32_t blockWidth = boost::numeric_cast<int32_t>(desc.m_Parameters.m_BlockShape[1]);
-
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- output.info()->set_data_layout(aclDataLayout);
-
- m_Layer.configure(&input, blockWidth, blockHeight, &output);
-}
-
-void ClBatchToSpaceNdWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClBatchToSpaceNdWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClBatchToSpaceNdWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const BatchToSpaceNdDescriptor& desc) {
- DataLayout dataLayout = desc.m_DataLayout;
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);
-
- // ArmNN blockShape is [H, W] Cl asks for W, H
- int32_t blockHeight = boost::numeric_cast<int32_t>(desc.m_BlockShape[0]);
- int32_t blockWidth = boost::numeric_cast<int32_t>(desc.m_BlockShape[1]);
-
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);
-
- const arm_compute::Status aclStatus = arm_compute::CLBatchToSpaceLayer::validate(&aclInputInfo,
- blockWidth,
- blockHeight,
- &aclOutputInfo);
- return aclStatus;
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.hpp b/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.hpp
deleted file mode 100644
index 881b294097..0000000000
--- a/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-#include <arm_compute/runtime/CL/functions/CLBatchToSpaceLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClBatchToSpaceNdWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const BatchToSpaceNdDescriptor& desc);
-
-class ClBatchToSpaceNdWorkload : public BaseWorkload<BatchToSpaceNdQueueDescriptor>
-{
-public:
- ClBatchToSpaceNdWorkload(const BatchToSpaceNdQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
-
- mutable arm_compute::CLBatchToSpaceLayer m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConcatWorkload.cpp b/src/backends/cl/workloads/ClConcatWorkload.cpp
deleted file mode 100644
index 5370466163..0000000000
--- a/src/backends/cl/workloads/ClConcatWorkload.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "ClConcatWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-#include <arm_compute/core/Types.h>
-#include <arm_compute/runtime/CL/functions/CLConcatenateLayer.h>
-
-#include <boost/polymorphic_pointer_cast.hpp>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-namespace
-{
-size_t CalcAxis(const OriginsDescriptor& desc)
-{
- return (desc.GetNumDimensions() - desc.GetConcatAxis()) - 1;
-}
-} //namespace
-
-arm_compute::Status ClConcatWorkloadValidate(const std::vector<const TensorInfo*>& inputs,
- const TensorInfo& output,
- const OriginsDescriptor& descriptor)
-{
- std::vector<arm_compute::TensorInfo> aclInputs;
- for (const TensorInfo* input : inputs)
- {
- arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, armnn::DataLayout::NCHW);
- aclInputs.emplace_back(aclInputInfo);
- }
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
- std::vector<arm_compute::ITensorInfo*> aclInputPtrs;
- for (arm_compute::ITensorInfo& input : aclInputs)
- {
- aclInputPtrs.emplace_back(&input);
- }
-
- size_t aclAxis = CalcAxis(descriptor);
- return arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis);
-}
-
-ClConcatWorkload::ClConcatWorkload(const ConcatQueueDescriptor& descriptor, const WorkloadInfo& info)
-: BaseWorkload<ConcatQueueDescriptor>(descriptor, info)
-{
- bool allInputsAreSubtensors = true;
-
- // Check that all inputs are sub-tensors
- for (auto input : descriptor.m_Inputs)
- {
- if (!input->GetParent())
- {
- // Non sub-tensor input found so we need to execute the concat function
- allInputsAreSubtensors = false;
- break;
- }
- }
-
- if (allInputsAreSubtensors)
- {
- // Can skip configuring the concat function since it's not executed
- return;
- }
-
- std::vector<arm_compute::ICLTensor *> aclInputs;
- for (auto input : m_Data.m_Inputs)
- {
- arm_compute::ICLTensor& aclInput = boost::polymorphic_pointer_downcast<IClTensorHandle>(input)->GetTensor();
- aclInputs.emplace_back(&aclInput);
- }
- arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast<IClTensorHandle>(
- m_Data.m_Outputs[0])->GetTensor();
-
- // Create the layer function
- auto layer = std::make_unique<arm_compute::CLConcatenateLayer>();
-
- // Configure input and output tensors
- size_t aclAxis = CalcAxis(descriptor.m_Parameters);
- layer->configure(aclInputs, &output, aclAxis);
-
- // Prepare
- layer->prepare();
- m_Layer = std::move(layer);
-}
-
-void ClConcatWorkload::Execute() const
-{
- if (m_Layer)
- {
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClConcatWorkload_Execute");
- m_Layer->run();
- }
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConcatWorkload.hpp b/src/backends/cl/workloads/ClConcatWorkload.hpp
deleted file mode 100644
index 772bc094ea..0000000000
--- a/src/backends/cl/workloads/ClConcatWorkload.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/IFunction.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClConcatWorkloadValidate(const std::vector<const TensorInfo*>& inputs,
- const TensorInfo& output,
- const OriginsDescriptor& descriptor);
-
-class ClConcatWorkload : public BaseWorkload<ConcatQueueDescriptor>
-{
-public:
- ClConcatWorkload(const ConcatQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable std::unique_ptr<arm_compute::IFunction> m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConstantWorkload.cpp b/src/backends/cl/workloads/ClConstantWorkload.cpp
deleted file mode 100644
index 39ae14eaf3..0000000000
--- a/src/backends/cl/workloads/ClConstantWorkload.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClConstantWorkload.hpp"
-
-#include <Half.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-ClConstantWorkload::ClConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<ConstantQueueDescriptor>(descriptor, info)
- , m_RanOnce(false)
-{
-}
-
-void ClConstantWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClConstantWorkload_Execute");
-
- // The intermediate tensor held by the corresponding layer output handler can be initialised with the given data
- // on the first inference, then reused for subsequent inferences.
- // The initialisation cannot happen at workload construction time since the ACL kernel for the next layer may not
- // have been configured at the time.
- if (!m_RanOnce)
- {
- const ConstantQueueDescriptor& data = this->m_Data;
-
- BOOST_ASSERT(data.m_LayerOutput != nullptr);
- arm_compute::CLTensor& output = static_cast<ClTensorHandle*>(data.m_Outputs[0])->GetTensor();
- arm_compute::DataType computeDataType = static_cast<ClTensorHandle*>(data.m_Outputs[0])->GetDataType();
-
- switch (computeDataType)
- {
- case arm_compute::DataType::F16:
- {
- CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor<Half>());
- break;
- }
- case arm_compute::DataType::F32:
- {
- CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor<float>());
- break;
- }
- case arm_compute::DataType::QASYMM8:
- {
- CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor<uint8_t>());
- break;
- }
- default:
- {
- BOOST_ASSERT_MSG(false, "Unknown data type");
- break;
- }
- }
-
- m_RanOnce = true;
- }
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConstantWorkload.hpp b/src/backends/cl/workloads/ClConstantWorkload.hpp
deleted file mode 100644
index 75325dc409..0000000000
--- a/src/backends/cl/workloads/ClConstantWorkload.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-namespace armnn
-{
-class ClConstantWorkload : public BaseWorkload<ConstantQueueDescriptor>
-{
-public:
- ClConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable bool m_RanOnce;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConvertFp16ToFp32Workload.cpp b/src/backends/cl/workloads/ClConvertFp16ToFp32Workload.cpp
deleted file mode 100644
index d2e86f8c94..0000000000
--- a/src/backends/cl/workloads/ClConvertFp16ToFp32Workload.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClConvertFp16ToFp32Workload.hpp"
-#include <cl/ClTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-static constexpr arm_compute::ConvertPolicy g_AclConvertPolicy = arm_compute::ConvertPolicy::SATURATE;
-
-ClConvertFp16ToFp32Workload::ClConvertFp16ToFp32Workload(
- const ConvertFp16ToFp32QueueDescriptor& descriptor, const WorkloadInfo& info) :
- Float16ToFloat32Workload<ConvertFp16ToFp32QueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("ClConvertFp16ToFp32Workload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.configure(&input, &output, g_AclConvertPolicy, 0);
-}
-
-void ClConvertFp16ToFp32Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClConvertFp16ToFp32Workload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClConvertFp16ToFp32WorkloadValidate(const TensorInfo& input, const TensorInfo& output)
-{
- if (input.GetDataType() != DataType::Float16)
- {
- return arm_compute::Status(arm_compute::ErrorCode::RUNTIME_ERROR, "Input should be Float16");
- }
- if (output.GetDataType() != DataType::Float32)
- {
- return arm_compute::Status(arm_compute::ErrorCode::RUNTIME_ERROR, "Output should be Float32");
- }
-
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLDepthConvertLayer::validate(
- &aclInputInfo, &aclOutputInfo, g_AclConvertPolicy, 0);
-
- return aclStatus;
-}
-
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConvertFp16ToFp32Workload.hpp b/src/backends/cl/workloads/ClConvertFp16ToFp32Workload.hpp
deleted file mode 100644
index ef5c9b6497..0000000000
--- a/src/backends/cl/workloads/ClConvertFp16ToFp32Workload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDepthConvertLayer.h>
-
-namespace armnn
-{
-
-class ClConvertFp16ToFp32Workload : public Float16ToFloat32Workload<ConvertFp16ToFp32QueueDescriptor>
-{
-public:
-
- ClConvertFp16ToFp32Workload(const ConvertFp16ToFp32QueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- mutable arm_compute::CLDepthConvertLayer m_Layer;
-};
-
-arm_compute::Status ClConvertFp16ToFp32WorkloadValidate(const TensorInfo& input, const TensorInfo& output);
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConvertFp32ToFp16Workload.cpp b/src/backends/cl/workloads/ClConvertFp32ToFp16Workload.cpp
deleted file mode 100644
index 3f528a1532..0000000000
--- a/src/backends/cl/workloads/ClConvertFp32ToFp16Workload.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClConvertFp32ToFp16Workload.hpp"
-#include <cl/ClTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-static constexpr arm_compute::ConvertPolicy g_AclConvertPolicy = arm_compute::ConvertPolicy::SATURATE;
-
-ClConvertFp32ToFp16Workload::ClConvertFp32ToFp16Workload(
- const ConvertFp32ToFp16QueueDescriptor& descriptor, const WorkloadInfo& info) :
- Float32ToFloat16Workload<ConvertFp32ToFp16QueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("ClConvertFp32ToFp16Workload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.configure(&input, &output, g_AclConvertPolicy, 0);
-}
-
-void ClConvertFp32ToFp16Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClConvertFp32ToFp16Workload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClConvertFp32ToFp16WorkloadValidate(const TensorInfo& input, const TensorInfo& output)
-{
- if (input.GetDataType() != DataType::Float32)
- {
- return arm_compute::Status(arm_compute::ErrorCode::RUNTIME_ERROR, "Input should be Float32");
- }
- if (output.GetDataType() != DataType::Float16)
- {
- return arm_compute::Status(arm_compute::ErrorCode::RUNTIME_ERROR, "Output should be Float16");
- }
-
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLDepthConvertLayer::validate(
- &aclInputInfo, &aclOutputInfo, g_AclConvertPolicy, 0);
-
- return aclStatus;
-}
-
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConvertFp32ToFp16Workload.hpp b/src/backends/cl/workloads/ClConvertFp32ToFp16Workload.hpp
deleted file mode 100644
index 6e04e39425..0000000000
--- a/src/backends/cl/workloads/ClConvertFp32ToFp16Workload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDepthConvertLayer.h>
-
-namespace armnn
-{
-
-class ClConvertFp32ToFp16Workload : public Float32ToFloat16Workload<ConvertFp32ToFp16QueueDescriptor>
-{
-public:
-
- ClConvertFp32ToFp16Workload(const ConvertFp32ToFp16QueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- mutable arm_compute::CLDepthConvertLayer m_Layer;
-};
-
-arm_compute::Status ClConvertFp32ToFp16WorkloadValidate(const TensorInfo& input, const TensorInfo& output);
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConvolution2dWorkload.cpp b/src/backends/cl/workloads/ClConvolution2dWorkload.cpp
deleted file mode 100644
index e8af0ee3b7..0000000000
--- a/src/backends/cl/workloads/ClConvolution2dWorkload.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClConvolution2dWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLConvolutionLayer.h>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClConvolution2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const Convolution2dDescriptor& descriptor,
- const TensorInfo& weights,
- const Optional<TensorInfo>& biases)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);
-
- const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX,
- descriptor.m_DilationY);
-
- arm_compute::TensorInfo aclBiasesInfo;
- arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr;
-
- if (descriptor.m_BiasEnabled)
- {
- BOOST_ASSERT(biases.has_value());
-
- aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);
- optionalAclBiasesInfo = &aclBiasesInfo;
- }
-
- arm_compute::PadStrideInfo layerInfo = BuildArmComputePadStrideInfo(descriptor);
-
- return arm_compute::CLConvolutionLayer::validate(&aclInputInfo,
- &aclWeightsInfo,
- optionalAclBiasesInfo,
- &aclOutputInfo,
- layerInfo,
- arm_compute::WeightsInfo(),
- aclDilationInfo);
-}
-
-ClConvolution2dWorkload::ClConvolution2dWorkload(const Convolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info, std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
- : BaseWorkload<Convolution2dQueueDescriptor>(descriptor, info)
- , m_ConvolutionLayer(memoryManager)
-{
- // todo: check tensor shapes match.
- const TensorInfo& weightInfo = m_Data.m_Weight->GetTensorInfo();
-
- m_KernelTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_KernelTensor, weightInfo, m_Data.m_Parameters.m_DataLayout);
-
- const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(m_Data.m_Parameters.m_DilationX,
- m_Data.m_Parameters.m_DilationY);
-
- if (m_Data.m_Parameters.m_BiasEnabled)
- {
- m_BiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo(), m_Data.m_Parameters.m_DataLayout);
- }
-
- m_Data.ValidateInputsOutputs("ClConvolution2dWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(m_Data.m_Parameters);
-
- m_ConvolutionLayer.configure(&input,
- m_KernelTensor.get(),
- m_BiasTensor.get(),
- &output,
- padStrideInfo,
- arm_compute::WeightsInfo(),
- aclDilationInfo);
-
- InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
-
- if (m_BiasTensor)
- {
- InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
- }
-
- // Force Compute Library to perform the necessary copying and reshaping, after which
- // delete all the input tensors that will no longer be needed
- m_ConvolutionLayer.prepare();
- FreeUnusedTensors();
-}
-
-void ClConvolution2dWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClConvolution2dWorkload_Execute");
- RunClFunction(m_ConvolutionLayer, CHECK_LOCATION());
-}
-
-void ClConvolution2dWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_KernelTensor);
- FreeTensorIfUnused(m_BiasTensor);
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClConvolution2dWorkload.hpp b/src/backends/cl/workloads/ClConvolution2dWorkload.hpp
deleted file mode 100644
index 6d7e9f3ea1..0000000000
--- a/src/backends/cl/workloads/ClConvolution2dWorkload.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Tensor.hpp>
-#include <armnn/Descriptors.hpp>
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLConvolutionLayer.h>
-#include <arm_compute/runtime/MemoryManagerOnDemand.h>
-
-#include <memory>
-
-namespace armnn
-{
-
-arm_compute::Status ClConvolution2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const Convolution2dDescriptor& descriptor,
- const TensorInfo& weights,
- const Optional<TensorInfo>& biases);
-
-class ClConvolution2dWorkload : public BaseWorkload<Convolution2dQueueDescriptor>
-{
-public:
- ClConvolution2dWorkload(const Convolution2dQueueDescriptor& descriptor, const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLConvolutionLayer m_ConvolutionLayer;
-
- std::unique_ptr<arm_compute::CLTensor> m_KernelTensor;
- std::unique_ptr<arm_compute::CLTensor> m_BiasTensor;
-
- void FreeUnusedTensors();
-};
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClDepthToSpaceWorkload.cpp b/src/backends/cl/workloads/ClDepthToSpaceWorkload.cpp
deleted file mode 100644
index 800a98409e..0000000000
--- a/src/backends/cl/workloads/ClDepthToSpaceWorkload.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDepthToSpaceWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/polymorphic_pointer_cast.hpp>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClDepthToSpaceWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const DepthToSpaceDescriptor& desc)
-{
- DataLayout dataLayout = desc.m_DataLayout;
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);
-
- int32_t blockSize = boost::numeric_cast<int32_t>(desc.m_BlockSize);
-
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);
-
- const arm_compute::Status aclStatus = arm_compute::CLDepthToSpaceLayer::validate(&aclInputInfo,
- &aclOutputInfo,
- blockSize);
- return aclStatus;
-}
-
-ClDepthToSpaceWorkload::ClDepthToSpaceWorkload(const DepthToSpaceQueueDescriptor& desc,
- const WorkloadInfo& info)
- : BaseWorkload<DepthToSpaceQueueDescriptor>(desc, info)
-{
- m_Data.ValidateInputsOutputs("ClDepthToSpaceWorkload", 1, 1);
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
-
- arm_compute::ICLTensor& input =
- boost::polymorphic_pointer_downcast<IClTensorHandle>(m_Data.m_Inputs[0])->GetTensor();
- input.info()->set_data_layout(aclDataLayout);
-
- int32_t blockSize = boost::numeric_cast<int32_t>(desc.m_Parameters.m_BlockSize);
-
- arm_compute::ICLTensor& output =
- boost::polymorphic_pointer_downcast<IClTensorHandle>(m_Data.m_Outputs[0])->GetTensor();
- output.info()->set_data_layout(aclDataLayout);
-
- m_Layer.configure(&input, &output, blockSize);
-}
-
-void ClDepthToSpaceWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthToSpaceWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthToSpaceWorkload.hpp b/src/backends/cl/workloads/ClDepthToSpaceWorkload.hpp
deleted file mode 100644
index de8b496669..0000000000
--- a/src/backends/cl/workloads/ClDepthToSpaceWorkload.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Descriptors.hpp>
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDepthToSpaceLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClDepthToSpaceWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const DepthToSpaceDescriptor& desc);
-
-class ClDepthToSpaceWorkload : public BaseWorkload<DepthToSpaceQueueDescriptor>
-{
-public:
- ClDepthToSpaceWorkload(const DepthToSpaceQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLDepthToSpaceLayer m_Layer;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
deleted file mode 100644
index 858eab4e00..0000000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDepthwiseConvolutionWorkload.hpp"
-
-#include <ResolveType.hpp>
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <backendsCommon/WorkloadUtils.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDepthwiseConvolutionLayer.h>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const DepthwiseConvolution2dDescriptor& descriptor,
- const TensorInfo& weights,
- const Optional<TensorInfo>& biases)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- // ArmNN's weight format is [ M, I, H, W ]
- const unsigned int aclDepthMultiplier = weights.GetShape()[0];
-
- // Convert the weight format from ArmNN's [ M, I, H, W ] (does NOT depend on the data layout) to either
- // [ 1, H, W, I * M ] (if NHWC) or [ 1, I * M, H, W ] (if NCHW), as required by the compute library
- TensorInfo weightsPermuted = ConvertWeightTensorInfoFromArmnnToAcl(weights, descriptor.m_DataLayout);
-
- // Convert the weights into the compute library format
- const arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weightsPermuted, descriptor.m_DataLayout);
-
- arm_compute::TensorInfo aclBiasesInfo;
- arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr;
-
- if (descriptor.m_BiasEnabled)
- {
- BOOST_ASSERT(biases.has_value());
-
- aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);
- optionalAclBiasesInfo = &aclBiasesInfo;
- }
-
- const arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);
- const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(
- descriptor.m_DilationX,
- descriptor.m_DilationY);
-
- return arm_compute::CLDepthwiseConvolutionLayer::validate(&aclInputInfo,
- &aclWeightsInfo,
- optionalAclBiasesInfo,
- &aclOutputInfo,
- aclPadStrideInfo,
- aclDepthMultiplier,
- arm_compute::ActivationLayerInfo(),
- aclDilationInfo);
-
-}
-
-ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload(
- const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<DepthwiseConvolution2dQueueDescriptor>(descriptor, info)
-{
- // Allocate a buffer for the swizzling of the weight tensor
- std::unique_ptr<unsigned char[]> permuteBuffer(new unsigned char[m_Data.m_Weight->GetTensorInfo().GetNumBytes()]);
-
- // Convert the weight format from ArmNN's [ M, I, H, W ] (does NOT depend on the data layout) to either
- // [ 1, H, W, I * M ] (if NHWC) or [ 1, I * M, H, W ] (if NCHW), as required by the compute library
- ConstTensor weightPermuted = ConvertWeightTensorFromArmnnToAcl(m_Data.m_Weight,
- m_Data.m_Parameters.m_DataLayout,
- permuteBuffer.get());
-
- // Convert the weights into the compute library format
- m_KernelTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_KernelTensor, weightPermuted.GetInfo(), m_Data.m_Parameters.m_DataLayout);
-
- if (m_Data.m_Parameters.m_BiasEnabled)
- {
- m_BiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo(), m_Data.m_Parameters.m_DataLayout);
- }
-
- const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(
- m_Data.m_Parameters.m_DilationX,
- m_Data.m_Parameters.m_DilationY);
-
-
- std::string name = std::string("ClDepthwiseConvolutionWorkload");
- m_Data.ValidateInputsOutputs(name, 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- // ArmNN's weight format is [ M, I, H, W ]
- auto& weightInfo = m_Data.m_Weight->GetTensorInfo();
-
- // Get the depth multiplier
- const unsigned int depthMultiplier = weightInfo.GetShape()[0];
-
- arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(m_Data.m_Parameters);
-
- m_DepthwiseConvolutionLayer = std::make_unique<arm_compute::CLDepthwiseConvolutionLayer>();
- static_cast<arm_compute::CLDepthwiseConvolutionLayer*>(m_DepthwiseConvolutionLayer.get())->configure(
- &input,
- m_KernelTensor.get(),
- m_BiasTensor.get(),
- &output,
- padStrideInfo,
- depthMultiplier,
- arm_compute::ActivationLayerInfo(),
- aclDilationInfo);
-
- BOOST_ASSERT(m_DepthwiseConvolutionLayer);
-
- ScopedCpuTensorHandle weightsPermutedHandle(weightPermuted);
- InitializeArmComputeClTensorData(*m_KernelTensor, &weightsPermutedHandle);
-
- if (m_BiasTensor)
- {
- InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
- }
-
- m_DepthwiseConvolutionLayer->prepare();
- FreeUnusedTensors();
-}
-
-void ClDepthwiseConvolutionWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_KernelTensor);
- FreeTensorIfUnused(m_BiasTensor);
-}
-
-void ClDepthwiseConvolutionWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionWorkload_Execute");
- BOOST_ASSERT(m_DepthwiseConvolutionLayer);
-
- RunClFunction(*m_DepthwiseConvolutionLayer, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
deleted file mode 100644
index fc277b9947..0000000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/IFunction.h>
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/CL/CLTensor.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const DepthwiseConvolution2dDescriptor& descriptor,
- const TensorInfo& weights,
- const Optional<TensorInfo>& biases);
-
-class ClDepthwiseConvolutionWorkload : public BaseWorkload<DepthwiseConvolution2dQueueDescriptor>
-{
-public:
- using BaseWorkload<DepthwiseConvolution2dQueueDescriptor>::m_Data;
-
- ClDepthwiseConvolutionWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info);
-
- void Execute() const override;
-
-protected:
- std::unique_ptr<arm_compute::IFunction> m_DepthwiseConvolutionLayer;
-
- std::unique_ptr<arm_compute::CLTensor> m_KernelTensor;
- std::unique_ptr<arm_compute::CLTensor> m_BiasTensor;
-
- void FreeUnusedTensors();
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClDequantizeWorkload.cpp b/src/backends/cl/workloads/ClDequantizeWorkload.cpp
deleted file mode 100644
index eca795de7e..0000000000
--- a/src/backends/cl/workloads/ClDequantizeWorkload.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDequantizeWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <arm_compute/core/Types.h>
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-
-#include <boost/polymorphic_pointer_cast.hpp>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClDequantizeWorkloadValidate(const TensorInfo& input, const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLDequantizationLayer::validate(&aclInputInfo, &aclOutputInfo);
-}
-
-ClDequantizeWorkload::ClDequantizeWorkload(const DequantizeQueueDescriptor& descriptor,
- const WorkloadInfo& workloadInfo)
- : BaseWorkload<DequantizeQueueDescriptor>(descriptor, workloadInfo)
-{
- m_Data.ValidateInputsOutputs("ClDequantizeWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = boost::polymorphic_pointer_downcast<IClTensorHandle>(
- m_Data.m_Inputs[0])->GetTensor();
-
- arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast<IClTensorHandle>(
- m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.reset(new arm_compute::CLDequantizationLayer());
- m_Layer->configure(&input, &output);
- m_Layer->prepare();
-}
-
-void ClDequantizeWorkload::Execute() const
-{
- if (m_Layer)
- {
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClDequantizeWorkload_Execute");
- m_Layer->run();
- }
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClDequantizeWorkload.hpp b/src/backends/cl/workloads/ClDequantizeWorkload.hpp
deleted file mode 100644
index 6e61da2ebf..0000000000
--- a/src/backends/cl/workloads/ClDequantizeWorkload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDequantizationLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClDequantizeWorkloadValidate(const TensorInfo& input, const TensorInfo& output);
-
-class ClDequantizeWorkload : public BaseWorkload<DequantizeQueueDescriptor>
-{
-public:
- ClDequantizeWorkload(const DequantizeQueueDescriptor& descriptor, const WorkloadInfo& workloadInfo);
-
- void Execute() const override;
-
-private:
- mutable std::unique_ptr<arm_compute::CLDequantizationLayer> m_Layer;
-};
-
-} // namespace armnn \ No newline at end of file
diff --git a/src/backends/cl/workloads/ClDivisionFloatWorkload.cpp b/src/backends/cl/workloads/ClDivisionFloatWorkload.cpp
deleted file mode 100644
index 2a27f8a9bc..0000000000
--- a/src/backends/cl/workloads/ClDivisionFloatWorkload.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDivisionFloatWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-arm_compute::Status ClDivisionWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLArithmeticDivision::validate(&aclInput1, &aclInput2, &aclOutput);
-}
-
-
-ClDivisionFloatWorkload::ClDivisionFloatWorkload(const DivisionQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : FloatWorkload<DivisionQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClDivisionFloatWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- // Construct
- m_ArithmeticDivision.configure(&input0, &input1, &output);
-}
-
-void ClDivisionFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClDivisionFloatWorkload_Execute");
- RunClFunction(m_ArithmeticDivision, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClDivisionFloatWorkload.hpp b/src/backends/cl/workloads/ClDivisionFloatWorkload.hpp
deleted file mode 100644
index ddca87d78a..0000000000
--- a/src/backends/cl/workloads/ClDivisionFloatWorkload.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLElementwiseOperations.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClDivisionWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-
-class ClDivisionFloatWorkload : public FloatWorkload<DivisionQueueDescriptor>
-{
-public:
- ClDivisionFloatWorkload(const DivisionQueueDescriptor& descriptor, const
- WorkloadInfo& info);
-
- using FloatWorkload<DivisionQueueDescriptor>::FloatWorkload;
- void Execute() const override;
-
-private:
- mutable arm_compute::CLArithmeticDivision m_ArithmeticDivision;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClFloorFloatWorkload.cpp b/src/backends/cl/workloads/ClFloorFloatWorkload.cpp
deleted file mode 100644
index f38342ed39..0000000000
--- a/src/backends/cl/workloads/ClFloorFloatWorkload.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClFloorFloatWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-arm_compute::Status ClFloorWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLFloor::validate(&aclInput, &aclOutput);
-}
-
-ClFloorFloatWorkload::ClFloorFloatWorkload(const FloorQueueDescriptor& descriptor, const WorkloadInfo& info)
- : FloatWorkload<FloorQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClFloorFloatWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.configure(&input, &output);
-}
-
-void ClFloorFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClFloorFloatWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClFloorFloatWorkload.hpp b/src/backends/cl/workloads/ClFloorFloatWorkload.hpp
deleted file mode 100644
index 1ddaddff0b..0000000000
--- a/src/backends/cl/workloads/ClFloorFloatWorkload.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLFloor.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClFloorWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output);
-
-class ClFloorFloatWorkload : public FloatWorkload<FloorQueueDescriptor>
-{
-public:
- ClFloorFloatWorkload(const FloorQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLFloor m_Layer;
-};
-
-} //namespace armnn
-
-
-
-
diff --git a/src/backends/cl/workloads/ClFullyConnectedWorkload.cpp b/src/backends/cl/workloads/ClFullyConnectedWorkload.cpp
deleted file mode 100644
index 60eb138b42..0000000000
--- a/src/backends/cl/workloads/ClFullyConnectedWorkload.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClFullyConnectedWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClFullyConnectedWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const TensorInfo& weights,
- const TensorInfo& biases,
- const FullyConnectedDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output);
- const arm_compute::TensorInfo aclWeights = BuildArmComputeTensorInfo(weights);
-
- arm_compute::TensorInfo aclBiases;
- arm_compute::TensorInfo *optionalAclBiases = nullptr;
- if (descriptor.m_BiasEnabled)
- {
- aclBiases = BuildArmComputeTensorInfo(biases);
- optionalAclBiases = &aclBiases;
- }
-
- const arm_compute::FullyConnectedLayerInfo fullyConnectedLayerInfo =
- ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo(descriptor);
-
- return arm_compute::CLFullyConnectedLayer::validate(&aclInput,
- &aclWeights,
- optionalAclBiases,
- &aclOutput,
- fullyConnectedLayerInfo);
-}
-
-ClFullyConnectedWorkload::ClFullyConnectedWorkload(const FullyConnectedQueueDescriptor& descriptor,
- const WorkloadInfo& info, std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
- : BaseWorkload<FullyConnectedQueueDescriptor>(descriptor, info)
- , m_FullyConnectedLayer(memoryManager)
-{
- m_WeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_WeightsTensor, m_Data.m_Weight->GetTensorInfo());
-
- if (m_Data.m_Parameters.m_BiasEnabled)
- {
- m_BiasesTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_BiasesTensor, m_Data.m_Bias->GetTensorInfo());
- }
-
- m_Data.ValidateInputsOutputs("ClFullyConnectedWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- // Construct
- arm_compute::FullyConnectedLayerInfo fc_info;
- fc_info.transpose_weights = m_Data.m_Parameters.m_TransposeWeightMatrix;
- m_FullyConnectedLayer.configure(&input, m_WeightsTensor.get(), m_BiasesTensor.get(), &output, fc_info);
-
- InitializeArmComputeClTensorData(*m_WeightsTensor, m_Data.m_Weight);
-
- if (m_BiasesTensor)
- {
- InitializeArmComputeClTensorData(*m_BiasesTensor, m_Data.m_Bias);
- }
-
- // Force Compute Library to perform the necessary copying and reshaping, after which
- // delete all the input tensors that will no longer be needed
- m_FullyConnectedLayer.prepare();
- FreeUnusedTensors();
-}
-
-void ClFullyConnectedWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClFullyConnectedWorkload_Execute");
- RunClFunction(m_FullyConnectedLayer, CHECK_LOCATION());
-}
-
-void ClFullyConnectedWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_WeightsTensor);
- FreeTensorIfUnused(m_BiasesTensor);
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClFullyConnectedWorkload.hpp b/src/backends/cl/workloads/ClFullyConnectedWorkload.hpp
deleted file mode 100644
index e13436eaa5..0000000000
--- a/src/backends/cl/workloads/ClFullyConnectedWorkload.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLFullyConnectedLayer.h>
-#include <arm_compute/runtime/MemoryManagerOnDemand.h>
-
-#include <memory>
-
-namespace armnn
-{
-
-arm_compute::Status ClFullyConnectedWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const TensorInfo& weights,
- const TensorInfo& biases,
- const FullyConnectedDescriptor& descriptor);
-
-class ClFullyConnectedWorkload : public armnn::BaseWorkload<armnn::FullyConnectedQueueDescriptor>
-{
-public:
- ClFullyConnectedWorkload(const armnn::FullyConnectedQueueDescriptor& descriptor,
- const armnn::WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
-
- using armnn::BaseWorkload<armnn::FullyConnectedQueueDescriptor>::m_Data;
- void Execute() const override;
-
-private:
- mutable arm_compute::CLFullyConnectedLayer m_FullyConnectedLayer;
-
- std::unique_ptr<arm_compute::CLTensor> m_WeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_BiasesTensor;
-
- void FreeUnusedTensors();
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClGreaterWorkload.cpp b/src/backends/cl/workloads/ClGreaterWorkload.cpp
deleted file mode 100644
index b086122bdc..0000000000
--- a/src/backends/cl/workloads/ClGreaterWorkload.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClGreaterWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClGreaterWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLComparison::validate(
- &aclInput0Info,
- &aclInput1Info,
- &aclOutputInfo,
- arm_compute::ComparisonOperation::Greater);
-
- return aclStatus;
-}
-
-template<DataType T>
-ClGreaterWorkload<T>::ClGreaterWorkload(const GreaterQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : MultiTypedWorkload<GreaterQueueDescriptor, T, DataType::Boolean>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClGreaterWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_GreaterLayer.configure(&input0, &input1, &output, arm_compute::ComparisonOperation::Greater);
-}
-
-template<DataType T>
-void ClGreaterWorkload<T>::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClGreaterWorkload_Execute");
- RunClFunction(m_GreaterLayer, CHECK_LOCATION());
-}
-
-template class ClGreaterWorkload<DataType::Float32>;
-template class ClGreaterWorkload<DataType::QAsymmU8>;
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClGreaterWorkload.hpp b/src/backends/cl/workloads/ClGreaterWorkload.hpp
deleted file mode 100644
index 862e168334..0000000000
--- a/src/backends/cl/workloads/ClGreaterWorkload.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLComparison.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClGreaterWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-
-template<DataType T>
-class ClGreaterWorkload : public MultiTypedWorkload<GreaterQueueDescriptor, T, DataType::Boolean>
-{
-public:
- ClGreaterWorkload(const GreaterQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- using MultiTypedWorkload<GreaterQueueDescriptor, T, DataType::Boolean>::m_Data;
- mutable arm_compute::CLComparison m_GreaterLayer;
-};
-
-using ClGreaterFloat32Workload = ClGreaterWorkload<DataType::Float32>;
-using ClGreaterUint8Workload = ClGreaterWorkload<DataType::QAsymmU8>;
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClInstanceNormalizationWorkload.cpp b/src/backends/cl/workloads/ClInstanceNormalizationWorkload.cpp
deleted file mode 100644
index 50cf345a7f..0000000000
--- a/src/backends/cl/workloads/ClInstanceNormalizationWorkload.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClInstanceNormalizationWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-
-using namespace armnn::armcomputetensorutils;
-
-namespace armnn
-{
-
-arm_compute::Status ClInstanceNormalizationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const InstanceNormalizationDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- return arm_compute::CLInstanceNormalizationLayer::validate(&aclInputInfo,
- &aclOutputInfo,
- descriptor.m_Gamma,
- descriptor.m_Beta,
- descriptor.m_Eps);
-}
-
-ClInstanceNormalizationWorkload::ClInstanceNormalizationWorkload(
- const InstanceNormalizationQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<InstanceNormalizationQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClInstanceNormalizationWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- m_Layer.configure(&input,
- &output,
- descriptor.m_Parameters.m_Gamma,
- descriptor.m_Parameters.m_Beta,
- descriptor.m_Parameters.m_Eps);
-};
-
-void ClInstanceNormalizationWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClInstanceNormalizationWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClInstanceNormalizationWorkload.hpp b/src/backends/cl/workloads/ClInstanceNormalizationWorkload.hpp
deleted file mode 100644
index 0e37bdcc9b..0000000000
--- a/src/backends/cl/workloads/ClInstanceNormalizationWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLInstanceNormalizationLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClInstanceNormalizationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const InstanceNormalizationDescriptor& descriptor);
-
-class ClInstanceNormalizationWorkload : public BaseWorkload<InstanceNormalizationQueueDescriptor>
-{
-public:
- ClInstanceNormalizationWorkload(const InstanceNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLInstanceNormalizationLayer m_Layer;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClL2NormalizationFloatWorkload.cpp b/src/backends/cl/workloads/ClL2NormalizationFloatWorkload.cpp
deleted file mode 100644
index e1a61277d5..0000000000
--- a/src/backends/cl/workloads/ClL2NormalizationFloatWorkload.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClL2NormalizationFloatWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClL2NormalizationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const L2NormalizationDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- int axis = (descriptor.m_DataLayout == DataLayout::NCHW) ? 2 : 0;
-
- return arm_compute::CLL2NormalizeLayer::validate(&aclInput, &aclOutput, axis, descriptor.m_Eps);
-}
-
-ClL2NormalizationFloatWorkload::ClL2NormalizationFloatWorkload(const L2NormalizationQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : FloatWorkload<L2NormalizationQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClL2NormalizationFloatWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- int axis = (m_Data.m_Parameters.m_DataLayout == DataLayout::NCHW) ? 2 : 0;
-
- m_Layer.configure(&input, &output, axis, m_Data.m_Parameters.m_Eps);
-}
-
-void ClL2NormalizationFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClL2NormalizationFloatWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClL2NormalizationFloatWorkload.hpp b/src/backends/cl/workloads/ClL2NormalizationFloatWorkload.hpp
deleted file mode 100644
index 26aea9fd88..0000000000
--- a/src/backends/cl/workloads/ClL2NormalizationFloatWorkload.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLL2NormalizeLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClL2NormalizationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const L2NormalizationDescriptor& descriptor);
-
-class ClL2NormalizationFloatWorkload : public FloatWorkload<L2NormalizationQueueDescriptor>
-{
-public:
- ClL2NormalizationFloatWorkload(const L2NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- // Purposely not a CLL2Normalize function. See constructor.
- mutable arm_compute::CLL2NormalizeLayer m_Layer;
-};
-
-} //namespace armnn
-
-
-
-
diff --git a/src/backends/cl/workloads/ClLstmFloatWorkload.cpp b/src/backends/cl/workloads/ClLstmFloatWorkload.cpp
deleted file mode 100644
index 2f3ba75275..0000000000
--- a/src/backends/cl/workloads/ClLstmFloatWorkload.cpp
+++ /dev/null
@@ -1,435 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClLstmFloatWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLLSTMLayer.h>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-ClLstmFloatWorkload::ClLstmFloatWorkload(const LstmQueueDescriptor &descriptor, const WorkloadInfo &info)
- : FloatWorkload<LstmQueueDescriptor>(descriptor, info)
-{
- arm_compute::LSTMParams<arm_compute::ICLTensor> lstm_param;
-
- // Basic parameters
- m_InputToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToForgetWeightsTensor, m_Data.m_InputToForgetWeights->GetTensorInfo());
-
- m_InputToCellWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToCellWeightsTensor, m_Data.m_InputToCellWeights->GetTensorInfo());
-
- m_InputToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToOutputWeightsTensor, m_Data.m_InputToOutputWeights->GetTensorInfo());
-
- m_RecurrentToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToForgetWeightsTensor, m_Data.m_RecurrentToForgetWeights->GetTensorInfo());
-
- m_RecurrentToCellWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToCellWeightsTensor, m_Data.m_RecurrentToCellWeights->GetTensorInfo());
-
- m_RecurrentToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToOutputWeightsTensor, m_Data.m_RecurrentToOutputWeights->GetTensorInfo());
-
- m_ForgetGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_ForgetGateBiasTensor, m_Data.m_ForgetGateBias->GetTensorInfo());
-
- m_CellBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_CellBiasTensor, m_Data.m_CellBias->GetTensorInfo());
-
- m_OutputGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_OutputGateBiasTensor, m_Data.m_OutputGateBias->GetTensorInfo());
-
- // for future reference: check the AndroidNN API for the logic here
- if (!m_Data.m_Parameters.m_CifgEnabled)
- {
- m_InputToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToInputWeightsTensor, m_Data.m_InputToInputWeights->GetTensorInfo());
-
- m_RecurrentToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToInputWeightsTensor, m_Data.m_RecurrentToInputWeights->GetTensorInfo());
-
- m_CellToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- if (m_Data.m_CellToInputWeights != nullptr)
- {
- BuildArmComputeTensor(*m_CellToInputWeightsTensor, m_Data.m_CellToInputWeights->GetTensorInfo());
- }
-
- m_InputGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputGateBiasTensor, m_Data.m_InputGateBias->GetTensorInfo());
-
- lstm_param.set_cifg_params(m_InputToInputWeightsTensor.get(),
- m_RecurrentToInputWeightsTensor.get(),
- m_Data.m_CellToInputWeights != nullptr ? m_CellToInputWeightsTensor.get() : nullptr,
- m_InputGateBiasTensor.get());
- }
-
- if (m_Data.m_Parameters.m_ProjectionEnabled)
- {
- m_ProjectionWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_ProjectionWeightsTensor, m_Data.m_ProjectionWeights->GetTensorInfo());
-
- m_ProjectionBiasTensor = std::make_unique<arm_compute::CLTensor>();
- if (m_Data.m_ProjectionBias != nullptr)
- {
- BuildArmComputeTensor(*m_ProjectionBiasTensor, m_Data.m_ProjectionBias->GetTensorInfo());
- }
-
- lstm_param.set_projection_params(m_ProjectionWeightsTensor.get(),
- m_Data.m_ProjectionBias != nullptr ? m_ProjectionBiasTensor.get() : nullptr);
- }
-
- if (m_Data.m_Parameters.m_PeepholeEnabled)
- {
- m_CellToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_CellToForgetWeightsTensor, m_Data.m_CellToForgetWeights->GetTensorInfo());
-
- m_CellToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_CellToOutputWeightsTensor, m_Data.m_CellToOutputWeights->GetTensorInfo());
-
- lstm_param.set_peephole_params(m_CellToForgetWeightsTensor.get(), m_CellToOutputWeightsTensor.get());
- }
-
- if (m_Data.m_Parameters.m_LayerNormEnabled)
- {
- m_InputLayerNormWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- m_ForgetLayerNormWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- m_CellLayerNormWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- m_OutputLayerNormWeightsTensor = std::make_unique<arm_compute::CLTensor>();
-
- if (!m_Data.m_Parameters.m_CifgEnabled)
- {
- BuildArmComputeTensor(*m_InputLayerNormWeightsTensor, m_Data.m_InputLayerNormWeights->GetTensorInfo());
- }
- BuildArmComputeTensor(*m_ForgetLayerNormWeightsTensor, m_Data.m_ForgetLayerNormWeights->GetTensorInfo());
- BuildArmComputeTensor(*m_CellLayerNormWeightsTensor, m_Data.m_CellLayerNormWeights->GetTensorInfo());
- BuildArmComputeTensor(*m_OutputLayerNormWeightsTensor, m_Data.m_OutputLayerNormWeights->GetTensorInfo());
-
- lstm_param.set_layer_normalization_params(m_Data.m_Parameters.m_CifgEnabled ? nullptr :
- m_InputLayerNormWeightsTensor.get(),
- m_ForgetLayerNormWeightsTensor.get(),
- m_CellLayerNormWeightsTensor.get(),
- m_OutputLayerNormWeightsTensor.get());
- }
-
- const arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- const arm_compute::ICLTensor& output_state_in = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- const arm_compute::ICLTensor& cell_state_in = static_cast<IClTensorHandle*>(m_Data.m_Inputs[2])->GetTensor();
-
- arm_compute::ICLTensor& output_state_out = static_cast<IClTensorHandle*>(m_Data.m_Outputs[1])->GetTensor();
- arm_compute::ICLTensor& cell_state_out = static_cast<IClTensorHandle*>(m_Data.m_Outputs[2])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[3])->GetTensor();
-
- // Get the batch_size and the num_units from the cellStateIn dimensions
- const TensorInfo& inputTensorInfo = info.m_InputTensorInfos[2];
- const unsigned int batch_size = boost::numeric_cast<unsigned int>(inputTensorInfo.GetShape()[0]);
- const unsigned int num_units = boost::numeric_cast<unsigned int>(inputTensorInfo.GetShape()[1]);
-
- m_ScratchBuffer = std::make_unique<arm_compute::CLTensor>();
- if (m_Data.m_Parameters.m_CifgEnabled)
- {
- // 2D tensor with dimensions [num_units * 3, batch_size] with CIFG
- armnn::TensorInfo scratchBuffer1({ batch_size, num_units * 3 }, DataType::Float32);
- BuildArmComputeTensor(*m_ScratchBuffer, scratchBuffer1);
- }
- else
- {
- // scratch_buffer [num_units * 4, batch_size] without CIFG
- armnn::TensorInfo scratchBuffer2({ batch_size, num_units * 4 }, DataType::Float32);
- BuildArmComputeTensor(*m_ScratchBuffer, scratchBuffer2);
- }
-
- float cell_threshold = m_Data.m_Parameters.m_ClippingThresCell;
- float projection_threshold = m_Data.m_Parameters.m_ClippingThresProj;
-
- // for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations
- arm_compute::ActivationLayerInfo activationLayerInfo;
- if (m_Data.m_Parameters.m_ActivationFunc == 0)
- {
- // no activation, do nothing
- }
- else if (m_Data.m_Parameters.m_ActivationFunc == 1)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::RELU);
- }
- else if (m_Data.m_Parameters.m_ActivationFunc == 3)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);
- }
- else if (m_Data.m_Parameters.m_ActivationFunc == 4)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);
- }
- else if (m_Data.m_Parameters.m_ActivationFunc == 6)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);
- }
- else
- {
- throw armnn::Exception("Wrong Type of Activation Function!");
- }
-
- m_LstmLayer.configure(&input, m_InputToForgetWeightsTensor.get(), m_InputToCellWeightsTensor.get(),
- m_InputToOutputWeightsTensor.get(), m_RecurrentToForgetWeightsTensor.get(),
- m_RecurrentToCellWeightsTensor.get(), m_RecurrentToOutputWeightsTensor.get(),
- m_ForgetGateBiasTensor.get(), m_CellBiasTensor.get(), m_OutputGateBiasTensor.get(),
- &output_state_in, &cell_state_in, m_ScratchBuffer.get(), &output_state_out,
- &cell_state_out, &output, lstm_param, activationLayerInfo,
- cell_threshold, projection_threshold);
-
- armcomputetensorutils::InitialiseArmComputeTensorEmpty(*m_ScratchBuffer);
-
- InitializeArmComputeClTensorData(*m_InputToForgetWeightsTensor, m_Data.m_InputToForgetWeights);
- InitializeArmComputeClTensorData(*m_InputToCellWeightsTensor, m_Data.m_InputToCellWeights);
- InitializeArmComputeClTensorData(*m_InputToOutputWeightsTensor, m_Data.m_InputToOutputWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToForgetWeightsTensor, m_Data.m_RecurrentToForgetWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToCellWeightsTensor, m_Data.m_RecurrentToCellWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToOutputWeightsTensor, m_Data.m_RecurrentToOutputWeights);
- InitializeArmComputeClTensorData(*m_ForgetGateBiasTensor, m_Data.m_ForgetGateBias);
- InitializeArmComputeClTensorData(*m_CellBiasTensor, m_Data.m_CellBias);
- InitializeArmComputeClTensorData(*m_OutputGateBiasTensor, m_Data.m_OutputGateBias);
-
- if (!m_Data.m_Parameters.m_CifgEnabled)
- {
- InitializeArmComputeClTensorData(*m_InputToInputWeightsTensor, m_Data.m_InputToInputWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToInputWeightsTensor, m_Data.m_RecurrentToInputWeights);
- if (m_Data.m_CellToInputWeights != nullptr)
- {
- InitializeArmComputeClTensorData(*m_CellToInputWeightsTensor, m_Data.m_CellToInputWeights);
- }
- InitializeArmComputeClTensorData(*m_InputGateBiasTensor, m_Data.m_InputGateBias);
- }
-
- if (m_Data.m_Parameters.m_ProjectionEnabled)
- {
- InitializeArmComputeClTensorData(*m_ProjectionWeightsTensor, m_Data.m_ProjectionWeights);
- if (m_Data.m_ProjectionBias != nullptr)
- {
- InitializeArmComputeClTensorData(*m_ProjectionBiasTensor, m_Data.m_ProjectionBias);
- }
- }
-
- if (m_Data.m_Parameters.m_PeepholeEnabled)
- {
- InitializeArmComputeClTensorData(*m_CellToForgetWeightsTensor, m_Data.m_CellToForgetWeights);
- InitializeArmComputeClTensorData(*m_CellToOutputWeightsTensor, m_Data.m_CellToOutputWeights);
- }
-
- if (m_Data.m_Parameters.m_LayerNormEnabled)
- {
- if (!m_Data.m_Parameters.m_CifgEnabled)
- {
- InitializeArmComputeClTensorData(*m_InputLayerNormWeightsTensor, m_Data.m_InputLayerNormWeights);
- }
-
- InitializeArmComputeClTensorData(*m_ForgetLayerNormWeightsTensor, m_Data.m_ForgetLayerNormWeights);
- InitializeArmComputeClTensorData(*m_CellLayerNormWeightsTensor, m_Data.m_CellLayerNormWeights);
- InitializeArmComputeClTensorData(*m_OutputLayerNormWeightsTensor, m_Data.m_OutputLayerNormWeights);
- }
-
- // Force Compute Library to perform the necessary copying and reshaping, after which
- // delete all the input tensors that will no longer be needed
- m_LstmLayer.prepare();
- FreeUnusedTensors();
-}
-
-void ClLstmFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClLstmFloatWorkload_Execute");
- RunClFunction(m_LstmLayer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClLstmFloatWorkloadValidate(const TensorInfo& input, const TensorInfo& outputStateIn,
- const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
- const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
- const TensorInfo& output, const LstmDescriptor& descriptor,
- const LstmInputParamsInfo& paramsInfo)
-{
- arm_compute::LSTMParams<arm_compute::ITensorInfo> lstm_params_info;
-
- // The inputs and the outputs
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputStateInInfo = BuildArmComputeTensorInfo(outputStateIn);
- const arm_compute::TensorInfo aclCellStateInInfo = BuildArmComputeTensorInfo(cellStateIn);
- const arm_compute::TensorInfo aclScratchBufferInfo = BuildArmComputeTensorInfo(scratchBuffer);
- const arm_compute::TensorInfo aclOutputStateOutInfo = BuildArmComputeTensorInfo(outputStateOut);
- const arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- // Basic parameters
- const arm_compute::TensorInfo aclInputToForgetWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());
- const arm_compute::TensorInfo aclInputToCellWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());
- const arm_compute::TensorInfo aclInputToOutputWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());
- const arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());
- const arm_compute::TensorInfo aclRecurrentToCellWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());
- const arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());
- const arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());
- const arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());
- const arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());
-
- arm_compute::TensorInfo aclInputToInputWeightsInfo;
- arm_compute::TensorInfo aclRecurrentToInputWeightsInfo;
- arm_compute::TensorInfo aclCellToInputWeightsInfo;
- arm_compute::TensorInfo aclInputGateBiasInfo;
- arm_compute::TensorInfo aclProjectionWeightsInfo;
- arm_compute::TensorInfo aclProjectionBiasInfo;
- arm_compute::TensorInfo aclCellToForgetWeightsInfo;
- arm_compute::TensorInfo aclCellToOutputWeightsInfo;
- arm_compute::TensorInfo aclInputLayerNormWeightsInfo;
- arm_compute::TensorInfo aclForgetLayerNormWeightsInfo;
- arm_compute::TensorInfo aclCellLayerNormWeightsInfo;
- arm_compute::TensorInfo aclOutputLayerNormWeightsInfo;
-
- if (!descriptor.m_CifgEnabled)
- {
- aclInputToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());
- aclRecurrentToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());
-
- if (paramsInfo.m_CellToInputWeights != nullptr)
- {
- aclCellToInputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToInputWeights());
- }
- aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());
- lstm_params_info.set_cifg_params(&aclInputToInputWeightsInfo, &aclRecurrentToInputWeightsInfo,
- paramsInfo.m_CellToInputWeights != nullptr ?
- &aclCellToInputWeightsInfo: nullptr,
- &aclInputGateBiasInfo);
- }
-
- if (descriptor.m_ProjectionEnabled)
- {
- aclProjectionWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetProjectionWeights());
-
- if (paramsInfo.m_ProjectionBias != nullptr)
- {
- aclProjectionBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());
- }
- lstm_params_info.set_projection_params(&aclProjectionWeightsInfo,
- paramsInfo.m_ProjectionBias != nullptr ?
- &aclProjectionBiasInfo: nullptr);
- }
-
- if (descriptor.m_PeepholeEnabled)
- {
- aclCellToForgetWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToForgetWeights());
- aclCellToOutputWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellToOutputWeights());
- lstm_params_info.set_peephole_params(&aclCellToForgetWeightsInfo, &aclCellToOutputWeightsInfo);
- }
-
- float cell_threshold = descriptor.m_ClippingThresCell;
- float projection_threshold = descriptor.m_ClippingThresProj;
-
- // for preparing the object for the class ActivationLayerInfo, we need to consider 5 situations
- arm_compute::ActivationLayerInfo activationLayerInfo;
- if (descriptor.m_ActivationFunc == 0)
- {
- // no activation, do nothing
- }
- else if (descriptor.m_ActivationFunc == 1)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::RELU);
- }
- else if (descriptor.m_ActivationFunc == 3)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 6.0);
- }
- else if (descriptor.m_ActivationFunc == 4)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::TANH, 1.0, 1.0);
- }
- else if (descriptor.m_ActivationFunc == 6)
- {
- activationLayerInfo = arm_compute::ActivationLayerInfo(
- arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC);
- }
- else
- {
- throw armnn::Exception("Wrong Type of Activation Function!");
- }
-
- if (descriptor.m_LayerNormEnabled)
- {
- if (!descriptor.m_CifgEnabled)
- {
- aclInputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputLayerNormWeights());
- }
-
- aclForgetLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetLayerNormWeights());
-
- aclCellLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellLayerNormWeights());
-
- aclOutputLayerNormWeightsInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputLayerNormWeights());
-
- lstm_params_info.set_layer_normalization_params(descriptor.m_CifgEnabled ?
- nullptr : &aclInputLayerNormWeightsInfo,
- &aclForgetLayerNormWeightsInfo,
- &aclCellLayerNormWeightsInfo,
- &aclOutputLayerNormWeightsInfo);
- }
-
- return arm_compute::CLLSTMLayer::validate(&aclInputInfo, &aclInputToForgetWeightsInfo,
- &aclInputToCellWeightsInfo,
- &aclInputToOutputWeightsInfo,
- &aclRecurrentToForgetWeightsInfo,
- &aclRecurrentToCellWeightsInfo,
- &aclRecurrentToOutputWeightsInfo,
- &aclForgetGateBiasInfo,
- &aclCellBiasInfo,
- &aclOutputGateBiasInfo,
- &aclOutputStateInInfo, &aclCellStateInInfo,
- &aclScratchBufferInfo, &aclOutputStateOutInfo,
- &aclCellStateOutInfo, &aclOutputInfo,
- lstm_params_info, activationLayerInfo,
- cell_threshold, projection_threshold);
-}
-
-void ClLstmFloatWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_InputToInputWeightsTensor);
- FreeTensorIfUnused(m_InputToForgetWeightsTensor);
- FreeTensorIfUnused(m_InputToCellWeightsTensor);
- FreeTensorIfUnused(m_InputToOutputWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToInputWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToForgetWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToCellWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToOutputWeightsTensor);
- FreeTensorIfUnused(m_CellToInputWeightsTensor);
- FreeTensorIfUnused(m_CellToForgetWeightsTensor);
- FreeTensorIfUnused(m_CellToOutputWeightsTensor);
- FreeTensorIfUnused(m_InputGateBiasTensor);
- FreeTensorIfUnused(m_ForgetGateBiasTensor);
- FreeTensorIfUnused(m_CellBiasTensor);
- FreeTensorIfUnused(m_OutputGateBiasTensor);
- FreeTensorIfUnused(m_ProjectionWeightsTensor);
- FreeTensorIfUnused(m_ProjectionBiasTensor);
- FreeTensorIfUnused(m_ScratchBuffer);
- FreeTensorIfUnused(m_InputLayerNormWeightsTensor);
- FreeTensorIfUnused(m_ForgetLayerNormWeightsTensor);
- FreeTensorIfUnused(m_CellLayerNormWeightsTensor);
- FreeTensorIfUnused(m_OutputLayerNormWeightsTensor);
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClLstmFloatWorkload.hpp b/src/backends/cl/workloads/ClLstmFloatWorkload.hpp
deleted file mode 100644
index b7cb408b40..0000000000
--- a/src/backends/cl/workloads/ClLstmFloatWorkload.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Descriptors.hpp>
-#include <armnn/LstmParams.hpp>
-#include <backendsCommon/Workload.hpp>
-#include <backendsCommon/WorkloadData.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLLSTMLayer.h>
-
-namespace armnn
-{
-
-class ClLstmFloatWorkload : public FloatWorkload<LstmQueueDescriptor>
-{
-public:
- ClLstmFloatWorkload(const LstmQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLLSTMLayer m_LstmLayer;
-
- std::unique_ptr<arm_compute::CLTensor> m_InputToInputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputToForgetWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputToCellWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputToOutputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToInputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToForgetWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToCellWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToOutputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_CellToInputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_CellToForgetWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_CellToOutputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputGateBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_ForgetGateBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_CellBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_OutputGateBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_ProjectionWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_ProjectionBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputLayerNormWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_ForgetLayerNormWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_CellLayerNormWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_OutputLayerNormWeightsTensor;
-
- std::unique_ptr<arm_compute::CLTensor> m_ScratchBuffer;
-
- void FreeUnusedTensors();
-};
-
-arm_compute::Status ClLstmFloatWorkloadValidate(const TensorInfo& input, const TensorInfo& outputStateIn,
- const TensorInfo& cellStateIn, const TensorInfo& scratchBuffer,
- const TensorInfo& outputStateOut, const TensorInfo& cellStateOut,
- const TensorInfo& output, const LstmDescriptor &descriptor,
- const LstmInputParamsInfo& paramsInfo);
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMaximumWorkload.cpp b/src/backends/cl/workloads/ClMaximumWorkload.cpp
deleted file mode 100644
index cd3192d186..0000000000
--- a/src/backends/cl/workloads/ClMaximumWorkload.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClMaximumWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClMaximumWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLElementwiseMax::validate(&aclInput0Info,
- &aclInput1Info,
- &aclOutputInfo);
-
- return aclStatus;
-}
-
-ClMaximumWorkload::ClMaximumWorkload(const MaximumQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<MaximumQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClMaximumWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_MaximumLayer.configure(&input0, &input1, &output);
-}
-
-void ClMaximumWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClMaximumWorkload_Execute");
- RunClFunction(m_MaximumLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMaximumWorkload.hpp b/src/backends/cl/workloads/ClMaximumWorkload.hpp
deleted file mode 100644
index 18f67cddf6..0000000000
--- a/src/backends/cl/workloads/ClMaximumWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLElementwiseOperations.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClMaximumWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-
-class ClMaximumWorkload : public BaseWorkload<MaximumQueueDescriptor>
-{
-public:
- ClMaximumWorkload(const MaximumQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLElementwiseMax m_MaximumLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMeanWorkload.cpp b/src/backends/cl/workloads/ClMeanWorkload.cpp
deleted file mode 100644
index 470b6a883d..0000000000
--- a/src/backends/cl/workloads/ClMeanWorkload.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClMeanWorkload.hpp"
-
-#include <cl/ClTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClMeanValidate(const TensorInfo& input,
- const TensorInfo& output,
- const MeanDescriptor& desc)
-{
- const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- arm_compute::Coordinates coords = BuildArmComputeReductionCoordinates(aclInputInfo.num_dimensions(),
- input.GetNumDimensions(),
- desc.m_Axis);
-
- return arm_compute::CLReduceMean::validate(&aclInputInfo, coords, desc.m_KeepDims, &aclOutputInfo);
-}
-
-ClMeanWorkload::ClMeanWorkload(const MeanQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<MeanQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClMeanWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::Coordinates coords = BuildArmComputeReductionCoordinates(input.info()->num_dimensions(),
- info.m_InputTensorInfos[0].GetNumDimensions(),
- m_Data.m_Parameters.m_Axis);
-
- m_Layer.configure(&input, coords, m_Data.m_Parameters.m_KeepDims, &output);
-}
-
-void ClMeanWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClMeanWorkload_Execute");
- m_Layer.run();
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMeanWorkload.hpp b/src/backends/cl/workloads/ClMeanWorkload.hpp
deleted file mode 100644
index 127c0548b1..0000000000
--- a/src/backends/cl/workloads/ClMeanWorkload.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLReduceMean.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClMeanValidate(const TensorInfo& input,
- const TensorInfo& output,
- const MeanDescriptor& desc);
-
-class ClMeanWorkload : public BaseWorkload<MeanQueueDescriptor>
-{
-public:
- ClMeanWorkload(const MeanQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- // Not using CLMeanStdDev, as 4D input tensor support for Mean has been added to a new function called CLReduceMean.
- mutable arm_compute::CLReduceMean m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMinimumWorkload.cpp b/src/backends/cl/workloads/ClMinimumWorkload.cpp
deleted file mode 100644
index 5f8dfdb8eb..0000000000
--- a/src/backends/cl/workloads/ClMinimumWorkload.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClMinimumWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClMinimumWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLElementwiseMin::validate(&aclInput0Info,
- &aclInput1Info,
- &aclOutputInfo);
-
- return aclStatus;
-}
-
-ClMinimumWorkload::ClMinimumWorkload(const MinimumQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<MinimumQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClMinimumWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_MinimumLayer.configure(&input0, &input1, &output);
-}
-
-void ClMinimumWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClMinimumWorkload_Execute");
- RunClFunction(m_MinimumLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMinimumWorkload.hpp b/src/backends/cl/workloads/ClMinimumWorkload.hpp
deleted file mode 100644
index 55d7eea9dd..0000000000
--- a/src/backends/cl/workloads/ClMinimumWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLElementwiseOperations.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClMinimumWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-
-class ClMinimumWorkload : public BaseWorkload<MinimumQueueDescriptor>
-{
-public:
- ClMinimumWorkload(const MinimumQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLElementwiseMin m_MinimumLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMultiplicationWorkload.cpp b/src/backends/cl/workloads/ClMultiplicationWorkload.cpp
deleted file mode 100644
index f4e7b836ed..0000000000
--- a/src/backends/cl/workloads/ClMultiplicationWorkload.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClMultiplicationWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-arm_compute::Status ClMultiplicationWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput1 = armcomputetensorutils::BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput2 = armcomputetensorutils::BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- // At the time of writing, configure() will fail if a rounding policy other than TO_ZERO is supplied to it,
- // when providing a scale of 1.0 for F32 tensors, even though the provided rounding policy appears to be
- // ignored for F32 tensors.
- return arm_compute::CLPixelWiseMultiplication::validate(&aclInput1,
- &aclInput2,
- &aclOutput,
- 1.0f,
- arm_compute::ConvertPolicy::SATURATE,
- arm_compute::RoundingPolicy::TO_ZERO);
-}
-
-
-ClMultiplicationWorkload::ClMultiplicationWorkload(const MultiplicationQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<MultiplicationQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClMultiplicationWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- // Construct
- m_PixelWiseMultiplication.configure(&input0,
- &input1,
- &output,
- 1.0f,
- arm_compute::ConvertPolicy::SATURATE,
- arm_compute::RoundingPolicy::TO_NEAREST_EVEN);
-}
-
-void ClMultiplicationWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClMultiplicationWorkload_Execute");
- RunClFunction(m_PixelWiseMultiplication, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClMultiplicationWorkload.hpp b/src/backends/cl/workloads/ClMultiplicationWorkload.hpp
deleted file mode 100644
index 732bb16dcc..0000000000
--- a/src/backends/cl/workloads/ClMultiplicationWorkload.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLPixelWiseMultiplication.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClMultiplicationWorkloadValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-
-class ClMultiplicationWorkload : public BaseWorkload<MultiplicationQueueDescriptor>
-{
-public:
- ClMultiplicationWorkload(const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- using BaseWorkload<MultiplicationQueueDescriptor>::BaseWorkload;
- void Execute() const override;
-
-private:
- mutable arm_compute::CLPixelWiseMultiplication m_PixelWiseMultiplication;
-};
-
-} //namespace armnn
-
-
-
diff --git a/src/backends/cl/workloads/ClNormalizationFloatWorkload.cpp b/src/backends/cl/workloads/ClNormalizationFloatWorkload.cpp
deleted file mode 100644
index 5f2fd7ab83..0000000000
--- a/src/backends/cl/workloads/ClNormalizationFloatWorkload.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClNormalizationFloatWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include "ClWorkloadUtils.hpp"
-
-using namespace armnn::armcomputetensorutils;
-
-namespace armnn
-{
-
-arm_compute::Status ClNormalizationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const NormalizationDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- arm_compute::NormalizationLayerInfo layerInfo = BuildArmComputeNormalizationLayerInfo(descriptor);
-
- return arm_compute::CLNormalizationLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);
-}
-
-ClNormalizationFloatWorkload::ClNormalizationFloatWorkload(const NormalizationQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : FloatWorkload<NormalizationQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClNormalizationFloatWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(m_Data.m_Parameters);
-
- m_NormalizationLayer.configure(&input, &output, normalizationInfo);
-};
-
-void ClNormalizationFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClNormalizationFloatWorkload_Execute");
- RunClFunction(m_NormalizationLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClNormalizationFloatWorkload.hpp b/src/backends/cl/workloads/ClNormalizationFloatWorkload.hpp
deleted file mode 100644
index a6d4f25e5e..0000000000
--- a/src/backends/cl/workloads/ClNormalizationFloatWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLNormalizationLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClNormalizationWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const NormalizationDescriptor& descriptor);
-
-class ClNormalizationFloatWorkload : public FloatWorkload<NormalizationQueueDescriptor>
-{
-public:
- ClNormalizationFloatWorkload(const NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLNormalizationLayer m_NormalizationLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClPadWorkload.cpp b/src/backends/cl/workloads/ClPadWorkload.cpp
deleted file mode 100644
index 8a8c34a212..0000000000
--- a/src/backends/cl/workloads/ClPadWorkload.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClPadWorkload.hpp"
-
-#include <cl/ClTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <arm_compute/core/Types.h>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-ClPadWorkload::ClPadWorkload(const PadQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<PadQueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("ClPadWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
-
- std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_Parameters.m_PadList.size());
-
- std::reverse_copy(std::begin(descriptor.m_Parameters.m_PadList),
- std::end(descriptor.m_Parameters.m_PadList),
- std::begin(reversed_PadList));
-
- arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
-
- arm_compute::PixelValue pixelValue = GetPixelValue(input, descriptor.m_Parameters.m_PadValue);
-
- m_Layer.configure(&input, &output, padList, pixelValue);
-}
-
-void ClPadWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClPadWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClPadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const PadDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- std::vector<std::pair<unsigned int, unsigned int>> reversed_PadList(descriptor.m_PadList.size());
-
- std::reverse_copy(std::begin(descriptor.m_PadList),
- std::end(descriptor.m_PadList),
- std::begin(reversed_PadList));
-
- arm_compute::PaddingList padList = static_cast<arm_compute::PaddingList>(reversed_PadList);
-
- const arm_compute::Status aclStatus = arm_compute::CLPadLayer::validate(&aclInputInfo,
- &aclOutputInfo,
- padList);
-
- return aclStatus;
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClPadWorkload.hpp b/src/backends/cl/workloads/ClPadWorkload.hpp
deleted file mode 100644
index e87cbb71c2..0000000000
--- a/src/backends/cl/workloads/ClPadWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/WorkloadData.hpp>
-#include <backendsCommon/Workload.hpp>
-#include <arm_compute/runtime/CL/functions/CLPadLayer.h>
-
-namespace armnn {
-
-class ClPadWorkload : public BaseWorkload<PadQueueDescriptor>
-{
-public:
- ClPadWorkload(const PadQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLPadLayer m_Layer;
-};
-
-arm_compute::Status ClPadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const PadDescriptor& descriptor);
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClPermuteWorkload.cpp b/src/backends/cl/workloads/ClPermuteWorkload.cpp
deleted file mode 100644
index 41bce1d4fa..0000000000
--- a/src/backends/cl/workloads/ClPermuteWorkload.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClPermuteWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <arm_compute/core/Error.h>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-arm_compute::Status ClPermuteWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const PermuteDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);
- const armnn::PermutationVector& mappings = descriptor.m_DimMappings;
-
- return arm_compute::CLPermute::validate(&aclInputInfo, &aclOutputInfo,
- armcomputetensorutils::BuildArmComputePermutationVector(mappings));
-}
-
-ClPermuteWorkload::ClPermuteWorkload(const PermuteQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<PermuteQueueDescriptor>(descriptor, info)
-{
- using armcomputetensorutils::BuildArmComputePermutationVector;
-
- m_Data.ValidateInputsOutputs(GetName(), 1, 1);
-
- const arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- const armnn::PermutationVector& mappings = m_Data.m_Parameters.m_DimMappings;
-
- // Run the layer.
- m_PermuteFunction.configure(&input, &output, BuildArmComputePermutationVector(mappings));
-}
-
-void ClPermuteWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL( GetName() + "_Execute");
- RunClFunction(m_PermuteFunction, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClPermuteWorkload.hpp b/src/backends/cl/workloads/ClPermuteWorkload.hpp
deleted file mode 100644
index 8b5f4c6147..0000000000
--- a/src/backends/cl/workloads/ClPermuteWorkload.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-#include <backendsCommon/WorkloadData.hpp>
-
-#include <armnn/TypesUtils.hpp>
-#include <arm_compute/runtime/CL/functions/CLPermute.h>
-
-#include <string>
-
-namespace armnn
-{
-
-arm_compute::Status ClPermuteWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const PermuteDescriptor& descriptor);
-
-class ClPermuteWorkload : public BaseWorkload<PermuteQueueDescriptor>
-{
-public:
- static const std::string& GetName()
- {
- static const std::string name = std::string("ClPermuteWorkload");
- return name;
- }
-
- ClPermuteWorkload(const PermuteQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- using BaseWorkload<PermuteQueueDescriptor>::m_Data;
- mutable arm_compute::CLPermute m_PermuteFunction;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClPooling2dWorkload.cpp b/src/backends/cl/workloads/ClPooling2dWorkload.cpp
deleted file mode 100644
index 683880439f..0000000000
--- a/src/backends/cl/workloads/ClPooling2dWorkload.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClPooling2dWorkload.hpp"
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClPooling2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const Pooling2dDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor);
-
- return arm_compute::CLPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);
-}
-
-ClPooling2dWorkload::ClPooling2dWorkload(
- const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<Pooling2dQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClPooling2dWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- // flag to use wider accumulators (32 bit instead of 16 for FP16) to improve accuracy
- // enable fp_mixed_precision for the the FP16 cases that
- // accumulation reaches a limit beyond which there is no more increment of the value
- bool fpMixedPrecision = false;
-
- arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(m_Data.m_Parameters, fpMixedPrecision);
-
- // Run the layer.
- m_PoolingLayer.configure(&input, &output, layerInfo);
-}
-
-void ClPooling2dWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClPooling2dWorkload_Execute");
- RunClFunction(m_PoolingLayer, CHECK_LOCATION());
-}
-
-}
diff --git a/src/backends/cl/workloads/ClPooling2dWorkload.hpp b/src/backends/cl/workloads/ClPooling2dWorkload.hpp
deleted file mode 100644
index ce67db2a13..0000000000
--- a/src/backends/cl/workloads/ClPooling2dWorkload.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLPoolingLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClPooling2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const Pooling2dDescriptor& descriptor);
-
-class ClPooling2dWorkload : public BaseWorkload<Pooling2dQueueDescriptor>
-{
-public:
- using BaseWorkload<Pooling2dQueueDescriptor>::m_Data;
-
- ClPooling2dWorkload(const Pooling2dQueueDescriptor& descriptor,
- const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLPoolingLayer m_PoolingLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClPreluWorkload.cpp b/src/backends/cl/workloads/ClPreluWorkload.cpp
deleted file mode 100644
index 1813105c21..0000000000
--- a/src/backends/cl/workloads/ClPreluWorkload.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClPreluWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-
-namespace armnn
-{
-
-arm_compute::Status ClPreluWorkloadValidate(const TensorInfo& input,
- const TensorInfo& alpha,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclAlpha = armcomputetensorutils::BuildArmComputeTensorInfo(alpha);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLPReluLayer::validate(&aclInput,
- &aclAlpha,
- &aclOutput);
-}
-
-ClPreluWorkload::ClPreluWorkload(const PreluQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<PreluQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClPreluWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& alpha = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_PreluLayer.configure(&input, &alpha, &output);
-}
-
-void ClPreluWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClPreluWorkload_Execute");
- RunClFunction(m_PreluLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClPreluWorkload.hpp b/src/backends/cl/workloads/ClPreluWorkload.hpp
deleted file mode 100644
index 9061416431..0000000000
--- a/src/backends/cl/workloads/ClPreluWorkload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLPReluLayer.h>
-
-namespace armnn
-{
-arm_compute::Status ClPreluWorkloadValidate(const TensorInfo& input,
- const TensorInfo& alpha,
- const TensorInfo& output);
-
-class ClPreluWorkload : public BaseWorkload<PreluQueueDescriptor>
-{
-public:
- ClPreluWorkload(const PreluQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLPReluLayer m_PreluLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClQuantizeWorkload.cpp b/src/backends/cl/workloads/ClQuantizeWorkload.cpp
deleted file mode 100644
index 263065a5a4..0000000000
--- a/src/backends/cl/workloads/ClQuantizeWorkload.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClQuantizeWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClQuantizeWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLQuantizationLayer::validate(&aclInputInfo,
- &aclOutputInfo);
-}
-
-ClQuantizeWorkload::ClQuantizeWorkload(const QuantizeQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<QuantizeQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClQuantizeWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.configure(&input, &output);
-}
-
-void ClQuantizeWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClQuantizeWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClQuantizeWorkload.hpp b/src/backends/cl/workloads/ClQuantizeWorkload.hpp
deleted file mode 100644
index f4a7ec64dd..0000000000
--- a/src/backends/cl/workloads/ClQuantizeWorkload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLQuantizationLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClQuantizeWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output);
-
-class ClQuantizeWorkload : public BaseWorkload<QuantizeQueueDescriptor>
-{
-public:
- ClQuantizeWorkload(const QuantizeQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLQuantizationLayer m_Layer;
-};
-
-} //namespace armnn \ No newline at end of file
diff --git a/src/backends/cl/workloads/ClQuantizedLstmWorkload.cpp b/src/backends/cl/workloads/ClQuantizedLstmWorkload.cpp
deleted file mode 100644
index 688ebf9184..0000000000
--- a/src/backends/cl/workloads/ClQuantizedLstmWorkload.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClQuantizedLstmWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <cl/ClTensorHandle.hpp>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClQuantizedLstmWorkloadValidate(const TensorInfo& input, const TensorInfo& previousCellStateIn,
- const TensorInfo& previousOutputIn, const TensorInfo& cellStateOut,
- const TensorInfo& output,
- const QuantizedLstmInputParamsInfo& paramsInfo)
-{
- // Inputs
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclPreviousCellStateInInfo = BuildArmComputeTensorInfo(previousCellStateIn);
- const arm_compute::TensorInfo aclPreviousOutputInInfo = BuildArmComputeTensorInfo(previousOutputIn);
-
- // Outputs
- const arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- // Basic parameters
- const arm_compute::TensorInfo aclInputToInputWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToInputWeights());
- const arm_compute::TensorInfo aclInputToForgetWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToForgetWeights());
- const arm_compute::TensorInfo aclInputToCellWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToCellWeights());
- const arm_compute::TensorInfo aclInputToOutputWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetInputToOutputWeights());
- const arm_compute::TensorInfo aclRecurrentToInputWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToInputWeights());
- const arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToForgetWeights());
- const arm_compute::TensorInfo aclRecurrentToCellWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToCellWeights());
- const arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo
- = BuildArmComputeTensorInfo(paramsInfo.GetRecurrentToOutputWeights());
- const arm_compute::TensorInfo aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetInputGateBias());
- const arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetForgetGateBias());
- const arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetCellBias());
- const arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.GetOutputGateBias());
-
- return arm_compute::CLLSTMLayerQuantized::validate(&aclInputInfo, &aclInputToInputWeightsInfo,
- &aclInputToForgetWeightsInfo, &aclInputToCellWeightsInfo,
- &aclInputToOutputWeightsInfo, &aclRecurrentToInputWeightsInfo,
- &aclRecurrentToForgetWeightsInfo, &aclRecurrentToCellWeightsInfo,
- &aclRecurrentToOutputWeightsInfo, &aclInputGateBiasInfo,
- &aclForgetGateBiasInfo, &aclCellBiasInfo, &aclOutputGateBiasInfo,
- &aclPreviousCellStateInInfo, &aclPreviousOutputInInfo,
- &aclCellStateOutInfo, &aclOutputInfo);
-}
-
-ClQuantizedLstmWorkload::ClQuantizedLstmWorkload(const QuantizedLstmQueueDescriptor &descriptor,
- const WorkloadInfo &info):
- BaseWorkload<QuantizedLstmQueueDescriptor>(descriptor, info)
-{
- m_InputToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToInputWeightsTensor, m_Data.m_InputToInputWeights->GetTensorInfo());
-
- m_InputToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToForgetWeightsTensor, m_Data.m_InputToForgetWeights->GetTensorInfo());
-
- m_InputToCellWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToCellWeightsTensor, m_Data.m_InputToCellWeights->GetTensorInfo());
-
- m_InputToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputToOutputWeightsTensor, m_Data.m_InputToOutputWeights->GetTensorInfo());
-
- m_RecurrentToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToInputWeightsTensor, m_Data.m_RecurrentToInputWeights->GetTensorInfo());
-
- m_RecurrentToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToForgetWeightsTensor, m_Data.m_RecurrentToForgetWeights->GetTensorInfo());
-
- m_RecurrentToCellWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToCellWeightsTensor, m_Data.m_RecurrentToCellWeights->GetTensorInfo());
-
- m_RecurrentToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_RecurrentToOutputWeightsTensor, m_Data.m_RecurrentToOutputWeights->GetTensorInfo());
-
- m_InputGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_InputGateBiasTensor, m_Data.m_InputGateBias->GetTensorInfo());
-
- m_ForgetGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_ForgetGateBiasTensor, m_Data.m_ForgetGateBias->GetTensorInfo());
-
- m_CellBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_CellBiasTensor, m_Data.m_CellBias->GetTensorInfo());
-
- m_OutputGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_OutputGateBiasTensor, m_Data.m_OutputGateBias->GetTensorInfo());
-
- const arm_compute::ICLTensor& inputTensor = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& cellStateInTensor = static_cast<IClTensorHandle*>(m_Data.m_Inputs[1])->GetTensor();
- const arm_compute::ICLTensor& outputStateInTensor = static_cast<IClTensorHandle*>(m_Data.m_Inputs[2])->GetTensor();
-
- arm_compute::ICLTensor& cellStateOutTensor = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- arm_compute::ICLTensor& outputStateOutTensor = static_cast<IClTensorHandle*>(m_Data.m_Outputs[1])->GetTensor();
-
- m_QuantizedLstmLayer.configure(&inputTensor, m_InputToInputWeightsTensor.get(), m_InputToForgetWeightsTensor.get(),
- m_InputToCellWeightsTensor.get(), m_InputToOutputWeightsTensor.get(),
- m_RecurrentToInputWeightsTensor.get(), m_RecurrentToForgetWeightsTensor.get(),
- m_RecurrentToCellWeightsTensor.get(), m_RecurrentToOutputWeightsTensor.get(),
- m_InputGateBiasTensor.get(), m_ForgetGateBiasTensor.get(), m_CellBiasTensor.get(),
- m_OutputGateBiasTensor.get(), &cellStateInTensor, &outputStateInTensor,
- &cellStateOutTensor, &outputStateOutTensor);
-
- InitializeArmComputeClTensorData(*m_InputToInputWeightsTensor, m_Data.m_InputToInputWeights);
- InitializeArmComputeClTensorData(*m_InputToForgetWeightsTensor, m_Data.m_InputToForgetWeights);
- InitializeArmComputeClTensorData(*m_InputToCellWeightsTensor, m_Data.m_InputToCellWeights);
- InitializeArmComputeClTensorData(*m_InputToOutputWeightsTensor, m_Data.m_InputToOutputWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToInputWeightsTensor, m_Data.m_RecurrentToInputWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToForgetWeightsTensor, m_Data.m_RecurrentToForgetWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToCellWeightsTensor, m_Data.m_RecurrentToCellWeights);
- InitializeArmComputeClTensorData(*m_RecurrentToOutputWeightsTensor, m_Data.m_RecurrentToOutputWeights);
- InitializeArmComputeClTensorData(*m_InputGateBiasTensor, m_Data.m_InputGateBias);
- InitializeArmComputeClTensorData(*m_ForgetGateBiasTensor, m_Data.m_ForgetGateBias);
- InitializeArmComputeClTensorData(*m_CellBiasTensor, m_Data.m_CellBias);
- InitializeArmComputeClTensorData(*m_OutputGateBiasTensor, m_Data.m_OutputGateBias);
-
- m_QuantizedLstmLayer.prepare();
- FreeUnusedTensors();
-}
-
-void ClQuantizedLstmWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClQuantizedLstmWorkload_Execute");
- RunClFunction(m_QuantizedLstmLayer, CHECK_LOCATION());
-}
-
-void ClQuantizedLstmWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_InputToInputWeightsTensor);
- FreeTensorIfUnused(m_InputToForgetWeightsTensor);
- FreeTensorIfUnused(m_InputToCellWeightsTensor);
- FreeTensorIfUnused(m_InputToOutputWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToInputWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToForgetWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToCellWeightsTensor);
- FreeTensorIfUnused(m_RecurrentToOutputWeightsTensor);
- FreeTensorIfUnused(m_InputGateBiasTensor);
- FreeTensorIfUnused(m_ForgetGateBiasTensor);
- FreeTensorIfUnused(m_CellBiasTensor);
- FreeTensorIfUnused(m_OutputGateBiasTensor);
-}
-
-} // namespace armnn \ No newline at end of file
diff --git a/src/backends/cl/workloads/ClQuantizedLstmWorkload.hpp b/src/backends/cl/workloads/ClQuantizedLstmWorkload.hpp
deleted file mode 100644
index 580db490d6..0000000000
--- a/src/backends/cl/workloads/ClQuantizedLstmWorkload.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/QuantizedLstmParams.hpp>
-#include <backendsCommon/Workload.hpp>
-#include <backendsCommon/WorkloadData.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLLSTMLayerQuantized.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClQuantizedLstmWorkloadValidate(const TensorInfo& input, const TensorInfo& previousCellStateIn,
- const TensorInfo& previousOutputIn, const TensorInfo& cellStateOut,
- const TensorInfo& output,
- const QuantizedLstmInputParamsInfo& paramsInfo);
-
-class ClQuantizedLstmWorkload : public BaseWorkload<QuantizedLstmQueueDescriptor>
-{
-public:
- ClQuantizedLstmWorkload(const QuantizedLstmQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLLSTMLayerQuantized m_QuantizedLstmLayer;
-
- std::unique_ptr<arm_compute::CLTensor> m_InputToInputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputToForgetWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputToCellWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputToOutputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToInputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToForgetWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToCellWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_RecurrentToOutputWeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_InputGateBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_ForgetGateBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_CellBiasTensor;
- std::unique_ptr<arm_compute::CLTensor> m_OutputGateBiasTensor;
-
- void FreeUnusedTensors();
-};
-
-} //namespace armnn
-
-
diff --git a/src/backends/cl/workloads/ClReshapeWorkload.cpp b/src/backends/cl/workloads/ClReshapeWorkload.cpp
deleted file mode 100644
index d752290444..0000000000
--- a/src/backends/cl/workloads/ClReshapeWorkload.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClReshapeWorkload.hpp"
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-arm_compute::Status ClReshapeWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLReshapeLayer::validate(&aclInputInfo, &aclOutputInfo);
-}
-
-ClReshapeWorkload::ClReshapeWorkload(const ReshapeQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<ReshapeQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClReshapeWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.configure(&input, &output);
-}
-
-void ClReshapeWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClReshapeWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClReshapeWorkload.hpp b/src/backends/cl/workloads/ClReshapeWorkload.hpp
deleted file mode 100644
index d836f1e43a..0000000000
--- a/src/backends/cl/workloads/ClReshapeWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLReshapeLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClReshapeWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output);
-
-class ClReshapeWorkload : public BaseWorkload<ReshapeQueueDescriptor>
-{
-public:
- ClReshapeWorkload(const ReshapeQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLReshapeLayer m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClResizeWorkload.cpp b/src/backends/cl/workloads/ClResizeWorkload.cpp
deleted file mode 100644
index 05b212c3d4..0000000000
--- a/src/backends/cl/workloads/ClResizeWorkload.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClResizeWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-
-using namespace armnn::armcomputetensorutils;
-
-namespace armnn
-{
-
-arm_compute::Status ClResizeWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const ResizeDescriptor& descriptor)
-{
- arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
- arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(descriptor.m_DataLayout);
- aclInputInfo.set_data_layout(aclDataLayout);
- aclOutputInfo.set_data_layout(aclDataLayout);
-
- arm_compute::InterpolationPolicy aclInterpolationPolicy =
- ConvertResizeMethodToAclInterpolationPolicy(descriptor.m_Method);
-
- return arm_compute::CLScale::validate(&aclInputInfo,
- &aclOutputInfo,
- aclInterpolationPolicy,
- arm_compute::BorderMode::REPLICATE,
- arm_compute::PixelValue(0.f),
- arm_compute::SamplingPolicy::TOP_LEFT,
- true,
- descriptor.m_BilinearAlignCorners);
-}
-
-ClResizeWorkload::ClResizeWorkload(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info) :
- BaseWorkload<ResizeQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClResizeWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- arm_compute::InterpolationPolicy aclInterpolationPolicy =
- ConvertResizeMethodToAclInterpolationPolicy(descriptor.m_Parameters.m_Method);
-
- m_ResizeLayer.configure(&input,
- &output,
- aclInterpolationPolicy,
- arm_compute::BorderMode::REPLICATE,
- arm_compute::PixelValue(0.f),
- arm_compute::SamplingPolicy::TOP_LEFT,
- true,
- descriptor.m_Parameters.m_BilinearAlignCorners);
-};
-
-void ClResizeWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClResizeWorkload_Execute");
- RunClFunction(m_ResizeLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClResizeWorkload.hpp b/src/backends/cl/workloads/ClResizeWorkload.hpp
deleted file mode 100644
index ab5b943457..0000000000
--- a/src/backends/cl/workloads/ClResizeWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLScale.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClResizeWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const ResizeDescriptor& descriptor);
-
-class ClResizeWorkload : public BaseWorkload<ResizeQueueDescriptor>
-{
-public:
- ClResizeWorkload(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLScale m_ResizeLayer;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClRsqrtWorkload.cpp b/src/backends/cl/workloads/ClRsqrtWorkload.cpp
deleted file mode 100644
index be687595f7..0000000000
--- a/src/backends/cl/workloads/ClRsqrtWorkload.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClRsqrtWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-
-#include <boost/cast.hpp>
-
-namespace armnn
-{
-
-arm_compute::Status ClRsqrtWorkloadValidate(const TensorInfo& input, const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- return arm_compute::CLRsqrtLayer::validate(&aclInput, &aclOutput);
-}
-
-ClRsqrtWorkload::ClRsqrtWorkload(const RsqrtQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<RsqrtQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClRsqrtWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = boost::polymorphic_downcast<ClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = boost::polymorphic_downcast<ClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- m_RsqrtLayer.configure(&input, &output);
-}
-
-void ClRsqrtWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClRsqrtWorkload_Execute");
- RunClFunction(m_RsqrtLayer, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClRsqrtWorkload.hpp b/src/backends/cl/workloads/ClRsqrtWorkload.hpp
deleted file mode 100644
index 8fb6229160..0000000000
--- a/src/backends/cl/workloads/ClRsqrtWorkload.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/CL/functions/CLElementWiseUnaryLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClRsqrtWorkloadValidate(const TensorInfo& input, const TensorInfo& output);
-
-class ClRsqrtWorkload : public BaseWorkload<RsqrtQueueDescriptor>
-{
-public:
- ClRsqrtWorkload(const RsqrtQueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- mutable arm_compute::CLRsqrtLayer m_RsqrtLayer;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClSliceWorkload.cpp b/src/backends/cl/workloads/ClSliceWorkload.cpp
deleted file mode 100644
index fa99e7f54d..0000000000
--- a/src/backends/cl/workloads/ClSliceWorkload.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSliceWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <cl/ClTensorHandle.hpp>
-
-#include <boost/cast.hpp>
-
-namespace armnn
-{
-
-arm_compute::Status ClSliceWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SliceDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- arm_compute::Coordinates starts;
- arm_compute::Coordinates ends;
-
- std::tie(starts, ends) = SetClSliceData(descriptor.m_Begin, descriptor.m_Size);
-
- return arm_compute::CLSlice::validate(&aclInput, &aclOutput, starts, ends);
-}
-
-ClSliceWorkload::ClSliceWorkload(const SliceQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<SliceQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClSliceWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = boost::polymorphic_downcast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = boost::polymorphic_downcast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::Coordinates starts;
- arm_compute::Coordinates ends;
-
- std::tie(starts, ends) = SetClSliceData(m_Data.m_Parameters.m_Begin, m_Data.m_Parameters.m_Size);
-
- m_SliceFunction.configure(&input, &output, starts, ends);
-}
-
-void ClSliceWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSliceWorkload_Execute");
- RunClFunction(m_SliceFunction, CHECK_LOCATION());
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClSliceWorkload.hpp b/src/backends/cl/workloads/ClSliceWorkload.hpp
deleted file mode 100644
index 3460b7788b..0000000000
--- a/src/backends/cl/workloads/ClSliceWorkload.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/CL/functions/CLSlice.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClSliceWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SliceDescriptor& descriptor);
-
-class ClSliceWorkload : public BaseWorkload<SliceQueueDescriptor>
-{
-public:
- ClSliceWorkload(const SliceQueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-
-private:
- mutable arm_compute::CLSlice m_SliceFunction;
-};
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp b/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp
deleted file mode 100644
index a355ba0c2d..0000000000
--- a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSoftmaxBaseWorkload.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLSoftmaxLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClSoftmaxWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SoftmaxDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);
- const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);
-
- unsigned int aclAxis = ComputeSoftmaxAclAxis(descriptor, input);
- return arm_compute::CLSoftmaxLayer::validate(&aclInputInfo, &aclOutputInfo, descriptor.m_Beta, aclAxis);
-}
-
-}
diff --git a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp b/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp
deleted file mode 100644
index 8d73060162..0000000000
--- a/src/backends/cl/workloads/ClSoftmaxBaseWorkload.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Descriptors.hpp>
-#include <armnn/Tensor.hpp>
-#include <arm_compute/core/Error.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClSoftmaxWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SoftmaxDescriptor& descriptor);
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp b/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp
deleted file mode 100644
index adb4872b80..0000000000
--- a/src/backends/cl/workloads/ClSoftmaxFloatWorkload.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSoftmaxFloatWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-namespace armnn
-{
-
-ClSoftmaxFloatWorkload::ClSoftmaxFloatWorkload(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
- : FloatWorkload<SoftmaxQueueDescriptor>(descriptor, info)
- , m_SoftmaxLayer(memoryManager)
-{
- m_Data.ValidateInputsOutputs("ClSoftmaxFloatWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<ClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<ClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- unsigned int aclAxis = ComputeSoftmaxAclAxis(m_Data.m_Parameters, info.m_InputTensorInfos[0]);
- m_SoftmaxLayer.configure(&input, &output, m_Data.m_Parameters.m_Beta, aclAxis);
-}
-
-void ClSoftmaxFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSoftmaxFloatWorkload_Execute");
- RunClFunction(m_SoftmaxLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSoftmaxFloatWorkload.hpp b/src/backends/cl/workloads/ClSoftmaxFloatWorkload.hpp
deleted file mode 100644
index 7efdae858a..0000000000
--- a/src/backends/cl/workloads/ClSoftmaxFloatWorkload.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLSoftmaxLayer.h>
-#include <arm_compute/runtime/MemoryManagerOnDemand.h>
-
-#include <memory>
-
-namespace armnn
-{
-
-class ClSoftmaxFloatWorkload : public FloatWorkload<SoftmaxQueueDescriptor>
-{
-public:
- ClSoftmaxFloatWorkload(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLSoftmaxLayer m_SoftmaxLayer;
-};
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClSoftmaxUint8Workload.cpp b/src/backends/cl/workloads/ClSoftmaxUint8Workload.cpp
deleted file mode 100644
index f14ea11c82..0000000000
--- a/src/backends/cl/workloads/ClSoftmaxUint8Workload.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSoftmaxUint8Workload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-namespace armnn
-{
-
-ClSoftmaxUint8Workload::ClSoftmaxUint8Workload(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
- : Uint8Workload<SoftmaxQueueDescriptor>(descriptor, info)
- , m_SoftmaxLayer(memoryManager)
-{
- m_Data.ValidateInputsOutputs("ClSoftmaxUint8Workload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<ClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<ClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- const auto outputQuantization = output.info()->quantization_info();
-
- if ((!outputQuantization.scale().empty() && outputQuantization.scale()[0] != (1.0f / 256.0f)) ||
- (!outputQuantization.offset().empty() && outputQuantization.offset()[0] != 0) ||
- outputQuantization.scale().empty() || outputQuantization.offset().empty())
- {
- throw InvalidArgumentException(
- "Invalid quantization for output. Only scale = 1.0f / 256.0f and offset = 0 supported");
- }
-
- unsigned int aclAxis = ComputeSoftmaxAclAxis(m_Data.m_Parameters, info.m_InputTensorInfos[0]);
- m_SoftmaxLayer.configure(&input, &output, descriptor.m_Parameters.m_Beta, aclAxis);
-}
-
-void ClSoftmaxUint8Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSoftmaxUint8Workload_Execute");
- RunClFunction(m_SoftmaxLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSoftmaxUint8Workload.hpp b/src/backends/cl/workloads/ClSoftmaxUint8Workload.hpp
deleted file mode 100644
index f378b89a5d..0000000000
--- a/src/backends/cl/workloads/ClSoftmaxUint8Workload.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLSoftmaxLayer.h>
-#include <arm_compute/runtime/MemoryManagerOnDemand.h>
-
-#include <memory>
-
-namespace armnn
-{
-// Softmax
-class ClSoftmaxUint8Workload : public Uint8Workload<SoftmaxQueueDescriptor>
-{
-public:
- ClSoftmaxUint8Workload(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
-
- void Execute() const override;
-private:
-
- mutable arm_compute::CLSoftmaxLayer m_SoftmaxLayer;
-};
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClSpaceToBatchNdWorkload.cpp b/src/backends/cl/workloads/ClSpaceToBatchNdWorkload.cpp
deleted file mode 100644
index 64da92c815..0000000000
--- a/src/backends/cl/workloads/ClSpaceToBatchNdWorkload.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSpaceToBatchNdWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-#include <boost/polymorphic_pointer_cast.hpp>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClSpaceToBatchNdWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SpaceToBatchNdDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- // ArmNN blockShape is [H, W] Cl asks for W, H
- int32_t blockHeight = boost::numeric_cast<int32_t>(descriptor.m_BlockShape[0]);
- int32_t blockWidth = boost::numeric_cast<int32_t>(descriptor.m_BlockShape[1]);
-
- arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(
- descriptor.m_PadList[1].first, descriptor.m_PadList[0].first);
- arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(
- descriptor.m_PadList[1].second, descriptor.m_PadList[0].second);
-
- return arm_compute::CLSpaceToBatchLayer::validate(&aclInputInfo,
- blockWidth,
- blockHeight,
- paddingLeftTop,
- paddingRightBottom,
- &aclOutputInfo);
-}
-
-ClSpaceToBatchNdWorkload::ClSpaceToBatchNdWorkload(
- const SpaceToBatchNdQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<SpaceToBatchNdQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClSpaceToBatchNdWorkload", 1, 1);
-
- arm_compute::ICLTensor& input =
- boost::polymorphic_pointer_downcast<IClTensorHandle>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output =
- boost::polymorphic_pointer_downcast<IClTensorHandle>(m_Data.m_Outputs[0])->GetTensor();
-
- // ArmNN blockShape is [H, W] Cl asks for W, H
- int32_t blockHeight = boost::numeric_cast<int32_t>(m_Data.m_Parameters.m_BlockShape[0]);
- int32_t blockWidth = boost::numeric_cast<int32_t>(m_Data.m_Parameters.m_BlockShape[1]);
-
- arm_compute::Size2D paddingLeftTop = BuildArmComputeSize2D(
- m_Data.m_Parameters.m_PadList[1].first, m_Data.m_Parameters.m_PadList[0].first);
- arm_compute::Size2D paddingRightBottom = BuildArmComputeSize2D(
- m_Data.m_Parameters.m_PadList[1].second, m_Data.m_Parameters.m_PadList[0].second);
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- m_SpaceToBatchLayer.configure(&input,
- blockWidth,
- blockHeight,
- paddingLeftTop,
- paddingRightBottom,
- &output);
-}
-
-void ClSpaceToBatchNdWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSpaceToBatchNdWorkload_Execute");
- RunClFunction(m_SpaceToBatchLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSpaceToBatchNdWorkload.hpp b/src/backends/cl/workloads/ClSpaceToBatchNdWorkload.hpp
deleted file mode 100644
index 7500b5a3ac..0000000000
--- a/src/backends/cl/workloads/ClSpaceToBatchNdWorkload.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Tensor.hpp>
-#include <armnn/Descriptors.hpp>
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLSpaceToBatchLayer.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClSpaceToBatchNdWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SpaceToBatchNdDescriptor& descriptor);
-
-class ClSpaceToBatchNdWorkload : public BaseWorkload<SpaceToBatchNdQueueDescriptor>
-{
-public:
- ClSpaceToBatchNdWorkload(const SpaceToBatchNdQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLSpaceToBatchLayer m_SpaceToBatchLayer;
-};
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClSpaceToDepthWorkload.cpp b/src/backends/cl/workloads/ClSpaceToDepthWorkload.cpp
deleted file mode 100644
index d541e4ec52..0000000000
--- a/src/backends/cl/workloads/ClSpaceToDepthWorkload.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSpaceToDepthWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <boost/polymorphic_pointer_cast.hpp>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-ClSpaceToDepthWorkload::ClSpaceToDepthWorkload(const SpaceToDepthQueueDescriptor& desc,
- const WorkloadInfo& info)
- : BaseWorkload<SpaceToDepthQueueDescriptor>(desc, info)
-{
- m_Data.ValidateInputsOutputs("ClSpaceToDepthWorkload", 1, 1);
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- input.info()->set_data_layout(aclDataLayout);
-
- int32_t blockSize = boost::numeric_cast<int32_t>(desc.m_Parameters.m_BlockSize);
-
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
- output.info()->set_data_layout(aclDataLayout);
-
- m_Layer.configure(&input, &output, blockSize);
-}
-
-void ClSpaceToDepthWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSpaceToDepthWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClSpaceToDepthWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SpaceToDepthDescriptor& desc)
-{
- DataLayout dataLayout = desc.m_DataLayout;
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout);
-
- int32_t blockSize = boost::numeric_cast<int32_t>(desc.m_BlockSize);
-
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout);
-
- const arm_compute::Status aclStatus = arm_compute::CLSpaceToDepthLayer::validate(&aclInputInfo,
- &aclOutputInfo,
- blockSize);
- return aclStatus;
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSpaceToDepthWorkload.hpp b/src/backends/cl/workloads/ClSpaceToDepthWorkload.hpp
deleted file mode 100644
index 57ce5d4d05..0000000000
--- a/src/backends/cl/workloads/ClSpaceToDepthWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Descriptors.hpp>
-
-#include <backendsCommon/Workload.hpp>
-#include <arm_compute/runtime/CL/functions/CLSpaceToDepthLayer.h>
-
-namespace armnn
-{
-arm_compute::Status ClSpaceToDepthWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const SpaceToDepthDescriptor& desc);
-
-class ClSpaceToDepthWorkload : public BaseWorkload<SpaceToDepthQueueDescriptor>
-{
-public:
- ClSpaceToDepthWorkload(const SpaceToDepthQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLSpaceToDepthLayer m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSplitterWorkload.cpp b/src/backends/cl/workloads/ClSplitterWorkload.cpp
deleted file mode 100644
index 296e0a3dde..0000000000
--- a/src/backends/cl/workloads/ClSplitterWorkload.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSplitterWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <arm_compute/runtime/CL/functions/CLSplit.h>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClTensorHandle.hpp>
-
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-namespace
-{
- unsigned int CalcAclAxis(unsigned int numDimensions, unsigned int splitAxis)
- {
- return (numDimensions - splitAxis) - 1;
- }
-
-} //namespace
-
-arm_compute::Status ClSplitterWorkloadValidate(const TensorInfo& input,
- const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
- unsigned int splitAxis)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
-
- size_t numOutputs = outputs.size();
-
- std::vector<arm_compute::TensorInfo> aclOutputs;
- aclOutputs.reserve(numOutputs);
-
- std::vector<arm_compute::ITensorInfo*> aclOutputPtr;
- aclOutputPtr.reserve(numOutputs);
-
- for (size_t i = 0u; i < outputs.size(); ++i)
- {
- aclOutputs.emplace_back(BuildArmComputeTensorInfo(outputs[i]));
- aclOutputPtr.emplace_back(&aclOutputs.back());
- }
-
- unsigned int aclAxis = CalcAclAxis(input.GetNumDimensions(), splitAxis);
- return arm_compute::CLSplit::validate(&aclInputInfo, aclOutputPtr, aclAxis);
-}
-
-ClSplitterWorkload::ClSplitterWorkload(const SplitterQueueDescriptor& descriptor, const WorkloadInfo& info)
- : BaseWorkload<SplitterQueueDescriptor>(descriptor, info)
-{
- bool allOutputsAreSubtensors = true;
-
- // Check that all outputs are sub-tensors
- for (auto output : m_Data.m_Outputs)
- {
- if (output && !output->GetParent())
- {
- // Non sub-tensor input found so we need to execute the split function
- allOutputsAreSubtensors = false;
- break;
- }
- }
-
- if (allOutputsAreSubtensors)
- {
- // Can skip configuring the split function since it's not executed
- return;
- }
-
- arm_compute::ICLTensor& input = boost::polymorphic_pointer_downcast<IClTensorHandle>(
- m_Data.m_Inputs[0])->GetTensor();
-
- std::vector<arm_compute::ICLTensor *> aclOutputs;
- for (auto output : m_Data.m_Outputs)
- {
- arm_compute::ICLTensor& aclOutput = boost::polymorphic_pointer_downcast<IClTensorHandle>(output)->GetTensor();
- aclOutputs.emplace_back(&aclOutput);
- }
-
- // Create the layer function
-
- // Configure input and output tensors
- std::set<unsigned int> splitAxis = ComputeSplitAxis(descriptor.m_Parameters, m_Data.m_Inputs[0]->GetShape());
- if (splitAxis.size() != 1)
- {
- throw InvalidArgumentException("Cannot derive split axis from SplitterDescriptor");
- }
-
- unsigned int aclAxis = CalcAclAxis(descriptor.m_Parameters.GetNumDimensions(), *splitAxis.begin());
- auto layer = std::make_unique<arm_compute::CLSplit>();
- layer->configure(&input, aclOutputs, aclAxis);
-
- // Prepare
- layer->prepare();
-
- m_Layer = std::move(layer);
-}
-
-void ClSplitterWorkload::Execute() const
-{
- if (m_Layer)
- {
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSplitterWorkload_Execute");
- m_Layer->run();
- }
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSplitterWorkload.hpp b/src/backends/cl/workloads/ClSplitterWorkload.hpp
deleted file mode 100644
index 82211f5baf..0000000000
--- a/src/backends/cl/workloads/ClSplitterWorkload.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/core/Error.h>
-#include <arm_compute/runtime/IFunction.h>
-
-#include <functional>
-
-namespace armnn
-{
-
-arm_compute::Status ClSplitterWorkloadValidate(const TensorInfo& input,
- const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
- unsigned int splitAxis);
-
-class ClSplitterWorkload : public BaseWorkload<SplitterQueueDescriptor>
-{
-public:
- ClSplitterWorkload(const SplitterQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- std::unique_ptr<arm_compute::IFunction> m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClStackWorkload.cpp b/src/backends/cl/workloads/ClStackWorkload.cpp
deleted file mode 100644
index 3ba698ec4d..0000000000
--- a/src/backends/cl/workloads/ClStackWorkload.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "ClStackWorkload.hpp"
-#include "ClWorkloadUtils.hpp"
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-#include <arm_compute/core/Types.h>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/polymorphic_pointer_cast.hpp>
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-namespace
-{
-int CalcAxis(const unsigned int axis, const unsigned int inputDimensions)
-{
- const int intAxis = boost::numeric_cast<int>(axis);
- return boost::numeric_cast<int>(inputDimensions) - intAxis;
-}
-} //namespace
-
-arm_compute::Status ClStackWorkloadValidate(const std::vector<const TensorInfo*>& inputs,
- const TensorInfo& output,
- const StackDescriptor& descriptor)
-{
- std::vector<arm_compute::ITensorInfo*> aclInputPtrs;
- arm_compute::TensorInfo aclInputInfo;
- for (const TensorInfo* input : inputs)
- {
- aclInputInfo = BuildArmComputeTensorInfo(*input);
- aclInputPtrs.emplace_back(&aclInputInfo);
- }
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- int aclAxis = CalcAxis(descriptor.m_Axis, descriptor.m_InputShape.GetNumDimensions());
-
- return arm_compute::CLStackLayer::validate(aclInputPtrs, aclAxis, &aclOutputInfo);
-}
-
-ClStackWorkload::ClStackWorkload(const StackQueueDescriptor& descriptor, const WorkloadInfo& info)
-: BaseWorkload<StackQueueDescriptor>(descriptor, info)
-{
- std::vector<arm_compute::ICLTensor*> aclInputs;
- for (auto input : m_Data.m_Inputs)
- {
- arm_compute::ICLTensor& aclInput = boost::polymorphic_pointer_downcast<IClTensorHandle>(input)->GetTensor();
- aclInputs.emplace_back(&aclInput);
- }
- arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast<IClTensorHandle>(
- m_Data.m_Outputs[0])->GetTensor();
-
- m_Layer.reset(new arm_compute::CLStackLayer());
- int aclAxis = CalcAxis(descriptor.m_Parameters.m_Axis, descriptor.m_Parameters.m_InputShape.GetNumDimensions());
- m_Layer->configure(aclInputs, aclAxis, &output);
-}
-
-void ClStackWorkload::Execute() const
-{
- if (m_Layer)
- {
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClStackWorkload_Execute");
- m_Layer->run();
- }
-}
-
-} //namespace armnn \ No newline at end of file
diff --git a/src/backends/cl/workloads/ClStackWorkload.hpp b/src/backends/cl/workloads/ClStackWorkload.hpp
deleted file mode 100644
index f27d6cdad0..0000000000
--- a/src/backends/cl/workloads/ClStackWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLStackLayer.h>
-
-namespace armnn
-{
-arm_compute::Status ClStackWorkloadValidate(const std::vector<const TensorInfo*>& inputs,
- const TensorInfo& output,
- const StackDescriptor& descriptor);
-
-class ClStackWorkload : public BaseWorkload<StackQueueDescriptor>
-{
-public:
- ClStackWorkload(const StackQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable std::unique_ptr<arm_compute::CLStackLayer> m_Layer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClStridedSliceWorkload.cpp b/src/backends/cl/workloads/ClStridedSliceWorkload.cpp
deleted file mode 100644
index 6b0a34d90e..0000000000
--- a/src/backends/cl/workloads/ClStridedSliceWorkload.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClStridedSliceWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <backendsCommon/WorkloadUtils.hpp>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClStridedSliceWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const StridedSliceDescriptor& descriptor)
-{
- const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
-
- arm_compute::Coordinates starts;
- arm_compute::Coordinates ends;
- arm_compute::Coordinates strides;
-
- std::tie(starts, ends, strides) = SetClStridedSliceData(descriptor.m_Begin, descriptor.m_End, descriptor.m_Stride);
-
- auto numDimensions = boost::numeric_cast<int>(input.GetNumDimensions());
- int32_t begin_mask = ConvertMaskToACLFormat(descriptor.m_BeginMask, numDimensions);
- int32_t end_mask = ConvertMaskToACLFormat(descriptor.m_EndMask, numDimensions);
- int32_t shrink_axis_mask = ConvertMaskToACLFormat(descriptor.m_ShrinkAxisMask, numDimensions);
-
- return arm_compute::CLStridedSlice::validate(&aclInputInfo,
- &aclOutputInfo,
- starts,
- ends,
- strides,
- begin_mask,
- end_mask,
- shrink_axis_mask);
-}
-
-ClStridedSliceWorkload::ClStridedSliceWorkload(const StridedSliceQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<StridedSliceQueueDescriptor>(descriptor, info)
-{
- m_Data.ValidateInputsOutputs("ClStridedSliceWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::Coordinates starts;
- arm_compute::Coordinates ends;
- arm_compute::Coordinates strides;
-
- std::tie(starts, ends, strides) = SetClStridedSliceData(m_Data.m_Parameters.m_Begin,
- m_Data.m_Parameters.m_End,
- m_Data.m_Parameters.m_Stride);
-
- auto numDimensions = boost::numeric_cast<int>(info.m_InputTensorInfos[0].GetNumDimensions());
- int32_t begin_mask = ConvertMaskToACLFormat(m_Data.m_Parameters.m_BeginMask, numDimensions);
- int32_t end_mask = ConvertMaskToACLFormat(m_Data.m_Parameters.m_EndMask, numDimensions);
- int32_t shrink_axis_mask = ConvertMaskToACLFormat(m_Data.m_Parameters.m_ShrinkAxisMask, numDimensions);
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- m_StridedSliceLayer.configure(&input,
- &output,
- starts,
- ends,
- strides,
- begin_mask,
- end_mask,
- shrink_axis_mask);
-}
-
-void ClStridedSliceWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClStridedSliceWorkload_Execute");
- RunClFunction(m_StridedSliceLayer, CHECK_LOCATION());
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClStridedSliceWorkload.hpp b/src/backends/cl/workloads/ClStridedSliceWorkload.hpp
deleted file mode 100644
index bce3fe13eb..0000000000
--- a/src/backends/cl/workloads/ClStridedSliceWorkload.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Tensor.hpp>
-#include <armnn/Descriptors.hpp>
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLStridedSlice.h>
-
-namespace armnn
-{
-
-arm_compute::Status ClStridedSliceWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const StridedSliceDescriptor& descriptor);
-
-class ClStridedSliceWorkload : public BaseWorkload<StridedSliceQueueDescriptor>
-{
-public:
- ClStridedSliceWorkload(const StridedSliceQueueDescriptor& descriptor, const WorkloadInfo& info);
- void Execute() const override;
-
-private:
- mutable arm_compute::CLStridedSlice m_StridedSliceLayer;
-};
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSubtractionWorkload.cpp b/src/backends/cl/workloads/ClSubtractionWorkload.cpp
deleted file mode 100644
index 38154eb4d7..0000000000
--- a/src/backends/cl/workloads/ClSubtractionWorkload.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClSubtractionWorkload.hpp"
-
-#include <cl/ClTensorHandle.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-using namespace armcomputetensorutils;
-
-static constexpr arm_compute::ConvertPolicy g_AclConvertPolicy = arm_compute::ConvertPolicy::SATURATE;
-
-ClSubtractionWorkload::ClSubtractionWorkload(const SubtractionQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BaseWorkload<SubtractionQueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("ClSubtractionWorkload", 2, 1);
-
- arm_compute::ICLTensor& input0 = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& input1 = static_cast<IClTensorHandle*>(this->m_Data.m_Inputs[1])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(this->m_Data.m_Outputs[0])->GetTensor();
- m_Layer.configure(&input0, &input1, &output, g_AclConvertPolicy);
-}
-
-void ClSubtractionWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClSubtractionWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-arm_compute::Status ClSubtractionValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output)
-{
- const arm_compute::TensorInfo aclInput0Info = BuildArmComputeTensorInfo(input0);
- const arm_compute::TensorInfo aclInput1Info = BuildArmComputeTensorInfo(input1);
- const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
-
- const arm_compute::Status aclStatus = arm_compute::CLArithmeticSubtraction::validate(&aclInput0Info,
- &aclInput1Info,
- &aclOutputInfo,
- g_AclConvertPolicy);
-
- return aclStatus;
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClSubtractionWorkload.hpp b/src/backends/cl/workloads/ClSubtractionWorkload.hpp
deleted file mode 100644
index da6d17c6ac..0000000000
--- a/src/backends/cl/workloads/ClSubtractionWorkload.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLElementwiseOperations.h>
-
-namespace armnn
-{
-
-class ClSubtractionWorkload : public BaseWorkload<SubtractionQueueDescriptor>
-{
-public:
- ClSubtractionWorkload(const SubtractionQueueDescriptor& descriptor, const WorkloadInfo& info);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLArithmeticSubtraction m_Layer;
-};
-
-arm_compute::Status ClSubtractionValidate(const TensorInfo& input0,
- const TensorInfo& input1,
- const TensorInfo& output);
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClTransposeConvolution2dWorkload.cpp b/src/backends/cl/workloads/ClTransposeConvolution2dWorkload.cpp
deleted file mode 100644
index 7c0736645b..0000000000
--- a/src/backends/cl/workloads/ClTransposeConvolution2dWorkload.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClTransposeConvolution2dWorkload.hpp"
-
-#include "ClWorkloadUtils.hpp"
-
-#include <cl/ClLayerSupport.hpp>
-#include <cl/ClTensorHandle.hpp>
-#include <cl/ClLayerSupport.hpp>
-
-#include <aclCommon/ArmComputeUtils.hpp>
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h>
-
-namespace armnn
-{
-
-using namespace armcomputetensorutils;
-
-arm_compute::Status ClTransposeConvolution2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const TransposeConvolution2dDescriptor& descriptor,
- const TensorInfo& weights,
- const Optional<TensorInfo>& biases)
-{
- arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
- arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
- arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout);
-
- arm_compute::TensorInfo aclBiasesInfo;
- arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr;
-
- if (descriptor.m_BiasEnabled)
- {
- BOOST_ASSERT(biases.has_value());
-
- aclBiasesInfo = BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout);
- optionalAclBiasesInfo = &aclBiasesInfo;
- }
-
- arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(descriptor);
-
- return arm_compute::CLDeconvolutionLayer::validate(&aclInputInfo,
- &aclWeightsInfo,
- optionalAclBiasesInfo,
- &aclOutputInfo,
- padStrideInfo);
-}
-
-ClTransposeConvolution2dWorkload::ClTransposeConvolution2dWorkload(
- const TransposeConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) :
- BaseWorkload<TransposeConvolution2dQueueDescriptor>(descriptor, info),
- m_Layer(memoryManager)
-{
- const TensorInfo& weightInfo = m_Data.m_Weight->GetTensorInfo();
-
- m_WeightsTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_WeightsTensor, weightInfo, m_Data.m_Parameters.m_DataLayout);
-
- if (m_Data.m_Parameters.m_BiasEnabled)
- {
- m_BiasesTensor = std::make_unique<arm_compute::CLTensor>();
- BuildArmComputeTensor(*m_BiasesTensor, m_Data.m_Bias->GetTensorInfo(), m_Data.m_Parameters.m_DataLayout);
- }
-
- m_Data.ValidateInputsOutputs("ClTransposeConvolution2dWorkload", 1, 1);
-
- arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
- arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
-
- arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
-
- input.info()->set_data_layout(aclDataLayout);
- output.info()->set_data_layout(aclDataLayout);
-
- arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(m_Data.m_Parameters);
- m_Layer.configure(&input, m_WeightsTensor.get(), m_BiasesTensor.get(), &output, padStrideInfo);
-
- InitializeArmComputeClTensorData(*m_WeightsTensor, m_Data.m_Weight);
- if (m_BiasesTensor)
- {
- InitializeArmComputeClTensorData(*m_BiasesTensor, m_Data.m_Bias);
- }
-
- m_Layer.prepare();
-
- FreeUnusedTensors();
-}
-
-void ClTransposeConvolution2dWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClTransposeConvolution2dWorkload_Execute");
- RunClFunction(m_Layer, CHECK_LOCATION());
-}
-
-void ClTransposeConvolution2dWorkload::FreeUnusedTensors()
-{
- FreeTensorIfUnused(m_WeightsTensor);
- FreeTensorIfUnused(m_BiasesTensor);
-}
-
-} // namespace armnn
diff --git a/src/backends/cl/workloads/ClTransposeConvolution2dWorkload.hpp b/src/backends/cl/workloads/ClTransposeConvolution2dWorkload.hpp
deleted file mode 100644
index b7320bf6ce..0000000000
--- a/src/backends/cl/workloads/ClTransposeConvolution2dWorkload.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Tensor.hpp>
-#include <armnn/Descriptors.hpp>
-
-#include <backendsCommon/Workload.hpp>
-
-#include <arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h>
-#include <arm_compute/runtime/MemoryManagerOnDemand.h>
-
-#include <memory>
-
-namespace armnn
-{
-
-arm_compute::Status ClTransposeConvolution2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const TransposeConvolution2dDescriptor& descriptor,
- const TensorInfo& weights,
- const Optional<TensorInfo>& biases);
-
-class ClTransposeConvolution2dWorkload : public BaseWorkload<TransposeConvolution2dQueueDescriptor>
-{
-public:
- ClTransposeConvolution2dWorkload(const TransposeConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info,
- std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager);
-
- void Execute() const override;
-
-private:
- mutable arm_compute::CLDeconvolutionLayer m_Layer;
-
- std::unique_ptr<arm_compute::CLTensor> m_WeightsTensor;
- std::unique_ptr<arm_compute::CLTensor> m_BiasesTensor;
-
- void FreeUnusedTensors();
-};
-
-} // namespace armnn
-
diff --git a/src/backends/cl/workloads/ClWorkloadUtils.hpp b/src/backends/cl/workloads/ClWorkloadUtils.hpp
deleted file mode 100644
index b4bcc1c017..0000000000
--- a/src/backends/cl/workloads/ClWorkloadUtils.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <Half.hpp>
-
-#include <aclCommon/ArmComputeTensorUtils.hpp>
-#include <cl/OpenClTimer.hpp>
-#include <backendsCommon/CpuTensorHandle.hpp>
-
-#include <armnn/Utils.hpp>
-
-#include <arm_compute/runtime/CL/CLTensor.h>
-#include <arm_compute/runtime/IFunction.h>
-
-#include <sstream>
-
-#define ARMNN_SCOPED_PROFILING_EVENT_CL(name) \
- ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::GpuAcc, \
- name, \
- armnn::OpenClTimer(), \
- armnn::WallClockTimer())
-
-namespace armnn
-{
-
-template <typename T>
-void CopyArmComputeClTensorData(arm_compute::CLTensor& dstTensor, const T* srcData)
-{
- {
- ARMNN_SCOPED_PROFILING_EVENT_CL("MapClTensorForWriting");
- dstTensor.map(true);
- }
-
- {
- ARMNN_SCOPED_PROFILING_EVENT_CL("CopyToClTensor");
- armcomputetensorutils::CopyArmComputeITensorData<T>(srcData, dstTensor);
- }
-
- dstTensor.unmap();
-}
-
-inline auto SetClStridedSliceData(const std::vector<int>& m_begin,
- const std::vector<int>& m_end,
- const std::vector<int>& m_stride)
-{
- arm_compute::Coordinates starts;
- arm_compute::Coordinates ends;
- arm_compute::Coordinates strides;
-
- unsigned int num_dims = static_cast<unsigned int>(m_begin.size());
-
- for (unsigned int i = 0; i < num_dims; i++) {
- unsigned int revertedIndex = num_dims - i - 1;
-
- starts.set(i, static_cast<int>(m_begin[revertedIndex]));
- ends.set(i, static_cast<int>(m_end[revertedIndex]));
- strides.set(i, static_cast<int>(m_stride[revertedIndex]));
- }
-
- return std::make_tuple(starts, ends, strides);
-}
-
-inline auto SetClSliceData(const std::vector<unsigned int>& m_begin,
- const std::vector<unsigned int>& m_size)
-{
- // This function must translate the size vector given to an end vector
- // expected by the ACL NESlice workload
- arm_compute::Coordinates starts;
- arm_compute::Coordinates ends;
-
- unsigned int num_dims = static_cast<unsigned int>(m_begin.size());
-
- // For strided slices, we have the relationship size = (end - begin) / stride
- // For slice, we assume stride to be a vector of all ones, yielding the formula
- // size = (end - begin) therefore we know end = size + begin
- for (unsigned int i = 0; i < num_dims; i++)
- {
- unsigned int revertedIndex = num_dims - i - 1;
-
- starts.set(i, static_cast<int>(m_begin[revertedIndex]));
- ends.set(i, static_cast<int>(m_begin[revertedIndex] + m_size[revertedIndex]));
- }
-
- return std::make_tuple(starts, ends);
-}
-
-inline void InitializeArmComputeClTensorData(arm_compute::CLTensor& clTensor,
- const ConstCpuTensorHandle* handle)
-{
- BOOST_ASSERT(handle);
-
- armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);
- switch(handle->GetTensorInfo().GetDataType())
- {
- case DataType::Float16:
- CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<armnn::Half>());
- break;
- case DataType::Float32:
- CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<float>());
- break;
- case DataType::QAsymmS8:
- case DataType::QAsymmU8:
- CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<uint8_t>());
- break;
- ARMNN_NO_DEPRECATE_WARN_BEGIN
- case DataType::QuantizedSymm8PerAxis:
- ARMNN_FALLTHROUGH;
- case DataType::QSymmS8:
- CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<int8_t>());
- break;
- ARMNN_NO_DEPRECATE_WARN_END
- case DataType::Signed32:
- CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<int32_t>());
- break;
- default:
- BOOST_ASSERT_MSG(false, "Unexpected tensor type.");
- }
-};
-
-inline RuntimeException WrapClError(const cl::Error& clError, const CheckLocation& location)
-{
- std::stringstream message;
- message << "CL error: " << clError.what() << ". Error code: " << clError.err();
-
- return RuntimeException(message.str(), location);
-}
-
-inline void RunClFunction(arm_compute::IFunction& function, const CheckLocation& location)
-{
- try
- {
- function.run();
- }
- catch (cl::Error& error)
- {
- throw WrapClError(error, location);
- }
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp
deleted file mode 100644
index 014dc3f99e..0000000000
--- a/src/backends/cl/workloads/ClWorkloads.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-#include "ClAbsWorkload.hpp"
-#include "ClActivationWorkload.hpp"
-#include "ClAdditionWorkload.hpp"
-#include "ClArgMinMaxWorkload.hpp"
-#include "ClConstantWorkload.hpp"
-#include "ClBatchNormalizationFloatWorkload.hpp"
-#include "ClBatchToSpaceNdWorkload.hpp"
-#include "ClConvolution2dWorkload.hpp"
-#include "ClDepthToSpaceWorkload.hpp"
-#include "ClDepthwiseConvolutionWorkload.hpp"
-#include "ClDequantizeWorkload.hpp"
-#include "ClDivisionFloatWorkload.hpp"
-#include "ClFloorFloatWorkload.hpp"
-#include "ClFullyConnectedWorkload.hpp"
-#include "ClGreaterWorkload.hpp"
-#include "ClInstanceNormalizationWorkload.hpp"
-#include "ClL2NormalizationFloatWorkload.hpp"
-#include "ClLstmFloatWorkload.hpp"
-#include "ClConcatWorkload.hpp"
-#include "ClMaximumWorkload.hpp"
-#include "ClMeanWorkload.hpp"
-#include "ClMinimumWorkload.hpp"
-#include "ClMultiplicationWorkload.hpp"
-#include "ClNormalizationFloatWorkload.hpp"
-#include "ClPermuteWorkload.hpp"
-#include "ClPadWorkload.hpp"
-#include "ClPooling2dWorkload.hpp"
-#include "ClPreluWorkload.hpp"
-#include "ClQuantizeWorkload.hpp"
-#include "ClQuantizedLstmWorkload.hpp"
-#include "ClReshapeWorkload.hpp"
-#include "ClResizeWorkload.hpp"
-#include "ClRsqrtWorkload.hpp"
-#include "ClSliceWorkload.hpp"
-#include "ClSoftmaxFloatWorkload.hpp"
-#include "ClSoftmaxUint8Workload.hpp"
-#include "ClSpaceToBatchNdWorkload.hpp"
-#include "ClSpaceToDepthWorkload.hpp"
-#include "ClSplitterWorkload.hpp"
-#include "ClStackWorkload.hpp"
-#include "ClStridedSliceWorkload.hpp"
-#include "ClSubtractionWorkload.hpp"
-#include "ClConvertFp16ToFp32Workload.hpp"
-#include "ClConvertFp32ToFp16Workload.hpp"
-#include "ClTransposeConvolution2dWorkload.hpp"