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