From aba90cd608eb65ab459cd71a6724511a1507763b Mon Sep 17 00:00:00 2001 From: James Conroy Date: Fri, 6 Nov 2020 16:28:18 +0000 Subject: IVGCVSW-5091 Add Logical ops frontend and ref impl * Add frontend and reference implementation for logical ops NOT, AND, OR. * Unary NOT uses existing ElementwiseUnary layer and ElementwiseUnary descriptor. * Binary AND/OR uses new layer LogicalBinary and new LogicalBinary descriptor. * Add serialization/deserializion support and add missing ElementwiseUnary deserializer code. * Add additional Boolean decoder in BaseIterator.hpp. Signed-off-by: James Conroy Change-Id: Id343b01174053a166de1b98b6175e04a5065f720 --- src/backends/reference/workloads/BaseIterator.hpp | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/backends/reference/workloads/BaseIterator.hpp') diff --git a/src/backends/reference/workloads/BaseIterator.hpp b/src/backends/reference/workloads/BaseIterator.hpp index a10f383e90..73e24691d9 100644 --- a/src/backends/reference/workloads/BaseIterator.hpp +++ b/src/backends/reference/workloads/BaseIterator.hpp @@ -515,6 +515,40 @@ public: } }; +class BooleanDecoderBool : public TypedIterator> +{ +public: + BooleanDecoderBool(const uint8_t* data) + : TypedIterator(data) {} + + BooleanDecoderBool() + : BooleanDecoderBool(nullptr) {} + + bool Get() const override + { + return *m_Iterator; + } + + std::vector DecodeTensor(const TensorShape& tensorShape, + const unsigned int channelMultiplier, + const bool isDepthwise) override + { + IgnoreUnused(channelMultiplier, isDepthwise); + + const unsigned int size = tensorShape.GetNumElements(); + std::vector decodedTensor; + decodedTensor.reserve(size); + + for (uint32_t i = 0; i < size; ++i) + { + this->operator[](i); + decodedTensor.emplace_back(*m_Iterator); + } + + return decodedTensor; + } +}; + class QASymm8Encoder : public TypedIterator> { public: -- cgit v1.2.1