143 return std::make_unique<NeonActivationWorkload>(*activationQueueDescriptor,
info);
148 return std::make_unique<NeonAdditionWorkload>(*additionQueueDescriptor,
info);
153 return std::make_unique<NeonArgMinMaxWorkload>(*argMinMaxQueueDescriptor,
info);
158 bool isFastMathEnabled =
false;
159 if (m_ModelContextPtr)
161 if (m_ModelContextPtr.get() !=
nullptr)
166 isFastMathEnabled = modelOptions->IsFastMathEnabled();
170 return std::make_unique<NeonBatchMatMulWorkload>(*batchMatMulQueueDescriptor,
info, isFastMathEnabled);
174 auto batchNormalizationQueueDescriptor
176 return std::make_unique<NeonBatchNormalizationWorkload>(*batchNormalizationQueueDescriptor,
info);
180 auto batchToSpaceNdQueueDescriptor
182 return std::make_unique<NeonBatchToSpaceNdWorkload>(*batchToSpaceNdQueueDescriptor,
info);
187 return std::make_unique<NeonCastWorkload>(*castQueueDescriptor,
info);
192 return std::make_unique<NeonChannelShuffleWorkload>(*channelShuffleQueueDescriptor,
info);
197 return std::make_unique<NeonComparisonWorkload>(*comparisonQueueDescriptor,
info);
202 return std::make_unique<NeonConcatWorkload>(*concatQueueDescriptor,
info);
207 return std::make_unique<NeonConstantWorkload>(*constantQueueDescriptor,
info);
211 auto convertFp16ToFp32QueueDescriptor
213 return std::make_unique<NeonConvertFp16ToFp32Workload>(*convertFp16ToFp32QueueDescriptor,
info);
217 auto convertFp32ToFp16QueueDescriptor
219 return std::make_unique<NeonConvertFp32ToFp16Workload>(*convertFp32ToFp16QueueDescriptor,
info);
224 bool isFastMathEnabled =
false;
225 if (m_ModelContextPtr)
227 if (m_ModelContextPtr.get() !=
nullptr)
232 isFastMathEnabled = modelOptions->IsFastMathEnabled();
236 return std::make_unique<NeonConvolution2dWorkload>(*convolution2dQueueDescriptor,
238 m_MemoryManager->GetIntraLayerManager(),
244 bool isFastMathEnabled =
false;
245 if (m_ModelContextPtr)
247 if (m_ModelContextPtr.get() !=
nullptr)
252 isFastMathEnabled = modelOptions->IsFastMathEnabled();
256 return std::make_unique<NeonConvolution3dWorkload>(*convolution3dQueueDescriptor,
258 m_MemoryManager->GetIntraLayerManager(),
264 return MakeWorkloadHelper<NullWorkload, NullWorkload>(*debugQueueDescriptor,
info);
269 return std::make_unique<NeonDepthToSpaceWorkload>(*depthToSpaceQueueDescriptor,
info);
273 auto depthwiseConvolution2dQueueDescriptor
275 return std::make_unique<NeonDepthwiseConvolutionWorkload>(*depthwiseConvolution2dQueueDescriptor,
info);
280 return std::make_unique<NeonDequantizeWorkload>(*dequantizeQueueDescriptor,
info);
284 auto detectionPostProcessQueueDescriptor
286 return MakeWorkloadHelper<NullWorkload, NullWorkload>(*detectionPostProcessQueueDescriptor,
info);
291 return std::make_unique<NeonDivisionWorkload>(*divisionQueueDescriptor,
info);
295 auto elementwiseBinaryQueueDescriptor
297 switch (elementwiseBinaryQueueDescriptor->m_Parameters.m_Operation)
304 return std::make_unique<NeonAdditionWorkload>(additionQueueDescriptor,
info);
311 return std::make_unique<NeonDivisionWorkload>(divisionQueueDescriptor,
info);
318 return std::make_unique<NeonFloorDivWorkload>(floorDivQueueDescriptor,
info);
325 return std::make_unique<NeonMaximumWorkload>(maximumQueueDescriptor,
info);
332 return std::make_unique<NeonMinimumWorkload>(minimumQueueDescriptor,
info);
339 return std::make_unique<NeonMultiplicationWorkload>(multiplicationQueueDescriptor,
info);
344 return std::make_unique<NeonElementwiseBinaryWorkload>(*elementwiseBinaryQueueDescriptor,
info);
351 return std::make_unique<NeonSubtractionWorkload>(subtractionQueueDescriptor,
info);
359 auto elementwiseUnaryQueueDescriptor
361 switch(elementwiseUnaryQueueDescriptor->m_Parameters.m_Operation)
366 absQueueDescriptor.
m_Inputs = elementwiseUnaryQueueDescriptor->m_Inputs;
367 absQueueDescriptor.
m_Outputs = elementwiseUnaryQueueDescriptor->m_Outputs;
368 return std::make_unique<NeonAbsWorkload>(absQueueDescriptor,
info);
371 return std::make_unique<NeonExpWorkload>(*elementwiseUnaryQueueDescriptor,
info);
373 return std::make_unique<NeonLogicalNotWorkload>(*elementwiseUnaryQueueDescriptor,
info);
375 return std::make_unique<NeonLogWorkload>(*elementwiseUnaryQueueDescriptor,
info);
377 return std::make_unique<NeonNegWorkload>(*elementwiseUnaryQueueDescriptor,
info);
381 rsqrtQueueDescriptor.
m_Inputs = elementwiseUnaryQueueDescriptor->m_Inputs;
382 rsqrtQueueDescriptor.
m_Outputs = elementwiseUnaryQueueDescriptor->m_Outputs;
383 return std::make_unique<NeonRsqrtWorkload>(rsqrtQueueDescriptor,
info);
386 return std::make_unique<NeonSinWorkload>(*elementwiseUnaryQueueDescriptor,
info);
388 return std::make_unique<NeonSqrtWorkload>(*elementwiseUnaryQueueDescriptor,
info);
396 return std::make_unique<NeonFillWorkload>(*fillQueueDescriptor,
info);
401 return MakeWorkloadHelper<NeonFloorFloatWorkload, NullWorkload>(*floorQueueDescriptor,
info);
406 return std::make_unique<NeonFullyConnectedWorkload>(*fullyConnectedQueueDescriptor,
408 m_MemoryManager->GetIntraLayerManager());
413 return std::make_unique<NeonFusedWorkload>(*fusedQueueDescriptor,
info);
418 return std::make_unique<NeonGatherWorkload>(*gatherQueueDescriptor,
info);
423 return std::make_unique<NeonGatherNdWorkload>(*gatherNdQueueDescriptor,
info);
428 return std::make_unique<CopyMemGenericWorkload>(*inputQueueDescriptor,
info);
432 auto instanceNormalizationQueueDescriptor
434 return std::make_unique<NeonInstanceNormalizationWorkload>(*instanceNormalizationQueueDescriptor,
info);
438 auto l2NormalizationQueueDescriptor
440 return MakeWorkloadHelper<NeonL2NormalizationFloatWorkload, NullWorkload>
441 (*l2NormalizationQueueDescriptor,
info, m_MemoryManager->GetIntraLayerManager());
446 return std::make_unique<NeonLogSoftmaxWorkload>(*logSoftmaxQueueDescriptor,
448 m_MemoryManager->GetIntraLayerManager());
453 switch(logicalBinaryQueueDescriptor->m_Parameters.m_Operation)
456 return std::make_unique<NeonLogicalAndWorkload>(*logicalBinaryQueueDescriptor,
info);
458 return std::make_unique<NeonLogicalOrWorkload>(*logicalBinaryQueueDescriptor,
info);
466 return MakeWorkloadHelper<NeonLstmFloatWorkload, NullWorkload>(*lstmQueueDescriptor,
info);
471 return std::make_unique<NeonMaximumWorkload>(*maximumQueueDescriptor,
info);
476 return std::make_unique<NeonMeanWorkload>(*meanQueueDescriptor,
info);
481 if (memCopyQueueDescriptor->m_Inputs.empty() || !memCopyQueueDescriptor->m_Inputs[0])
485 return MakeWorkloadHelper<CopyMemGenericWorkload, CopyMemGenericWorkload>(*memCopyQueueDescriptor,
info);
490 if (memImportQueueDescriptor->m_Inputs.empty() || !memImportQueueDescriptor->m_Inputs[0])
494 return std::make_unique<ImportMemGenericWorkload>(*memImportQueueDescriptor,
info);
499 return std::make_unique<NeonMinimumWorkload>(*minimumQueueDescriptor,
info);
504 return std::make_unique<NeonMultiplicationWorkload>(*multiplicationQueueDescriptor,
info);
509 return MakeWorkloadHelper<NeonNormalizationFloatWorkload, NullWorkload>
510 (*normalizationQueueDescriptor,
info, m_MemoryManager->GetIntraLayerManager());
515 return std::make_unique<CopyMemGenericWorkload>(*outputQueueDescriptor,
info);
520 return std::make_unique<NeonPadWorkload>(*padQueueDescriptor,
info);
525 return std::make_unique<NeonPermuteWorkload>(*permuteQueueDescriptor,
info);
530 return std::make_unique<NeonPooling2dWorkload>(*pooling2dQueueDescriptor,
info);
535 return std::make_unique<NeonPooling3dWorkload>(*pooling3dQueueDescriptor,
info);
540 return MakeWorkloadHelper<NullWorkload, NullWorkload>(*preCompiledQueueDescriptor,
info);
545 return std::make_unique<NeonPreluWorkload>(*preluQueueDescriptor,
info);
550 return std::make_unique<NeonQLstmWorkload>(*qLstmQueueDescriptor,
info);
555 return std::make_unique<NeonQuantizeWorkload>(*quantizeQueueDescriptor,
info);
560 return std::make_unique<NeonQuantizedLstmWorkload>(*quantizedLstmQueueDescriptor,
info);
565 return std::make_unique<NeonRankWorkload>(*rankQueueDescriptor,
info);
570 return std::make_unique<NeonReduceWorkload>(*reduceQueueDescriptor,
info);
575 return std::make_unique<NeonReshapeWorkload>(*reshapeQueueDescriptor,
info);
580 return std::make_unique<NeonResizeWorkload>(*resizeQueueDescriptor,
info);
585 return std::make_unique<NeonReverseV2Workload>(*reverseV2QueueDescriptor,
info);
590 return std::make_unique<NeonSliceWorkload>(*sliceQueueDescriptor,
info);
595 return std::make_unique<NeonSoftmaxWorkload>(*softmaxQueueDescriptor,
597 m_MemoryManager->GetIntraLayerManager());
601 auto spaceToBatchNdQueueDescriptor
603 return std::make_unique<NeonSpaceToBatchNdWorkload>(*spaceToBatchNdQueueDescriptor,
info);
608 return std::make_unique<NeonSpaceToDepthWorkload>(*spaceToDepthQueueDescriptor,
info);
613 return std::make_unique<NeonSplitterWorkload>(*splitterQueueDescriptor,
info);
618 return std::make_unique<NeonStackWorkload>(*stackQueueDescriptor,
info);
623 return std::make_unique<NeonStridedSliceWorkload>(*stridedSliceQueueDescriptor,
info);
628 return std::make_unique<NeonSubtractionWorkload>(*subtractionQueueDescriptor,
info);
633 return std::make_unique<NeonTileWorkload>(*tileQueueDescriptor,
info);
638 return std::make_unique<NeonTransposeWorkload>(*transposeQueueDescriptor,
info);
642 auto transposeConvolution2dQueueDescriptor
644 return std::make_unique<NeonTransposeConvolution2dWorkload>(*transposeConvolution2dQueueDescriptor,
646 m_MemoryManager->GetIntraLayerManager());
658 return std::make_unique<NeonUnidirectionalSequenceLstmFloatWorkload>(*desc,
info);
662 return std::make_unique<NeonUnidirectionalSequenceLstmWorkload>(*desc,
info);