aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjimfly01 <jim.flynn@arm.com>2018-09-19 10:59:49 +0100
committerMatthew Bentham <matthew.bentham@arm.com>2018-10-10 16:16:56 +0100
commit2c9322a275b0450fd8a7c49b54924890639d2001 (patch)
treef044af9d97bb5b08c643ddaeba67b48177186152
parent0cff16365b2ebb4d02929b86a304b91df19a985c (diff)
downloadarmnn-2c9322a275b0450fd8a7c49b54924890639d2001.tar.gz
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
-rw-r--r--include/armnn/Descriptors.hpp10
-rw-r--r--src/armnn/backends/ClWorkloadFactory.cpp12
-rw-r--r--src/armnn/backends/ClWorkloadFactory.hpp3
-rw-r--r--src/armnn/backends/NeonWorkloadFactory.cpp12
-rw-r--r--src/armnn/backends/NeonWorkloadFactory.hpp3
-rw-r--r--src/armnn/backends/RefWorkloadFactory.cpp7
-rw-r--r--src/armnn/backends/RefWorkloadFactory.hpp3
-rw-r--r--src/armnn/backends/WorkloadData.cpp18
-rw-r--r--src/armnn/backends/WorkloadData.hpp6
-rw-r--r--src/armnn/backends/WorkloadFactory.hpp3
10 files changed, 77 insertions, 0 deletions
diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp
index 5f9df6b2c3..8940e0b003 100644
--- a/include/armnn/Descriptors.hpp
+++ b/include/armnn/Descriptors.hpp
@@ -347,4 +347,14 @@ struct MeanDescriptor
bool m_KeepDims;
};
+struct PadDescriptor
+{
+ PadDescriptor(const std::vector<std::pair<unsigned int, unsigned int>>& padList);
+
+ // first is number of values to add before the tensor in the dimension,
+ // second is the number of values to add after the tensor in the dimension
+ // the number of pairs should match the number of dimensions in the input tensor.
+ std::vector<std::pair<unsigned int, unsigned int>> m_PadList;
+};
+
}
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