diff options
Diffstat (limited to 'src/armnn/backends')
-rw-r--r-- | src/armnn/backends/ClWorkloadFactory.cpp | 12 | ||||
-rw-r--r-- | src/armnn/backends/ClWorkloadFactory.hpp | 3 | ||||
-rw-r--r-- | src/armnn/backends/NeonWorkloadFactory.cpp | 12 | ||||
-rw-r--r-- | src/armnn/backends/NeonWorkloadFactory.hpp | 3 | ||||
-rw-r--r-- | src/armnn/backends/RefWorkloadFactory.cpp | 7 | ||||
-rw-r--r-- | src/armnn/backends/RefWorkloadFactory.hpp | 3 | ||||
-rw-r--r-- | src/armnn/backends/WorkloadData.cpp | 18 | ||||
-rw-r--r-- | src/armnn/backends/WorkloadData.hpp | 6 | ||||
-rw-r--r-- | src/armnn/backends/WorkloadFactory.hpp | 3 |
9 files changed, 67 insertions, 0 deletions
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<IWorkload> ClWorkloadFactory::CreateMean(const MeanQueueDescript return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); } +std::unique_ptr<IWorkload> ClWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); +} + void ClWorkloadFactory::Finalize() { m_MemoryManager.Finalize(); @@ -461,6 +467,12 @@ std::unique_ptr<IWorkload> ClWorkloadFactory::CreateMean(const MeanQueueDescript return nullptr; } +std::unique_ptr<IWorkload> 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<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; + virtual std::unique_ptr<IWorkload> 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<IWorkload> NeonWorkloadFactory::CreateMean(const MeanQueueDescri return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); } +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); +} + void NeonWorkloadFactory::Finalize() { m_MemoryManager.Finalize(); @@ -453,6 +459,12 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMean(const MeanQueueDescri return nullptr; } +std::unique_ptr<IWorkload> 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<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; + virtual std::unique_ptr<IWorkload> 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<armnn::IWorkload> RefWorkloadFactory::CreateMean( return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); } +std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkload<NullWorkload, NullWorkload>(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<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; + + virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const override; private: template <typename F32Workload, typename U8Workload, typename QueueDescriptorType> 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<MeanDescriptor> void Validate(const WorkloadInfo& workloadInfo) const; }; +// Pad layer workload data +struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor> +{ + void Validate(const WorkloadInfo& workloadInfo) const; +}; + // Batch norm layer workload data. struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor> { 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<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& Info) const = 0; + + virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& Info) const = 0; }; } //namespace armnn |