From 2c9322a275b0450fd8a7c49b54924890639d2001 Mon Sep 17 00:00:00 2001 From: jimfly01 Date: Wed, 19 Sep 2018 10:59:49 +0100 Subject: IVGCVSW-1880: Add no-op factory implementations of CreatePad * Added PadDescriptor and PadQueueDescriptor * Factory method CreatePad on all backends returning null workloads Change-Id: Ifeb50f9249ea31edfc3586d49b008ea1b5c59ae2 --- src/armnn/backends/ClWorkloadFactory.cpp | 12 ++++++++++++ src/armnn/backends/ClWorkloadFactory.hpp | 3 +++ src/armnn/backends/NeonWorkloadFactory.cpp | 12 ++++++++++++ src/armnn/backends/NeonWorkloadFactory.hpp | 3 +++ src/armnn/backends/RefWorkloadFactory.cpp | 7 +++++++ src/armnn/backends/RefWorkloadFactory.hpp | 3 +++ src/armnn/backends/WorkloadData.cpp | 18 ++++++++++++++++++ src/armnn/backends/WorkloadData.hpp | 6 ++++++ src/armnn/backends/WorkloadFactory.hpp | 3 +++ 9 files changed, 67 insertions(+) (limited to 'src/armnn/backends') diff --git a/src/armnn/backends/ClWorkloadFactory.cpp b/src/armnn/backends/ClWorkloadFactory.cpp index 217c637784..c35f044e9e 100644 --- a/src/armnn/backends/ClWorkloadFactory.cpp +++ b/src/armnn/backends/ClWorkloadFactory.cpp @@ -258,6 +258,12 @@ std::unique_ptr ClWorkloadFactory::CreateMean(const MeanQueueDescript return MakeWorkload(descriptor, info); } +std::unique_ptr ClWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkload(descriptor, info); +} + void ClWorkloadFactory::Finalize() { m_MemoryManager.Finalize(); @@ -461,6 +467,12 @@ std::unique_ptr ClWorkloadFactory::CreateMean(const MeanQueueDescript return nullptr; } +std::unique_ptr ClWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return nullptr; +} + void ClWorkloadFactory::Finalize() { } diff --git a/src/armnn/backends/ClWorkloadFactory.hpp b/src/armnn/backends/ClWorkloadFactory.hpp index 4403310802..892d564fbb 100644 --- a/src/armnn/backends/ClWorkloadFactory.hpp +++ b/src/armnn/backends/ClWorkloadFactory.hpp @@ -117,6 +117,9 @@ public: virtual std::unique_ptr CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; + virtual std::unique_ptr CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const override; + virtual void Finalize() override; virtual void Release() override; diff --git a/src/armnn/backends/NeonWorkloadFactory.cpp b/src/armnn/backends/NeonWorkloadFactory.cpp index ccbec9a8bb..80ce0b918e 100644 --- a/src/armnn/backends/NeonWorkloadFactory.cpp +++ b/src/armnn/backends/NeonWorkloadFactory.cpp @@ -250,6 +250,12 @@ std::unique_ptr NeonWorkloadFactory::CreateMean(const MeanQueueDescri return MakeWorkload(descriptor, info); } +std::unique_ptr NeonWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkload(descriptor, info); +} + void NeonWorkloadFactory::Finalize() { m_MemoryManager.Finalize(); @@ -453,6 +459,12 @@ std::unique_ptr NeonWorkloadFactory::CreateMean(const MeanQueueDescri return nullptr; } +std::unique_ptr NeonWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return nullptr; +} + void NeonWorkloadFactory::Finalize() {} diff --git a/src/armnn/backends/NeonWorkloadFactory.hpp b/src/armnn/backends/NeonWorkloadFactory.hpp index 5410c22252..a981855314 100644 --- a/src/armnn/backends/NeonWorkloadFactory.hpp +++ b/src/armnn/backends/NeonWorkloadFactory.hpp @@ -117,6 +117,9 @@ public: virtual std::unique_ptr CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; + virtual std::unique_ptr CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const override; + virtual void Finalize() override; virtual void Release() override; diff --git a/src/armnn/backends/RefWorkloadFactory.cpp b/src/armnn/backends/RefWorkloadFactory.cpp index 318f47c554..93b4d946c4 100644 --- a/src/armnn/backends/RefWorkloadFactory.cpp +++ b/src/armnn/backends/RefWorkloadFactory.cpp @@ -239,4 +239,11 @@ std::unique_ptr RefWorkloadFactory::CreateMean( return MakeWorkload(descriptor, info); } +std::unique_ptr RefWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkload(descriptor, info); +} + + } // namespace armnn diff --git a/src/armnn/backends/RefWorkloadFactory.hpp b/src/armnn/backends/RefWorkloadFactory.hpp index 5e694d6bf1..6b13377167 100644 --- a/src/armnn/backends/RefWorkloadFactory.hpp +++ b/src/armnn/backends/RefWorkloadFactory.hpp @@ -132,6 +132,9 @@ public: virtual std::unique_ptr CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; + + virtual std::unique_ptr CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const override; private: template diff --git a/src/armnn/backends/WorkloadData.cpp b/src/armnn/backends/WorkloadData.cpp index 25144a4753..c5c607d954 100644 --- a/src/armnn/backends/WorkloadData.cpp +++ b/src/armnn/backends/WorkloadData.cpp @@ -850,4 +850,22 @@ void MeanQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const } } +void PadQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const +{ + ValidateSingleInput(workloadInfo, "PadQueueDescriptor"); + ValidateSingleOutput(workloadInfo, "PadQueueDescriptor"); + + const TensorInfo& input = workloadInfo.m_InputTensorInfos[0]; + const TensorInfo& output = workloadInfo.m_OutputTensorInfos[1]; + // input and output should have the same number of dimensions + ValidateTensorNumDimensions(output, "PadQueueDescriptor", input.GetNumDimensions(), "output"); + // there should be entry in the pad list for each dimension in the input tensor + if (m_Parameters.m_PadList.size() != input.GetNumDimensions()) { + throw InvalidArgumentException("Pad List should contain the same number of entries as there" + " are dimensions in the input tensor that is " + + to_string(input.GetNumDimensions()) + " entries " + + " not " + to_string(m_Parameters.m_PadList.size()) + " entries."); + } +} + } //namespace armnn diff --git a/src/armnn/backends/WorkloadData.hpp b/src/armnn/backends/WorkloadData.hpp index a36f0ad7e6..b5b0402237 100644 --- a/src/armnn/backends/WorkloadData.hpp +++ b/src/armnn/backends/WorkloadData.hpp @@ -202,6 +202,12 @@ struct MeanQueueDescriptor : QueueDescriptorWithParameters void Validate(const WorkloadInfo& workloadInfo) const; }; +// Pad layer workload data +struct PadQueueDescriptor : QueueDescriptorWithParameters +{ + void Validate(const WorkloadInfo& workloadInfo) const; +}; + // Batch norm layer workload data. struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters { diff --git a/src/armnn/backends/WorkloadFactory.hpp b/src/armnn/backends/WorkloadFactory.hpp index 3cd04f9d49..fbc6134574 100644 --- a/src/armnn/backends/WorkloadFactory.hpp +++ b/src/armnn/backends/WorkloadFactory.hpp @@ -129,6 +129,9 @@ public: virtual std::unique_ptr CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const = 0; + + virtual std::unique_ptr CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& Info) const = 0; }; } //namespace armnn -- cgit v1.2.1