diff options
author | Matthew Jackson <matthew.jackson@arm.com> | 2019-09-09 14:31:21 +0100 |
---|---|---|
committer | Matthew Jackson <matthew.jackson@arm.com> | 2019-09-10 09:46:49 +0000 |
commit | e69c399dcee1e75ebf9b2b12f72f3ad628c4e104 (patch) | |
tree | caa3c3739723483b5db8c19872b6af13cac74db5 /src/backends/reference/workloads/BaseIterator.hpp | |
parent | 914e4db5a9083e922d89f133672fd44e92016e96 (diff) | |
download | armnn-e69c399dcee1e75ebf9b2b12f72f3ad628c4e104.tar.gz |
IVGCVSW-3824 Implement Float 16 Encoder and Decoder
* Implement Float 16 Encoder and Decoder
* Add Stack Float 16 layer and create workload tests
Signed-off-by: Matthew Jackson <matthew.jackson@arm.com>
Change-Id: Ice4678226f4d22c06ebcc6db3052d42ce0c1bd67
Diffstat (limited to 'src/backends/reference/workloads/BaseIterator.hpp')
-rw-r--r-- | src/backends/reference/workloads/BaseIterator.hpp | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/src/backends/reference/workloads/BaseIterator.hpp b/src/backends/reference/workloads/BaseIterator.hpp index c9fd773d5e..18270faf46 100644 --- a/src/backends/reference/workloads/BaseIterator.hpp +++ b/src/backends/reference/workloads/BaseIterator.hpp @@ -5,6 +5,8 @@ #pragma once +#include "FloatingPointConverter.hpp" + #include <armnn/ArmNN.hpp> #include <ResolveType.hpp> @@ -142,14 +144,31 @@ private: const int32_t m_Offset; }; -class FloatDecoder : public TypedIterator<const float, Decoder<float>> +class Float16Decoder : public TypedIterator<const Half, Decoder<float>> { public: - FloatDecoder(const float* data) + Float16Decoder(const Half* data) : TypedIterator(data) {} - FloatDecoder() - : FloatDecoder(nullptr) {} + Float16Decoder() + : Float16Decoder(nullptr) {} + + float Get() const override + { + float val = 0.f; + armnnUtils::FloatingPointConverter::ConvertFloat16To32(m_Iterator, 1, &val); + return val; + } +}; + +class Float32Decoder : public TypedIterator<const float, Decoder<float>> +{ +public: + Float32Decoder(const float* data) + : TypedIterator(data) {} + + Float32Decoder() + : Float32Decoder(nullptr) {} float Get() const override { @@ -238,14 +257,36 @@ private: const int32_t m_Offset; }; -class FloatEncoder : public TypedIterator<float, Encoder<float>> +class Float16Encoder : public TypedIterator<Half, Encoder<float>> +{ +public: + Float16Encoder(Half* data) + : TypedIterator(data) {} + + Float16Encoder() + : Float16Encoder(nullptr) {} + + void Set(float right) override + { + armnnUtils::FloatingPointConverter::ConvertFloat32To16(&right, 1, m_Iterator); + } + + float Get() const override + { + float val = 0.f; + armnnUtils::FloatingPointConverter::ConvertFloat16To32(m_Iterator, 1, &val); + return val; + } +}; + +class Float32Encoder : public TypedIterator<float, Encoder<float>> { public: - FloatEncoder(float* data) + Float32Encoder(float* data) : TypedIterator(data) {} - FloatEncoder() - : FloatEncoder(nullptr) {} + Float32Encoder() + : Float32Encoder(nullptr) {} void Set(float right) override { |