blob: 4ccf1e2c7d130a02eec8a8152ae6520092c798df [file] [log] [blame]
Colm Donelan0c479742021-12-10 12:43:54 +00001//
2// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
7#include "ITensorHandle.hpp"
8#include "Workload.hpp"
9
10#include <armnn/Optional.hpp>
11#include <armnn/INetwork.hpp>
12#include <armnn/TensorFwd.hpp>
13
14#include <memory>
15
16namespace armnn
17{
18
19class Layer;
20
21// Workload factory interface for compute backends.
22class IWorkloadFactory
23{
24public:
25 virtual ~IWorkloadFactory() { }
26
27 virtual void AfterWorkloadsCreated() {};
28
29 virtual const BackendId& GetBackendId() const = 0;
30
31 static bool IsLayerSupported(const BackendId& backendId,
32 const IConnectableLayer& layer,
33 Optional<DataType> dataType,
34 std::string& outReasonIfUnsupported);
35
36 static bool IsLayerSupported(const IConnectableLayer& layer,
37 Optional<DataType> dataType,
38 std::string& outReasonIfUnsupported);
39
40 static bool IsLayerSupported(const IConnectableLayer& layer,
41 Optional<DataType> dataType,
42 std::string& outReasonIfUnsupported,
43 const ModelOptions& modelOptions);
44
45 static bool IsLayerSupported(const BackendId& backendId,
46 const IConnectableLayer& layer,
47 Optional<DataType> dataType,
48 std::string& outReasonIfUnsupported,
49 const ModelOptions& modelOptions);
50
51 virtual bool SupportsSubTensors() const = 0;
52
53 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateSubTensorHandle instead")
54 virtual std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& parent,
55 TensorShape const& subTensorShape,
56 unsigned int const* subTensorOrigin
57 ) const = 0;
58
Colm Donelan0c479742021-12-10 12:43:54 +000059 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
60 virtual std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
61 const bool IsMemoryManaged = true) const = 0;
62
63 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
64 virtual std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
65 DataLayout dataLayout,
66 const bool IsMemoryManaged = true) const = 0;
67
Teresa Charlin611c7fb2022-01-07 09:47:29 +000068 virtual std::unique_ptr<IWorkload> CreateWorkload(LayerType type,
69 const QueueDescriptor& descriptor,
70 const WorkloadInfo& info) const;
71
72 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +010073 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Francis Murtaghbf354142022-08-12 13:54:17 +010074 virtual std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& descriptor,
75 const WorkloadInfo& info) const;
76
77 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
78 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +000079 virtual std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& descriptor,
80 const WorkloadInfo& info) const;
81
Teresa Charlin611c7fb2022-01-07 09:47:29 +000082 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +010083 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +000084 virtual std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& descriptor,
85 const WorkloadInfo& info) const;
86
Teresa Charlin611c7fb2022-01-07 09:47:29 +000087 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +010088 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +000089 virtual std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor,
90 const WorkloadInfo& info) const;
91
Teresa Charlin611c7fb2022-01-07 09:47:29 +000092 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +010093 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +000094 virtual std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& descriptor,
95 const WorkloadInfo& info) const;
96
Teresa Charlin611c7fb2022-01-07 09:47:29 +000097 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +010098 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +000099 virtual std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor,
100 const WorkloadInfo& Info) const;
101
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000102 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100103 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000104 virtual std::unique_ptr<IWorkload> CreateCast(const CastQueueDescriptor& descriptor,
105 const WorkloadInfo& Info) const;
106
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000107 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100108 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000109 virtual std::unique_ptr<IWorkload> CreateChannelShuffle(const ChannelShuffleQueueDescriptor& descriptor,
110 const WorkloadInfo& info) const;
111
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000112 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100113 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000114 virtual std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& descriptor,
115 const WorkloadInfo& Info) const;
116
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000117 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100118 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000119 virtual std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& descriptor,
120 const WorkloadInfo& info) const;
121
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000122 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100123 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000124 virtual std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& descriptor,
125 const WorkloadInfo& info) const;
126
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000127 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100128 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000129 virtual std::unique_ptr<IWorkload> CreateConvertBf16ToFp32(const ConvertBf16ToFp32QueueDescriptor& descriptor,
130 const WorkloadInfo& info) const;
131
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000132 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100133 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000134 virtual std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& descriptor,
135 const WorkloadInfo& info) const;
136
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000137 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100138 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000139 virtual std::unique_ptr<IWorkload> CreateConvertFp32ToBf16(const ConvertFp32ToBf16QueueDescriptor& descriptor,
140 const WorkloadInfo& info) const;
141
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000142 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100143 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000144 virtual std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& descriptor,
145 const WorkloadInfo& info) const;
146
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000147 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100148 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000149 virtual std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor,
150 const WorkloadInfo& info) const;
151
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000152 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100153 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000154 virtual std::unique_ptr<IWorkload> CreateConvolution3d(const Convolution3dQueueDescriptor& descriptor,
155 const WorkloadInfo& info) const;
156
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000157 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100158 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000159 virtual std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& descriptor,
160 const WorkloadInfo& info) const;
161
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000162 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100163 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000164 virtual std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& descriptor,
165 const WorkloadInfo& info) const;
166
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000167 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100168 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000169 virtual std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(
170 const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const;
171
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000172 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100173 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000174 virtual std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& descriptor,
175 const WorkloadInfo& info) const;
176
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000177 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100178 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000179 virtual std::unique_ptr<IWorkload> CreateDetectionPostProcess(
180 const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info) const;
181
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000182 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100183 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000184 virtual std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& descriptor,
185 const WorkloadInfo& info) const;
186
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000187 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100188 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000189 virtual std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
190 const WorkloadInfo& Info) const;
191
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000192 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100193 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000194 virtual std::unique_ptr<IWorkload> CreateFakeQuantization(const FakeQuantizationQueueDescriptor& descriptor,
195 const WorkloadInfo& info) const;
196
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000197 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100198 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000199 virtual std::unique_ptr<IWorkload> CreateFill(const FillQueueDescriptor& descriptor,
200 const WorkloadInfo& info) const;
201
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000202 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100203 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000204 virtual std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& descriptor,
205 const WorkloadInfo& info) const;
206
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000207 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100208 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000209 virtual std::unique_ptr<IWorkload> CreateFullyConnected(const FullyConnectedQueueDescriptor& descriptor,
210 const WorkloadInfo& info) const;
211
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000212 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100213 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000214 virtual std::unique_ptr<IWorkload> CreateGather(const GatherQueueDescriptor& descriptor,
215 const WorkloadInfo& info) const;
216
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000217 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100218 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000219 virtual std::unique_ptr<IWorkload> CreateInstanceNormalization(
220 const InstanceNormalizationQueueDescriptor& descriptor,
221 const WorkloadInfo& info) const;
222
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000223 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100224 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000225 virtual std::unique_ptr<IWorkload> CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor,
226 const WorkloadInfo& info) const;
227
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000228 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100229 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000230 virtual std::unique_ptr<IWorkload> CreateLogicalBinary(const LogicalBinaryQueueDescriptor& descriptor,
231 const WorkloadInfo& Info) const;
232
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000233 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100234 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000235 virtual std::unique_ptr<IWorkload> CreateLogicalUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
236 const WorkloadInfo& Info) const;
237
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000238 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100239 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000240 virtual std::unique_ptr<IWorkload> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& descriptor,
241 const WorkloadInfo& info) const;
242
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000243 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100244 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000245 virtual std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& descriptor,
246 const WorkloadInfo& info) const;
247
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000248 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100249 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000250 virtual std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& descriptor,
251 const WorkloadInfo& info) const;
252
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000253 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100254 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000255 virtual std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor,
256 const WorkloadInfo& Info) const;
257
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000258 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100259 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000260 virtual std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& descriptor,
261 const WorkloadInfo& info) const;
262
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000263 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100264 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000265 virtual std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& descriptor,
266 const WorkloadInfo& info) const;
267
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000268 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100269 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000270 virtual std::unique_ptr<IWorkload> CreateMerge(const MergeQueueDescriptor& descriptor,
271 const WorkloadInfo& info) const;
272
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000273 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100274 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000275 virtual std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& descriptor,
276 const WorkloadInfo& info) const;
277
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000278 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100279 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000280 virtual std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& descriptor,
281 const WorkloadInfo& info) const;
282
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000283 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100284 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000285 virtual std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& descriptor,
286 const WorkloadInfo& info) const;
287
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000288 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100289 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000290 virtual std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& descriptor,
291 const WorkloadInfo& info) const;
292
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000293 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100294 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000295 virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor,
296 const WorkloadInfo& Info) const;
297
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000298 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100299 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000300 virtual std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& descriptor,
301 const WorkloadInfo& info) const;
302
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000303 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100304 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000305 virtual std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& descriptor,
306 const WorkloadInfo& info) const;
307
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000308 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100309 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000310 virtual std::unique_ptr<IWorkload> CreatePooling3d(const Pooling3dQueueDescriptor& descriptor,
311 const WorkloadInfo& info) const;
312
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000313 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100314 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000315 virtual std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& descriptor,
316 const WorkloadInfo& info) const;
317
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000318 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100319 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000320 virtual std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& descriptor,
321 const WorkloadInfo& info) const;
322
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000323 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100324 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000325 virtual std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& descriptor,
326 const WorkloadInfo& Info) const;
327
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000328 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100329 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000330 virtual std::unique_ptr<IWorkload> CreateQLstm(const QLstmQueueDescriptor& descriptor,
331 const WorkloadInfo& info) const;
332
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000333 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100334 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000335 virtual std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& descriptor,
336 const WorkloadInfo& info) const;
337
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000338 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100339 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000340 virtual std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& descriptor,
341 const WorkloadInfo& info) const;
342
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000343 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100344 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000345 virtual std::unique_ptr<IWorkload> CreateReduce(const ReduceQueueDescriptor& descriptor,
346 const WorkloadInfo& info) const;
347
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000348 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100349 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000350 virtual std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& descriptor,
351 const WorkloadInfo& info) const;
352
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000353 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100354 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000355 virtual std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& descriptor,
356 const WorkloadInfo& info) const;
357
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000358 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100359 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000360 virtual std::unique_ptr<IWorkload> CreateShape(const ShapeQueueDescriptor& descriptor,
361 const WorkloadInfo& info) const;
362
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000363 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100364 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000365 virtual std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& descriptor,
366 const WorkloadInfo& info) const;
367
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000368 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100369 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000370 virtual std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& descriptor,
371 const WorkloadInfo& info) const;
372
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000373 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100374 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000375 virtual std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor,
376 const WorkloadInfo& info) const;
377
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000378 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100379 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000380 virtual std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& descriptor,
381 const WorkloadInfo& info) const;
382
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000383 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100384 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000385 virtual std::unique_ptr<IWorkload> CreateSubtraction(const SubtractionQueueDescriptor& descriptor,
386 const WorkloadInfo& info) const;
387
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000388 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100389 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000390 virtual std::unique_ptr<IWorkload> CreateSplitter(const SplitterQueueDescriptor& descriptor,
391 const WorkloadInfo& info) const;
392
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000393 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100394 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000395 virtual std::unique_ptr<IWorkload> CreateStack(const StackQueueDescriptor& descriptor,
396 const WorkloadInfo& info) const;
397
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000398 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100399 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000400 virtual std::unique_ptr<IWorkload> CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor,
401 const WorkloadInfo& Info) const;
402
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000403 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100404 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000405 virtual std::unique_ptr<IWorkload> CreateSwitch(const SwitchQueueDescriptor& descriptor,
406 const WorkloadInfo& Info) const;
407
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000408 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100409 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000410 virtual std::unique_ptr<IWorkload> CreateTranspose(const TransposeQueueDescriptor& descriptor,
411 const WorkloadInfo& info) const;
412
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000413 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100414 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000415 virtual std::unique_ptr<IWorkload> CreateTransposeConvolution2d(
416 const TransposeConvolution2dQueueDescriptor& descriptor,
417 const WorkloadInfo& info) const;
418
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000419 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
Jim Flynnb4efde52022-07-31 18:00:31 +0100420 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
Colm Donelan0c479742021-12-10 12:43:54 +0000421 virtual std::unique_ptr<IWorkload> CreateUnidirectionalSequenceLstm(
422 const UnidirectionalSequenceLstmQueueDescriptor& descriptor,
423 const WorkloadInfo& info) const;
424
425private:
426 static bool IsLayerConfigurationSupported(const BackendId& backendId,
427 const IConnectableLayer& connectableLayer,
428 Optional<DataType> dataType,
429 std::string& outReasonIfUnsupported,
430 const ModelOptions& modelOptions = {});
431};
432
433} // namespace armnn