diff options
author | Derek Lamberti <derek.lamberti@arm.com> | 2019-04-09 10:25:02 +0100 |
---|---|---|
committer | Derek Lamberti <derek.lamberti@arm.com> | 2019-04-10 15:13:41 +0100 |
commit | f30f7d32b22020f80b21da7b008d8302cee9d395 (patch) | |
tree | 2e213da4704c46b40f20629223365d1ddbf8d8cd /src/backends/reference/workloads/BaseIterator.hpp | |
parent | 82fbe7c0b82f7adadd5120ac4b4f779d0da7c0d5 (diff) | |
download | armnn-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.hpp | 89 |
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 |