aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference/workloads
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/reference/workloads')
-rw-r--r--src/backends/reference/workloads/RefConstantWorkload.cpp41
-rw-r--r--src/backends/reference/workloads/RefConstantWorkload.hpp20
2 files changed, 18 insertions, 43 deletions
diff --git a/src/backends/reference/workloads/RefConstantWorkload.cpp b/src/backends/reference/workloads/RefConstantWorkload.cpp
index e074c6fb04..3506198410 100644
--- a/src/backends/reference/workloads/RefConstantWorkload.cpp
+++ b/src/backends/reference/workloads/RefConstantWorkload.cpp
@@ -16,37 +16,26 @@
namespace armnn
{
-template <armnn::DataType DataType>
-void RefConstantWorkload<DataType>::Execute() const
-{
- // Considering the reference backend independently, it could be possible to initialise the intermediate tensor
- // created by the layer output handler at workload construction time, rather than at workload execution time.
- // However, this is not an option for other backends (e.g. CL). For consistency, we prefer to align all
- // implementations.
- // A similar argument can be made about performing the memory copy in the first place (the layer output handler
- // could have a non-owning reference to the layer output tensor managed by the const input layer); again, this is
- // not an option for other backends, and the extra complexity required to make this work for the reference backend
- // may not be worth the effort (skipping a memory copy in the first inference).
- ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefConstantWorkload_Execute");
+RefConstantWorkload::RefConstantWorkload(
+ const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info)
+ : BaseWorkload<ConstantQueueDescriptor>(descriptor, info) {}
- if (!m_RanOnce)
- {
- const ConstantQueueDescriptor& data = this->m_Data;
-
- BOOST_ASSERT(data.m_LayerOutput != nullptr);
+void RefConstantWorkload::PostAllocationConfigure()
+{
+ const ConstantQueueDescriptor& data = this->m_Data;
- const TensorInfo& outputInfo = GetTensorInfo(data.m_Outputs[0]);
- BOOST_ASSERT(data.m_LayerOutput->GetTensorInfo().GetNumBytes() == outputInfo.GetNumBytes());
+ BOOST_ASSERT(data.m_LayerOutput != nullptr);
- memcpy(GetOutputTensorData<void>(0, data), data.m_LayerOutput->GetConstTensor<void>(),
- outputInfo.GetNumBytes());
+ const TensorInfo& outputInfo = GetTensorInfo(data.m_Outputs[0]);
+ BOOST_ASSERT(data.m_LayerOutput->GetTensorInfo().GetNumBytes() == outputInfo.GetNumBytes());
- m_RanOnce = true;
- }
+ memcpy(GetOutputTensorData<void>(0, data), data.m_LayerOutput->GetConstTensor<void>(),
+ outputInfo.GetNumBytes());
}
-template class RefConstantWorkload<DataType::Float32>;
-template class RefConstantWorkload<DataType::QuantisedAsymm8>;
-template class RefConstantWorkload<DataType::Signed32>;
+void RefConstantWorkload::Execute() const
+{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefConstantWorkload_Execute");
+}
} //namespace armnn
diff --git a/src/backends/reference/workloads/RefConstantWorkload.hpp b/src/backends/reference/workloads/RefConstantWorkload.hpp
index 75d7ecce26..ada488a7b2 100644
--- a/src/backends/reference/workloads/RefConstantWorkload.hpp
+++ b/src/backends/reference/workloads/RefConstantWorkload.hpp
@@ -14,27 +14,13 @@ namespace armnn
{
// Base class template providing an implementation of the Constant layer common to all data types.
-template <armnn::DataType DataType>
-class RefConstantWorkload : public TypedWorkload<ConstantQueueDescriptor, DataType>
+class RefConstantWorkload : public BaseWorkload<ConstantQueueDescriptor>
{
public:
- RefConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info)
- : TypedWorkload<ConstantQueueDescriptor, DataType>(descriptor, info)
- , m_RanOnce(false)
- {
- }
-
- using TypedWorkload<ConstantQueueDescriptor, DataType>::m_Data;
- using TypedWorkload<ConstantQueueDescriptor, DataType>::TypedWorkload;
+ RefConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info);
+ void PostAllocationConfigure() override;
virtual void Execute() const override;
-
-private:
- mutable bool m_RanOnce;
};
-using RefConstantFloat32Workload = RefConstantWorkload<DataType::Float32>;
-using RefConstantUint8Workload = RefConstantWorkload<DataType::QuantisedAsymm8>;
-using RefConstantInt32Workload = RefConstantWorkload<DataType::Signed32>;
-
} //namespace armnn