ArmNN
 20.08
IWorkloadFactory Class Referenceabstract

#include <WorkloadFactory.hpp>

Inheritance diagram for IWorkloadFactory:
RefWorkloadFactory WorkloadFactoryBase SampleDynamicWorkloadFactory ClWorkloadFactory NeonWorkloadFactory

Public Member Functions

virtual ~IWorkloadFactory ()
 
virtual const BackendIdGetBackendId () const =0
 
virtual bool SupportsSubTensors () const =0
 
virtual std::unique_ptr< ITensorHandleCreateSubTensorHandle (ITensorHandle &parent, TensorShape const &subTensorShape, unsigned int const *subTensorOrigin) const =0
 
virtual std::unique_ptr< IWorkloadCreateInput (const InputQueueDescriptor &descriptor, const WorkloadInfo &info) const =0
 
virtual std::unique_ptr< ITensorHandleCreateTensorHandle (const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
 
virtual std::unique_ptr< ITensorHandleCreateTensorHandle (const TensorInfo &tensorInfo, DataLayout dataLayout, const bool IsMemoryManaged=true) const =0
 
virtual std::unique_ptr< IWorkloadCreateAbs (const AbsQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateActivation (const ActivationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateAddition (const AdditionQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateArgMinMax (const ArgMinMaxQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateBatchNormalization (const BatchNormalizationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateBatchToSpaceNd (const BatchToSpaceNdQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateComparison (const ComparisonQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateConcat (const ConcatQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateConstant (const ConstantQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateConvertBf16ToFp32 (const ConvertBf16ToFp32QueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateConvertFp16ToFp32 (const ConvertFp16ToFp32QueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateConvertFp32ToBf16 (const ConvertFp32ToBf16QueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateConvertFp32ToFp16 (const ConvertFp32ToFp16QueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateConvolution2d (const Convolution2dQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateDebug (const DebugQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateDepthToSpace (const DepthToSpaceQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateDepthwiseConvolution2d (const DepthwiseConvolution2dQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateDequantize (const DequantizeQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateDetectionPostProcess (const DetectionPostProcessQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateDivision (const DivisionQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateElementwiseUnary (const ElementwiseUnaryQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateEqual (const EqualQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateFakeQuantization (const FakeQuantizationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateFill (const FillQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateFloor (const FloorQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateFullyConnected (const FullyConnectedQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateGather (const GatherQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateGreater (const GreaterQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateInstanceNormalization (const InstanceNormalizationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateL2Normalization (const L2NormalizationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateLogSoftmax (const LogSoftmaxQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateLstm (const LstmQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMaximum (const MaximumQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMean (const MeanQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateMemCopy (const MemCopyQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMemImport (const MemImportQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMerge (const MergeQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMerger (const MergerQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMinimum (const MinimumQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateMultiplication (const MultiplicationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateNormalization (const NormalizationQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateOutput (const OutputQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreatePad (const PadQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreatePermute (const PermuteQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreatePooling2d (const Pooling2dQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreatePreCompiled (const PreCompiledQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreatePrelu (const PreluQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateQuantize (const QuantizeQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateQLstm (const QLstmQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateQuantizedLstm (const QuantizedLstmQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateRank (const RankQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateReshape (const ReshapeQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateResize (const ResizeQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateResizeBilinear (const ResizeBilinearQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateRsqrt (const RsqrtQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateSlice (const SliceQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateSoftmax (const SoftmaxQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateSpaceToBatchNd (const SpaceToBatchNdQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateSpaceToDepth (const SpaceToDepthQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateSubtraction (const SubtractionQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateSplitter (const SplitterQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateStack (const StackQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateStridedSlice (const StridedSliceQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateSwitch (const SwitchQueueDescriptor &descriptor, const WorkloadInfo &Info) const
 
virtual std::unique_ptr< IWorkloadCreateTranspose (const TransposeQueueDescriptor &descriptor, const WorkloadInfo &info) const
 
virtual std::unique_ptr< IWorkloadCreateTransposeConvolution2d (const TransposeConvolution2dQueueDescriptor &descriptor, const WorkloadInfo &info) const
 

Static Public Member Functions

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)
 

Detailed Description

Definition at line 21 of file WorkloadFactory.hpp.

Constructor & Destructor Documentation

◆ ~IWorkloadFactory()

virtual ~IWorkloadFactory ( )
inlinevirtual

Definition at line 24 of file WorkloadFactory.hpp.

References ARMNN_DEPRECATED_MSG, IWorkloadFactory::CreateAbs(), IWorkloadFactory::CreateActivation(), IWorkloadFactory::CreateAddition(), IWorkloadFactory::CreateArgMinMax(), IWorkloadFactory::CreateBatchNormalization(), IWorkloadFactory::CreateBatchToSpaceNd(), IWorkloadFactory::CreateComparison(), IWorkloadFactory::CreateConcat(), IWorkloadFactory::CreateConstant(), IWorkloadFactory::CreateConvertBf16ToFp32(), IWorkloadFactory::CreateConvertFp16ToFp32(), IWorkloadFactory::CreateConvertFp32ToBf16(), IWorkloadFactory::CreateConvertFp32ToFp16(), IWorkloadFactory::CreateConvolution2d(), IWorkloadFactory::CreateDebug(), IWorkloadFactory::CreateDepthToSpace(), IWorkloadFactory::CreateDepthwiseConvolution2d(), IWorkloadFactory::CreateDequantize(), IWorkloadFactory::CreateDetectionPostProcess(), IWorkloadFactory::CreateDivision(), IWorkloadFactory::CreateElementwiseUnary(), IWorkloadFactory::CreateEqual(), IWorkloadFactory::CreateFakeQuantization(), IWorkloadFactory::CreateFill(), IWorkloadFactory::CreateFloor(), IWorkloadFactory::CreateFullyConnected(), IWorkloadFactory::CreateGather(), IWorkloadFactory::CreateGreater(), IWorkloadFactory::CreateInput(), IWorkloadFactory::CreateInstanceNormalization(), IWorkloadFactory::CreateL2Normalization(), IWorkloadFactory::CreateLogSoftmax(), IWorkloadFactory::CreateLstm(), IWorkloadFactory::CreateMaximum(), IWorkloadFactory::CreateMean(), IWorkloadFactory::CreateMemCopy(), IWorkloadFactory::CreateMemImport(), IWorkloadFactory::CreateMerge(), IWorkloadFactory::CreateMerger(), IWorkloadFactory::CreateMinimum(), IWorkloadFactory::CreateMultiplication(), IWorkloadFactory::CreateNormalization(), IWorkloadFactory::CreateOutput(), IWorkloadFactory::CreatePad(), IWorkloadFactory::CreatePermute(), IWorkloadFactory::CreatePooling2d(), IWorkloadFactory::CreatePreCompiled(), IWorkloadFactory::CreatePrelu(), IWorkloadFactory::CreateQLstm(), IWorkloadFactory::CreateQuantize(), IWorkloadFactory::CreateQuantizedLstm(), IWorkloadFactory::CreateRank(), IWorkloadFactory::CreateReshape(), IWorkloadFactory::CreateResize(), IWorkloadFactory::CreateResizeBilinear(), IWorkloadFactory::CreateRsqrt(), IWorkloadFactory::CreateSlice(), IWorkloadFactory::CreateSoftmax(), IWorkloadFactory::CreateSpaceToBatchNd(), IWorkloadFactory::CreateSpaceToDepth(), IWorkloadFactory::CreateSplitter(), IWorkloadFactory::CreateStack(), IWorkloadFactory::CreateStridedSlice(), IWorkloadFactory::CreateSubTensorHandle(), IWorkloadFactory::CreateSubtraction(), IWorkloadFactory::CreateSwitch(), IWorkloadFactory::CreateTensorHandle(), IWorkloadFactory::CreateTranspose(), IWorkloadFactory::CreateTransposeConvolution2d(), IWorkloadFactory::GetBackendId(), armnn::Info, armnn::info, IWorkloadFactory::IsLayerSupported(), and IWorkloadFactory::SupportsSubTensors().

24 { }

Member Function Documentation

◆ CreateAbs()

std::unique_ptr< IWorkload > CreateAbs ( const AbsQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, ClWorkloadFactory, NeonWorkloadFactory, and WorkloadFactoryBase.

Definition at line 1224 of file WorkloadFactory.cpp.

Referenced by AbsLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1226 {
1227  return std::unique_ptr<IWorkload>();
1228 }

◆ CreateActivation()

std::unique_ptr< IWorkload > CreateActivation ( const ActivationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

◆ CreateAddition()

std::unique_ptr< IWorkload > CreateAddition ( const AdditionQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

◆ CreateArgMinMax()

std::unique_ptr< IWorkload > CreateArgMinMax ( const ArgMinMaxQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, ClWorkloadFactory, NeonWorkloadFactory, and WorkloadFactoryBase.

Definition at line 1242 of file WorkloadFactory.cpp.

Referenced by ArgMinMaxLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1244 {
1245  return std::unique_ptr<IWorkload>();
1246 }

◆ CreateBatchNormalization()

std::unique_ptr< IWorkload > CreateBatchNormalization ( const BatchNormalizationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, ClWorkloadFactory, NeonWorkloadFactory, and WorkloadFactoryBase.

Definition at line 1248 of file WorkloadFactory.cpp.

Referenced by CompareBatchNormTest(), BatchNormalizationLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1250 {
1251  return std::unique_ptr<IWorkload>();
1252 }

◆ CreateBatchToSpaceNd()

std::unique_ptr< IWorkload > CreateBatchToSpaceNd ( const BatchToSpaceNdQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in RefWorkloadFactory, ClWorkloadFactory, NeonWorkloadFactory, and WorkloadFactoryBase.

Definition at line 1254 of file WorkloadFactory.cpp.

Referenced by BatchToSpaceNdLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1256 {
1257  return std::unique_ptr<IWorkload>();
1258 }

◆ CreateComparison()

std::unique_ptr< IWorkload > CreateComparison ( const ComparisonQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in RefWorkloadFactory, ClWorkloadFactory, NeonWorkloadFactory, and WorkloadFactoryBase.

Definition at line 1260 of file WorkloadFactory.cpp.

Referenced by ComparisonLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1262 {
1263  return std::unique_ptr<IWorkload>();
1264 }

◆ CreateConcat()

std::unique_ptr< IWorkload > CreateConcat ( const ConcatQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

◆ CreateConstant()

std::unique_ptr< IWorkload > CreateConstant ( const ConstantQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, ClWorkloadFactory, and NeonWorkloadFactory.

Definition at line 1272 of file WorkloadFactory.cpp.

Referenced by ConstantLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1274 {
1275  return std::unique_ptr<IWorkload>();
1276 }

◆ CreateConvertBf16ToFp32()

std::unique_ptr< IWorkload > CreateConvertBf16ToFp32 ( const ConvertBf16ToFp32QueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, and NeonWorkloadFactory.

Definition at line 1278 of file WorkloadFactory.cpp.

Referenced by ConvertBf16ToFp32Test(), ConvertBf16ToFp32Layer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1280 {
1281  return std::unique_ptr<IWorkload>();
1282 }

◆ CreateConvertFp16ToFp32()

std::unique_ptr< IWorkload > CreateConvertFp16ToFp32 ( const ConvertFp16ToFp32QueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, WorkloadFactoryBase, and ClWorkloadFactory.

Definition at line 1284 of file WorkloadFactory.cpp.

Referenced by ConvertFp16ToFp32Layer::CreateWorkload(), SimpleConvertFp16ToFp32Test(), and IWorkloadFactory::~IWorkloadFactory().

1286 {
1287  return std::unique_ptr<IWorkload>();
1288 }

◆ CreateConvertFp32ToBf16()

std::unique_ptr< IWorkload > CreateConvertFp32ToBf16 ( const ConvertFp32ToBf16QueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, and NeonWorkloadFactory.

Definition at line 1290 of file WorkloadFactory.cpp.

Referenced by ConvertFp32ToBf16Test(), ConvertFp32ToBf16Layer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1292 {
1293  return std::unique_ptr<IWorkload>();
1294 }

◆ CreateConvertFp32ToFp16()

std::unique_ptr< IWorkload > CreateConvertFp32ToFp16 ( const ConvertFp32ToFp16QueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, WorkloadFactoryBase, and ClWorkloadFactory.

Definition at line 1296 of file WorkloadFactory.cpp.

Referenced by ConvertFp32ToFp16Layer::CreateWorkload(), SimpleConvertFp32ToFp16Test(), and IWorkloadFactory::~IWorkloadFactory().

1298 {
1299  return std::unique_ptr<IWorkload>();
1300 }

◆ CreateConvolution2d()

std::unique_ptr< IWorkload > CreateConvolution2d ( const Convolution2dQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

◆ CreateDebug()

std::unique_ptr< IWorkload > CreateDebug ( const DebugQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, WorkloadFactoryBase, and ClWorkloadFactory.

Definition at line 1308 of file WorkloadFactory.cpp.

Referenced by DebugLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1310 {
1311  return std::unique_ptr<IWorkload>();
1312 }

◆ CreateDepthToSpace()

std::unique_ptr< IWorkload > CreateDepthToSpace ( const DepthToSpaceQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, WorkloadFactoryBase, and ClWorkloadFactory.

Definition at line 1314 of file WorkloadFactory.cpp.

Referenced by DepthToSpaceLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1316 {
1317  return std::unique_ptr<IWorkload>();
1318 }

◆ CreateDepthwiseConvolution2d()

◆ CreateDequantize()

std::unique_ptr< IWorkload > CreateDequantize ( const DequantizeQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1326 of file WorkloadFactory.cpp.

Referenced by DequantizeLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1328 {
1329  return std::unique_ptr<IWorkload>();
1330 }

◆ CreateDetectionPostProcess()

std::unique_ptr< IWorkload > CreateDetectionPostProcess ( const DetectionPostProcessQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1332 of file WorkloadFactory.cpp.

Referenced by DetectionPostProcessLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1334 {
1335  return std::unique_ptr<IWorkload>();
1336 }

◆ CreateDivision()

std::unique_ptr< IWorkload > CreateDivision ( const DivisionQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1338 of file WorkloadFactory.cpp.

Referenced by DivisionLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1340 {
1341  return std::unique_ptr<IWorkload>();
1342 }

◆ CreateElementwiseUnary()

std::unique_ptr< IWorkload > CreateElementwiseUnary ( const ElementwiseUnaryQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1344 of file WorkloadFactory.cpp.

Referenced by ElementwiseUnaryLayer::CreateWorkload(), CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1346 {
1347  return std::unique_ptr<IWorkload>();
1348 }

◆ CreateEqual()

std::unique_ptr< IWorkload > CreateEqual ( const EqualQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1350 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1352 {
1353  return std::unique_ptr<IWorkload>();
1354 }

◆ CreateFakeQuantization()

std::unique_ptr< IWorkload > CreateFakeQuantization ( const FakeQuantizationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, and WorkloadFactoryBase.

Definition at line 1356 of file WorkloadFactory.cpp.

Referenced by FakeQuantizationLayer::CreateWorkload(), FakeQuantizationTest(), and IWorkloadFactory::~IWorkloadFactory().

1358 {
1359  return std::unique_ptr<IWorkload>();
1360 }

◆ CreateFill()

std::unique_ptr< IWorkload > CreateFill ( const FillQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1362 of file WorkloadFactory.cpp.

Referenced by FillLayer::CreateWorkload(), SimpleFillTest(), and IWorkloadFactory::~IWorkloadFactory().

1364 {
1365  return std::unique_ptr<IWorkload>();
1366 }

◆ CreateFloor()

std::unique_ptr< IWorkload > CreateFloor ( const FloorQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1368 of file WorkloadFactory.cpp.

Referenced by FloorLayer::CreateWorkload(), SimpleFloorTest(), and IWorkloadFactory::~IWorkloadFactory().

1370 {
1371  return std::unique_ptr<IWorkload>();
1372 }

◆ CreateFullyConnected()

std::unique_ptr< IWorkload > CreateFullyConnected ( const FullyConnectedQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1374 of file WorkloadFactory.cpp.

Referenced by FullyConnectedLayer::CreateWorkload(), SimpleFullyConnectedTestImpl(), and IWorkloadFactory::~IWorkloadFactory().

1376 {
1377  return std::unique_ptr<IWorkload>();
1378 }

◆ CreateGather()

std::unique_ptr< IWorkload > CreateGather ( const GatherQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1380 of file WorkloadFactory.cpp.

Referenced by GatherLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1382 {
1383  return std::unique_ptr<IWorkload>();
1384 }

◆ CreateGreater()

std::unique_ptr< IWorkload > CreateGreater ( const GreaterQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1386 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1388 {
1389  return std::unique_ptr<IWorkload>();
1390 }

◆ CreateInput()

virtual std::unique_ptr<IWorkload> CreateInput ( const InputQueueDescriptor descriptor,
const WorkloadInfo info 
) const
pure virtual

◆ CreateInstanceNormalization()

std::unique_ptr< IWorkload > CreateInstanceNormalization ( const InstanceNormalizationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1392 of file WorkloadFactory.cpp.

Referenced by InstanceNormalizationLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1395 {
1396  return std::unique_ptr<IWorkload>();
1397 }

◆ CreateL2Normalization()

std::unique_ptr< IWorkload > CreateL2Normalization ( const L2NormalizationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1399 of file WorkloadFactory.cpp.

Referenced by L2NormalizationLayer::CreateWorkload(), L2Normalization2dShapeTest(), and IWorkloadFactory::~IWorkloadFactory().

1401 {
1402  return std::unique_ptr<IWorkload>();
1403 }

◆ CreateLogSoftmax()

std::unique_ptr< IWorkload > CreateLogSoftmax ( const LogSoftmaxQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1405 of file WorkloadFactory.cpp.

Referenced by LogSoftmaxLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1407 {
1408  return std::unique_ptr<IWorkload>();
1409 }

◆ CreateLstm()

std::unique_ptr< IWorkload > CreateLstm ( const LstmQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1411 of file WorkloadFactory.cpp.

Referenced by LstmLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1413 {
1414  return std::unique_ptr<IWorkload>();
1415 }

◆ CreateMaximum()

std::unique_ptr< IWorkload > CreateMaximum ( const MaximumQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1417 of file WorkloadFactory.cpp.

Referenced by MaximumLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1419 {
1420  return std::unique_ptr<IWorkload>();
1421 }

◆ CreateMean()

std::unique_ptr< IWorkload > CreateMean ( const MeanQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1423 of file WorkloadFactory.cpp.

Referenced by MeanLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1425 {
1426  return std::unique_ptr<IWorkload>();
1427 }

◆ CreateMemCopy()

std::unique_ptr< IWorkload > CreateMemCopy ( const MemCopyQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1429 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1431 {
1432  return std::unique_ptr<IWorkload>();
1433 }

◆ CreateMemImport()

std::unique_ptr< IWorkload > CreateMemImport ( const MemImportQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1435 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1437 {
1438  return std::unique_ptr<IWorkload>();
1439 }

◆ CreateMerge()

std::unique_ptr< IWorkload > CreateMerge ( const MergeQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase.

Definition at line 1441 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1443 {
1444  return std::unique_ptr<IWorkload>();
1445 }

◆ CreateMerger()

std::unique_ptr< IWorkload > CreateMerger ( const MergerQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1447 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1449 {
1450  return std::unique_ptr<IWorkload>();
1451 }

◆ CreateMinimum()

std::unique_ptr< IWorkload > CreateMinimum ( const MinimumQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1453 of file WorkloadFactory.cpp.

Referenced by MinimumLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1455 {
1456  return std::unique_ptr<IWorkload>();
1457 }

◆ CreateMultiplication()

std::unique_ptr< IWorkload > CreateMultiplication ( const MultiplicationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1459 of file WorkloadFactory.cpp.

Referenced by CompareMultiplicationTest(), MultiplicationLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1461 {
1462  return std::unique_ptr<IWorkload>();
1463 }

◆ CreateNormalization()

std::unique_ptr< IWorkload > CreateNormalization ( const NormalizationQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1465 of file WorkloadFactory.cpp.

Referenced by NormalizationLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1467 {
1468  return std::unique_ptr<IWorkload>();
1469 }

◆ CreateOutput()

std::unique_ptr< IWorkload > CreateOutput ( const OutputQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, ClWorkloadFactory, and SampleDynamicWorkloadFactory.

Definition at line 1471 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1473 {
1474  return std::unique_ptr<IWorkload>();
1475 }

◆ CreatePad()

std::unique_ptr< IWorkload > CreatePad ( const PadQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in RefWorkloadFactory, WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1477 of file WorkloadFactory.cpp.

Referenced by PadLayer::CreateWorkload(), Pad2dTestCommon(), Pad3dTestCommon(), Pad4dTestCommon(), and IWorkloadFactory::~IWorkloadFactory().

1479 {
1480  return std::unique_ptr<IWorkload>();
1481 }

◆ CreatePermute()

std::unique_ptr< IWorkload > CreatePermute ( const PermuteQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1483 of file WorkloadFactory.cpp.

Referenced by PermuteLayer::CreateWorkload(), PermuteTensorData(), SimplePermuteTestImpl(), and IWorkloadFactory::~IWorkloadFactory().

1485 {
1486  return std::unique_ptr<IWorkload>();
1487 }

◆ CreatePooling2d()

std::unique_ptr< IWorkload > CreatePooling2d ( const Pooling2dQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1489 of file WorkloadFactory.cpp.

Referenced by AdditionAfterMaxPoolTest(), Pooling2dLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1491 {
1492  return std::unique_ptr<IWorkload>();
1493 }

◆ CreatePreCompiled()

std::unique_ptr< IWorkload > CreatePreCompiled ( const PreCompiledQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1495 of file WorkloadFactory.cpp.

Referenced by PreCompiledLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1497 {
1498  return std::unique_ptr<IWorkload>();
1499 }

◆ CreatePrelu()

std::unique_ptr< IWorkload > CreatePrelu ( const PreluQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1501 of file WorkloadFactory.cpp.

Referenced by PreluLayer::CreateWorkload(), PreluTest(), and IWorkloadFactory::~IWorkloadFactory().

1503 {
1504  return std::unique_ptr<IWorkload>();
1505 }

◆ CreateQLstm()

std::unique_ptr< IWorkload > CreateQLstm ( const QLstmQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1513 of file WorkloadFactory.cpp.

Referenced by QLstmLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1515 {
1516  return std::unique_ptr<IWorkload>();
1517 }

◆ CreateQuantize()

std::unique_ptr< IWorkload > CreateQuantize ( const QuantizeQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1507 of file WorkloadFactory.cpp.

Referenced by QuantizeLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1509 {
1510  return std::unique_ptr<IWorkload>();
1511 }

◆ CreateQuantizedLstm()

std::unique_ptr< IWorkload > CreateQuantizedLstm ( const QuantizedLstmQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1519 of file WorkloadFactory.cpp.

Referenced by QuantizedLstmLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1521 {
1522  return std::unique_ptr<IWorkload>();
1523 }

◆ CreateRank()

std::unique_ptr< IWorkload > CreateRank ( const RankQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, and RefWorkloadFactory.

Definition at line 1524 of file WorkloadFactory.cpp.

Referenced by RankLayer::CreateWorkload(), RankTest(), and IWorkloadFactory::~IWorkloadFactory().

1526 {
1527  return std::unique_ptr<IWorkload>();
1528 }

◆ CreateReshape()

std::unique_ptr< IWorkload > CreateReshape ( const ReshapeQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1530 of file WorkloadFactory.cpp.

Referenced by ReshapeLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1532 {
1533  return std::unique_ptr<IWorkload>();
1534 }

◆ CreateResize()

std::unique_ptr< IWorkload > CreateResize ( const ResizeQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1542 of file WorkloadFactory.cpp.

Referenced by ResizeLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1544 {
1545  return std::unique_ptr<IWorkload>();
1546 }

◆ CreateResizeBilinear()

std::unique_ptr< IWorkload > CreateResizeBilinear ( const ResizeBilinearQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1536 of file WorkloadFactory.cpp.

Referenced by IWorkloadFactory::~IWorkloadFactory().

1538 {
1539  return std::unique_ptr<IWorkload>();
1540 }

◆ CreateRsqrt()

std::unique_ptr< IWorkload > CreateRsqrt ( const RsqrtQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1548 of file WorkloadFactory.cpp.

Referenced by RsqrtLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1550 {
1551  return std::unique_ptr<IWorkload>();
1552 }

◆ CreateSlice()

std::unique_ptr< IWorkload > CreateSlice ( const SliceQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1554 of file WorkloadFactory.cpp.

Referenced by SliceLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1556 {
1557  return std::unique_ptr<IWorkload>();
1558 }

◆ CreateSoftmax()

std::unique_ptr< IWorkload > CreateSoftmax ( const SoftmaxQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1560 of file WorkloadFactory.cpp.

Referenced by SoftmaxLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1562 {
1563  return std::unique_ptr<IWorkload>();
1564 }

◆ CreateSpaceToBatchNd()

std::unique_ptr< IWorkload > CreateSpaceToBatchNd ( const SpaceToBatchNdQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1572 of file WorkloadFactory.cpp.

Referenced by SpaceToBatchNdLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1574 {
1575  return std::unique_ptr<IWorkload>();
1576 }

◆ CreateSpaceToDepth()

std::unique_ptr< IWorkload > CreateSpaceToDepth ( const SpaceToDepthQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1578 of file WorkloadFactory.cpp.

Referenced by SpaceToDepthLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1580 {
1581  return std::unique_ptr<IWorkload>();
1582 }

◆ CreateSplitter()

std::unique_ptr< IWorkload > CreateSplitter ( const SplitterQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1566 of file WorkloadFactory.cpp.

Referenced by SplitterLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1568 {
1569  return std::unique_ptr<IWorkload>();
1570 }

◆ CreateStack()

std::unique_ptr< IWorkload > CreateStack ( const StackQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1584 of file WorkloadFactory.cpp.

Referenced by StackLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1586 {
1587  return std::unique_ptr<IWorkload>();
1588 }

◆ CreateStridedSlice()

std::unique_ptr< IWorkload > CreateStridedSlice ( const StridedSliceQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1590 of file WorkloadFactory.cpp.

Referenced by StridedSliceLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1592 {
1593  return std::unique_ptr<IWorkload>();
1594 }

◆ CreateSubTensorHandle()

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

◆ CreateSubtraction()

std::unique_ptr< IWorkload > CreateSubtraction ( const SubtractionQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1596 of file WorkloadFactory.cpp.

Referenced by SubtractionLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1598 {
1599  return std::unique_ptr<IWorkload>();
1600 }

◆ CreateSwitch()

std::unique_ptr< IWorkload > CreateSwitch ( const SwitchQueueDescriptor descriptor,
const WorkloadInfo Info 
) const
virtual

Reimplemented in WorkloadFactoryBase.

Definition at line 1602 of file WorkloadFactory.cpp.

Referenced by SwitchLayer::CreateWorkload(), and IWorkloadFactory::~IWorkloadFactory().

1604 {
1605  return std::unique_ptr<IWorkload>();
1606 }

◆ CreateTensorHandle() [1/2]

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

Implemented in RefWorkloadFactory, SampleDynamicWorkloadFactory, ClWorkloadFactory, NeonWorkloadFactory, and WorkloadFactoryBase.

Referenced by AdditionAfterMaxPoolTest(), AdditionBroadcast1ElementTestImpl(), AdditionBroadcastTestImpl(), BoundedReLuTestCommon(), BoundedReLuUint8UpperAndLowerBoundTest(), CompareActivationTestImpl(), CompareAdditionTest(), CompareBatchNormTest(), CompareConvolution2dTestImpl(), CompareDepthwiseConvolution2dTestImpl(), CompareMultiplicationTest(), ConcatDifferentInputOutputQParamTest(), Concatenate(), ConcatTest(), ConcatUint16Test(), ConcatUint8DifferentQParamsTest(), ConcatUint8Test(), ConstantLinearActivationTestCommon(), ConvertBf16ToFp32Test(), ConvertFp32ToBf16Test(), Convolution1dTestImpl(), Convolution2dPerAxisQuantTest(), OutputHandler::CreateTensorHandles(), DepthwiseConvolution2dAsymmetricTestImpl(), DepthwiseConvolution2dDepthMul1TestImpl(), DepthwiseConvolution2dPerAxisQuantTest(), DepthwiseConvolution2dTestImpl(), ElementwiseTestHelper(), ElementwiseUnaryTestHelper(), FakeQuantizationTest(), L2Normalization2dShapeTest(), Pad2dTestCommon(), Pad3dTestCommon(), Pad4dTestCommon(), PermuteTensorData(), RankTest(), SimpleActivationTest(), SimpleConvertFp16ToFp32Test(), SimpleConvertFp32ToFp16Test(), SimpleConvolution2dNhwcTestImpl(), SimpleConvolution2dTestImpl(), SimpleFillTest(), SimpleFloorTest(), SimpleFullyConnectedTestImpl(), SimplePermuteTestImpl(), SqrtNNTest(), TransposeConvolution2dPerAxisQuantTest(), and IWorkloadFactory::~IWorkloadFactory().

◆ CreateTensorHandle() [2/2]

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

◆ CreateTranspose()

std::unique_ptr< IWorkload > CreateTranspose ( const TransposeQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

Reimplemented in WorkloadFactoryBase, RefWorkloadFactory, NeonWorkloadFactory, and ClWorkloadFactory.

Definition at line 1608 of file WorkloadFactory.cpp.

Referenced by TransposeLayer::CreateWorkload(), SimpleTransposeTestImpl(), and IWorkloadFactory::~IWorkloadFactory().

1610 {
1611  return std::unique_ptr<IWorkload>();
1612 }

◆ CreateTransposeConvolution2d()

std::unique_ptr< IWorkload > CreateTransposeConvolution2d ( const TransposeConvolution2dQueueDescriptor descriptor,
const WorkloadInfo info 
) const
virtual

◆ GetBackendId()

virtual const BackendId& GetBackendId ( ) const
pure virtual

◆ IsLayerSupported() [1/2]

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

Definition at line 42 of file WorkloadFactory.cpp.

References armnn::Activation, armnn::Addition, anchors(), armnn::ArgMinMax, ARMNN_ASSERT, ARMNN_ASSERT_MSG, armnn::BackendRegistryInstance(), armnn::BatchNormalization, armnn::BatchToSpaceNd, armnn::BFloat16, armnn::Boolean, boxEncodings(), armnn::Comparison, armnn::Concat, armnn::Constant, armnn::ConvertBf16ToFp32, armnn::ConvertFp16ToFp32, armnn::ConvertFp32ToBf16, armnn::ConvertFp32ToFp16, armnn::Convolution2d, armnn::Debug, armnn::DepthToSpace, armnn::DepthwiseConvolution2d, armnn::Dequantize, armnn::DetectionPostProcess, armnn::Division, armnn::ElementwiseUnary, armnn::FakeQuantization, armnn::Fill, armnn::Float16, armnn::Float32, armnn::Floor, armnn::FullyConnected, armnn::Gather, armnn::GetBiasTypeFromWeightsType(), InputSlot::GetConnection(), Layer::GetInputSlot(), Layer::GetInputSlots(), IConnectableLayer::GetName(), Layer::GetOutputSlot(), Layer::GetOutputSlots(), IOutputSlot::GetTensorInfo(), OutputSlot::GetTensorInfo(), Layer::GetType(), armnn::info, armnn::Input, armnn::InstanceNormalization, armnn::L2Normalization, armnn::LogSoftmax, armnn::Lstm, FullyConnectedDescriptor::m_BiasEnabled, LstmInputParamsInfo::m_CellBias, QuantizedLstmInputParamsInfo::m_CellBias, LstmInputParamsInfo::m_CellLayerNormWeights, LstmInputParamsInfo::m_CellToForgetWeights, LstmInputParamsInfo::m_CellToInputWeights, LstmInputParamsInfo::m_CellToOutputWeights, LstmInputParamsInfo::m_ForgetGateBias, QuantizedLstmInputParamsInfo::m_ForgetGateBias, LstmInputParamsInfo::m_ForgetLayerNormWeights, LstmInputParamsInfo::m_InputGateBias, QuantizedLstmInputParamsInfo::m_InputGateBias, LstmInputParamsInfo::m_InputLayerNormWeights, LstmInputParamsInfo::m_InputToCellWeights, QuantizedLstmInputParamsInfo::m_InputToCellWeights, LstmInputParamsInfo::m_InputToForgetWeights, QuantizedLstmInputParamsInfo::m_InputToForgetWeights, LstmInputParamsInfo::m_InputToInputWeights, QuantizedLstmInputParamsInfo::m_InputToInputWeights, LstmInputParamsInfo::m_InputToOutputWeights, QuantizedLstmInputParamsInfo::m_InputToOutputWeights, LstmInputParamsInfo::m_OutputGateBias, QuantizedLstmInputParamsInfo::m_OutputGateBias, LstmInputParamsInfo::m_OutputLayerNormWeights, LstmInputParamsInfo::m_ProjectionBias, LstmInputParamsInfo::m_ProjectionWeights, LstmInputParamsInfo::m_RecurrentToCellWeights, QuantizedLstmInputParamsInfo::m_RecurrentToCellWeights, LstmInputParamsInfo::m_RecurrentToForgetWeights, QuantizedLstmInputParamsInfo::m_RecurrentToForgetWeights, LstmInputParamsInfo::m_RecurrentToInputWeights, QuantizedLstmInputParamsInfo::m_RecurrentToInputWeights, LstmInputParamsInfo::m_RecurrentToOutputWeights, QuantizedLstmInputParamsInfo::m_RecurrentToOutputWeights, armnn::Maximum, armnn::Mean, armnn::MemCopy, armnn::MemImport, armnn::Merge, armnn::Minimum, armnn::Multiplication, armnn::Normalization, armnn::Output, armnn::Pad, armnn::Permute, armnn::Pooling2d, armnn::PreCompiled, armnn::Prelu, armnn::QAsymmS8, armnn::QAsymmU8, armnn::QLstm, armnn::QSymmS16, armnn::QSymmS8, armnn::Quantize, armnn::QuantizedLstm, armnn::Rank, armnn::Reshape, armnn::Resize, scores(), armnn::Signed32, armnn::Slice, armnn::Softmax, armnn::SpaceToBatchNd, armnn::SpaceToDepth, armnn::Splitter, armnn::Stack, armnn::StandIn, armnn::StridedSlice, armnn::Subtraction, armnn::Switch, armnn::Transpose, armnn::TransposeConvolution2d, and OptionalReferenceSwitch< std::is_reference< T >::value, T >::value().

Referenced by armnn::AttemptBackendAssignment(), LoadedNetwork::GetOutputTensorInfo(), ClWorkloadFactory::IsLayerSupported(), NeonWorkloadFactory::IsLayerSupported(), IWorkloadFactory::IsLayerSupported(), RefWorkloadFactory::IsLayerSupported(), and IWorkloadFactory::~IWorkloadFactory().

46 {
47  Optional<std::string&> reason = outReasonIfUnsupported;
48  bool result;
49  const Layer& layer = *(PolymorphicDowncast<const Layer*>(&connectableLayer));
50 
51  auto const& backendRegistry = BackendRegistryInstance();
52  if (!backendRegistry.IsBackendRegistered(backendId))
53  {
54  std::stringstream ss;
55  ss << connectableLayer.GetName() << " is not supported on " << backendId
56  << " because this backend is not registered.";
57 
58  outReasonIfUnsupported = ss.str();
59  return false;
60  }
61 
62  auto backendFactory = backendRegistry.GetFactory(backendId);
63  auto backendObject = backendFactory();
64  auto layerSupportObject = backendObject->GetLayerSupport();
65 
66  switch(layer.GetType())
67  {
69  {
70  auto cLayer = PolymorphicDowncast<const ActivationLayer*>(&layer);
71  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
72  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
73  result = layerSupportObject->IsActivationSupported(
74  OverrideDataType(input, dataType),
75  OverrideDataType(output, dataType),
76  cLayer->GetParameters(),
77  reason);
78  break;
79  }
81  {
82  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
83  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
84  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
85  result = layerSupportObject->IsAdditionSupported(
86  OverrideDataType(input0, dataType),
87  OverrideDataType(input1, dataType),
88  OverrideDataType(output, dataType),
89  reason);
90  break;
91  }
93  {
94  auto cLayer = PolymorphicDowncast<const ArgMinMaxLayer*>(&layer);
95  const ArgMinMaxDescriptor& descriptor = cLayer->GetParameters();
96 
97  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
98  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
99  result = layerSupportObject->IsArgMinMaxSupported(
100  OverrideDataType(input, dataType),
101  OverrideDataType(output, DataType::Signed32),
102  descriptor,
103  reason);
104  break;
105  }
107  {
108  auto cLayer = PolymorphicDowncast<const BatchNormalizationLayer*>(&layer);
109  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
110  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
111  const TensorInfo& mean = cLayer->m_Mean->GetTensorInfo();
112  const TensorInfo& var = cLayer->m_Variance->GetTensorInfo();
113  const TensorInfo& beta = cLayer->m_Beta->GetTensorInfo();
114  const TensorInfo& gamma = cLayer->m_Gamma->GetTensorInfo();
115  result = layerSupportObject->IsBatchNormalizationSupported(
116  OverrideDataType(input, dataType),
117  OverrideDataType(output, dataType),
118  OverrideDataType(mean, dataType),
119  OverrideDataType(var, dataType),
120  OverrideDataType(beta, dataType),
121  OverrideDataType(gamma, dataType),
122  cLayer->GetParameters(),
123  reason);
124  break;
125  }
127  {
128  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
129  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
130  auto cLayer = PolymorphicDowncast<const BatchToSpaceNdLayer*>(&layer);
131 
132  result = layerSupportObject->IsBatchToSpaceNdSupported(OverrideDataType(input, dataType),
133  OverrideDataType(output, dataType),
134  cLayer->GetParameters(),
135  reason);
136  break;
137  }
139  {
140  auto cLayer = PolymorphicDowncast<const ComparisonLayer*>(&layer);
141 
142  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
143  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
144  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
145 
146  result = layerSupportObject->IsComparisonSupported(OverrideDataType(input0, dataType),
147  OverrideDataType(input1, dataType),
148  OverrideDataType(output, DataType::Boolean),
149  cLayer->GetParameters(),
150  reason);
151  break;
152  }
153  case LayerType::Constant:
154  {
155  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
156  result = layerSupportObject->IsConstantSupported(OverrideDataType(output, dataType), reason);
157  break;
158  }
160  {
161  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
162  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
163  result = layerSupportObject->IsConvertBf16ToFp32Supported(input, output, reason);
164  break;
165  }
167  {
168  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
169  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
170  result = layerSupportObject->IsConvertFp16ToFp32Supported(input, output, reason);
171  break;
172  }
174  {
175  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
176  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
177  result = layerSupportObject->IsConvertFp32ToBf16Supported(input, output, reason);
178  break;
179  }
181  {
182  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
183  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
184  result = layerSupportObject->IsConvertFp32ToFp16Supported(input, output, reason);
185  break;
186  }
188  {
189  auto cLayer = PolymorphicDowncast<const Convolution2dLayer*>(&layer);
190 
191  const TensorInfo input = OverrideDataType(layer.GetInputSlot(0).GetConnection()->GetTensorInfo(),
192  dataType);
193  const TensorInfo output = OverrideDataType(layer.GetOutputSlot(0).GetTensorInfo(), dataType);
194  ARMNN_ASSERT(cLayer->m_Weight.get() != nullptr);
195 
196  const Convolution2dDescriptor& descriptor = cLayer->GetParameters();
197 
198  // Construct optional biases object based on the value of m_BiasEnabled
199  Optional<TensorInfo> biases;
200  if (descriptor.m_BiasEnabled)
201  {
202  biases =
203  OverrideDataType(cLayer->m_Bias->GetTensorInfo(), GetBiasTypeFromWeightsType(dataType));
204  }
205 
206  result = layerSupportObject->IsConvolution2dSupported(
207  input,
208  output,
209  descriptor,
210  OverrideDataType(cLayer->m_Weight->GetTensorInfo(), dataType),
211  biases,
212  reason);
213  break;
214  }
215  case LayerType::Debug:
216  {
217  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
218  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
219 
220  result = layerSupportObject->IsDebugSupported(OverrideDataType(input, dataType),
221  OverrideDataType(output, dataType),
222  reason);
223  break;
224  }
226  {
227  auto cLayer = PolymorphicDowncast<const DepthToSpaceLayer*>(&layer);
228 
229  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
230  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
231 
232  result = layerSupportObject->IsDepthToSpaceSupported(OverrideDataType(input, dataType),
233  OverrideDataType(output, dataType),
234  cLayer->GetParameters(),
235  reason);
236  break;
237  }
239  {
240  auto cLayer = PolymorphicDowncast<const DepthwiseConvolution2dLayer*>(&layer);
241  const TensorInfo& input = OverrideDataType(layer.GetInputSlot(0).GetConnection()->GetTensorInfo(),
242  dataType);
243  const TensorInfo& output = OverrideDataType(layer.GetOutputSlot(0).GetTensorInfo(), dataType);
244  ARMNN_ASSERT(cLayer->m_Weight.get() != nullptr);
245 
246  const DepthwiseConvolution2dDescriptor& descriptor = cLayer->GetParameters();
247 
248  // Construct optional biases object based on the value of m_BiasEnabled
249  Optional<TensorInfo> biases;
250  if (descriptor.m_BiasEnabled)
251  {
252  biases =
253  OverrideDataType(cLayer->m_Bias->GetTensorInfo(), GetBiasTypeFromWeightsType(dataType));
254  }
255 
256  result = layerSupportObject->IsDepthwiseConvolutionSupported(
257  input,
258  output,
259  descriptor,
260  OverrideDataType(cLayer->m_Weight->GetTensorInfo(), dataType),
261  biases,
262  reason);
263  break;
264  }
266  {
267  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
268  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
269 
270  result = layerSupportObject->IsDequantizeSupported(input,
271  OverrideDataType(output, dataType),
272  reason);
273  break;
274  }
276  {
277  auto cLayer = PolymorphicDowncast<const DetectionPostProcessLayer*>(&layer);
278  const TensorInfo& boxEncodings = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
279  const TensorInfo& scores = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
280  const TensorInfo& anchors = cLayer->m_Anchors->GetTensorInfo();
281 
282  const TensorInfo& detectionBoxes = layer.GetOutputSlot(0).GetTensorInfo();
283  const TensorInfo& detectionClasses = layer.GetOutputSlot(1).GetTensorInfo();
284  const TensorInfo& detectionScores = layer.GetOutputSlot(2).GetTensorInfo();
285  const TensorInfo& numDetections = layer.GetOutputSlot(3).GetTensorInfo();
286 
287  const DetectionPostProcessDescriptor& descriptor = cLayer->GetParameters();
288  result = layerSupportObject->IsDetectionPostProcessSupported(boxEncodings,
289  scores,
290  anchors,
291  detectionBoxes,
292  detectionClasses,
293  detectionScores,
294  numDetections,
295  descriptor,
296  reason);
297  break;
298  }
300  {
301  auto cLayer = PolymorphicDowncast<const ElementwiseUnaryLayer*>(&layer);
302 
303  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
304  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
305 
306  result = layerSupportObject->IsElementwiseUnarySupported(OverrideDataType(input, dataType),
307  OverrideDataType(output, dataType),
308  cLayer->GetParameters(),
309  reason);
310  break;
311  }
312  case LayerType::Fill:
313  {
314  auto cLayer = PolymorphicDowncast<const FillLayer*>(&layer);
315  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
316  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
317  const FillDescriptor& descriptor = cLayer->GetParameters();
318 
319  result = layerSupportObject->IsFillSupported(
320  OverrideDataType(input, dataType),
321  OverrideDataType(output, dataType),
322  descriptor,
323  reason);
324  break;
325  }
327  {
328  auto cLayer = PolymorphicDowncast<const FakeQuantizationLayer*>(&layer);
329  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
330  result = layerSupportObject->IsFakeQuantizationSupported(OverrideDataType(input, dataType),
331  cLayer->GetParameters(),
332  reason);
333  break;
334  }
335  case LayerType::Floor:
336  {
337  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
338  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
339  result = layerSupportObject->IsFloorSupported(OverrideDataType(input, dataType),
340  OverrideDataType(output, dataType),
341  reason);
342  break;
343  }
345  {
346  auto cLayer = PolymorphicDowncast<const FullyConnectedLayer*>(&layer);
347  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
348  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
349  ARMNN_ASSERT(cLayer->m_Weight.get() != nullptr);
350 
351  TensorInfo biasInfo;
352  const TensorInfo * biasInfoPtr = nullptr;
353  static const TensorInfo dummyBFloat16Bias(TensorShape({1,1,1,1}), DataType::BFloat16);
354  static const TensorInfo dummyFloat16Bias(TensorShape({1,1,1,1}), DataType::Float16);
355  static const TensorInfo dummyFloat32Bias(TensorShape({1,1,1,1}), DataType::Float32);
356  static const TensorInfo dummyQA8Bias(TensorShape({1,1,1,1}), DataType::Signed32);
357 
358  const FullyConnectedDescriptor& descriptor = cLayer->GetParameters();
359  if (descriptor.m_BiasEnabled)
360  {
361  ARMNN_ASSERT(cLayer->m_Bias.get() != nullptr);
362  biasInfo = OverrideDataType(cLayer->m_Bias->GetTensorInfo(), GetBiasTypeFromWeightsType(dataType));
363  biasInfoPtr = &biasInfo;
364  }
365  else
366  {
367  // If biases are not enabled pass a dummy tensorinfo for the validation
368  switch(input.GetDataType())
369  {
370  case DataType::BFloat16:
371  {
372  biasInfoPtr = &dummyBFloat16Bias;
373  break;
374  }
375  case DataType::Float16:
376  {
377  biasInfoPtr = &dummyFloat16Bias;
378  break;
379  }
380  case DataType::Float32:
381  {
382  biasInfoPtr = &dummyFloat32Bias;
383  break;
384  }
385  case DataType::QAsymmU8:
386  case DataType::QAsymmS8:
387  case DataType::QSymmS8:
388  case DataType::QSymmS16:
389  {
390  biasInfoPtr = &dummyQA8Bias;
391  break;
392  }
393  default:
394  {
395  ARMNN_ASSERT_MSG(false, "Unexpected bias type");
396  }
397  }
398  }
399 
400  result = layerSupportObject->IsFullyConnectedSupported(
401  OverrideDataType(input, dataType),
402  OverrideDataType(output, dataType),
403  OverrideDataType(cLayer->m_Weight->GetTensorInfo(), dataType),
404  *biasInfoPtr,
405  descriptor,
406  reason);
407  break;
408  }
409  case LayerType::Gather:
410  {
411  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
412  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
413  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
414  auto cLayer = PolymorphicDowncast<const GatherLayer*>(&layer);
415  const GatherDescriptor& descriptor = cLayer->GetParameters();
416  result = layerSupportObject->IsGatherSupported(OverrideDataType(input0, dataType),
417  input1,
418  OverrideDataType(output, dataType),
419  descriptor,
420  reason);
421  break;
422  }
423  case LayerType::Input:
424  {
425  const TensorInfo& input = layer.GetOutputSlot(0).GetTensorInfo();
426  result = layerSupportObject->IsInputSupported(OverrideDataType(input, dataType), reason);
427  break;
428  }
430  {
431  auto cLayer = PolymorphicDowncast<const InstanceNormalizationLayer*>(&layer);
432  const InstanceNormalizationDescriptor& descriptor = cLayer->GetParameters();
433 
434  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
435  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
436 
437  result = layerSupportObject->IsInstanceNormalizationSupported(
438  OverrideDataType(input, dataType),
439  OverrideDataType(output, dataType),
440  descriptor,
441  reason);
442  break;
443  }
445  {
446  auto cLayer = PolymorphicDowncast<const L2NormalizationLayer*>(&layer);
447  const L2NormalizationDescriptor& descriptor = cLayer->GetParameters();
448 
449  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
450  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
451 
452  result = layerSupportObject->IsL2NormalizationSupported(
453  OverrideDataType(input, dataType),
454  OverrideDataType(output, dataType),
455  descriptor,
456  reason);
457  break;
458  }
460  {
461  auto cLayer = PolymorphicDowncast<const LogSoftmaxLayer*>(&layer);
462 
463  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
464  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
465 
466  result = layerSupportObject->IsLogSoftmaxSupported(OverrideDataType(input, dataType),
467  OverrideDataType(output, dataType),
468  cLayer->GetParameters(),
469  reason);
470  break;
471  }
472  case LayerType::Lstm:
473  {
474  auto cLayer = PolymorphicDowncast<const LstmLayer*>(&layer);
475  const LstmDescriptor& descriptor = cLayer->GetParameters();
476 
477  // All inputs.
478  const TensorInfo& input = OverrideDataType(layer.GetInputSlot(0).GetConnection()->GetTensorInfo(),
479  dataType);
480  const TensorInfo& outputStateIn = OverrideDataType(layer.GetInputSlot(1).GetConnection()->GetTensorInfo(),
481  dataType);
482  const TensorInfo& cellStateIn = OverrideDataType(layer.GetInputSlot(2).GetConnection()->GetTensorInfo(),
483  dataType);
484  // All outputs
485  const TensorInfo& scratchBuffer = OverrideDataType(layer.GetOutputSlot(0).GetTensorInfo(), dataType);
486  const TensorInfo& outputStateOut = OverrideDataType(layer.GetOutputSlot(1).GetTensorInfo(), dataType);
487  const TensorInfo& cellStateOut = OverrideDataType(layer.GetOutputSlot(2).GetTensorInfo(), dataType);
488  const TensorInfo& output = OverrideDataType(layer.GetOutputSlot(3).GetTensorInfo(), dataType);
489 
490  // Basic parameters
491  const TensorInfo& inputToForgetWeights
492  = OverrideDataType(cLayer->m_BasicParameters.m_InputToForgetWeights->GetTensorInfo(), dataType);
493  const TensorInfo& inputToCellWeights
494  = OverrideDataType(cLayer->m_BasicParameters.m_InputToCellWeights->GetTensorInfo(), dataType);
495  const TensorInfo& inputToOutputWeights
496  = OverrideDataType(cLayer->m_BasicParameters.m_InputToOutputWeights->GetTensorInfo(), dataType);
497  const TensorInfo& recurrentToForgetWeights
498  = OverrideDataType(cLayer->m_BasicParameters.m_RecurrentToForgetWeights->GetTensorInfo(), dataType);
499  const TensorInfo& recurrentToCellWeights
500  = OverrideDataType(cLayer->m_BasicParameters.m_RecurrentToCellWeights->GetTensorInfo(), dataType);
501  const TensorInfo& recurrentToOutputWeights
502  = OverrideDataType(cLayer->m_BasicParameters.m_RecurrentToOutputWeights->GetTensorInfo(), dataType);
503  const TensorInfo& forgetGateBias
504  = OverrideDataType(cLayer->m_BasicParameters.m_ForgetGateBias->GetTensorInfo(), dataType);
505  const TensorInfo& cellBias
506  = OverrideDataType(cLayer->m_BasicParameters.m_CellBias->GetTensorInfo(), dataType);
507  const TensorInfo& outputGateBias
508  = OverrideDataType(cLayer->m_BasicParameters.m_OutputGateBias->GetTensorInfo(), dataType);
509 
510  LstmInputParamsInfo paramsInfo;
511 
512  paramsInfo.m_InputToForgetWeights = &inputToForgetWeights;
513  paramsInfo.m_InputToCellWeights = &inputToCellWeights;
514  paramsInfo.m_InputToOutputWeights = &inputToOutputWeights;
515  paramsInfo.m_RecurrentToForgetWeights = &recurrentToForgetWeights;
516  paramsInfo.m_RecurrentToCellWeights = &recurrentToCellWeights;
517  paramsInfo.m_RecurrentToOutputWeights = &recurrentToOutputWeights;
518  paramsInfo.m_ForgetGateBias = &forgetGateBias;
519  paramsInfo.m_CellBias = &cellBias;
520  paramsInfo.m_OutputGateBias = &outputGateBias;
521 
522 
523  // Optional parameters
524  TensorInfo optInputToInputWeights;
525  TensorInfo optRecurrentToInputWeights;
526  TensorInfo optCellToInputWeights;
527  TensorInfo optInputGateBias;
528  TensorInfo optProjectionWeights;
529  TensorInfo optProjectionBias;
530  TensorInfo optCellToForgetWeights;
531  TensorInfo optCellToOutputWeights;
532  TensorInfo optInputLayerNormWeights;
533  TensorInfo optForgetLayerNormWeights;
534  TensorInfo optCellLayerNormWeights;
535  TensorInfo optOutputLayerNormWeights;
536 
537  if(!descriptor.m_CifgEnabled)
538  {
539  optInputToInputWeights =
540  OverrideDataType(cLayer->m_CifgParameters.m_InputToInputWeights->GetTensorInfo(), dataType);
541  paramsInfo.m_InputToInputWeights = &optInputToInputWeights;
542 
543  optRecurrentToInputWeights =
544  OverrideDataType(cLayer->m_CifgParameters.m_RecurrentToInputWeights->GetTensorInfo(), dataType);
545  paramsInfo.m_RecurrentToInputWeights = &optRecurrentToInputWeights;
546  optInputGateBias =
547  OverrideDataType(cLayer->m_CifgParameters.m_InputGateBias->GetTensorInfo(), dataType);
548  paramsInfo.m_InputGateBias = &optInputGateBias;
549  }
550 
551  if(descriptor.m_ProjectionEnabled)
552  {
553  optProjectionWeights =
554  OverrideDataType(cLayer->m_ProjectionParameters.m_ProjectionWeights->GetTensorInfo(), dataType);
555  paramsInfo.m_ProjectionWeights = &optProjectionWeights;
556  if (cLayer->m_ProjectionParameters.m_ProjectionBias != nullptr)
557  {
558  optProjectionBias =
559  OverrideDataType(cLayer->m_ProjectionParameters.m_ProjectionBias->GetTensorInfo(), dataType);
560  paramsInfo.m_ProjectionBias = &optProjectionBias;
561  }
562  }
563 
564  if(descriptor.m_PeepholeEnabled)
565  {
566  if(!descriptor.m_CifgEnabled)
567  {
568  optCellToInputWeights =
569  OverrideDataType(cLayer->m_PeepholeParameters.m_CellToInputWeights->GetTensorInfo(),
570  dataType);
571  paramsInfo.m_CellToInputWeights = &optCellToInputWeights;
572  }
573  optCellToForgetWeights =
574  OverrideDataType(cLayer->m_PeepholeParameters.m_CellToForgetWeights->GetTensorInfo(), dataType);
575  paramsInfo.m_CellToForgetWeights = &optCellToForgetWeights;
576  optCellToOutputWeights =
577  OverrideDataType(cLayer->m_PeepholeParameters.m_CellToOutputWeights->GetTensorInfo(), dataType);
578  paramsInfo.m_CellToOutputWeights = &optCellToOutputWeights;
579  }
580 
581  if(descriptor.m_LayerNormEnabled)
582  {
583  if (!descriptor.m_CifgEnabled)
584  {
585  optInputLayerNormWeights = OverrideDataType(
586  cLayer->m_LayerNormParameters.m_InputLayerNormWeights->GetTensorInfo(), dataType);
587  paramsInfo.m_InputLayerNormWeights = &optInputLayerNormWeights;
588  }
589 
590  optForgetLayerNormWeights = OverrideDataType(
591  cLayer->m_LayerNormParameters.m_ForgetLayerNormWeights->GetTensorInfo(), dataType);
592  paramsInfo.m_ForgetLayerNormWeights = &optForgetLayerNormWeights;
593 
594  optCellLayerNormWeights = OverrideDataType(
595  cLayer->m_LayerNormParameters.m_CellLayerNormWeights->GetTensorInfo(), dataType);
596  paramsInfo.m_CellLayerNormWeights = &optCellLayerNormWeights;
597 
598  optOutputLayerNormWeights = OverrideDataType(
599  cLayer->m_LayerNormParameters.m_OutputLayerNormWeights->GetTensorInfo(), dataType);
600  paramsInfo.m_OutputLayerNormWeights = &optOutputLayerNormWeights;
601  }
602 
603  result = layerSupportObject->IsLstmSupported(
604  input,
605  outputStateIn,
606  cellStateIn,
607  scratchBuffer,
608  outputStateOut,
609  cellStateOut,
610  output,
611  descriptor,
612  paramsInfo,
613  reason);
614  break;
615  }
616  case LayerType::Maximum:
617  {
618  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
619  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
620  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
621 
622  result = layerSupportObject->IsMaximumSupported(OverrideDataType(input0, dataType),
623  OverrideDataType(input1, dataType),
624  OverrideDataType(output, dataType),
625  reason);
626  break;
627  }
628  case LayerType::MemCopy:
629  {
630  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
631  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
632 
633  result = layerSupportObject->IsMemCopySupported(OverrideDataType(input, dataType),
634  OverrideDataType(output, dataType),
635  reason);
636  break;
637  }
639  {
640  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
641  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
642 
643  result = layerSupportObject->IsMemImportSupported(OverrideDataType(input, dataType),
644  OverrideDataType(output, dataType),
645  reason);
646  break;
647  }
648  case LayerType::Merge:
649  {
650  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
651  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
652  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
653 
654  result = layerSupportObject->IsMergeSupported(OverrideDataType(input0, dataType),
655  OverrideDataType(input1, dataType),
656  OverrideDataType(output, dataType),
657  reason);
658  break;
659  }
660  case LayerType::Concat:
661  {
662  auto cLayer = PolymorphicDowncast<const ConcatLayer*>(&layer);
663 
664  // Get vector of all inputs.
665  auto getTensorInfo = [&dataType](const InputSlot& slot)
666  {
667  return OverrideDataType(slot.GetConnectedOutputSlot()->GetTensorInfo(), dataType);
668  };
669  auto beginI = boost::make_transform_iterator(layer.GetInputSlots().begin(), getTensorInfo);
670  auto endI = boost::make_transform_iterator(layer.GetInputSlots().end(), getTensorInfo);
671  std::vector<TensorInfo> inputs(beginI, endI);
672 
673  auto getTensorInfoPtr = [](const TensorInfo& info)
674  {
675  return &info;
676  };
677  auto beginPtr = boost::make_transform_iterator(inputs.begin(), getTensorInfoPtr);
678  auto endPtr = boost::make_transform_iterator(inputs.end(), getTensorInfoPtr);
679  std::vector<const TensorInfo*> inputPtrs(beginPtr, endPtr);
680 
681  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
682 
683  result = layerSupportObject->IsConcatSupported(inputPtrs, output, cLayer->GetParameters(), reason);
684 
685 
686  break;
687  }
689  {
690  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
691  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
692  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
693  result = layerSupportObject->IsMultiplicationSupported(
694  OverrideDataType(input0, dataType),
695  OverrideDataType(input1, dataType),
696  OverrideDataType(output, dataType),
697  reason);
698  break;
699  }
701  {
702  auto cLayer = PolymorphicDowncast<const NormalizationLayer*>(&layer);
703  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
704  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
705  result = layerSupportObject->IsNormalizationSupported(OverrideDataType(input, dataType),
706  OverrideDataType(output, dataType),
707  cLayer->GetParameters(),
708  reason);
709  break;
710  }
711  case LayerType::Output:
712  {
713  const TensorInfo& output = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
714  result = layerSupportObject->IsOutputSupported(OverrideDataType(output, dataType), reason);
715  break;
716  }
717  case LayerType::Permute:
718  {
719  auto cLayer = PolymorphicDowncast<const PermuteLayer*>(&layer);
720  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
721  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
722  result = layerSupportObject->IsPermuteSupported(OverrideDataType(input, dataType),
723  OverrideDataType(output, dataType),
724  cLayer->GetParameters(),
725  reason);
726  break;
727  }
728  case LayerType::Pad:
729  {
730  auto cLayer = PolymorphicDowncast<const PadLayer*>(&layer);
731  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
732  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
733  result = layerSupportObject->IsPadSupported(
734  OverrideDataType(input, dataType),
735  OverrideDataType(output, dataType),
736  cLayer->GetParameters(),
737  reason);
738  break;
739  }
741  {
742  auto cLayer = PolymorphicDowncast<const Pooling2dLayer*>(&layer);
743  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
744  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
745  result = layerSupportObject->IsPooling2dSupported(OverrideDataType(input, dataType),
746  OverrideDataType(output, dataType),
747  cLayer->GetParameters(),
748  reason);
749  break;
750  }
752  {
753  auto cLayer = PolymorphicDowncast<const PreCompiledLayer*>(&layer);
754  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
755  result = layerSupportObject->IsPreCompiledSupported(OverrideDataType(input, dataType),
756  cLayer->GetParameters(),
757  reason);
758  break;
759  }
760  case LayerType::Quantize:
761  {
762  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
763  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
764  result = layerSupportObject->IsQuantizeSupported(input, output, reason);
765  break;
766  }
767  case LayerType::QLstm:
768  {
769  auto cLayer = PolymorphicDowncast<const QLstmLayer*>(&layer);
770  const QLstmDescriptor& descriptor = cLayer->GetParameters();
771 
772  // Inputs
773  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
774  const TensorInfo& previousOutputIn = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
775  const TensorInfo& previousCellStateIn = layer.GetInputSlot(2).GetConnection()->GetTensorInfo();
776 
777  // Outputs
778  const TensorInfo& outputStateOut = layer.GetOutputSlot(0).GetTensorInfo();
779  const TensorInfo& cellStateOut = layer.GetOutputSlot(1).GetTensorInfo();
780  const TensorInfo& output = layer.GetOutputSlot(2).GetTensorInfo();
781 
782  // Lstm parameters
783  LstmInputParamsInfo paramsInfo;
784 
785  // Basic parameters
786  paramsInfo.m_InputToForgetWeights = &cLayer->m_BasicParameters.m_InputToForgetWeights->GetTensorInfo();
787  paramsInfo.m_InputToCellWeights = &cLayer->m_BasicParameters.m_InputToCellWeights->GetTensorInfo();
788  paramsInfo.m_InputToOutputWeights = &cLayer->m_BasicParameters.m_InputToOutputWeights->GetTensorInfo();
789 
790  paramsInfo.m_RecurrentToForgetWeights =
791  &cLayer->m_BasicParameters.m_RecurrentToForgetWeights->GetTensorInfo();
792  paramsInfo.m_RecurrentToCellWeights =
793  &cLayer->m_BasicParameters.m_RecurrentToCellWeights->GetTensorInfo();
794  paramsInfo.m_RecurrentToOutputWeights =
795  &cLayer->m_BasicParameters.m_RecurrentToOutputWeights->GetTensorInfo();
796 
797  paramsInfo.m_ForgetGateBias = &cLayer->m_BasicParameters.m_ForgetGateBias->GetTensorInfo();
798  paramsInfo.m_CellBias = &cLayer->m_BasicParameters.m_CellBias->GetTensorInfo();
799  paramsInfo.m_OutputGateBias = &cLayer->m_BasicParameters.m_OutputGateBias->GetTensorInfo();
800 
801  if(!descriptor.m_CifgEnabled)
802  {
803  paramsInfo.m_InputToInputWeights = &cLayer->m_CifgParameters.m_InputToInputWeights->GetTensorInfo();
804  paramsInfo.m_RecurrentToInputWeights =
805  &cLayer->m_CifgParameters.m_RecurrentToInputWeights->GetTensorInfo();
806  paramsInfo.m_InputGateBias = &cLayer->m_CifgParameters.m_InputGateBias->GetTensorInfo();
807  }
808 
809  if(descriptor.m_ProjectionEnabled)
810  {
811  paramsInfo.m_ProjectionWeights = &cLayer->m_ProjectionParameters.m_ProjectionWeights->GetTensorInfo();
812 
813  // Projection bias is optional even if projection is enabled
814  if (cLayer->m_ProjectionParameters.m_ProjectionBias != nullptr)
815  {
816  paramsInfo.m_ProjectionBias = &cLayer->m_ProjectionParameters.m_ProjectionBias->GetTensorInfo();
817  }
818  }
819 
820  if(descriptor.m_PeepholeEnabled)
821  {
822  if (!descriptor.m_CifgEnabled)
823  {
824  paramsInfo.m_CellToInputWeights =
825  &cLayer->m_PeepholeParameters.m_CellToInputWeights->GetTensorInfo();
826  }
827 
828  paramsInfo.m_CellToForgetWeights =
829  &cLayer->m_PeepholeParameters.m_CellToForgetWeights->GetTensorInfo();
830  paramsInfo.m_CellToOutputWeights = &cLayer->m_PeepholeParameters.m_CellToOutputWeights->GetTensorInfo();
831  }
832 
833  if(descriptor.m_LayerNormEnabled)
834  {
835  if (!descriptor.m_CifgEnabled)
836  {
837  paramsInfo.m_InputLayerNormWeights =
838  &cLayer->m_LayerNormParameters.m_InputLayerNormWeights->GetTensorInfo();
839  }
840 
841  paramsInfo.m_ForgetLayerNormWeights =
842  &cLayer->m_LayerNormParameters.m_ForgetLayerNormWeights->GetTensorInfo();
843  paramsInfo.m_CellLayerNormWeights =
844  &cLayer->m_LayerNormParameters.m_CellLayerNormWeights->GetTensorInfo();
845  paramsInfo.m_OutputLayerNormWeights =
846  &cLayer->m_LayerNormParameters.m_OutputLayerNormWeights->GetTensorInfo();
847  }
848 
849  result = layerSupportObject->IsQLstmSupported(input,
850  previousOutputIn,
851  previousCellStateIn,
852  outputStateOut,
853  cellStateOut,
854  output,
855  descriptor,
856  paramsInfo,
857  reason);
858  break;
859  }
861  {
862  auto cLayer = PolymorphicDowncast<const QuantizedLstmLayer*>(&layer);
863 
864  // Inputs
865  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
866  const TensorInfo& previousCellStateIn = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
867  const TensorInfo& previousOutputIn = layer.GetInputSlot(2).GetConnection()->GetTensorInfo();
868 
869  // Outputs
870  const TensorInfo& cellStateOut = layer.GetOutputSlot(0).GetTensorInfo();
871  const TensorInfo& output = layer.GetOutputSlot(1).GetTensorInfo();
872 
873  // QuantizedLstm parameters
874  QuantizedLstmInputParamsInfo paramsInfo;
875 
876  paramsInfo.m_InputToInputWeights =
877  &cLayer->m_QuantizedLstmParameters.m_InputToInputWeights->GetTensorInfo();
878  paramsInfo.m_InputToForgetWeights =
879  &cLayer->m_QuantizedLstmParameters.m_InputToForgetWeights->GetTensorInfo();
880  paramsInfo.m_InputToCellWeights =
881  &cLayer->m_QuantizedLstmParameters.m_InputToCellWeights->GetTensorInfo();
882  paramsInfo.m_InputToOutputWeights =
883  &cLayer->m_QuantizedLstmParameters.m_InputToOutputWeights->GetTensorInfo();
884 
885  paramsInfo.m_RecurrentToInputWeights =
886  &cLayer->m_QuantizedLstmParameters.m_RecurrentToInputWeights->GetTensorInfo();
887  paramsInfo.m_RecurrentToForgetWeights =
888  &cLayer->m_QuantizedLstmParameters.m_RecurrentToForgetWeights->GetTensorInfo();
889  paramsInfo.m_RecurrentToCellWeights =
890  &cLayer->m_QuantizedLstmParameters.m_RecurrentToCellWeights->GetTensorInfo();
891  paramsInfo.m_RecurrentToOutputWeights =
892  &cLayer->m_QuantizedLstmParameters.m_RecurrentToOutputWeights->GetTensorInfo();
893 
894  paramsInfo.m_InputGateBias =
895  &cLayer->m_QuantizedLstmParameters.m_InputGateBias->GetTensorInfo();
896  paramsInfo.m_ForgetGateBias =
897  &cLayer->m_QuantizedLstmParameters.m_ForgetGateBias->GetTensorInfo();
898  paramsInfo.m_CellBias =
899  &cLayer->m_QuantizedLstmParameters.m_CellBias->GetTensorInfo();
900  paramsInfo.m_OutputGateBias =
901  &cLayer->m_QuantizedLstmParameters.m_OutputGateBias->GetTensorInfo();;
902 
903  result = layerSupportObject->IsQuantizedLstmSupported(input,
904  previousCellStateIn,
905  previousOutputIn,
906  cellStateOut,
907  output,
908  paramsInfo,
909  reason);
910  break;
911  }
912  case LayerType::Division:
913  {
914  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
915  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
916  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
917  result = layerSupportObject->IsDivisionSupported(
918  OverrideDataType(input0, dataType),
919  OverrideDataType(input1, dataType),
920  OverrideDataType(output, dataType),
921  reason);
922  break;
923  }
924  case LayerType::Rank:
925  {
926  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
927  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
928  result = layerSupportObject->IsRankSupported(OverrideDataType(input, dataType),
929  OverrideDataType(output, dataType),
930  reason);
931  break;
932  }
933  case LayerType::Reshape:
934  {
935  auto cLayer = PolymorphicDowncast<const ReshapeLayer*>(&layer);
936  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
937  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
938  result = layerSupportObject->IsReshapeSupported(OverrideDataType(input, dataType),
939  OverrideDataType(output, dataType),
940  cLayer->GetParameters(),
941  reason);
942  break;
943  }
944  case LayerType::Resize:
945  {
946  auto cLayer = PolymorphicDowncast<const ResizeLayer*>(&layer);
947  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
948  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
949  result = layerSupportObject->IsResizeSupported(OverrideDataType(input, dataType),
950  OverrideDataType(output, dataType),
951  cLayer->GetParameters(),
952  reason);
953  break;
954  }
955  case LayerType::Slice:
956  {
957  auto cLayer = PolymorphicDowncast<const SliceLayer*>(&layer);
958 
959  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
960  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
961 
962  result = layerSupportObject->IsSliceSupported(OverrideDataType(input, dataType),
963  OverrideDataType(output, dataType),
964  cLayer->GetParameters(),
965  reason);
966  break;
967  }
968  case LayerType::Softmax:
969  {
970  auto cLayer = PolymorphicDowncast<const SoftmaxLayer*>(&layer);
971  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
972  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
973  result = layerSupportObject->IsSoftmaxSupported(OverrideDataType(input, dataType),
974  OverrideDataType(output, dataType),
975  cLayer->GetParameters(),
976  reason);
977  break;
978  }
980  {
981  auto cLayer = PolymorphicDowncast<const SpaceToBatchNdLayer*>(&layer);
982  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
983  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
984  result = layerSupportObject->IsSpaceToBatchNdSupported(OverrideDataType(input, dataType),
985  OverrideDataType(output, dataType),
986  cLayer->GetParameters(),
987  reason);
988  break;
989  }
991  {
992  auto cLayer = PolymorphicDowncast<const SpaceToDepthLayer*>(&layer);
993 
994  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
995  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
996 
997  result = layerSupportObject->IsSpaceToDepthSupported(OverrideDataType(input, dataType),
998  OverrideDataType(output, dataType),
999  cLayer->GetParameters(),
1000  reason);
1001  break;
1002  }
1003  case LayerType::Splitter:
1004  {
1005  auto cLayer = PolymorphicDowncast<const SplitterLayer*>(&layer);
1006  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1007 
1008  // Get vector of all outputs.
1009  auto getTensorInfo = [&dataType](const OutputSlot& slot)
1010  {
1011  return OverrideDataType(slot.GetTensorInfo(), dataType);
1012  };
1013  auto beginI = boost::make_transform_iterator(layer.GetOutputSlots().begin(), getTensorInfo);
1014  auto endI = boost::make_transform_iterator(layer.GetOutputSlots().end(), getTensorInfo);
1015  std::vector<TensorInfo> outputs(beginI, endI);
1016 
1017  const std::vector<std::reference_wrapper<TensorInfo>> outputPtrs(outputs.begin(), outputs.end());
1018 
1019  result = layerSupportObject->IsSplitterSupported(OverrideDataType(input, dataType),
1020  outputPtrs,
1021  cLayer->GetParameters(),
1022  reason);
1023  break;
1024  }
1025  case LayerType::Stack:
1026  {
1027  auto cLayer = PolymorphicDowncast<const StackLayer*>(&layer);
1028 
1029  // Get vector of all inputs.
1030  auto getTensorInfo = [&dataType](const InputSlot& slot)
1031  {
1032  return OverrideDataType(slot.GetConnectedOutputSlot()->GetTensorInfo(), dataType);
1033  };
1034  auto beginI = boost::make_transform_iterator(layer.GetInputSlots().begin(), getTensorInfo);
1035  auto endI = boost::make_transform_iterator(layer.GetInputSlots().end(), getTensorInfo);
1036  std::vector<TensorInfo> inputs(beginI, endI);
1037 
1038  auto getTensorInfoPtr = [](const TensorInfo& info)
1039  {
1040  return &info;
1041  };
1042  auto beginPtr = boost::make_transform_iterator(inputs.begin(), getTensorInfoPtr);
1043  auto endPtr = boost::make_transform_iterator(inputs.end(), getTensorInfoPtr);
1044  std::vector<const TensorInfo*> inputPtrs(beginPtr, endPtr);
1045 
1046  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1047 
1048  result = layerSupportObject->IsStackSupported(inputPtrs, output, cLayer->GetParameters(), reason);
1049 
1050  break;
1051  }
1052  case LayerType::StandIn:
1053  {
1054  auto cLayer = PolymorphicDowncast<const StandInLayer*>(&layer);
1055 
1056  // Get vector of all inputs.
1057  auto getTensorInfoIn = [&dataType](const InputSlot& slot)
1058  {
1059  return OverrideDataType(slot.GetConnectedOutputSlot()->GetTensorInfo(), dataType);
1060  };
1061  auto getTensorInfoOut = [&dataType](const OutputSlot& slot)
1062  {
1063  return OverrideDataType(slot.GetTensorInfo(), dataType);
1064  };
1065  auto beginI = boost::make_transform_iterator(layer.GetInputSlots().begin(), getTensorInfoIn);
1066  auto endI = boost::make_transform_iterator(layer.GetInputSlots().end(), getTensorInfoIn);
1067  std::vector<TensorInfo> inputs(beginI, endI);
1068 
1069  auto beginO = boost::make_transform_iterator(layer.GetOutputSlots().begin(), getTensorInfoOut);
1070  auto endO = boost::make_transform_iterator(layer.GetOutputSlots().end(), getTensorInfoOut);
1071  std::vector<TensorInfo> outputs(beginO, endO);
1072 
1073 
1074  auto getTensorInfoPtr = [](const TensorInfo& info)
1075  {
1076  return &info;
1077  };
1078  auto beginPtrI = boost::make_transform_iterator(inputs.begin(), getTensorInfoPtr);
1079  auto endPtrI = boost::make_transform_iterator(inputs.end(), getTensorInfoPtr);
1080  std::vector<const TensorInfo*> inputPtrs(beginPtrI, endPtrI);
1081 
1082  auto beginPtrO = boost::make_transform_iterator(outputs.begin(), getTensorInfoPtr);
1083  auto endPtrO = boost::make_transform_iterator(outputs.end(), getTensorInfoPtr);
1084  std::vector<const TensorInfo*> outputPtrs(beginPtrO, endPtrO);
1085 
1086 
1087  result = layerSupportObject->IsStandInSupported(inputPtrs,
1088  outputPtrs,
1089  cLayer->GetParameters(),
1090  reason);
1091  break;
1092  }
1094  {
1095  auto cLayer = PolymorphicDowncast<const StridedSliceLayer*>(&layer);
1096  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1097  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1098  result = layerSupportObject->IsStridedSliceSupported(OverrideDataType(input, dataType),
1099  OverrideDataType(output, dataType),
1100  cLayer->GetParameters(),
1101  reason);
1102  break;
1103  }
1105  {
1106  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1107  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
1108  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1109  result = layerSupportObject->IsSubtractionSupported(
1110  OverrideDataType(input0, dataType),
1111  OverrideDataType(input1, dataType),
1112  OverrideDataType(output, dataType),
1113  reason);
1114  break;
1115  }
1116  case LayerType::Switch:
1117  {
1118  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1119  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
1120  const TensorInfo& output0 = layer.GetOutputSlot(0).GetTensorInfo();
1121  const TensorInfo& output1 = layer.GetOutputSlot(1).GetTensorInfo();
1122  result = layerSupportObject->IsSwitchSupported(OverrideDataType(input0, dataType),
1123  OverrideDataType(input1, dataType),
1124  OverrideDataType(output0, dataType),
1125  OverrideDataType(output1, dataType),
1126  reason);
1127  break;
1128  }
1129  case LayerType::Mean:
1130  {
1131  auto cLayer = PolymorphicDowncast<const MeanLayer*>(&layer);
1132  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1133  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1134  result = layerSupportObject->IsMeanSupported(
1135  OverrideDataType(input, dataType),
1136  OverrideDataType(output, dataType),
1137  cLayer->GetParameters(),
1138  reason);
1139  break;
1140  }
1141  case LayerType::Minimum:
1142  {
1143  const TensorInfo& input0 = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1144  const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
1145  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1146  result = layerSupportObject->IsMinimumSupported(OverrideDataType(input0, dataType),
1147  OverrideDataType(input1, dataType),
1148  OverrideDataType(output, dataType),
1149  reason);
1150  break;
1151  }
1152  case LayerType::Prelu:
1153  {
1154  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1155  const TensorInfo& alpha = layer.GetInputSlot(1).GetConnection()->GetTensorInfo();
1156  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1157  result = layerSupportObject->IsPreluSupported(OverrideDataType(input, dataType),
1158  OverrideDataType(alpha, dataType),
1159  OverrideDataType(output, dataType),
1160  reason);
1161  break;
1162  }
1163  case LayerType::Transpose:
1164  {
1165  auto cLayer = PolymorphicDowncast<const TransposeLayer*>(&layer);
1166  const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
1167  const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
1168  result = layerSupportObject->IsTransposeSupported(OverrideDataType(input, dataType),
1169  OverrideDataType(output, dataType),
1170  cLayer->GetParameters(),
1171  reason);
1172  break;
1173  }
1175  {
1176  auto cLayer = PolymorphicDowncast<const TransposeConvolution2dLayer*>(&layer);
1177 
1178  const TensorInfo input = OverrideDataType(layer.GetInputSlot(0).GetConnection()->GetTensorInfo(),
1179  dataType);
1180  const TensorInfo output = OverrideDataType(layer.GetOutputSlot(0).GetTensorInfo(), dataType);
1181 
1182  const TransposeConvolution2dDescriptor& descriptor = cLayer->GetParameters();
1183 
1184  Optional<TensorInfo> biases;
1185  if (descriptor.m_BiasEnabled)
1186  {
1187  ARMNN_ASSERT(cLayer->m_Bias.get() != nullptr);
1188  biases = OverrideDataType(cLayer->m_Bias->GetTensorInfo(),
1189  GetBiasTypeFromWeightsType(dataType));
1190  }
1191 
1192  ARMNN_ASSERT(cLayer->m_Weight.get() != nullptr);
1193  const TensorInfo weights = OverrideDataType(cLayer->m_Weight->GetTensorInfo(), dataType);
1194 
1195  result = layerSupportObject->IsTransposeConvolution2dSupported(input,
1196  output,
1197  descriptor,
1198  weights,
1199  biases,
1200  reason);
1201 
1202  break;
1203  }
1204  default:
1205  {
1206  ARMNN_ASSERT_MSG(false, "WorkloadFactory did not recognise type of layer.");
1207  reason.value() = "Unrecognised layer type";
1208  result = false;
1209  break;
1210  }
1211  }
1212  return result;
1213 }
BackendRegistry & BackendRegistryInstance()
std::vector< float > boxEncodings({ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f })
armnn::Optional< armnn::DataType > GetBiasTypeFromWeightsType(armnn::Optional< armnn::DataType > weightsType)
#define ARMNN_ASSERT_MSG(COND, MSG)
Definition: Assert.hpp:15
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
std::vector< float > scores({ 0.0f, 0.9f, 0.8f, 0.0f, 0.75f, 0.72f, 0.0f, 0.6f, 0.5f, 0.0f, 0.93f, 0.95f, 0.0f, 0.5f, 0.4f, 0.0f, 0.3f, 0.2f })
std::vector< float > anchors({ 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 100.5f, 1.0f, 1.0f })

◆ IsLayerSupported() [2/2]

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

Definition at line 1215 of file WorkloadFactory.cpp.

References IWorkloadFactory::IsLayerSupported().

1218 {
1219  auto layer = PolymorphicDowncast<const Layer*>(&connectableLayer);
1220  return IsLayerSupported(layer->GetBackendId(), connectableLayer, dataType, outReasonIfUnsupported);
1221 }
static bool IsLayerSupported(const BackendId &backendId, const IConnectableLayer &layer, Optional< DataType > dataType, std::string &outReasonIfUnsupported)

◆ SupportsSubTensors()


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