aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference/workloads/BaseIterator.hpp
diff options
context:
space:
mode:
authorDerek Lamberti <derek.lamberti@arm.com>2019-04-09 10:25:02 +0100
committerDerek Lamberti <derek.lamberti@arm.com>2019-04-10 15:13:41 +0100
commitf30f7d32b22020f80b21da7b008d8302cee9d395 (patch)
tree2e213da4704c46b40f20629223365d1ddbf8d8cd /src/backends/reference/workloads/BaseIterator.hpp
parent82fbe7c0b82f7adadd5120ac4b4f779d0da7c0d5 (diff)
downloadarmnn-f30f7d32b22020f80b21da7b008d8302cee9d395.tar.gz
IVGCVSW-2946 RefElementwiseWorkload configures prior to first execute
+ Added PostAllocationConfigure() method to workload interface + Elementwise function now deduces types based on Functor - Replaced RefComparisonWorkload with RefElementwiseWorkload specialization + Fixed up unit tests and minor formatting Change-Id: I33d08797767bba01cf4efb2904920ce0f950a4fe Signed-off-by: Derek Lamberti <derek.lamberti@arm.com>
Diffstat (limited to 'src/backends/reference/workloads/BaseIterator.hpp')
-rw-r--r--src/backends/reference/workloads/BaseIterator.hpp89
1 files changed, 43 insertions, 46 deletions
diff --git a/src/backends/reference/workloads/BaseIterator.hpp b/src/backends/reference/workloads/BaseIterator.hpp
index 95c75a576a..955d7f2185 100644
--- a/src/backends/reference/workloads/BaseIterator.hpp
+++ b/src/backends/reference/workloads/BaseIterator.hpp
@@ -25,34 +25,30 @@ public:
virtual BaseIterator& operator-=(const unsigned int increment) = 0;
};
+template<typename IType>
class Decoder : public BaseIterator
{
public:
- Decoder() : BaseIterator() {}
+ using InterfaceType = IType;
+
+ Decoder() {}
virtual ~Decoder() {}
- virtual float Get() const = 0;
+ virtual IType Get() const = 0;
};
+template<typename IType>
class Encoder : public BaseIterator
{
public:
- Encoder() : BaseIterator() {}
-
- virtual ~Encoder() {}
+ using InterfaceType = IType;
- virtual void Set(const float& right) = 0;
-};
-
-class ComparisonEncoder : public BaseIterator
-{
-public:
- ComparisonEncoder() : BaseIterator() {}
+ Encoder() {}
- virtual ~ComparisonEncoder() {}
+ virtual ~Encoder() {}
- virtual void Set(bool right) = 0;
+ virtual void Set(IType right) = 0;
};
template<typename T, typename Base>
@@ -84,7 +80,7 @@ public:
T* m_Iterator;
};
-class QASymm8Decoder : public TypedIterator<const uint8_t, Decoder>
+class QASymm8Decoder : public TypedIterator<const uint8_t, Decoder<float>>
{
public:
QASymm8Decoder(const uint8_t* data, const float scale, const int32_t offset)
@@ -100,19 +96,7 @@ private:
const int32_t m_Offset;
};
-class FloatDecoder : public TypedIterator<const float, Decoder>
-{
-public:
- FloatDecoder(const float* data)
- : TypedIterator(data) {}
-
- float Get() const override
- {
- return *m_Iterator;
- }
-};
-
-class QSymm16Decoder : public TypedIterator<const int16_t, Decoder>
+class QSymm16Decoder : public TypedIterator<const int16_t, Decoder<float>>
{
public:
QSymm16Decoder(const int16_t* data, const float scale, const int32_t offset)
@@ -128,25 +112,25 @@ private:
const int32_t m_Offset;
};
-class FloatEncoder : public TypedIterator<float, Encoder>
+class FloatDecoder : public TypedIterator<const float, Decoder<float>>
{
public:
- FloatEncoder(float* data)
+ FloatDecoder(const float* data)
: TypedIterator(data) {}
- void Set(const float& right) override
+ float Get() const override
{
- *m_Iterator = right;
+ return *m_Iterator;
}
};
-class QASymm8Encoder : public TypedIterator<uint8_t, Encoder>
+class QASymm8Encoder : public TypedIterator<uint8_t, Encoder<float>>
{
public:
QASymm8Encoder(uint8_t* data, const float scale, const int32_t offset)
: TypedIterator(data), m_Scale(scale), m_Offset(offset) {}
- void Set(const float& right) override
+ void Set(float right) override
{
*m_Iterator = armnn::Quantize<uint8_t>(right, m_Scale, m_Offset);
}
@@ -156,32 +140,45 @@ private:
const int32_t m_Offset;
};
-class BooleanEncoder : public TypedIterator<uint8_t, ComparisonEncoder>
+class QSymm16Encoder : public TypedIterator<int16_t, Encoder<float>>
{
public:
- BooleanEncoder(uint8_t* data)
+ QSymm16Encoder(int16_t* data, const float scale, const int32_t offset)
+ : TypedIterator(data), m_Scale(scale), m_Offset(offset) {}
+
+ void Set(float right) override
+ {
+ *m_Iterator = armnn::Quantize<int16_t>(right, m_Scale, m_Offset);
+ }
+
+private:
+ const float m_Scale;
+ const int32_t m_Offset;
+};
+
+class FloatEncoder : public TypedIterator<float, Encoder<float>>
+{
+public:
+ FloatEncoder(float* data)
: TypedIterator(data) {}
- void Set(bool right) override
+ void Set(float right) override
{
*m_Iterator = right;
}
};
-class QSymm16Encoder : public TypedIterator<int16_t, Encoder>
+class BooleanEncoder : public TypedIterator<uint8_t, Encoder<bool>>
{
public:
- QSymm16Encoder(int16_t* data, const float scale, const int32_t offset)
- : TypedIterator(data), m_Scale(scale), m_Offset(offset) {}
+ BooleanEncoder(uint8_t* data)
+ : TypedIterator(data) {}
- void Set(const float& right) override
+ void Set(bool right) override
{
- *m_Iterator = armnn::Quantize<int16_t>(right, m_Scale, m_Offset);
+ *m_Iterator = right;
}
-
-private:
- const float m_Scale;
- const int32_t m_Offset;
};
+
} //namespace armnn \ No newline at end of file