ArmNN
 22.08
ClWorkloadFactory Class Reference

#include <ClWorkloadFactory.hpp>

Inheritance diagram for ClWorkloadFactory:
WorkloadFactoryBase IWorkloadFactory

Public Member Functions

 ClWorkloadFactory (const std::shared_ptr< ClMemoryManager > &memoryManager)
 
 ClWorkloadFactory (const std::shared_ptr< ClMemoryManager > &memoryManager, const IBackendInternal::IBackendSpecificModelContextPtr &modelContextPtr)
 
void AfterWorkloadsCreated () override
 
const BackendIdGetBackendId () const override
 
bool SupportsSubTensors () const override
 
std::unique_ptr< ITensorHandleCreateSubTensorHandle (ITensorHandle &parent, TensorShape const &subTensorShape, unsigned int const *subTensorOrigin) const override
 
std::unique_ptr< ITensorHandleCreateTensorHandle (const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const override
 
std::unique_ptr< ITensorHandleCreateTensorHandle (const TensorInfo &tensorInfo, DataLayout dataLayout, const bool IsMemoryManaged=true) const override
 
std::unique_ptr< IWorkloadCreateWorkload (LayerType type, const QueueDescriptor &descriptor, const WorkloadInfo &info) const override
 
- Public Member Functions inherited from WorkloadFactoryBase
std::unique_ptr< IWorkloadCreateInput (const InputQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateActivation (const ActivationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateAddition (const AdditionQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateArgMinMax (const ArgMinMaxQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateBatchNormalization (const BatchNormalizationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateBatchToSpaceNd (const BatchToSpaceNdQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateComparison (const ComparisonQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateConcat (const ConcatQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateConstant (const ConstantQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateConvertFp16ToFp32 (const ConvertFp16ToFp32QueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateConvertFp32ToFp16 (const ConvertFp32ToFp16QueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateConvolution2d (const Convolution2dQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateDebug (const DebugQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateDepthToSpace (const DepthToSpaceQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateDepthwiseConvolution2d (const DepthwiseConvolution2dQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateDequantize (const DequantizeQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateDetectionPostProcess (const DetectionPostProcessQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateDivision (const DivisionQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateElementwiseUnary (const ElementwiseUnaryQueueDescriptor &descriptor, const WorkloadInfo &info) const override
 
std::unique_ptr< IWorkloadCreateFakeQuantization (const FakeQuantizationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateFloor (const FloorQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateFullyConnected (const FullyConnectedQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateGather (const GatherQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateInstanceNormalization (const InstanceNormalizationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateL2Normalization (const L2NormalizationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateLogSoftmax (const LogSoftmaxQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateLstm (const LstmQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMaximum (const MaximumQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMean (const MeanQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMemCopy (const MemCopyQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMemImport (const MemImportQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMerge (const MergeQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMinimum (const MinimumQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateMultiplication (const MultiplicationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateNormalization (const NormalizationQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateOutput (const OutputQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreatePad (const PadQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreatePermute (const PermuteQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreatePooling2d (const Pooling2dQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreatePooling3d (const Pooling3dQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreatePreCompiled (const PreCompiledQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreatePrelu (const PreluQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateQuantize (const QuantizeQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateQuantizedLstm (const QuantizedLstmQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateRank (const RankQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateReshape (const ReshapeQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateResize (const ResizeQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSlice (const SliceQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSoftmax (const SoftmaxQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSpaceToBatchNd (const SpaceToBatchNdQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSpaceToDepth (const SpaceToDepthQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSubtraction (const SubtractionQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSplitter (const SplitterQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateStack (const StackQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateStridedSlice (const StridedSliceQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateSwitch (const SwitchQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateTranspose (const TransposeQueueDescriptor &, const WorkloadInfo &) const override
 
std::unique_ptr< IWorkloadCreateTransposeConvolution2d (const TransposeConvolution2dQueueDescriptor &, const WorkloadInfo &) const override
 
- Public Member Functions inherited from IWorkloadFactory
virtual ~IWorkloadFactory ()
 

Static Public Member Functions

static bool IsLayerSupported (const Layer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported)
 
static bool IsLayerSupported (const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported, const ModelOptions &modelOptions)
 
- Static Public Member Functions inherited from IWorkloadFactory
static bool IsLayerSupported (const BackendId &backendId, const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported)
 
static bool IsLayerSupported (const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported)
 
static bool IsLayerSupported (const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported, const ModelOptions &modelOptions)
 
static bool IsLayerSupported (const BackendId &backendId, const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported, const ModelOptions &modelOptions)
 

Detailed Description

Definition at line 21 of file ClWorkloadFactory.hpp.

Constructor & Destructor Documentation

◆ ClWorkloadFactory() [1/2]

ClWorkloadFactory ( const std::shared_ptr< ClMemoryManager > &  memoryManager)

Definition at line 188 of file ClWorkloadFactory.cpp.

189  : m_MemoryManager(memoryManager), m_ModelContextPtr(IBackendInternal::IBackendSpecificModelContextPtr{})
190 {
191  InitializeCLCompileContext();
192 }
std::shared_ptr< IBackendModelContext > IBackendSpecificModelContextPtr

◆ ClWorkloadFactory() [2/2]

ClWorkloadFactory ( const std::shared_ptr< ClMemoryManager > &  memoryManager,
const IBackendInternal::IBackendSpecificModelContextPtr modelContextPtr 
)

Definition at line 194 of file ClWorkloadFactory.cpp.

196  : m_MemoryManager(memoryManager), m_ModelContextPtr(modelContextPtr)
197 {
198  InitializeCLCompileContext();
199 }

Member Function Documentation

◆ AfterWorkloadsCreated()

void AfterWorkloadsCreated ( )
overridevirtual

Reimplemented from IWorkloadFactory.

Definition at line 66 of file ClWorkloadFactory.cpp.

References ARMNN_LOG, CHECK_LOCATION, ClContextDeserializer::Deserialize(), ClContextDeserializer::DeserializeFromBinary(), armnn::Error, ClBackendModelContext::GetCachedNetworkFilePath(), armnn::info, ClContextSerializer::SaveSerializedToStream(), ClContextSerializer::Serialize(), and armnn::WrapClError().

67 {
68  if(m_ModelContextPtr)
69  {
70  auto modelOptions = dynamic_cast<ClBackendModelContext*>(m_ModelContextPtr.get());
71  if (modelOptions->SaveCachedNetwork())
72  {
73  ClContextSerializer serializer;
74  serializer.Serialize(m_CLCompileContext);
75  auto cachedFd = modelOptions->GetCachedFileDescriptor();
76  if (cachedFd != -1)
77  {
78  std::vector<uint8_t> compiledContextData;
79  std::stringstream stream;
80  bool serialized = serializer.SaveSerializedToStream(stream);
81  if (serialized)
82  {
83  std::string const serializedString{stream.str()};
84  std::copy(serializedString.begin(),
85  serializedString.end(),
86  std::back_inserter(compiledContextData));
87  auto success = write(cachedFd, compiledContextData.data(), compiledContextData.size());
88  if (success == -1)
89  {
90  ARMNN_LOG(info) << "ClWorkloadFactory:: Could not cache the compiled context!";
91  }
92  }
93  }
94 
95  // Save map to a filepath provided in ModelOptions
96  auto filePath = modelOptions->GetCachedNetworkFilePath();
97  if (filePath != "" && fs::exists(filePath) && fs::is_regular_file(filePath))
98  {
99  // Serialize ClContext to the file specified
100  std::ofstream file(filePath, std::ios::out | std::ios::binary);
101  serializer.SaveSerializedToStream(file);
102  }
103  }
104  }
105 }
#define ARMNN_LOG(severity)
Definition: Logging.hpp:205

◆ CreateSubTensorHandle()

std::unique_ptr< ITensorHandle > CreateSubTensorHandle ( ITensorHandle parent,
TensorShape const &  subTensorShape,
unsigned int const *  subTensorOrigin 
) const
overridevirtual

Reimplemented from WorkloadFactoryBase.

Definition at line 222 of file ClWorkloadFactory.cpp.

Referenced by ClWorkloadFactory::SupportsSubTensors().

225 {
227  arm_compute::TensorShape shape = armcomputetensorutils::BuildArmComputeTensorShape(subTensorShape);
228 
229  coords.set_num_dimensions(subTensorShape.GetNumDimensions());
230  for (unsigned int i = 0; i < subTensorShape.GetNumDimensions(); i++)
231  {
232  // Arm compute indexes tensor coords in reverse order.
233  unsigned int revertedIndex = subTensorShape.GetNumDimensions() - i - 1;
234  coords.set(i, armnn::numeric_cast<int>(subTensorOrigin[revertedIndex]));
235  }
236 
237  const arm_compute::TensorShape parentShape = armcomputetensorutils::BuildArmComputeTensorShape(parent.GetShape());
238  if (!::arm_compute::error_on_invalid_subtensor(__func__, __FILE__, __LINE__, parentShape, coords, shape))
239  {
240  return nullptr;
241  }
242 
243  return std::make_unique<ClSubTensorHandle>(
244  PolymorphicDowncast<IClTensorHandle*>(&parent), shape, coords);
245 }
std::array< unsigned int, MaxNumOfTensorDimensions > Coordinates

◆ CreateTensorHandle() [1/2]

std::unique_ptr< ITensorHandle > CreateTensorHandle ( const TensorInfo tensorInfo,
const bool  IsMemoryManaged = true 
) const
overridevirtual

Reimplemented from WorkloadFactoryBase.

Definition at line 201 of file ClWorkloadFactory.cpp.

References armnn::IgnoreUnused().

Referenced by ClWorkloadFactory::SupportsSubTensors().

203 {
204  IgnoreUnused(IsMemoryManaged);
205  std::unique_ptr<ClTensorHandle> tensorHandle = std::make_unique<ClTensorHandle>(tensorInfo);
206  tensorHandle->SetMemoryGroup(m_MemoryManager->GetInterLayerMemoryGroup());
207 
208  return tensorHandle;
209 }
void IgnoreUnused(Ts &&...)

◆ CreateTensorHandle() [2/2]

std::unique_ptr< ITensorHandle > CreateTensorHandle ( const TensorInfo tensorInfo,
DataLayout  dataLayout,
const bool  IsMemoryManaged = true 
) const
overridevirtual

Reimplemented from WorkloadFactoryBase.

Definition at line 211 of file ClWorkloadFactory.cpp.

References armnn::IgnoreUnused().

214 {
215  IgnoreUnused(IsMemoryManaged);
216  std::unique_ptr<ClTensorHandle> tensorHandle = std::make_unique<ClTensorHandle>(tensorInfo, dataLayout);
217  tensorHandle->SetMemoryGroup(m_MemoryManager->GetInterLayerMemoryGroup());
218 
219  return tensorHandle;
220 }
void IgnoreUnused(Ts &&...)

◆ CreateWorkload()

std::unique_ptr< IWorkload > CreateWorkload ( LayerType  type,
const QueueDescriptor descriptor,
const WorkloadInfo info 
) const
overridevirtual

Reimplemented from WorkloadFactoryBase.

Definition at line 247 of file ClWorkloadFactory.cpp.

References armnn::Abs, armnn::Activation, armnn::Addition, armnn::ArgMinMax, armnn::BatchNormalization, armnn::BatchToSpaceNd, armnn::Cast, armnn::ChannelShuffle, armnn::Comparison, armnn::Concat, armnn::Constant, armnn::ConvertFp16ToFp32, armnn::ConvertFp32ToFp16, armnn::Convolution2d, armnn::Convolution3d, WorkloadFactoryBase::CreateActivation(), WorkloadFactoryBase::CreateAddition(), WorkloadFactoryBase::CreateArgMinMax(), WorkloadFactoryBase::CreateBatchNormalization(), WorkloadFactoryBase::CreateBatchToSpaceNd(), WorkloadFactoryBase::CreateComparison(), WorkloadFactoryBase::CreateConcat(), WorkloadFactoryBase::CreateConstant(), WorkloadFactoryBase::CreateConvertFp16ToFp32(), WorkloadFactoryBase::CreateConvertFp32ToFp16(), WorkloadFactoryBase::CreateConvolution2d(), WorkloadFactoryBase::CreateDebug(), WorkloadFactoryBase::CreateDepthToSpace(), WorkloadFactoryBase::CreateDepthwiseConvolution2d(), WorkloadFactoryBase::CreateDequantize(), WorkloadFactoryBase::CreateDetectionPostProcess(), WorkloadFactoryBase::CreateDivision(), WorkloadFactoryBase::CreateElementwiseUnary(), WorkloadFactoryBase::CreateFloor(), WorkloadFactoryBase::CreateFullyConnected(), WorkloadFactoryBase::CreateGather(), WorkloadFactoryBase::CreateInput(), WorkloadFactoryBase::CreateInstanceNormalization(), WorkloadFactoryBase::CreateL2Normalization(), WorkloadFactoryBase::CreateLogSoftmax(), WorkloadFactoryBase::CreateLstm(), WorkloadFactoryBase::CreateMaximum(), WorkloadFactoryBase::CreateMean(), WorkloadFactoryBase::CreateMemCopy(), WorkloadFactoryBase::CreateMemImport(), WorkloadFactoryBase::CreateMinimum(), WorkloadFactoryBase::CreateMultiplication(), WorkloadFactoryBase::CreateNormalization(), WorkloadFactoryBase::CreateOutput(), WorkloadFactoryBase::CreatePad(), WorkloadFactoryBase::CreatePermute(), WorkloadFactoryBase::CreatePooling2d(), WorkloadFactoryBase::CreatePreCompiled(), WorkloadFactoryBase::CreatePrelu(), WorkloadFactoryBase::CreateQuantize(), WorkloadFactoryBase::CreateQuantizedLstm(), WorkloadFactoryBase::CreateRank(), WorkloadFactoryBase::CreateReshape(), WorkloadFactoryBase::CreateResize(), WorkloadFactoryBase::CreateSlice(), WorkloadFactoryBase::CreateSoftmax(), WorkloadFactoryBase::CreateSpaceToBatchNd(), WorkloadFactoryBase::CreateSpaceToDepth(), WorkloadFactoryBase::CreateSplitter(), WorkloadFactoryBase::CreateStack(), WorkloadFactoryBase::CreateStridedSlice(), WorkloadFactoryBase::CreateSubtraction(), WorkloadFactoryBase::CreateTranspose(), WorkloadFactoryBase::CreateTransposeConvolution2d(), armnn::Debug, armnn::DepthToSpace, armnn::DepthwiseConvolution2d, armnn::Dequantize, armnn::DetectionPostProcess, armnn::Division, armnn::ElementwiseUnary, armnn::Exp, armnn::Fill, armnn::Floor, armnn::FullyConnected, armnn::Gather, armnn::GatherNd, armnn::info, armnn::Input, armnn::InstanceNormalization, ClBackendModelContext::IsFastMathEnabled(), armnn::L2Normalization, armnn::Log, armnn::LogicalAnd, armnn::LogicalBinary, armnn::LogicalNot, armnn::LogicalOr, armnn::LogSoftmax, armnn::Lstm, QueueDescriptor::m_Inputs, ElementwiseUnaryDescriptor::m_Operation, LogicalBinaryDescriptor::m_Operation, QueueDescriptor::m_Outputs, QueueDescriptorWithParameters< LayerDescriptor >::m_Parameters, armnn::Maximum, armnn::Mean, armnn::MemCopy, armnn::MemImport, armnn::Minimum, armnn::Multiplication, armnn::Neg, armnn::Normalization, armnn::Output, armnn::Pad, armnn::Permute, armnn::Pooling2d, armnn::Pooling3d, armnn::PreCompiled, armnn::Prelu, armnn::QLstm, armnn::Quantize, armnn::QuantizedLstm, armnn::Rank, armnn::Reduce, armnn::Reshape, armnn::Resize, armnn::Rsqrt, armnn::Sin, armnn::Slice, armnn::Softmax, armnn::SpaceToBatchNd, armnn::SpaceToDepth, armnn::Splitter, armnn::Sqrt, armnn::Stack, armnn::StridedSlice, armnn::Subtraction, armnn::Transpose, armnn::TransposeConvolution2d, and armnn::UnidirectionalSequenceLstm.

Referenced by ClWorkloadFactory::SupportsSubTensors().

250 {
251  switch(type)
252  {
253  case LayerType::Activation :
254  {
255  auto activationQueueDescriptor = PolymorphicDowncast<const ActivationQueueDescriptor*>(&descriptor);
256  return MakeWorkload<ClActivationWorkload>(*activationQueueDescriptor, info, m_CLCompileContext);
257  }
258  case LayerType::Addition :
259  {
260  auto additionQueueDescriptor = PolymorphicDowncast<const AdditionQueueDescriptor*>(&descriptor);
261  return MakeWorkload<ClAdditionWorkload>(*additionQueueDescriptor, info, m_CLCompileContext);
262  }
263  case LayerType::ArgMinMax :
264  {
265  auto argMinMaxQueueDescriptor = PolymorphicDowncast<const ArgMinMaxQueueDescriptor*>(&descriptor);
266  return MakeWorkload<ClArgMinMaxWorkload>(*argMinMaxQueueDescriptor, info, m_CLCompileContext);
267  }
269  {
270  auto batchNormalizationQueueDescriptor
271  = PolymorphicDowncast<const BatchNormalizationQueueDescriptor*>(&descriptor);
272  return MakeWorkload<ClBatchNormalizationFloatWorkload, NullWorkload>
273  (*batchNormalizationQueueDescriptor, info, m_CLCompileContext);
274  }
276  {
277  auto batchToSpaceNdQueueDescriptor
278  = PolymorphicDowncast<const BatchToSpaceNdQueueDescriptor*>(&descriptor);
279  return MakeWorkload<ClBatchToSpaceNdWorkload>(*batchToSpaceNdQueueDescriptor, info, m_CLCompileContext);
280  }
281  case LayerType::Cast :
282  {
283  auto castQueueDescriptor = PolymorphicDowncast<const CastQueueDescriptor*>(&descriptor);
284  return MakeWorkload<ClCastWorkload>(*castQueueDescriptor, info, m_CLCompileContext);
285  }
287  {
288  auto channelShuffleQueueDescriptor
289  = PolymorphicDowncast<const ChannelShuffleQueueDescriptor*>(&descriptor);
290  return MakeWorkload<ClChannelShuffleWorkload>(*channelShuffleQueueDescriptor, info, m_CLCompileContext);
291  }
292  case LayerType::Comparison :
293  {
294  auto comparisonQueueDescriptor = PolymorphicDowncast<const ComparisonQueueDescriptor*>(&descriptor);
295  return MakeWorkload<ClComparisonWorkload>(*comparisonQueueDescriptor, info, m_CLCompileContext);
296  }
297  case LayerType::Concat :
298  {
299  auto concatQueueDescriptor = PolymorphicDowncast<const ConcatQueueDescriptor*>(&descriptor);
300  return MakeWorkload<ClConcatWorkload>(*concatQueueDescriptor, info, m_CLCompileContext);
301  }
302  case LayerType::Constant :
303  {
304  auto constantQueueDescriptor = PolymorphicDowncast<const ConstantQueueDescriptor*>(&descriptor);
305  return MakeWorkload<ClConstantWorkload>(*constantQueueDescriptor, info, m_CLCompileContext);
306  }
308  {
309  auto convertFp16ToFp32QueueDescriptor
310  = PolymorphicDowncast<const ConvertFp16ToFp32QueueDescriptor*>(&descriptor);
311  return MakeWorkload<ClConvertFp16ToFp32Workload>(*convertFp16ToFp32QueueDescriptor,
312  info,
313  m_CLCompileContext);
314  }
316  {
317  auto convertFp32ToFp16QueueDescriptor
318  = PolymorphicDowncast<const ConvertFp32ToFp16QueueDescriptor*>(&descriptor);
319  return MakeWorkload<ClConvertFp32ToFp16Workload>(*convertFp32ToFp16QueueDescriptor,
320  info,
321  m_CLCompileContext);
322  }
324  {
325  auto convolution2dQueueDescriptor = PolymorphicDowncast<const Convolution2dQueueDescriptor*>(&descriptor);
326 
327  bool isFastMathEnabled = false;
328  if (m_ModelContextPtr)
329  {
330  if (m_ModelContextPtr.get() != nullptr)
331  {
332  auto modelOptions = dynamic_cast<ClBackendModelContext*>(m_ModelContextPtr.get());
333  if (modelOptions)
334  {
335  isFastMathEnabled = modelOptions->IsFastMathEnabled();
336  }
337  }
338  }
339  return MakeWorkload<ClConvolution2dWorkload>(*convolution2dQueueDescriptor,
340  info,
341  m_MemoryManager->GetIntraLayerManager(),
342  m_CLCompileContext,
343  isFastMathEnabled);
344  }
346  {
347  auto convolution3dQueueDescriptor = PolymorphicDowncast<const Convolution3dQueueDescriptor*>(&descriptor);
348 
349  bool isFastMathEnabled = false;
350  if (m_ModelContextPtr)
351  {
352  if (m_ModelContextPtr.get() != nullptr)
353  {
354  auto modelOptions = dynamic_cast<ClBackendModelContext*>(m_ModelContextPtr.get());
355  if (modelOptions)
356  {
357  isFastMathEnabled = modelOptions->IsFastMathEnabled();
358  }
359  }
360  }
361  return MakeWorkload<ClConvolution3dWorkload>(*convolution3dQueueDescriptor,
362  info,
363  m_MemoryManager->GetIntraLayerManager(),
364  m_CLCompileContext,
365  isFastMathEnabled);
366  }
367  case LayerType::Debug :
368  {
369  auto debugQueueDescriptor = PolymorphicDowncast<const DebugQueueDescriptor*>(&descriptor);
370  return MakeWorkload<NullWorkload, NullWorkload>(*debugQueueDescriptor, info, m_CLCompileContext);
371  }
373  {
374  auto depthToSpaceQueueDescriptor = PolymorphicDowncast<const DepthToSpaceQueueDescriptor*>(&descriptor);
375  return MakeWorkload<ClDepthToSpaceWorkload>(*depthToSpaceQueueDescriptor, info, m_CLCompileContext);
376  }
378  {
379  auto depthwiseConvolution2dQueueDescriptor
380  = PolymorphicDowncast<const DepthwiseConvolution2dQueueDescriptor*>(&descriptor);
381  return MakeWorkload<ClDepthwiseConvolutionWorkload>(*depthwiseConvolution2dQueueDescriptor,
382  info,
383  m_CLCompileContext);
384  }
385  case LayerType::Dequantize :
386  {
387  auto dequantizeQueueDescriptor = PolymorphicDowncast<const DequantizeQueueDescriptor*>(&descriptor);
388  return MakeWorkload<ClDequantizeWorkload>(*dequantizeQueueDescriptor, info, m_CLCompileContext);
389  }
391  {
392  auto detectionPostProcessQueueDescriptor
393  = PolymorphicDowncast<const DetectionPostProcessQueueDescriptor*>(&descriptor);
394  return MakeWorkload<NullWorkload, NullWorkload>(*detectionPostProcessQueueDescriptor,
395  info,
396  m_CLCompileContext);
397  }
398  case LayerType::Division :
399  {
400  auto divisionQueueDescriptor = PolymorphicDowncast<const DivisionQueueDescriptor*>(&descriptor);
401  return std::make_unique<ClDivisionWorkload>(*divisionQueueDescriptor, info, m_CLCompileContext);
402  }
404  {
405  auto elementwiseUnaryQueueDescriptor
406  = PolymorphicDowncast<const ElementwiseUnaryQueueDescriptor*>(&descriptor);
407 
408  switch(elementwiseUnaryQueueDescriptor->m_Parameters.m_Operation)
409  {
410  case UnaryOperation::Abs:
411  {
412  AbsQueueDescriptor absQueueDescriptor;
413  absQueueDescriptor.m_Inputs = elementwiseUnaryQueueDescriptor->m_Inputs;
414  absQueueDescriptor.m_Outputs = elementwiseUnaryQueueDescriptor->m_Outputs;
415 
416  return std::make_unique<ClAbsWorkload>(absQueueDescriptor, info, m_CLCompileContext);
417  }
418  case UnaryOperation::Exp:
419  return std::make_unique<ClExpWorkload>(*elementwiseUnaryQueueDescriptor, info, m_CLCompileContext);
420  case UnaryOperation::Log:
421  return std::make_unique<ClLogWorkload>(*elementwiseUnaryQueueDescriptor, info, m_CLCompileContext);
423  return std::make_unique<ClLogicalNotWorkload>(*elementwiseUnaryQueueDescriptor,
424  info,
425  m_CLCompileContext);
426  case UnaryOperation::Neg:
427  return std::make_unique<ClNegWorkload>(*elementwiseUnaryQueueDescriptor, info, m_CLCompileContext);
429  {
430  RsqrtQueueDescriptor rsqrtQueueDescriptor;
431  rsqrtQueueDescriptor.m_Inputs = elementwiseUnaryQueueDescriptor->m_Inputs;
432  rsqrtQueueDescriptor.m_Outputs = elementwiseUnaryQueueDescriptor->m_Outputs;
433 
434  return std::make_unique<ClRsqrtWorkload>(rsqrtQueueDescriptor, info, m_CLCompileContext);
435  }
436  case UnaryOperation::Sin:
437  return std::make_unique<ClSinWorkload>(*elementwiseUnaryQueueDescriptor, info, m_CLCompileContext);
439  return std::make_unique<ClSqrtWorkload>(*elementwiseUnaryQueueDescriptor, info, m_CLCompileContext);
440  default:
441  return nullptr;
442  }
443  }
444  case LayerType::Fill :
445  {
446  auto fillQueueDescriptor = PolymorphicDowncast<const FillQueueDescriptor*>(&descriptor);
447  return std::make_unique<ClFillWorkload>(*fillQueueDescriptor, info, m_CLCompileContext);
448  }
449  case LayerType::Floor :
450  {
451  auto floorQueueDescriptor = PolymorphicDowncast<const FloorQueueDescriptor*>(&descriptor);
452  return MakeWorkload<ClFloorFloatWorkload, NullWorkload>(*floorQueueDescriptor, info, m_CLCompileContext);
453  }
455  {
456  auto fullyConnectedQueueDescriptor
457  = PolymorphicDowncast<const FullyConnectedQueueDescriptor*>(&descriptor);
458  return MakeWorkload<ClFullyConnectedWorkload>(*fullyConnectedQueueDescriptor,
459  info,
460  m_MemoryManager->GetIntraLayerManager(),
461  m_CLCompileContext);
462  }
463  case LayerType::Gather :
464  {
465  auto gatherQueueDescriptor = PolymorphicDowncast<const GatherQueueDescriptor*>(&descriptor);
466  return MakeWorkload<ClGatherWorkload>(*gatherQueueDescriptor, info, m_CLCompileContext);
467  }
468  case LayerType::GatherNd :
469  {
470  auto gatherNdQueueDescriptor = PolymorphicDowncast<const GatherNdQueueDescriptor*>(&descriptor);
471  return MakeWorkload<ClGatherNdWorkload>(*gatherNdQueueDescriptor, info, m_CLCompileContext);
472  }
473  case LayerType::Input :
474  {
475  auto inputQueueDescriptor = PolymorphicDowncast<const InputQueueDescriptor*>(&descriptor);
476  return std::make_unique<CopyMemGenericWorkload>(*inputQueueDescriptor, info);
477  }
479  {
480  auto instanceNormalizationQueueDescriptor
481  = PolymorphicDowncast<const InstanceNormalizationQueueDescriptor*>(&descriptor);
482  return MakeWorkload<ClInstanceNormalizationWorkload>(*instanceNormalizationQueueDescriptor,
483  info,
484  m_CLCompileContext);
485  }
487  {
488  auto l2NormalizationQueueDescriptor
489  = PolymorphicDowncast<const L2NormalizationQueueDescriptor*>(&descriptor);
490  return MakeWorkload<ClL2NormalizationFloatWorkload, NullWorkload>(*l2NormalizationQueueDescriptor,
491  info,
492  m_CLCompileContext);
493  }
495  {
496  auto logicalBinaryQueueDescriptor = PolymorphicDowncast<const LogicalBinaryQueueDescriptor*>(&descriptor);
497 
498  switch(logicalBinaryQueueDescriptor->m_Parameters.m_Operation)
499  {
501  return std::make_unique<ClLogicalAndWorkload>(*logicalBinaryQueueDescriptor,
502  info,
503  m_CLCompileContext);
505  return std::make_unique<ClLogicalOrWorkload>(*logicalBinaryQueueDescriptor,
506  info,
507  m_CLCompileContext);
508  default:
509  return nullptr;
510  }
511  }
512  case LayerType::LogSoftmax :
513  {
514  auto logSoftmaxQueueDescriptor = PolymorphicDowncast<const LogSoftmaxQueueDescriptor*>(&descriptor);
515 
516  return MakeWorkload<ClLogSoftmaxWorkload>(*logSoftmaxQueueDescriptor,
517  info,
518  m_MemoryManager->GetIntraLayerManager(),
519  m_CLCompileContext);
520  }
521  case LayerType::Lstm :
522  {
523  auto lstmQueueDescriptor = PolymorphicDowncast<const LstmQueueDescriptor*>(&descriptor);
524  return MakeWorkload<ClLstmFloatWorkload, NullWorkload>(*lstmQueueDescriptor, info, m_CLCompileContext);
525  }
526  case LayerType::Maximum :
527  {
528  auto maximumQueueDescriptor = PolymorphicDowncast<const MaximumQueueDescriptor*>(&descriptor);
529  return MakeWorkload<ClMaximumWorkload>(*maximumQueueDescriptor, info, m_CLCompileContext);
530  }
531  case LayerType::Mean :
532  {
533  auto meanQueueDescriptor = PolymorphicDowncast<const MeanQueueDescriptor*>(&descriptor);
534  return MakeWorkload<ClMeanWorkload>(*meanQueueDescriptor, info, m_CLCompileContext);
535  }
536  case LayerType::MemCopy :
537  {
538  auto memCopyQueueDescriptor = PolymorphicDowncast<const MemCopyQueueDescriptor*>(&descriptor);
539  if (memCopyQueueDescriptor->m_Inputs.empty() || !memCopyQueueDescriptor->m_Inputs[0])
540  {
541  throw InvalidArgumentException("ClWorkloadFactory: Invalid null input for MemCopy workload");
542  }
543  return MakeWorkload<CopyMemGenericWorkload>(*memCopyQueueDescriptor, info);
544  }
545  case LayerType::MemImport :
546  {
547  auto memImportQueueDescriptor = PolymorphicDowncast<const MemImportQueueDescriptor*>(&descriptor);
548  if (memImportQueueDescriptor->m_Inputs.empty() || !memImportQueueDescriptor->m_Inputs[0])
549  {
550  throw InvalidArgumentException("ClWorkloadFactory: Invalid null input for MemImport workload");
551  }
552  return std::make_unique<ImportMemGenericWorkload>(*memImportQueueDescriptor, info);
553  }
554  case LayerType::Minimum :
555  {
556  auto minimumQueueDescriptor = PolymorphicDowncast<const MinimumQueueDescriptor*>(&descriptor);
557  return MakeWorkload<ClMinimumWorkload>(*minimumQueueDescriptor, info, m_CLCompileContext);
558  }
560  {
561  auto multiplicationQueueDescriptor = PolymorphicDowncast<const MultiplicationQueueDescriptor*>(&descriptor);
562  return MakeWorkload<ClMultiplicationWorkload>(*multiplicationQueueDescriptor, info, m_CLCompileContext);
563  }
565  {
566  auto normalizationQueueDescriptor = PolymorphicDowncast<const NormalizationQueueDescriptor*>(&descriptor);
567  return MakeWorkload<ClNormalizationFloatWorkload, NullWorkload>(*normalizationQueueDescriptor,
568  info,
569  m_CLCompileContext);
570  }
571  case LayerType::Output :
572  {
573  auto outputQueueDescriptor = PolymorphicDowncast<const OutputQueueDescriptor*>(&descriptor);
574  return std::make_unique<CopyMemGenericWorkload>(*outputQueueDescriptor, info);
575  }
576  case LayerType::Pad :
577  {
578  auto padQueueDescriptor = PolymorphicDowncast<const PadQueueDescriptor*>(&descriptor);
579  return MakeWorkload<ClPadWorkload>(*padQueueDescriptor, info, m_CLCompileContext);
580  }
581  case LayerType::Permute :
582  {
583  auto permuteQueueDescriptor = PolymorphicDowncast<const PermuteQueueDescriptor*>(&descriptor);
584  return MakeWorkload<ClPermuteWorkload>(*permuteQueueDescriptor, info, m_CLCompileContext);
585  }
586  case LayerType::Pooling2d :
587  {
588  auto pooling2dQueueDescriptor = PolymorphicDowncast<const Pooling2dQueueDescriptor*>(&descriptor);
589  return MakeWorkload<ClPooling2dWorkload>(*pooling2dQueueDescriptor, info, m_CLCompileContext);
590  }
591  case LayerType::Pooling3d :
592  {
593  auto pooling3dQueueDescriptor = PolymorphicDowncast<const Pooling3dQueueDescriptor*>(&descriptor);
594  return MakeWorkload<ClPooling3dWorkload>(*pooling3dQueueDescriptor, info, m_CLCompileContext);
595  }
597  {
598  auto preCompiledQueueDescriptor = PolymorphicDowncast<const PreCompiledQueueDescriptor*>(&descriptor);
599  return MakeWorkload<NullWorkload, NullWorkload>(*preCompiledQueueDescriptor, info, m_CLCompileContext);
600  }
601  case LayerType::Prelu :
602  {
603  auto preluQueueDescriptor = PolymorphicDowncast<const PreluQueueDescriptor*>(&descriptor);
604  return MakeWorkload<ClPreluWorkload>(*preluQueueDescriptor, info, m_CLCompileContext);
605  }
606  case LayerType::QLstm :
607  {
608  auto qLstmQueueDescriptor = PolymorphicDowncast<const QLstmQueueDescriptor*>(&descriptor);
609  return std::make_unique<ClQLstmWorkload>(*qLstmQueueDescriptor, info, m_CLCompileContext);
610  }
611  case LayerType::Quantize :
612  {
613  auto quantizeQueueDescriptor = PolymorphicDowncast<const QuantizeQueueDescriptor*>(&descriptor);
614  return MakeWorkload<ClQuantizeWorkload>(*quantizeQueueDescriptor, info, m_CLCompileContext);
615  }
617  {
618  auto quantizedLstmQueueDescriptor = PolymorphicDowncast<const QuantizedLstmQueueDescriptor*>(&descriptor);
619  return MakeWorkload<ClQuantizedLstmWorkload>(*quantizedLstmQueueDescriptor, info, m_CLCompileContext);
620  }
621  case LayerType::Rank :
622  {
623  auto rankQueueDescriptor = PolymorphicDowncast<const RankQueueDescriptor*>(&descriptor);
624  return std::make_unique<ClRankWorkload>(*rankQueueDescriptor, info);
625  }
626  case LayerType::Reduce :
627  {
628  auto reduceQueueDescriptor = PolymorphicDowncast<const ReduceQueueDescriptor*>(&descriptor);
629  return std::make_unique<ClReduceWorkload>(*reduceQueueDescriptor, info);
630  }
631  case LayerType::Reshape :
632  {
633  auto reshapeQueueDescriptor = PolymorphicDowncast<const ReshapeQueueDescriptor*>(&descriptor);
634  return MakeWorkload<ClReshapeWorkload>(*reshapeQueueDescriptor, info, m_CLCompileContext);
635  }
636  case LayerType::Resize :
637  {
638  auto resizeQueueDescriptor = PolymorphicDowncast<const ResizeQueueDescriptor*>(&descriptor);
639  return MakeWorkload<ClResizeWorkload>(*resizeQueueDescriptor, info, m_CLCompileContext);
640  }
641  case LayerType::Slice :
642  {
643  auto sliceQueueDescriptor = PolymorphicDowncast<const SliceQueueDescriptor*>(&descriptor);
644  return MakeWorkload<ClSliceWorkload>(*sliceQueueDescriptor, info, m_CLCompileContext);
645  }
646  case LayerType::Softmax :
647  {
648  auto softmaxQueueDescriptor = PolymorphicDowncast<const SoftmaxQueueDescriptor*>(&descriptor);
649  return std::make_unique<ClSoftmaxWorkload>(*softmaxQueueDescriptor,
650  info,
651  m_MemoryManager->GetIntraLayerManager(),
652  m_CLCompileContext);
653  }
655  {
656  auto spaceToBatchNdQueueDescriptor
657  = PolymorphicDowncast<const SpaceToBatchNdQueueDescriptor*>(&descriptor);
658  return MakeWorkload<ClSpaceToBatchNdWorkload>(*spaceToBatchNdQueueDescriptor, info, m_CLCompileContext);
659  }
661  {
662  auto spaceToDepthQueueDescriptor = PolymorphicDowncast<const SpaceToDepthQueueDescriptor*>(&descriptor);
663  return MakeWorkload<ClSpaceToDepthWorkload>(*spaceToDepthQueueDescriptor, info, m_CLCompileContext);
664  }
665  case LayerType::Splitter :
666  {
667  auto splitterQueueDescriptor = PolymorphicDowncast<const SplitterQueueDescriptor*>(&descriptor);
668  return MakeWorkload<ClSplitterWorkload>(*splitterQueueDescriptor, info, m_CLCompileContext);
669  }
670  case LayerType::Stack :
671  {
672  auto stackQueueDescriptor = PolymorphicDowncast<const StackQueueDescriptor*>(&descriptor);
673  return MakeWorkload<ClStackWorkload>(*stackQueueDescriptor, info, m_CLCompileContext);
674  }
676  {
677  auto stridedSliceQueueDescriptor = PolymorphicDowncast<const StridedSliceQueueDescriptor*>(&descriptor);
678  return MakeWorkload<ClStridedSliceWorkload>(*stridedSliceQueueDescriptor, info, m_CLCompileContext);
679  }
681  {
682  auto subtractionQueueDescriptor = PolymorphicDowncast<const SubtractionQueueDescriptor*>(&descriptor);
683  return MakeWorkload<ClSubtractionWorkload>(*subtractionQueueDescriptor, info, m_CLCompileContext);
684  }
685  case LayerType::Transpose :
686  {
687  auto transposeQueueDescriptor = PolymorphicDowncast<const TransposeQueueDescriptor*>(&descriptor);
688  return MakeWorkload<ClTransposeWorkload>(*transposeQueueDescriptor, info, m_CLCompileContext);
689  }
691  {
692  auto transposeConvolution2dQueueDescriptor
693  = PolymorphicDowncast<const TransposeConvolution2dQueueDescriptor*>(&descriptor);
694  return MakeWorkload<ClTransposeConvolution2dWorkload>(*transposeConvolution2dQueueDescriptor,
695  info,
696  m_MemoryManager->GetIntraLayerManager(),
697  m_CLCompileContext);
698  }
700  {
701  auto desc = PolymorphicDowncast<const UnidirectionalSequenceLstmQueueDescriptor*>(&descriptor);
702  return MakeWorkloadHelper<ClUnidirectionalSequenceLstmFloatWorkload, NullWorkload>(*desc,
703  info,
704  m_CLCompileContext);
705  }
706  default:
707  return nullptr;
708  }
709 }

◆ GetBackendId()

const BackendId & GetBackendId ( ) const
overridevirtual

Implements IWorkloadFactory.

Definition at line 61 of file ClWorkloadFactory.cpp.

62 {
63  return s_Id;
64 }

◆ IsLayerSupported() [1/2]

bool IsLayerSupported ( const Layer layer,
Optional< DataType dataType,
std::string &  outReasonIfUnsupported 
)
static

Definition at line 46 of file ClWorkloadFactory.cpp.

References IWorkloadFactory::IsLayerSupported().

49 {
50  return IWorkloadFactory::IsLayerSupported(s_Id, layer, dataType, outReasonIfUnsupported);
51 }
static bool IsLayerSupported(const BackendId &backendId, const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported)

◆ IsLayerSupported() [2/2]

bool IsLayerSupported ( const IConnectableLayer layer,
Optional< DataType dataType,
std::string &  outReasonIfUnsupported,
const ModelOptions modelOptions 
)
static

Definition at line 53 of file ClWorkloadFactory.cpp.

References IWorkloadFactory::IsLayerSupported().

57 {
58  return IWorkloadFactory::IsLayerSupported(s_Id, layer, dataType, outReasonIfUnsupported, modelOptions);
59 }
static bool IsLayerSupported(const BackendId &backendId, const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported)

◆ SupportsSubTensors()

bool SupportsSubTensors ( ) const
inlineoverridevirtual

Reimplemented from WorkloadFactoryBase.

Definition at line 42 of file ClWorkloadFactory.hpp.

References ARMNN_DEPRECATED_MSG, armnn::ARMNN_DEPRECATED_MSG_REMOVAL_DATE(), WorkloadFactoryBase::CreateActivation(), WorkloadFactoryBase::CreateAddition(), WorkloadFactoryBase::CreateArgMinMax(), WorkloadFactoryBase::CreateBatchNormalization(), WorkloadFactoryBase::CreateBatchToSpaceNd(), WorkloadFactoryBase::CreateComparison(), WorkloadFactoryBase::CreateConcat(), WorkloadFactoryBase::CreateConstant(), WorkloadFactoryBase::CreateConvertFp16ToFp32(), WorkloadFactoryBase::CreateConvertFp32ToFp16(), WorkloadFactoryBase::CreateConvolution2d(), WorkloadFactoryBase::CreateDebug(), WorkloadFactoryBase::CreateDepthToSpace(), WorkloadFactoryBase::CreateDepthwiseConvolution2d(), WorkloadFactoryBase::CreateDequantize(), WorkloadFactoryBase::CreateDetectionPostProcess(), WorkloadFactoryBase::CreateDivision(), WorkloadFactoryBase::CreateElementwiseUnary(), WorkloadFactoryBase::CreateFloor(), WorkloadFactoryBase::CreateFullyConnected(), WorkloadFactoryBase::CreateGather(), WorkloadFactoryBase::CreateInput(), WorkloadFactoryBase::CreateInstanceNormalization(), WorkloadFactoryBase::CreateL2Normalization(), WorkloadFactoryBase::CreateLogSoftmax(), WorkloadFactoryBase::CreateLstm(), WorkloadFactoryBase::CreateMaximum(), WorkloadFactoryBase::CreateMean(), WorkloadFactoryBase::CreateMemCopy(), WorkloadFactoryBase::CreateMemImport(), WorkloadFactoryBase::CreateMinimum(), WorkloadFactoryBase::CreateMultiplication(), WorkloadFactoryBase::CreateNormalization(), WorkloadFactoryBase::CreateOutput(), WorkloadFactoryBase::CreatePad(), WorkloadFactoryBase::CreatePermute(), WorkloadFactoryBase::CreatePooling2d(), WorkloadFactoryBase::CreatePreCompiled(), WorkloadFactoryBase::CreatePrelu(), WorkloadFactoryBase::CreateQuantize(), WorkloadFactoryBase::CreateQuantizedLstm(), WorkloadFactoryBase::CreateRank(), WorkloadFactoryBase::CreateReshape(), WorkloadFactoryBase::CreateResize(), WorkloadFactoryBase::CreateSlice(), WorkloadFactoryBase::CreateSoftmax(), WorkloadFactoryBase::CreateSpaceToBatchNd(), WorkloadFactoryBase::CreateSpaceToDepth(), WorkloadFactoryBase::CreateSplitter(), WorkloadFactoryBase::CreateStack(), WorkloadFactoryBase::CreateStridedSlice(), ClWorkloadFactory::CreateSubTensorHandle(), WorkloadFactoryBase::CreateSubtraction(), ClWorkloadFactory::CreateTensorHandle(), WorkloadFactoryBase::CreateTranspose(), WorkloadFactoryBase::CreateTransposeConvolution2d(), ClWorkloadFactory::CreateWorkload(), armnn::Info, and armnn::info.

42 { return true; }

The documentation for this class was generated from the following files: