From fa6544e44628f202cef140467079faf0be9d306e Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Tue, 10 Sep 2019 14:42:22 +0100 Subject: IVGCVSW-3832 Implement ConvertRsqt() method in 1.2/HalPolicy.cpp Signed-off-by: Aron Virginas-Tar Change-Id: I1baf88f15c9bdcffd38e910070c97909b7f913b3 --- 1.2/HalPolicy.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1.2/HalPolicy.hpp | 2 ++ 2 files changed, 46 insertions(+) diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp index 40dd55de..1de57e5a 100644 --- a/1.2/HalPolicy.cpp +++ b/1.2/HalPolicy.cpp @@ -85,6 +85,8 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, return ConvertResize(operation, model, data, armnn::ResizeMethod::Bilinear); case V1_2::OperationType::RESIZE_NEAREST_NEIGHBOR: return ConvertResize(operation, model, data, armnn::ResizeMethod::NearestNeighbor); + case V1_2::OperationType::RSQRT: + return ConvertRsqrt(operation, model, data); case V1_2::OperationType::SQRT: return ConvertSqrt(operation, model, data); case V1_2::OperationType::SQUEEZE: @@ -1172,6 +1174,48 @@ bool HalPolicy::ConvertResize(const Operation& operation, return SetupAndTrackLayerOutputSlot(operation, 0, *layer, model, data); } +bool HalPolicy::ConvertRsqrt(const Operation& operation, const Model& model, ConversionData& data) +{ + ALOGV("hal_1_2::HalPolicy::ConvertRsqrt()"); + + LayerInputHandle input = ConvertToLayerInputHandle(operation, 0, model, data); + if (!input.IsValid()) + { + return Fail("%s: Operation has invalid input", __func__); + } + + const Operand* output = GetOutputOperand(operation, 0, model); + if (!output) + { + return Fail("%s: Could not read output 0", __func__); + } + + const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*output); + if (IsDynamicTensor(outputInfo)) + { + return Fail("%s: Dynamic output tensors are not supported", __func__); + } + + bool isSupported = false; + FORWARD_LAYER_SUPPORT_FUNC(__func__, + IsRsqrtSupported, + data.m_Backends, + isSupported, + input.GetTensorInfo(), + outputInfo); + + if (!isSupported) + { + return false; + } + + armnn::IConnectableLayer* const layer = data.m_Network->AddRsqrtLayer(); + assert(layer != nullptr); + input.Connect(layer->GetInputSlot(0)); + + return SetupAndTrackLayerOutputSlot(operation, 0, *layer, model, data); +} + bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data) { ALOGV("hal_1_2::HalPolicy::ConvertSpaceToBatchNd()"); diff --git a/1.2/HalPolicy.hpp b/1.2/HalPolicy.hpp index f021a09c..e3d39702 100644 --- a/1.2/HalPolicy.hpp +++ b/1.2/HalPolicy.hpp @@ -98,6 +98,8 @@ private: ConversionData& data, armnn::ResizeMethod resizeMethod); + static bool ConvertRsqrt(const Operation& operation, const Model& model, ConversionData& data); + static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data); static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data); -- cgit v1.2.1