1 // 2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #pragma once 6 7 #include <armnn/Optional.hpp> 8 #include <armnn/backends/IBackendInternal.hpp> 9 10 #include <backendsCommon/WorkloadFactoryBase.hpp> 11 #include <aclCommon/BaseMemoryManager.hpp> 12 #include <armnn/utility/IgnoreUnused.hpp> 13 14 #include <arm_compute/runtime/IScheduler.h> 15 16 namespace armnn 17 { 18 19 // Neon workload factory. 20 class NeonWorkloadFactory : public WorkloadFactoryBase 21 { 22 public: 23 NeonWorkloadFactory(const std::shared_ptr<NeonMemoryManager>& memoryManager); 24 25 NeonWorkloadFactory(const std::shared_ptr<NeonMemoryManager>& memoryManager, 26 const IBackendInternal::IBackendSpecificModelContextPtr& modelContextPtr); 27 28 const BackendId& GetBackendId() const override; 29 30 static bool IsLayerSupported(const Layer& layer, 31 Optional<DataType> dataType, 32 std::string& outReasonIfUnsupported); 33 34 static bool IsLayerSupported(const IConnectableLayer& layer, 35 Optional<DataType> dataType, 36 std::string& outReasonIfUnsupported, 37 const ModelOptions& modelOptions); 38 SupportsSubTensors() const39 bool SupportsSubTensors() const override { return true; } 40 41 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateSubTensorHandle instead") 42 std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& parent, 43 TensorShape const& subTensorShape, 44 unsigned int const* subTensorOrigin) const override; 45 46 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead") 47 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo, 48 const bool IsMemoryManaged = true) const override; 49 50 ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead") 51 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo, 52 DataLayout dataLayout, 53 const bool IsMemoryManaged = true) const override; 54 55 std::unique_ptr<IWorkload> CreateWorkload(LayerType type, 56 const QueueDescriptor& descriptor, 57 const WorkloadInfo& info) const override; 58 59 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 60 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 61 std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& descriptor, 62 const WorkloadInfo& info) const override; 63 64 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 65 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 66 std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& descriptor, 67 const WorkloadInfo& info) const override; 68 69 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 70 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 71 std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor, 72 const WorkloadInfo& info) const override; 73 74 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 75 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 76 std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& descriptor, 77 const WorkloadInfo& info) const override; 78 79 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 80 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 81 std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, 82 const WorkloadInfo& Info) const override; 83 84 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 85 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 86 std::unique_ptr<IWorkload> CreateCast(const CastQueueDescriptor& descriptor, 87 const WorkloadInfo& info) const override; 88 89 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 90 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 91 std::unique_ptr<IWorkload> CreateChannelShuffle(const ChannelShuffleQueueDescriptor& descriptor, 92 const WorkloadInfo& info) const override; 93 94 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 95 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 96 std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& descriptor, 97 const WorkloadInfo& Info) const override; 98 99 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 100 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 101 std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& descriptor, 102 const WorkloadInfo& info) const override; 103 104 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 105 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 106 std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& descriptor, 107 const WorkloadInfo& info) const override; 108 109 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 110 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 111 std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& descriptor, 112 const WorkloadInfo& info) const override; 113 114 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 115 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 116 std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& descriptor, 117 const WorkloadInfo& info) const override; 118 119 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 120 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 121 std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor, 122 const WorkloadInfo& info) const override; 123 124 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 125 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 126 std::unique_ptr<IWorkload> CreateConvolution3d(const Convolution3dQueueDescriptor& descriptor, 127 const WorkloadInfo& info) const override; 128 129 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 130 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 131 std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& descriptor, 132 const WorkloadInfo& info) const override; 133 134 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 135 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 136 std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& descriptor, 137 const WorkloadInfo& info) const override; 138 139 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 140 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 141 std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor& descriptor, 142 const WorkloadInfo& info) const override; 143 144 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 145 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 146 std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& descriptor, 147 const WorkloadInfo& info) const override; 148 149 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 150 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 151 std::unique_ptr<IWorkload> CreateDetectionPostProcess(const DetectionPostProcessQueueDescriptor& descriptor, 152 const WorkloadInfo& info) const override; 153 154 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 155 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 156 std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& descriptor, 157 const WorkloadInfo& info) const override; 158 159 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 160 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 161 std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor, 162 const WorkloadInfo& Info) const override; 163 164 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 165 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 166 std::unique_ptr<IWorkload> CreateFill(const FillQueueDescriptor& descriptor, 167 const WorkloadInfo& info) const override; 168 169 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 170 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 171 std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& descriptor, 172 const WorkloadInfo& info) const override; 173 174 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 175 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 176 std::unique_ptr<IWorkload> CreateFullyConnected(const FullyConnectedQueueDescriptor& descriptor, 177 const WorkloadInfo& info) const override; 178 179 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 180 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 181 std::unique_ptr<IWorkload> CreateGather(const GatherQueueDescriptor& descriptor, 182 const WorkloadInfo& info) const override; 183 184 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 185 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 186 std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& descriptor, 187 const WorkloadInfo& info) const override; 188 189 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 190 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 191 std::unique_ptr<IWorkload> CreateInstanceNormalization(const InstanceNormalizationQueueDescriptor& descriptor, 192 const WorkloadInfo& info) const override; 193 194 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 195 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 196 std::unique_ptr<IWorkload> CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, 197 const WorkloadInfo& info) const override; 198 199 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 200 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 201 std::unique_ptr<IWorkload> CreateLogicalBinary(const LogicalBinaryQueueDescriptor& descriptor, 202 const WorkloadInfo& info) const override; 203 204 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 205 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 206 std::unique_ptr<IWorkload> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& descriptor, 207 const WorkloadInfo& info) const override; 208 209 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 210 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 211 std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& descriptor, 212 const WorkloadInfo& info) const override; 213 214 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 215 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 216 std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& descriptor, 217 const WorkloadInfo& info) const override; 218 219 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 220 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 221 std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor, 222 const WorkloadInfo& Info) const override; 223 224 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 225 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 226 std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& descriptor, 227 const WorkloadInfo& info) const override; 228 229 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 230 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 231 std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& descriptor, 232 const WorkloadInfo& info) const override; 233 234 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 235 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 236 std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& descriptor, 237 const WorkloadInfo& info) const override; 238 239 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 240 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 241 std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& descriptor, 242 const WorkloadInfo& info) const override; 243 244 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 245 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 246 std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& descriptor, 247 const WorkloadInfo& info) const override; 248 249 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 250 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 251 std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& descriptor, 252 const WorkloadInfo& info) const override; 253 254 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 255 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 256 std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor, 257 const WorkloadInfo& info) const override; 258 259 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 260 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 261 std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& descriptor, 262 const WorkloadInfo& info) const override; 263 264 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 265 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 266 std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, 267 const WorkloadInfo& info) const override; 268 269 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 270 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 271 std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& descriptor, 272 const WorkloadInfo& info) const override; 273 274 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 275 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 276 std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& descriptor, 277 const WorkloadInfo& info) const override; 278 279 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 280 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 281 std::unique_ptr<IWorkload> CreateQLstm(const QLstmQueueDescriptor& descriptor, 282 const WorkloadInfo& info) const override; 283 284 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 285 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 286 std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& descriptor, 287 const WorkloadInfo& info) const override; 288 289 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 290 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 291 std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& descriptor, 292 const WorkloadInfo& info) const override; 293 294 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 295 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 296 std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& descriptor, 297 const WorkloadInfo& info) const override; 298 299 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 300 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 301 std::unique_ptr<IWorkload> CreateReduce(const ReduceQueueDescriptor& descriptor, 302 const WorkloadInfo& info) const override; 303 304 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 305 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 306 std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& descriptor, 307 const WorkloadInfo& info) const override; 308 309 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 310 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 311 std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& descriptor, 312 const WorkloadInfo& info) const override; 313 314 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 315 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 316 std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& descriptor, 317 const WorkloadInfo& info) const override; 318 319 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 320 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 321 std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, 322 const WorkloadInfo& info) const override; 323 324 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 325 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 326 std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, 327 const WorkloadInfo& info) const override; 328 329 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 330 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 331 std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& descriptor, 332 const WorkloadInfo& info) const override; 333 334 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 335 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 336 std::unique_ptr<IWorkload> CreateSplitter(const SplitterQueueDescriptor& descriptor, 337 const WorkloadInfo& info) const override; 338 339 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 340 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 341 std::unique_ptr<IWorkload> CreateStack(const StackQueueDescriptor& descriptor, 342 const WorkloadInfo& info) const override; 343 344 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 345 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 346 std::unique_ptr<IWorkload> CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor, 347 const WorkloadInfo& info) const override; 348 349 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 350 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 351 std::unique_ptr<IWorkload> CreateSubtraction(const SubtractionQueueDescriptor& descriptor, 352 const WorkloadInfo& info) const override; 353 354 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 355 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 356 std::unique_ptr<IWorkload> CreateTranspose(const TransposeQueueDescriptor& descriptor, 357 const WorkloadInfo& info) const override; 358 359 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable " 360 "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08") 361 std::unique_ptr<IWorkload> CreateTransposeConvolution2d(const TransposeConvolution2dQueueDescriptor& descriptor, 362 const WorkloadInfo& info) const override; 363 364 private: 365 void SetNumberOfThreads(); 366 367 mutable std::shared_ptr<NeonMemoryManager> m_MemoryManager; 368 const IBackendInternal::IBackendSpecificModelContextPtr m_ModelContextPtr; 369 }; 370 371 } // namespace armnn 372