From 2605b236d103e1ba27069e0d668599042a4761af Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Wed, 10 Jun 2020 15:53:46 +0100 Subject: IVGCVSW-4624 Add a RANK Reference Implementation * Add Rank front end * Add Rank reference implementation * Add Rank serialization support * Add Scalar serialization support Signed-off-by: Finn Williams Change-Id: I06e4a468c2a84e79bae2e6c5348596bbbf853b4b --- src/armnn/layers/RankLayer.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++ src/armnn/layers/RankLayer.hpp | 34 ++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/armnn/layers/RankLayer.cpp create mode 100644 src/armnn/layers/RankLayer.hpp (limited to 'src/armnn/layers') diff --git a/src/armnn/layers/RankLayer.cpp b/src/armnn/layers/RankLayer.cpp new file mode 100644 index 0000000000..f1a24b1633 --- /dev/null +++ b/src/armnn/layers/RankLayer.cpp @@ -0,0 +1,47 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "RankLayer.hpp" + +#include "LayerCloneBase.hpp" + +#include +#include + +namespace armnn +{ + +RankLayer::RankLayer(const char* name) + : Layer(1, 1, LayerType::Rank, name) +{} + +std::unique_ptr RankLayer::CreateWorkload(const IWorkloadFactory& factory) const +{ + RankQueueDescriptor descriptor; + return factory.CreateRank(descriptor, PrepInfoAndDesc(descriptor)); +} + +Layer* RankLayer::Clone(Graph& graph) const +{ + RankLayer* clone = CloneBase(graph, GetName()); + return clone; +} + +void RankLayer::ValidateTensorShapesFromInputs(ShapeInferenceMethod shapeInferenceMethod) +{ + IgnoreUnused(shapeInferenceMethod); + VerifyLayerConnections(1, CHECK_LOCATION()); + + ConditionalThrowIfNotEqual( + "Rank: TensorShape set on OutputSlot[0] does not match the inferred shape.", + GetOutputSlot(0).GetTensorInfo().GetShape(), {TensorShape{Dimensionality::Scalar}}); +} + +void RankLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitRankLayer(this, GetName()); +} + +} //namespace armnn \ No newline at end of file diff --git a/src/armnn/layers/RankLayer.hpp b/src/armnn/layers/RankLayer.hpp new file mode 100644 index 0000000000..e160d60354 --- /dev/null +++ b/src/armnn/layers/RankLayer.hpp @@ -0,0 +1,34 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +namespace armnn +{ + +class RankLayer : public Layer +{ + public: + /// Makes a workload for the Rank type. + /// @param [in] factory The workload factory which will create the workload. + /// @return A pointer to the created workload, or nullptr if not created. + virtual std::unique_ptr CreateWorkload(const IWorkloadFactory& factory) const override; + + Layer* Clone(Graph& graph) const override; + + void ValidateTensorShapesFromInputs(ShapeInferenceMethod shapeInferenceMethod) override; + + void Accept(ILayerVisitor& visitor) const override; + + protected: + RankLayer(const char* name); + ~RankLayer() = default; +}; + +} //namespace armnn + + -- cgit v1.2.1