diff options
author | telsoa01 <telmo.soares@arm.com> | 2018-08-31 09:22:23 +0100 |
---|---|---|
committer | telsoa01 <telmo.soares@arm.com> | 2018-08-31 09:22:23 +0100 |
commit | c577f2c6a3b4ddb6ba87a882723c53a248afbeba (patch) | |
tree | bd7d4c148df27f8be6649d313efb24f536b7cf34 /src/armnn/optimizations/OptimizeInverseConversions.hpp | |
parent | 4c7098bfeab1ffe1cdc77f6c15548d3e73274746 (diff) | |
download | armnn-c577f2c6a3b4ddb6ba87a882723c53a248afbeba.tar.gz |
Release 18.08
Diffstat (limited to 'src/armnn/optimizations/OptimizeInverseConversions.hpp')
-rw-r--r-- | src/armnn/optimizations/OptimizeInverseConversions.hpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/armnn/optimizations/OptimizeInverseConversions.hpp b/src/armnn/optimizations/OptimizeInverseConversions.hpp new file mode 100644 index 0000000000..5089d63f2f --- /dev/null +++ b/src/armnn/optimizations/OptimizeInverseConversions.hpp @@ -0,0 +1,44 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// See LICENSE file in the project root for full license information. +// +#pragma once + +#include "Optimization.hpp" + +namespace armnn +{ +namespace optimizations +{ + +class OptimizeInverseConversionsImpl +{ +public: + /// Run for every connection between two inverse data type conversion layers, i.e. + /// Fp16ToFp32 followed by Fp32ToFp16 or vice-versa. + void Run(Graph& graph, InputSlot& connection) const + { + Layer& base = connection.GetConnectedOutputSlot()->GetOwningLayer(); + Layer& child = connection.GetOwningLayer(); + + BOOST_ASSERT((base.GetType() == LayerType::ConvertFp16ToFp32 && + child.GetType() == LayerType::ConvertFp32ToFp16) || + (base.GetType() == LayerType::ConvertFp32ToFp16 && + child.GetType() == LayerType::ConvertFp16ToFp32)); + + // Bypass both conversion layers + child.GetOutputSlot().MoveAllConnections(*base.GetInputSlot(0).GetConnectedOutputSlot()); + } + +protected: + OptimizeInverseConversionsImpl() = default; + ~OptimizeInverseConversionsImpl() = default; +}; + +using OptimizeInverseConversionsFp16 = + OptimizeForConnection<ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl>; +using OptimizeInverseConversionsFp32 = + OptimizeForConnection<ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl>; + +} // namespace optimizations +} // namespace armnn |