xref: /aosp_15_r20/external/armnn/src/armnnSerializer/Serializer.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017,2019-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #pragma once
6*89c4ff92SAndroid Build Coastguard Worker 
7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/IStrategy.hpp>
8*89c4ff92SAndroid Build Coastguard Worker 
9*89c4ff92SAndroid Build Coastguard Worker #include <armnnSerializer/ISerializer.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker #include <common/include/ProfilingGuid.hpp>
12*89c4ff92SAndroid Build Coastguard Worker 
13*89c4ff92SAndroid Build Coastguard Worker #include <unordered_map>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker #include "ArmnnSchema_generated.h"
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Types.hpp>
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker namespace armnnSerializer
20*89c4ff92SAndroid Build Coastguard Worker {
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker class SerializerStrategy : public armnn::IStrategy
23*89c4ff92SAndroid Build Coastguard Worker {
24*89c4ff92SAndroid Build Coastguard Worker public:
25*89c4ff92SAndroid Build Coastguard Worker     void ExecuteStrategy(const armnn::IConnectableLayer* layer,
26*89c4ff92SAndroid Build Coastguard Worker                          const armnn::BaseDescriptor& descriptor,
27*89c4ff92SAndroid Build Coastguard Worker                          const std::vector<armnn::ConstTensor>& constants,
28*89c4ff92SAndroid Build Coastguard Worker                          const char* name,
29*89c4ff92SAndroid Build Coastguard Worker                          const armnn::LayerBindingId id) override;
30*89c4ff92SAndroid Build Coastguard Worker 
SerializerStrategy()31*89c4ff92SAndroid Build Coastguard Worker     SerializerStrategy() : m_layerId(0) {}
~SerializerStrategy()32*89c4ff92SAndroid Build Coastguard Worker     ~SerializerStrategy() {}
33*89c4ff92SAndroid Build Coastguard Worker 
GetFlatBufferBuilder()34*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::FlatBufferBuilder& GetFlatBufferBuilder()
35*89c4ff92SAndroid Build Coastguard Worker     {
36*89c4ff92SAndroid Build Coastguard Worker         return m_flatBufferBuilder;
37*89c4ff92SAndroid Build Coastguard Worker     }
38*89c4ff92SAndroid Build Coastguard Worker 
GetInputIds()39*89c4ff92SAndroid Build Coastguard Worker     std::vector<int>& GetInputIds()
40*89c4ff92SAndroid Build Coastguard Worker     {
41*89c4ff92SAndroid Build Coastguard Worker         return m_inputIds;
42*89c4ff92SAndroid Build Coastguard Worker     }
43*89c4ff92SAndroid Build Coastguard Worker 
GetOutputIds()44*89c4ff92SAndroid Build Coastguard Worker     std::vector<int>& GetOutputIds()
45*89c4ff92SAndroid Build Coastguard Worker     {
46*89c4ff92SAndroid Build Coastguard Worker         return m_outputIds;
47*89c4ff92SAndroid Build Coastguard Worker     }
48*89c4ff92SAndroid Build Coastguard Worker 
GetSerializedLayers()49*89c4ff92SAndroid Build Coastguard Worker     std::vector<flatbuffers::Offset<armnnSerializer::AnyLayer>>& GetSerializedLayers()
50*89c4ff92SAndroid Build Coastguard Worker     {
51*89c4ff92SAndroid Build Coastguard Worker         return m_serializedLayers;
52*89c4ff92SAndroid Build Coastguard Worker     }
53*89c4ff92SAndroid Build Coastguard Worker 
54*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> GetVersionTable();
55*89c4ff92SAndroid Build Coastguard Worker 
56*89c4ff92SAndroid Build Coastguard Worker private:
57*89c4ff92SAndroid Build Coastguard Worker     /// Creates the Input Slots and Output Slots and LayerBase for the layer.
58*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::Offset<armnnSerializer::LayerBase> CreateLayerBase(
59*89c4ff92SAndroid Build Coastguard Worker             const armnn::IConnectableLayer* layer,
60*89c4ff92SAndroid Build Coastguard Worker             const armnnSerializer::LayerType layerType);
61*89c4ff92SAndroid Build Coastguard Worker 
62*89c4ff92SAndroid Build Coastguard Worker     /// Creates the serializer AnyLayer for the layer and adds it to m_serializedLayers.
63*89c4ff92SAndroid Build Coastguard Worker     void CreateAnyLayer(const flatbuffers::Offset<void>& layer, const armnnSerializer::Layer serializerLayer);
64*89c4ff92SAndroid Build Coastguard Worker 
65*89c4ff92SAndroid Build Coastguard Worker     /// Creates the serializer ConstTensor for the armnn ConstTensor.
66*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::Offset<armnnSerializer::ConstTensor> CreateConstTensorInfo(
67*89c4ff92SAndroid Build Coastguard Worker             const armnn::ConstTensor& constTensor);
68*89c4ff92SAndroid Build Coastguard Worker 
69*89c4ff92SAndroid Build Coastguard Worker     /// Creates the serializer TensorInfo for the armnn TensorInfo.
70*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::Offset<TensorInfo>  CreateTensorInfo(const armnn::TensorInfo& tensorInfo);
71*89c4ff92SAndroid Build Coastguard Worker 
72*89c4ff92SAndroid Build Coastguard Worker     template <typename T>
73*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::Offset<flatbuffers::Vector<T>> CreateDataVector(const void* memory, unsigned int size);
74*89c4ff92SAndroid Build Coastguard Worker 
75*89c4ff92SAndroid Build Coastguard Worker     ///Function which maps Guid to an index
76*89c4ff92SAndroid Build Coastguard Worker     uint32_t GetSerializedId(LayerGuid guid);
77*89c4ff92SAndroid Build Coastguard Worker 
78*89c4ff92SAndroid Build Coastguard Worker     /// Creates the serializer InputSlots for the layer.
79*89c4ff92SAndroid Build Coastguard Worker     std::vector<flatbuffers::Offset<armnnSerializer::InputSlot>> CreateInputSlots(
80*89c4ff92SAndroid Build Coastguard Worker     const armnn::IConnectableLayer* layer);
81*89c4ff92SAndroid Build Coastguard Worker 
82*89c4ff92SAndroid Build Coastguard Worker     /// Creates the serializer OutputSlots for the layer.
83*89c4ff92SAndroid Build Coastguard Worker     std::vector<flatbuffers::Offset<armnnSerializer::OutputSlot>> CreateOutputSlots(
84*89c4ff92SAndroid Build Coastguard Worker     const armnn::IConnectableLayer* layer);
85*89c4ff92SAndroid Build Coastguard Worker 
86*89c4ff92SAndroid Build Coastguard Worker     /// FlatBufferBuilder to create our layers' FlatBuffers.
87*89c4ff92SAndroid Build Coastguard Worker     flatbuffers::FlatBufferBuilder m_flatBufferBuilder;
88*89c4ff92SAndroid Build Coastguard Worker 
89*89c4ff92SAndroid Build Coastguard Worker     /// AnyLayers required by the SerializedGraph.
90*89c4ff92SAndroid Build Coastguard Worker     std::vector<flatbuffers::Offset<armnnSerializer::AnyLayer>> m_serializedLayers;
91*89c4ff92SAndroid Build Coastguard Worker 
92*89c4ff92SAndroid Build Coastguard Worker     /// Vector of the binding ids of all Input Layers required by the SerializedGraph.
93*89c4ff92SAndroid Build Coastguard Worker     std::vector<int> m_inputIds;
94*89c4ff92SAndroid Build Coastguard Worker 
95*89c4ff92SAndroid Build Coastguard Worker     /// Vector of the binding ids of all Output Layers required by the SerializedGraph.
96*89c4ff92SAndroid Build Coastguard Worker     std::vector<int> m_outputIds;
97*89c4ff92SAndroid Build Coastguard Worker 
98*89c4ff92SAndroid Build Coastguard Worker     /// Mapped Guids of all Layers to match our index.
99*89c4ff92SAndroid Build Coastguard Worker     std::unordered_map<LayerGuid, uint32_t > m_guidMap;
100*89c4ff92SAndroid Build Coastguard Worker 
101*89c4ff92SAndroid Build Coastguard Worker     /// layer within our FlatBuffer index.
102*89c4ff92SAndroid Build Coastguard Worker     uint32_t m_layerId;
103*89c4ff92SAndroid Build Coastguard Worker 
104*89c4ff92SAndroid Build Coastguard Worker private:
105*89c4ff92SAndroid Build Coastguard Worker     void SerializeActivationLayer(const armnn::IConnectableLayer* layer,
106*89c4ff92SAndroid Build Coastguard Worker                                   const armnn::ActivationDescriptor& descriptor,
107*89c4ff92SAndroid Build Coastguard Worker                                   const char* name = nullptr);
108*89c4ff92SAndroid Build Coastguard Worker 
109*89c4ff92SAndroid Build Coastguard Worker     void SerializeAdditionLayer(const armnn::IConnectableLayer* layer,
110*89c4ff92SAndroid Build Coastguard Worker                                 const char* name = nullptr);
111*89c4ff92SAndroid Build Coastguard Worker 
112*89c4ff92SAndroid Build Coastguard Worker     void SerializeArgMinMaxLayer(const armnn::IConnectableLayer* layer,
113*89c4ff92SAndroid Build Coastguard Worker                                  const armnn::ArgMinMaxDescriptor& argMinMaxDescriptor,
114*89c4ff92SAndroid Build Coastguard Worker                                  const char* name = nullptr);
115*89c4ff92SAndroid Build Coastguard Worker 
116*89c4ff92SAndroid Build Coastguard Worker     void SerializeBatchMatMulLayer(const armnn::IConnectableLayer* layer,
117*89c4ff92SAndroid Build Coastguard Worker                                    const armnn::BatchMatMulDescriptor& descriptor,
118*89c4ff92SAndroid Build Coastguard Worker                                    const char* name = nullptr);
119*89c4ff92SAndroid Build Coastguard Worker 
120*89c4ff92SAndroid Build Coastguard Worker     void SerializeBatchToSpaceNdLayer(const armnn::IConnectableLayer* layer,
121*89c4ff92SAndroid Build Coastguard Worker                                       const armnn::BatchToSpaceNdDescriptor& descriptor,
122*89c4ff92SAndroid Build Coastguard Worker                                       const char* name = nullptr);
123*89c4ff92SAndroid Build Coastguard Worker 
124*89c4ff92SAndroid Build Coastguard Worker     void SerializeBatchNormalizationLayer(const armnn::IConnectableLayer* layer,
125*89c4ff92SAndroid Build Coastguard Worker                                           const armnn::BatchNormalizationDescriptor& BatchNormalizationDescriptor,
126*89c4ff92SAndroid Build Coastguard Worker                                           const std::vector<armnn::ConstTensor>& constants,
127*89c4ff92SAndroid Build Coastguard Worker                                           const char* name = nullptr);
128*89c4ff92SAndroid Build Coastguard Worker 
129*89c4ff92SAndroid Build Coastguard Worker     void SerializeCastLayer(const armnn::IConnectableLayer* layer,
130*89c4ff92SAndroid Build Coastguard Worker                             const char* name = nullptr);
131*89c4ff92SAndroid Build Coastguard Worker 
132*89c4ff92SAndroid Build Coastguard Worker     void SerializeChannelShuffleLayer(const armnn::IConnectableLayer* layer,
133*89c4ff92SAndroid Build Coastguard Worker                                       const armnn::ChannelShuffleDescriptor& descriptor,
134*89c4ff92SAndroid Build Coastguard Worker                                       const char* name = nullptr);
135*89c4ff92SAndroid Build Coastguard Worker 
136*89c4ff92SAndroid Build Coastguard Worker     void SerializeComparisonLayer(const armnn::IConnectableLayer* layer,
137*89c4ff92SAndroid Build Coastguard Worker                                   const armnn::ComparisonDescriptor& descriptor,
138*89c4ff92SAndroid Build Coastguard Worker                                   const char* name = nullptr);
139*89c4ff92SAndroid Build Coastguard Worker 
140*89c4ff92SAndroid Build Coastguard Worker     void SerializeConcatLayer(const armnn::IConnectableLayer* layer,
141*89c4ff92SAndroid Build Coastguard Worker                               const armnn::ConcatDescriptor& concatDescriptor,
142*89c4ff92SAndroid Build Coastguard Worker                               const char* name = nullptr);
143*89c4ff92SAndroid Build Coastguard Worker 
144*89c4ff92SAndroid Build Coastguard Worker     void SerializeConstantLayer(const armnn::IConnectableLayer* layer,
145*89c4ff92SAndroid Build Coastguard Worker                                 const std::vector<armnn::ConstTensor>& constants,
146*89c4ff92SAndroid Build Coastguard Worker                                 const char* name = nullptr);
147*89c4ff92SAndroid Build Coastguard Worker 
148*89c4ff92SAndroid Build Coastguard Worker     void SerializeConvolution2dLayer(const armnn::IConnectableLayer* layer,
149*89c4ff92SAndroid Build Coastguard Worker                                      const armnn::Convolution2dDescriptor& descriptor,
150*89c4ff92SAndroid Build Coastguard Worker                                      const char* name = nullptr);
151*89c4ff92SAndroid Build Coastguard Worker 
152*89c4ff92SAndroid Build Coastguard Worker     void SerializeConvolution3dLayer(const armnn::IConnectableLayer* layer,
153*89c4ff92SAndroid Build Coastguard Worker                                      const armnn::Convolution3dDescriptor& descriptor,
154*89c4ff92SAndroid Build Coastguard Worker                                      const char* name = nullptr);
155*89c4ff92SAndroid Build Coastguard Worker 
156*89c4ff92SAndroid Build Coastguard Worker     void SerializeDepthToSpaceLayer(const armnn::IConnectableLayer* layer,
157*89c4ff92SAndroid Build Coastguard Worker                                     const armnn::DepthToSpaceDescriptor& descriptor,
158*89c4ff92SAndroid Build Coastguard Worker                                     const char* name = nullptr);
159*89c4ff92SAndroid Build Coastguard Worker 
160*89c4ff92SAndroid Build Coastguard Worker     void SerializeDepthwiseConvolution2dLayer(const armnn::IConnectableLayer* layer,
161*89c4ff92SAndroid Build Coastguard Worker                                               const armnn::DepthwiseConvolution2dDescriptor& descriptor,
162*89c4ff92SAndroid Build Coastguard Worker                                               const char* name = nullptr);
163*89c4ff92SAndroid Build Coastguard Worker 
164*89c4ff92SAndroid Build Coastguard Worker     void SerializeDequantizeLayer(const armnn::IConnectableLayer* layer,
165*89c4ff92SAndroid Build Coastguard Worker                                   const char* name = nullptr);
166*89c4ff92SAndroid Build Coastguard Worker 
167*89c4ff92SAndroid Build Coastguard Worker     void SerializeDetectionPostProcessLayer(const armnn::IConnectableLayer* layer,
168*89c4ff92SAndroid Build Coastguard Worker                                             const armnn::DetectionPostProcessDescriptor& descriptor,
169*89c4ff92SAndroid Build Coastguard Worker                                             const std::vector<armnn::ConstTensor>& constants,
170*89c4ff92SAndroid Build Coastguard Worker                                             const char* name = nullptr);
171*89c4ff92SAndroid Build Coastguard Worker 
172*89c4ff92SAndroid Build Coastguard Worker     void SerializeDivisionLayer(const armnn::IConnectableLayer* layer,
173*89c4ff92SAndroid Build Coastguard Worker                                 const char* name = nullptr);
174*89c4ff92SAndroid Build Coastguard Worker 
175*89c4ff92SAndroid Build Coastguard Worker     void SerializeElementwiseBinaryLayer(const armnn::IConnectableLayer* layer,
176*89c4ff92SAndroid Build Coastguard Worker                                          const armnn::ElementwiseBinaryDescriptor& descriptor,
177*89c4ff92SAndroid Build Coastguard Worker                                          const char* name = nullptr);
178*89c4ff92SAndroid Build Coastguard Worker 
179*89c4ff92SAndroid Build Coastguard Worker     void SerializeElementwiseUnaryLayer(const armnn::IConnectableLayer* layer,
180*89c4ff92SAndroid Build Coastguard Worker                                         const armnn::ElementwiseUnaryDescriptor& descriptor,
181*89c4ff92SAndroid Build Coastguard Worker                                         const char* name = nullptr);
182*89c4ff92SAndroid Build Coastguard Worker 
183*89c4ff92SAndroid Build Coastguard Worker     void SerializeFillLayer(const armnn::IConnectableLayer* layer,
184*89c4ff92SAndroid Build Coastguard Worker                             const armnn::FillDescriptor& fillDescriptor,
185*89c4ff92SAndroid Build Coastguard Worker                             const char* name = nullptr);
186*89c4ff92SAndroid Build Coastguard Worker 
187*89c4ff92SAndroid Build Coastguard Worker     void SerializeFloorLayer(const armnn::IConnectableLayer *layer,
188*89c4ff92SAndroid Build Coastguard Worker                              const char *name = nullptr);
189*89c4ff92SAndroid Build Coastguard Worker 
190*89c4ff92SAndroid Build Coastguard Worker     void SerializeFullyConnectedLayer(const armnn::IConnectableLayer* layer,
191*89c4ff92SAndroid Build Coastguard Worker                                       const armnn::FullyConnectedDescriptor& fullyConnectedDescriptor,
192*89c4ff92SAndroid Build Coastguard Worker                                       const char* name = nullptr);
193*89c4ff92SAndroid Build Coastguard Worker 
194*89c4ff92SAndroid Build Coastguard Worker     void SerializeGatherLayer(const armnn::IConnectableLayer* layer,
195*89c4ff92SAndroid Build Coastguard Worker                               const armnn::GatherDescriptor& gatherDescriptor,
196*89c4ff92SAndroid Build Coastguard Worker                               const char* name = nullptr);
197*89c4ff92SAndroid Build Coastguard Worker 
198*89c4ff92SAndroid Build Coastguard Worker     void SerializeGatherNdLayer(const armnn::IConnectableLayer* layer,
199*89c4ff92SAndroid Build Coastguard Worker                                 const char* name = nullptr);
200*89c4ff92SAndroid Build Coastguard Worker 
201*89c4ff92SAndroid Build Coastguard Worker     void SerializeInputLayer(const armnn::IConnectableLayer* layer,
202*89c4ff92SAndroid Build Coastguard Worker                          armnn::LayerBindingId id,
203*89c4ff92SAndroid Build Coastguard Worker                          const char* name = nullptr);
204*89c4ff92SAndroid Build Coastguard Worker 
205*89c4ff92SAndroid Build Coastguard Worker     void SerializeInstanceNormalizationLayer(const armnn::IConnectableLayer* layer,
206*89c4ff92SAndroid Build Coastguard Worker                                          const armnn::InstanceNormalizationDescriptor& instanceNormalizationDescriptor,
207*89c4ff92SAndroid Build Coastguard Worker                                          const char* name = nullptr);
208*89c4ff92SAndroid Build Coastguard Worker 
209*89c4ff92SAndroid Build Coastguard Worker     void SerializeL2NormalizationLayer(const armnn::IConnectableLayer* layer,
210*89c4ff92SAndroid Build Coastguard Worker                                    const armnn::L2NormalizationDescriptor& l2NormalizationDescriptor,
211*89c4ff92SAndroid Build Coastguard Worker                                    const char* name = nullptr);
212*89c4ff92SAndroid Build Coastguard Worker 
213*89c4ff92SAndroid Build Coastguard Worker     void SerializeLogicalBinaryLayer(const armnn::IConnectableLayer* layer,
214*89c4ff92SAndroid Build Coastguard Worker                                  const armnn::LogicalBinaryDescriptor& descriptor,
215*89c4ff92SAndroid Build Coastguard Worker                                  const char* name = nullptr);
216*89c4ff92SAndroid Build Coastguard Worker 
217*89c4ff92SAndroid Build Coastguard Worker     void SerializeLogSoftmaxLayer(const armnn::IConnectableLayer* layer,
218*89c4ff92SAndroid Build Coastguard Worker                               const armnn::LogSoftmaxDescriptor& logSoftmaxDescriptor,
219*89c4ff92SAndroid Build Coastguard Worker                               const char* name = nullptr);
220*89c4ff92SAndroid Build Coastguard Worker 
221*89c4ff92SAndroid Build Coastguard Worker     void SerializeLstmLayer(const armnn::IConnectableLayer* layer,
222*89c4ff92SAndroid Build Coastguard Worker                             const armnn::LstmDescriptor& descriptor,
223*89c4ff92SAndroid Build Coastguard Worker                             const std::vector<armnn::ConstTensor>& constants,
224*89c4ff92SAndroid Build Coastguard Worker                             const char* name = nullptr);
225*89c4ff92SAndroid Build Coastguard Worker 
226*89c4ff92SAndroid Build Coastguard Worker     void SerializeMeanLayer(const armnn::IConnectableLayer* layer,
227*89c4ff92SAndroid Build Coastguard Worker                             const armnn::MeanDescriptor& descriptor,
228*89c4ff92SAndroid Build Coastguard Worker                             const char* name);
229*89c4ff92SAndroid Build Coastguard Worker 
230*89c4ff92SAndroid Build Coastguard Worker     void SerializeMinimumLayer(const armnn::IConnectableLayer* layer,
231*89c4ff92SAndroid Build Coastguard Worker                                const char* name = nullptr);
232*89c4ff92SAndroid Build Coastguard Worker 
233*89c4ff92SAndroid Build Coastguard Worker     void SerializeMaximumLayer(const armnn::IConnectableLayer* layer,
234*89c4ff92SAndroid Build Coastguard Worker                                const char* name = nullptr);
235*89c4ff92SAndroid Build Coastguard Worker 
236*89c4ff92SAndroid Build Coastguard Worker     void SerializeMergeLayer(const armnn::IConnectableLayer* layer,
237*89c4ff92SAndroid Build Coastguard Worker                              const char* name = nullptr);
238*89c4ff92SAndroid Build Coastguard Worker 
239*89c4ff92SAndroid Build Coastguard Worker     void SerializeMultiplicationLayer(const armnn::IConnectableLayer* layer,
240*89c4ff92SAndroid Build Coastguard Worker                                       const char* name = nullptr);
241*89c4ff92SAndroid Build Coastguard Worker 
242*89c4ff92SAndroid Build Coastguard Worker     void SerializeOutputLayer(const armnn::IConnectableLayer* layer,
243*89c4ff92SAndroid Build Coastguard Worker                               armnn::LayerBindingId id,
244*89c4ff92SAndroid Build Coastguard Worker                               const char* name = nullptr);
245*89c4ff92SAndroid Build Coastguard Worker 
246*89c4ff92SAndroid Build Coastguard Worker     void SerializePadLayer(const armnn::IConnectableLayer* layer,
247*89c4ff92SAndroid Build Coastguard Worker                            const armnn::PadDescriptor& PadDescriptor,
248*89c4ff92SAndroid Build Coastguard Worker                            const char* name = nullptr);
249*89c4ff92SAndroid Build Coastguard Worker 
250*89c4ff92SAndroid Build Coastguard Worker     void SerializePermuteLayer(const armnn::IConnectableLayer* layer,
251*89c4ff92SAndroid Build Coastguard Worker                                const armnn::PermuteDescriptor& PermuteDescriptor,
252*89c4ff92SAndroid Build Coastguard Worker                                const char* name = nullptr);
253*89c4ff92SAndroid Build Coastguard Worker 
254*89c4ff92SAndroid Build Coastguard Worker     void SerializePooling2dLayer(const armnn::IConnectableLayer* layer,
255*89c4ff92SAndroid Build Coastguard Worker                                  const armnn::Pooling2dDescriptor& pooling2dDescriptor,
256*89c4ff92SAndroid Build Coastguard Worker                                  const char* name = nullptr);
257*89c4ff92SAndroid Build Coastguard Worker 
258*89c4ff92SAndroid Build Coastguard Worker     void SerializePooling3dLayer(const armnn::IConnectableLayer* layer,
259*89c4ff92SAndroid Build Coastguard Worker                                  const armnn::Pooling3dDescriptor& pooling3dDescriptor,
260*89c4ff92SAndroid Build Coastguard Worker                                  const char* name = nullptr);
261*89c4ff92SAndroid Build Coastguard Worker 
262*89c4ff92SAndroid Build Coastguard Worker     void SerializePreluLayer(const armnn::IConnectableLayer* layer,
263*89c4ff92SAndroid Build Coastguard Worker                              const char* name = nullptr);
264*89c4ff92SAndroid Build Coastguard Worker 
265*89c4ff92SAndroid Build Coastguard Worker     void SerializeQuantizeLayer(const armnn::IConnectableLayer* layer,
266*89c4ff92SAndroid Build Coastguard Worker                                 const char* name = nullptr);
267*89c4ff92SAndroid Build Coastguard Worker 
268*89c4ff92SAndroid Build Coastguard Worker     void SerializeQLstmLayer(const armnn::IConnectableLayer* layer,
269*89c4ff92SAndroid Build Coastguard Worker                              const armnn::QLstmDescriptor& descriptor,
270*89c4ff92SAndroid Build Coastguard Worker                              const std::vector<armnn::ConstTensor>& constants,
271*89c4ff92SAndroid Build Coastguard Worker                              const char* name = nullptr);
272*89c4ff92SAndroid Build Coastguard Worker 
273*89c4ff92SAndroid Build Coastguard Worker     void SerializeQuantizedLstmLayer(const armnn::IConnectableLayer* layer,
274*89c4ff92SAndroid Build Coastguard Worker                                      const std::vector<armnn::ConstTensor>& constants,
275*89c4ff92SAndroid Build Coastguard Worker                                      const char* name = nullptr);
276*89c4ff92SAndroid Build Coastguard Worker 
277*89c4ff92SAndroid Build Coastguard Worker     void SerializeRankLayer(const armnn::IConnectableLayer* layer,
278*89c4ff92SAndroid Build Coastguard Worker                             const char* name = nullptr);
279*89c4ff92SAndroid Build Coastguard Worker 
280*89c4ff92SAndroid Build Coastguard Worker     void SerializeReduceLayer(const armnn::IConnectableLayer* layer,
281*89c4ff92SAndroid Build Coastguard Worker                           const armnn::ReduceDescriptor& reduceDescriptor,
282*89c4ff92SAndroid Build Coastguard Worker                           const char* name = nullptr);
283*89c4ff92SAndroid Build Coastguard Worker 
284*89c4ff92SAndroid Build Coastguard Worker     void SerializeReshapeLayer(const armnn::IConnectableLayer* layer,
285*89c4ff92SAndroid Build Coastguard Worker                                const armnn::ReshapeDescriptor& reshapeDescriptor,
286*89c4ff92SAndroid Build Coastguard Worker                                const char* name = nullptr);
287*89c4ff92SAndroid Build Coastguard Worker 
288*89c4ff92SAndroid Build Coastguard Worker     void SerializeResizeLayer(const armnn::IConnectableLayer* layer,
289*89c4ff92SAndroid Build Coastguard Worker                               const armnn::ResizeDescriptor& resizeDescriptor,
290*89c4ff92SAndroid Build Coastguard Worker                               const char* name = nullptr);
291*89c4ff92SAndroid Build Coastguard Worker 
292*89c4ff92SAndroid Build Coastguard Worker     void SerializeSliceLayer(const armnn::IConnectableLayer* layer,
293*89c4ff92SAndroid Build Coastguard Worker                              const armnn::SliceDescriptor& sliceDescriptor,
294*89c4ff92SAndroid Build Coastguard Worker                              const char* name = nullptr);
295*89c4ff92SAndroid Build Coastguard Worker 
296*89c4ff92SAndroid Build Coastguard Worker     void SerializeSoftmaxLayer(const armnn::IConnectableLayer* layer,
297*89c4ff92SAndroid Build Coastguard Worker                                const armnn::SoftmaxDescriptor& softmaxDescriptor,
298*89c4ff92SAndroid Build Coastguard Worker                                const char* name = nullptr);
299*89c4ff92SAndroid Build Coastguard Worker 
300*89c4ff92SAndroid Build Coastguard Worker     void SerializeSpaceToBatchNdLayer(const armnn::IConnectableLayer* layer,
301*89c4ff92SAndroid Build Coastguard Worker                                       const armnn::SpaceToBatchNdDescriptor& spaceToBatchNdDescriptor,
302*89c4ff92SAndroid Build Coastguard Worker                                       const char* name = nullptr);
303*89c4ff92SAndroid Build Coastguard Worker 
304*89c4ff92SAndroid Build Coastguard Worker     void SerializeSpaceToDepthLayer(const armnn::IConnectableLayer* layer,
305*89c4ff92SAndroid Build Coastguard Worker                                     const armnn::SpaceToDepthDescriptor& spaceToDepthDescriptor,
306*89c4ff92SAndroid Build Coastguard Worker                                     const char* name = nullptr);
307*89c4ff92SAndroid Build Coastguard Worker 
308*89c4ff92SAndroid Build Coastguard Worker     void SerializeNormalizationLayer(const armnn::IConnectableLayer* layer,
309*89c4ff92SAndroid Build Coastguard Worker                                      const armnn::NormalizationDescriptor& normalizationDescriptor,
310*89c4ff92SAndroid Build Coastguard Worker                                      const char* name = nullptr);
311*89c4ff92SAndroid Build Coastguard Worker 
312*89c4ff92SAndroid Build Coastguard Worker     void SerializeShapeLayer(const armnn::IConnectableLayer* layer,
313*89c4ff92SAndroid Build Coastguard Worker                              const char* name = nullptr);
314*89c4ff92SAndroid Build Coastguard Worker 
315*89c4ff92SAndroid Build Coastguard Worker     void SerializeSplitterLayer(const armnn::IConnectableLayer* layer,
316*89c4ff92SAndroid Build Coastguard Worker                                 const armnn::ViewsDescriptor& viewsDescriptor,
317*89c4ff92SAndroid Build Coastguard Worker                                 const char* name = nullptr);
318*89c4ff92SAndroid Build Coastguard Worker 
319*89c4ff92SAndroid Build Coastguard Worker     void SerializeStandInLayer(const armnn::IConnectableLayer* layer,
320*89c4ff92SAndroid Build Coastguard Worker                                const armnn::StandInDescriptor& standInDescriptor,
321*89c4ff92SAndroid Build Coastguard Worker                                const char* name = nullptr);
322*89c4ff92SAndroid Build Coastguard Worker 
323*89c4ff92SAndroid Build Coastguard Worker     void SerializeStackLayer(const armnn::IConnectableLayer* layer,
324*89c4ff92SAndroid Build Coastguard Worker                              const armnn::StackDescriptor& stackDescriptor,
325*89c4ff92SAndroid Build Coastguard Worker                              const char* name = nullptr);
326*89c4ff92SAndroid Build Coastguard Worker 
327*89c4ff92SAndroid Build Coastguard Worker     void SerializeStridedSliceLayer(const armnn::IConnectableLayer* layer,
328*89c4ff92SAndroid Build Coastguard Worker                                     const armnn::StridedSliceDescriptor& stridedSliceDescriptor,
329*89c4ff92SAndroid Build Coastguard Worker                                     const char* name = nullptr);
330*89c4ff92SAndroid Build Coastguard Worker 
331*89c4ff92SAndroid Build Coastguard Worker     void SerializeSubtractionLayer(const armnn::IConnectableLayer* layer,
332*89c4ff92SAndroid Build Coastguard Worker                                    const char* name = nullptr);
333*89c4ff92SAndroid Build Coastguard Worker 
334*89c4ff92SAndroid Build Coastguard Worker     void SerializeSwitchLayer(const armnn::IConnectableLayer* layer,
335*89c4ff92SAndroid Build Coastguard Worker                               const char* name = nullptr);
336*89c4ff92SAndroid Build Coastguard Worker 
337*89c4ff92SAndroid Build Coastguard Worker     void SerializeTransposeConvolution2dLayer(const armnn::IConnectableLayer* layer,
338*89c4ff92SAndroid Build Coastguard Worker                                               const armnn::TransposeConvolution2dDescriptor& descriptor,
339*89c4ff92SAndroid Build Coastguard Worker                                               const std::vector<armnn::ConstTensor>& constants,
340*89c4ff92SAndroid Build Coastguard Worker                                               const char* = nullptr);
341*89c4ff92SAndroid Build Coastguard Worker 
342*89c4ff92SAndroid Build Coastguard Worker     void SerializeTransposeLayer(const armnn::IConnectableLayer* layer,
343*89c4ff92SAndroid Build Coastguard Worker                                  const armnn::TransposeDescriptor& descriptor,
344*89c4ff92SAndroid Build Coastguard Worker                                  const char* name = nullptr);
345*89c4ff92SAndroid Build Coastguard Worker 
346*89c4ff92SAndroid Build Coastguard Worker     void SerializeUnidirectionalSequenceLstmLayer(const armnn::IConnectableLayer* layer,
347*89c4ff92SAndroid Build Coastguard Worker                                                   const armnn::UnidirectionalSequenceLstmDescriptor& descriptor,
348*89c4ff92SAndroid Build Coastguard Worker                                                   const std::vector<armnn::ConstTensor>& constants,
349*89c4ff92SAndroid Build Coastguard Worker                                                   const char* name = nullptr);
350*89c4ff92SAndroid Build Coastguard Worker };
351*89c4ff92SAndroid Build Coastguard Worker 
352*89c4ff92SAndroid Build Coastguard Worker 
353*89c4ff92SAndroid Build Coastguard Worker 
354*89c4ff92SAndroid Build Coastguard Worker class ISerializer::SerializerImpl
355*89c4ff92SAndroid Build Coastguard Worker {
356*89c4ff92SAndroid Build Coastguard Worker public:
357*89c4ff92SAndroid Build Coastguard Worker     SerializerImpl() = default;
358*89c4ff92SAndroid Build Coastguard Worker     ~SerializerImpl() = default;
359*89c4ff92SAndroid Build Coastguard Worker 
360*89c4ff92SAndroid Build Coastguard Worker     /// Serializes the network to ArmNN SerializedGraph.
361*89c4ff92SAndroid Build Coastguard Worker     /// @param [in] inNetwork The network to be serialized.
362*89c4ff92SAndroid Build Coastguard Worker     void Serialize(const armnn::INetwork& inNetwork);
363*89c4ff92SAndroid Build Coastguard Worker 
364*89c4ff92SAndroid Build Coastguard Worker     /// Serializes the SerializedGraph to the stream.
365*89c4ff92SAndroid Build Coastguard Worker     /// @param [stream] the stream to save to
366*89c4ff92SAndroid Build Coastguard Worker     /// @return true if graph is Serialized to the Stream, false otherwise
367*89c4ff92SAndroid Build Coastguard Worker     bool SaveSerializedToStream(std::ostream& stream);
368*89c4ff92SAndroid Build Coastguard Worker 
369*89c4ff92SAndroid Build Coastguard Worker private:
370*89c4ff92SAndroid Build Coastguard Worker 
371*89c4ff92SAndroid Build Coastguard Worker     /// Visitor to contruct serialized network
372*89c4ff92SAndroid Build Coastguard Worker     SerializerStrategy m_SerializerStrategy;
373*89c4ff92SAndroid Build Coastguard Worker };
374*89c4ff92SAndroid Build Coastguard Worker 
375*89c4ff92SAndroid Build Coastguard Worker } //namespace armnnSerializer
376