diff options
author | Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> | 2019-09-10 14:42:22 +0100 |
---|---|---|
committer | Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> | 2019-09-10 14:42:22 +0100 |
commit | fa6544e44628f202cef140467079faf0be9d306e (patch) | |
tree | 0c71cf24779c74150863163784fb29f049cac424 /1.2 | |
parent | 407718f768417ce9b858224261cb62c742ec80d0 (diff) | |
download | android-nn-driver-fa6544e44628f202cef140467079faf0be9d306e.tar.gz |
IVGCVSW-3832 Implement ConvertRsqt() method in 1.2/HalPolicy.cpp
Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com>
Change-Id: I1baf88f15c9bdcffd38e910070c97909b7f913b3
Diffstat (limited to '1.2')
-rw-r--r-- | 1.2/HalPolicy.cpp | 44 | ||||
-rw-r--r-- | 1.2/HalPolicy.hpp | 2 |
2 files changed, 46 insertions, 0 deletions
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<hal_1_2::HalPolicy>(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<hal_1_2::HalPolicy>(operation, 0, model, data); + if (!input.IsValid()) + { + return Fail("%s: Operation has invalid input", __func__); + } + + const Operand* output = GetOutputOperand<hal_1_2::HalPolicy>(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<hal_1_2::HalPolicy>(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); |