blob: 2e1074a1b4ec88b25e5d4e3ada2d52828e7e4981 [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
Finn Williams87d0bda2020-07-03 10:12:03 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa01c577f2c2018-08-31 09:22:23 +01004//
5#include "ConvertFp32ToFp16Layer.hpp"
6
7#include "LayerCloneBase.hpp"
8
9#include <armnn/TypesUtils.hpp>
Colm Donelan0c479742021-12-10 12:43:54 +000010#include <armnn/backends/WorkloadData.hpp>
11#include <armnn/backends/WorkloadFactory.hpp>
telsoa01c577f2c2018-08-31 09:22:23 +010012
13namespace armnn
14{
15
16ConvertFp32ToFp16Layer::ConvertFp32ToFp16Layer(const char* name)
17 : Layer(1, 1, LayerType::ConvertFp32ToFp16, name)
18{
19}
20
Derek Lamberti94a88d22019-12-10 21:12:59 +000021std::unique_ptr<IWorkload> ConvertFp32ToFp16Layer::CreateWorkload(const IWorkloadFactory& factory) const
telsoa01c577f2c2018-08-31 09:22:23 +010022{
23 ConvertFp32ToFp16QueueDescriptor descriptor;
Keith Davisdf04d232020-10-23 17:20:05 +010024 SetAdditionalInfo(descriptor);
25
Teresa Charlin611c7fb2022-01-07 09:47:29 +000026 return factory.CreateWorkload(LayerType::ConvertFp32ToFp16, descriptor, PrepInfoAndDesc(descriptor));
telsoa01c577f2c2018-08-31 09:22:23 +010027}
28
29ConvertFp32ToFp16Layer* ConvertFp32ToFp16Layer::Clone(Graph& graph) const
30{
31 return CloneBase<ConvertFp32ToFp16Layer>(graph, GetName());
32}
33
Finn Williamsf24effa2020-07-03 10:12:03 +010034void ConvertFp32ToFp16Layer::ValidateTensorShapesFromInputs()
telsoa01c577f2c2018-08-31 09:22:23 +010035{
Teresa Charlincdc01492020-06-09 18:00:20 +010036
telsoa01c577f2c2018-08-31 09:22:23 +010037 VerifyLayerConnections(1, CHECK_LOCATION());
38
Finn Williams87d0bda2020-07-03 10:12:03 +010039 const TensorShape& outputShape = GetOutputSlot(0).GetTensorInfo().GetShape();
40
Finn Williamsf24effa2020-07-03 10:12:03 +010041 VerifyShapeInferenceType(outputShape, m_ShapeInferenceMethod);
Finn Williams87d0bda2020-07-03 10:12:03 +010042
telsoa01c577f2c2018-08-31 09:22:23 +010043 auto inferredShapes = InferOutputShapes({ GetInputSlot(0).GetConnection()->GetTensorInfo().GetShape() });
44
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010045 ARMNN_ASSERT(inferredShapes.size() == 1);
telsoa01c577f2c2018-08-31 09:22:23 +010046
Finn Williamsf24effa2020-07-03 10:12:03 +010047 ValidateAndCopyShape(outputShape, inferredShapes[0], m_ShapeInferenceMethod, "LayerName");
telsoa01c577f2c2018-08-31 09:22:23 +010048}
49
Jan Eilers1b2654f2021-09-24 15:45:46 +010050ARMNN_NO_DEPRECATE_WARN_BEGIN
jimfly01e9e7bfd2019-01-24 22:29:33 +000051void ConvertFp32ToFp16Layer::Accept(ILayerVisitor& visitor) const
52{
53 // These conversion layers are only inserted by the
54 // optimizer and so will never be in an input graph.
Jan Eilers8eb25602020-03-09 12:13:48 +000055 IgnoreUnused(visitor);
jimfly01e9e7bfd2019-01-24 22:29:33 +000056 throw armnn::Exception("ConvertFp32ToFp16Layer should never appear in an input graph");
57}
Jan Eilers1b2654f2021-09-24 15:45:46 +010058ARMNN_NO_DEPRECATE_WARN_END
jimfly01e9e7bfd2019-01-24 22:29:33 +000059
telsoa01c577f2c2018-08-31 09:22:23 +010060} // namespace armnn