diff options
Diffstat (limited to 'src/armnn/layers')
-rw-r--r-- | src/armnn/layers/RankLayer.cpp | 47 | ||||
-rw-r--r-- | src/armnn/layers/RankLayer.hpp | 34 |
2 files changed, 81 insertions, 0 deletions
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 <backendsCommon/WorkloadData.hpp> +#include <backendsCommon/WorkloadFactory.hpp> + +namespace armnn +{ + +RankLayer::RankLayer(const char* name) + : Layer(1, 1, LayerType::Rank, name) +{} + +std::unique_ptr<IWorkload> RankLayer::CreateWorkload(const IWorkloadFactory& factory) const +{ + RankQueueDescriptor descriptor; + return factory.CreateRank(descriptor, PrepInfoAndDesc(descriptor)); +} + +Layer* RankLayer::Clone(Graph& graph) const +{ + RankLayer* clone = CloneBase<RankLayer>(graph, GetName()); + return clone; +} + +void RankLayer::ValidateTensorShapesFromInputs(ShapeInferenceMethod shapeInferenceMethod) +{ + IgnoreUnused(shapeInferenceMethod); + VerifyLayerConnections(1, CHECK_LOCATION()); + + ConditionalThrowIfNotEqual<LayerValidationException>( + "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 <Layer.hpp> + +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<IWorkload> 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 + + |