aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Bentham <Matthew.Bentham@arm.com>2018-10-08 09:38:55 +0100
committerMatthew Bentham <matthew.bentham@arm.com>2018-10-10 16:16:58 +0100
commitd87773918ca3b992f598895cb952e9aeb88c5219 (patch)
tree625a321980f6747f0d2e09d0d87cb8eb5459c237
parentcde00f55da5c4d6daf1934ab13ec8423610c9703 (diff)
downloadarmnn-d87773918ca3b992f598895cb952e9aeb88c5219.tar.gz
IVGCVSW-1951 Remove type templating from ClDepthwiseConvolutionWorkload
Change-Id: I8bc11c93759605e21cc52f44d032c32a0be63658
-rw-r--r--src/backends/cl/ClLayerSupport.cpp2
-rw-r--r--src/backends/cl/ClWorkloadFactory.cpp2
-rw-r--r--src/backends/cl/backend.mk4
-rw-r--r--src/backends/cl/workloads/CMakeLists.txt8
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp39
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp26
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp40
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp23
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp (renamed from src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp)36
-rw-r--r--src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp (renamed from src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp)15
-rw-r--r--src/backends/cl/workloads/ClWorkloads.hpp3
11 files changed, 40 insertions, 158 deletions
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp
index 09dfab9924..434b069092 100644
--- a/src/backends/cl/ClLayerSupport.cpp
+++ b/src/backends/cl/ClLayerSupport.cpp
@@ -20,7 +20,7 @@
#include "workloads/ClConvertFp16ToFp32Workload.hpp"
#include "workloads/ClConvertFp32ToFp16Workload.hpp"
#include "workloads/ClConvolution2dWorkload.hpp"
-#include "workloads/ClDepthwiseConvolutionBaseWorkload.hpp"
+#include "workloads/ClDepthwiseConvolutionWorkload.hpp"
#include "workloads/ClDivisionFloatWorkload.hpp"
#include "workloads/ClL2NormalizationFloatWorkload.hpp"
#include "workloads/ClMultiplicationWorkload.hpp"
diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp
index 2e074450dd..c00d0ba5f0 100644
--- a/src/backends/cl/ClWorkloadFactory.cpp
+++ b/src/backends/cl/ClWorkloadFactory.cpp
@@ -150,7 +150,7 @@ std::unique_ptr<armnn::IWorkload> ClWorkloadFactory::CreateConvolution2d(const C
std::unique_ptr<IWorkload> ClWorkloadFactory::CreateDepthwiseConvolution2d(
const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const
{
- return MakeWorkload<ClDepthwiseConvolutionFloatWorkload, ClDepthwiseConvolutionUint8Workload>(descriptor, info);
+ return std::make_unique<ClDepthwiseConvolutionWorkload>(descriptor, info);
}
std::unique_ptr<armnn::IWorkload> ClWorkloadFactory::CreateNormalization(const NormalizationQueueDescriptor& descriptor,
diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk
index c86940cda1..04b8b9e69c 100644
--- a/src/backends/cl/backend.mk
+++ b/src/backends/cl/backend.mk
@@ -22,9 +22,7 @@ BACKEND_SOURCES := \
workloads/ClConvertFp16ToFp32Workload.cpp \
workloads/ClConvertFp32ToFp16Workload.cpp \
workloads/ClConvolution2dWorkload.cpp \
- workloads/ClDepthwiseConvolutionBaseWorkload.cpp \
- workloads/ClDepthwiseConvolutionFloatWorkload.cpp \
- workloads/ClDepthwiseConvolutionUint8Workload.cpp \
+ workloads/ClDepthwiseConvolutionWorkload.cpp \
workloads/ClDivisionFloatWorkload.cpp \
workloads/ClFloorFloatWorkload.cpp \
workloads/ClFullyConnectedWorkload.cpp \
diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt
index 5a1653e8e3..4d1c1bf5c3 100644
--- a/src/backends/cl/workloads/CMakeLists.txt
+++ b/src/backends/cl/workloads/CMakeLists.txt
@@ -25,12 +25,8 @@ list(APPEND armnnClBackendWorkloads_sources
ClConvertFp32ToFp16Workload.hpp
ClConvolution2dWorkload.cpp
ClConvolution2dWorkload.hpp
- ClDepthwiseConvolutionBaseWorkload.cpp
- ClDepthwiseConvolutionBaseWorkload.hpp
- ClDepthwiseConvolutionFloatWorkload.cpp
- ClDepthwiseConvolutionFloatWorkload.hpp
- ClDepthwiseConvolutionUint8Workload.cpp
- ClDepthwiseConvolutionUint8Workload.hpp
+ ClDepthwiseConvolutionWorkload.cpp
+ ClDepthwiseConvolutionWorkload.hpp
ClDivisionFloatWorkload.cpp
ClDivisionFloatWorkload.hpp
ClFloorFloatWorkload.cpp
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp
deleted file mode 100644
index 17ecd29307..0000000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDepthwiseConvolutionFloatWorkload.hpp"
-
-#include <backends/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-ClDepthwiseConvolutionFloatWorkload::ClDepthwiseConvolutionFloatWorkload(
- const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : ClDepthwiseConvolutionBaseWorkload(descriptor, info)
-{
- InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
-
- if (m_BiasTensor)
- {
- InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
- }
-
- m_DepthwiseConvolutionLayer->prepare();
- FreeUnusedTensors();
-}
-
-void ClDepthwiseConvolutionFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionFloatWorkload_Execute");
- BOOST_ASSERT(m_DepthwiseConvolutionLayer);
-
- m_DepthwiseConvolutionLayer->run();
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp
deleted file mode 100644
index 4f9d5f332e..0000000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include "ClDepthwiseConvolutionBaseWorkload.hpp"
-
-namespace armnn
-{
-
-class ClDepthwiseConvolutionFloatWorkload : public ClDepthwiseConvolutionBaseWorkload<DataType::Float16,
- DataType::Float32>
-{
-public:
- ClDepthwiseConvolutionFloatWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info);
- void Execute() const override;
-};
-
-} //namespace armnn
-
-
-
-
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp
deleted file mode 100644
index 22922e4df6..0000000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDepthwiseConvolutionUint8Workload.hpp"
-
-#include <backends/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-ClDepthwiseConvolutionUint8Workload::ClDepthwiseConvolutionUint8Workload(
- const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : ClDepthwiseConvolutionBaseWorkload(descriptor, info)
-{
- InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
-
- if (m_BiasTensor)
- {
- InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
- }
-
- m_DepthwiseConvolutionLayer->prepare();
- FreeUnusedTensors();
-}
-
-void ClDepthwiseConvolutionUint8Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionUint8Workload_Execute");
- BOOST_ASSERT(m_DepthwiseConvolutionLayer);
-
- m_DepthwiseConvolutionLayer->run();
-}
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp
deleted file mode 100644
index b9f676de94..0000000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include "ClDepthwiseConvolutionBaseWorkload.hpp"
-
-namespace armnn
-{
-
-class ClDepthwiseConvolutionUint8Workload : public ClDepthwiseConvolutionBaseWorkload<DataType::QuantisedAsymm8>
-{
-public:
- ClDepthwiseConvolutionUint8Workload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info);
- void Execute() const override;
-};
-
-} //namespace armnn
-
-
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
index 53ac3bae99..142cbc230f 100644
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp
+++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
@@ -3,15 +3,18 @@
// SPDX-License-Identifier: MIT
//
-#include "ClDepthwiseConvolutionBaseWorkload.hpp"
+#include "ClDepthwiseConvolutionWorkload.hpp"
#include "TypeUtils.hpp"
+#include "ClWorkloadUtils.hpp"
#include <backends/aclCommon/ArmComputeUtils.hpp>
#include <backends/aclCommon/ArmComputeTensorUtils.hpp>
#include <backends/cl/ClTensorHandle.hpp>
#include <backends/CpuTensorHandle.hpp>
+#include <arm_compute/runtime/CL/functions/CLDepthwiseConvolutionLayer.h>
+
namespace armnn
{
@@ -49,11 +52,10 @@ arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& inp
aclDepthMultiplier);
}
-template<armnn::DataType... dataTypes>
-ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWorkload(
+ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload(
const DepthwiseConvolution2dQueueDescriptor& descriptor,
const WorkloadInfo& info)
- : TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>(descriptor, info)
+ : BaseWorkload<DepthwiseConvolution2dQueueDescriptor>(descriptor, info)
{
auto& weightInfo = m_Data.m_Weight->GetTensorInfo();
@@ -74,8 +76,7 @@ ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWork
m_Data.m_Parameters.m_PadBottom,
arm_compute::DimensionRoundingType::FLOOR);
- std::string name = std::string("ClDepthwiseConvolution") +
- GetDataTypeName(m_Data.m_Weight->GetTensorInfo().GetDataType()) + "Workload";
+ 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();
@@ -109,17 +110,30 @@ ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWork
}
BOOST_ASSERT(m_DepthwiseConvolutionLayer);
+
+ InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
+
+ if (m_BiasTensor)
+ {
+ InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
+ }
+
+ m_DepthwiseConvolutionLayer->prepare();
+ FreeUnusedTensors();
}
-template<armnn::DataType... dataTypes>
-void ClDepthwiseConvolutionBaseWorkload<dataTypes...>::FreeUnusedTensors()
+void ClDepthwiseConvolutionWorkload::FreeUnusedTensors()
{
FreeTensorIfUnused(m_KernelTensor);
FreeTensorIfUnused(m_BiasTensor);
}
-// Generate known implementations for linker
-template class ClDepthwiseConvolutionBaseWorkload<DataType::Float16, DataType::Float32>;
-template class ClDepthwiseConvolutionBaseWorkload<DataType::QuantisedAsymm8>;
+void ClDepthwiseConvolutionWorkload::Execute() const
+{
+ ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionWorkload_Execute");
+ BOOST_ASSERT(m_DepthwiseConvolutionLayer);
+
+ m_DepthwiseConvolutionLayer->run();
+}
} // namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
index 27aec8ecdd..cde9f50d38 100644
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp
+++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
@@ -7,7 +7,9 @@
#include <backends/Workload.hpp>
-#include <arm_compute/runtime/CL/CLFunctions.h>
+#include <arm_compute/runtime/IFunction.h>
+#include <arm_compute/core/Error.h>
+#include <arm_compute/runtime/CL/CLTensor.h>
namespace armnn
{
@@ -18,14 +20,15 @@ arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& inp
const TensorInfo& weights,
const Optional<TensorInfo>& biases);
-template<armnn::DataType... dataTypes>
-class ClDepthwiseConvolutionBaseWorkload : public TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>
+class ClDepthwiseConvolutionWorkload : public BaseWorkload<DepthwiseConvolution2dQueueDescriptor>
{
public:
- using TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>::m_Data;
+ using BaseWorkload<DepthwiseConvolution2dQueueDescriptor>::m_Data;
- ClDepthwiseConvolutionBaseWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
- const WorkloadInfo& info);
+ ClDepthwiseConvolutionWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
+ const WorkloadInfo& info);
+
+ void Execute() const override;
protected:
std::unique_ptr<arm_compute::IFunction> m_DepthwiseConvolutionLayer;
diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp
index 0ef8fd34bf..6574d43659 100644
--- a/src/backends/cl/workloads/ClWorkloads.hpp
+++ b/src/backends/cl/workloads/ClWorkloads.hpp
@@ -13,8 +13,7 @@
#include "ClConstantFloatWorkload.hpp"
#include "ClConstantUint8Workload.hpp"
#include "ClConvolution2dWorkload.hpp"
-#include "ClDepthwiseConvolutionFloatWorkload.hpp"
-#include "ClDepthwiseConvolutionUint8Workload.hpp"
+#include "ClDepthwiseConvolutionWorkload.hpp"
#include "ClDivisionFloatWorkload.hpp"
#include "ClFloorFloatWorkload.hpp"
#include "ClFullyConnectedWorkload.hpp"