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/CMakeLists.txt2
-rw-r--r--src/backends/reference/workloads/RefQuantizeWorkload.cpp66
-rw-r--r--src/backends/reference/workloads/RefQuantizeWorkload.hpp26
-rw-r--r--src/backends/reference/workloads/RefWorkloads.hpp2
4 files changed, 96 insertions, 0 deletions
diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt
index c4fc202250..4f5fbb554e 100644
--- a/src/backends/reference/workloads/CMakeLists.txt
+++ b/src/backends/reference/workloads/CMakeLists.txt
@@ -97,6 +97,8 @@ list(APPEND armnnRefBackendWorkloads_sources
RefPooling2dFloat32Workload.hpp
RefPooling2dUint8Workload.cpp
RefPooling2dUint8Workload.hpp
+ RefQuantizeWorkload.cpp
+ RefQuantizeWorkload.hpp
RefReshapeFloat32Workload.cpp
RefReshapeFloat32Workload.hpp
RefReshapeUint8Workload.cpp
diff --git a/src/backends/reference/workloads/RefQuantizeWorkload.cpp b/src/backends/reference/workloads/RefQuantizeWorkload.cpp
new file mode 100644
index 0000000000..b7ace32e14
--- /dev/null
+++ b/src/backends/reference/workloads/RefQuantizeWorkload.cpp
@@ -0,0 +1,66 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "RefQuantizeWorkload.hpp"
+
+#include <armnn/TypesUtils.hpp>
+
+
+namespace armnn
+{
+
+namespace
+{
+
+template<typename T>
+void QuantizeImpl(const void *input, void *output, size_t numValues, float scale, int offset)
+{
+ auto in = static_cast<const float *>(input);
+ auto out = static_cast<T *>(output);
+ for (size_t i = 0; i < numValues; i++, in++, out++)
+ {
+ *out = armnn::Quantize<T>(*in, scale, offset);
+ }
+}
+
+} //namespace
+
+RefQuantizeWorkload::RefQuantizeWorkload(const QuantizeQueueDescriptor& descriptor, const WorkloadInfo &info)
+ : BaseWorkload(descriptor, info)
+ , m_NumElements(info.m_InputTensorInfos[0].GetNumElements())
+ , m_TargetType(info.m_OutputTensorInfos[0].GetDataType())
+ , m_Scale(info.m_OutputTensorInfos[0].GetQuantizationScale())
+ , m_Offset(info.m_OutputTensorInfos[0].GetQuantizationOffset())
+{
+}
+
+void RefQuantizeWorkload::Execute() const
+{
+ const void* input = m_Data.m_Inputs[0]->Map(true);
+ void* output = m_Data.m_Outputs[0]->Map(true);
+
+ switch(m_TargetType)
+ {
+ case DataType::QuantisedAsymm8:
+ {
+ QuantizeImpl<uint8_t>(input, output, m_NumElements, m_Scale, m_Offset);
+ break;
+ }
+ case DataType::QuantisedSymm16:
+ {
+ QuantizeImpl<int16_t>(input, output, m_NumElements, m_Scale, 0);
+ break;
+ }
+ default:
+ {
+ BOOST_ASSERT_MSG(false, "RefQuantizeWorkload: Non quantized output type encountered");
+ }
+ }
+
+ m_Data.m_Inputs[0]->Unmap();
+ m_Data.m_Outputs[0]->Unmap();
+}
+
+} //namespace armnn \ No newline at end of file
diff --git a/src/backends/reference/workloads/RefQuantizeWorkload.hpp b/src/backends/reference/workloads/RefQuantizeWorkload.hpp
new file mode 100644
index 0000000000..6a43b8471d
--- /dev/null
+++ b/src/backends/reference/workloads/RefQuantizeWorkload.hpp
@@ -0,0 +1,26 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <backendsCommon/Workload.hpp>
+#include <backendsCommon/WorkloadData.hpp>
+
+namespace armnn {
+
+class RefQuantizeWorkload : public BaseWorkload<QuantizeQueueDescriptor>
+{
+public:
+ RefQuantizeWorkload(const QuantizeQueueDescriptor& descriptor, const WorkloadInfo &info);
+ void Execute() const override;
+
+private:
+ size_t m_NumElements;
+ armnn::DataType m_TargetType;
+ float m_Scale;
+ int m_Offset;
+};
+
+} //namespace armnn \ No newline at end of file
diff --git a/src/backends/reference/workloads/RefWorkloads.hpp b/src/backends/reference/workloads/RefWorkloads.hpp
index 7d2e813f6b..77aa56fcc6 100644
--- a/src/backends/reference/workloads/RefWorkloads.hpp
+++ b/src/backends/reference/workloads/RefWorkloads.hpp
@@ -64,3 +64,5 @@
#include "RefRsqrtFloat32Workload.hpp"
#include "RefComparisonWorkload.hpp"
#include "RefDequantizeWorkload.hpp"
+
+#include "RefQuantizeWorkload.hpp" \ No newline at end of file