152 auto activationQueueDescriptor = PolymorphicDowncast<const ActivationQueueDescriptor*>(&descriptor);
153 return std::make_unique<RefActivationWorkload>(*activationQueueDescriptor,
info);
157 auto additionQueueDescriptor = PolymorphicDowncast<const AdditionQueueDescriptor*>(&descriptor);
161 return std::make_unique<RefAdditionWorkload<int32_t>>(*additionQueueDescriptor,
info);
165 return std::make_unique<RefAdditionWorkload<float>>(*additionQueueDescriptor,
info);
170 auto argMinMaxQueueDescriptor = PolymorphicDowncast<const ArgMinMaxQueueDescriptor*>(&descriptor);
171 return std::make_unique<RefArgMinMaxWorkload>(*argMinMaxQueueDescriptor,
info);
175 auto batchNormQueueDescriptor = PolymorphicDowncast<const BatchNormalizationQueueDescriptor*>(&descriptor);
176 return std::make_unique<RefBatchNormalizationWorkload>(*batchNormQueueDescriptor,
info);
180 auto batchToSpaceNdQueueDescriptor
181 = PolymorphicDowncast<const BatchToSpaceNdQueueDescriptor*>(&descriptor);
182 return std::make_unique<RefBatchToSpaceNdWorkload>(*batchToSpaceNdQueueDescriptor,
info);
186 auto castQueueDescriptor = PolymorphicDowncast<const CastQueueDescriptor*>(&descriptor);
187 return std::make_unique<RefCastWorkload>(*castQueueDescriptor,
info);
191 auto channelShuffleQueueDescriptor
192 = PolymorphicDowncast<const ChannelShuffleQueueDescriptor*>(&descriptor);
193 return std::make_unique<RefChannelShuffleWorkload>(*channelShuffleQueueDescriptor,
info);
197 auto comparisonQueueDescriptor = PolymorphicDowncast<const ComparisonQueueDescriptor*>(&descriptor);
198 return std::make_unique<RefComparisonWorkload>(*comparisonQueueDescriptor,
info);
202 auto concatQueueDescriptor = PolymorphicDowncast<const ConcatQueueDescriptor*>(&descriptor);
203 return std::make_unique<RefConcatWorkload>(*concatQueueDescriptor,
info);
207 auto constantQueueDescriptor = PolymorphicDowncast<const ConstantQueueDescriptor*>(&descriptor);
208 return std::make_unique<RefConstantWorkload>(*constantQueueDescriptor,
info);
212 auto convertBf16ToFp32QueueDescriptor
213 = PolymorphicDowncast<const ConvertBf16ToFp32QueueDescriptor*>(&descriptor);
214 return std::make_unique<RefConvertBf16ToFp32Workload>(*convertBf16ToFp32QueueDescriptor,
info);
218 auto convertFp16ToFp32QueueDescriptor
219 = PolymorphicDowncast<const ConvertFp16ToFp32QueueDescriptor*>(&descriptor);
220 return std::make_unique<RefConvertFp16ToFp32Workload>(*convertFp16ToFp32QueueDescriptor,
info);
224 auto convertFp32ToBf16QueueDescriptor
225 = PolymorphicDowncast<const ConvertFp32ToBf16QueueDescriptor*>(&descriptor);
226 return std::make_unique<RefConvertFp32ToBf16Workload>(*convertFp32ToBf16QueueDescriptor,
info);
230 auto convertFp32ToFp16QueueDescriptor
231 = PolymorphicDowncast<const ConvertFp32ToFp16QueueDescriptor*>(&descriptor);
232 return std::make_unique<RefConvertFp32ToFp16Workload>(*convertFp32ToFp16QueueDescriptor,
info);
236 auto convolution2dQueueDescriptor = PolymorphicDowncast<const Convolution2dQueueDescriptor*>(&descriptor);
237 return std::make_unique<RefConvolution2dWorkload>(*convolution2dQueueDescriptor,
info);
241 auto convolution3dQueueDescriptor = PolymorphicDowncast<const Convolution3dQueueDescriptor*>(&descriptor);
242 return std::make_unique<RefConvolution3dWorkload>(*convolution3dQueueDescriptor,
info);
246 auto debugQueueDescriptor = PolymorphicDowncast<const DebugQueueDescriptor*>(&descriptor);
249 return std::make_unique<RefDebugBFloat16Workload>(*debugQueueDescriptor,
info);
253 return std::make_unique<RefDebugFloat16Workload>(*debugQueueDescriptor,
info);
257 return std::make_unique<RefDebugQSymmS16Workload>(*debugQueueDescriptor,
info);
261 return std::make_unique<RefDebugQSymmS8Workload>(*debugQueueDescriptor,
info);
265 return std::make_unique<RefDebugQAsymmU8Workload>(*debugQueueDescriptor,
info);
269 return std::make_unique<RefDebugQAsymmS8Workload>(*debugQueueDescriptor,
info);
273 return std::make_unique<RefDebugSigned32Workload>(*debugQueueDescriptor,
info);
276 return MakeWorkload<RefDebugFloat32Workload, RefDebugQAsymmU8Workload>(*debugQueueDescriptor,
info);
280 auto depthToSpaceQueueDescriptor = PolymorphicDowncast<const DepthToSpaceQueueDescriptor*>(&descriptor);
281 return std::make_unique<RefDepthToSpaceWorkload>(*depthToSpaceQueueDescriptor,
info);
285 auto depthwiseConvolution2DQueueDescriptor
286 = PolymorphicDowncast<const DepthwiseConvolution2dQueueDescriptor*>(&descriptor);
287 return std::make_unique<RefDepthwiseConvolution2dWorkload>(*depthwiseConvolution2DQueueDescriptor,
info);
291 auto dequantizeQueueDescriptor = PolymorphicDowncast<const DequantizeQueueDescriptor*>(&descriptor);
292 return std::make_unique<RefDequantizeWorkload>(*dequantizeQueueDescriptor,
info);
296 auto detectionPostProcessQueueDescriptor
297 = PolymorphicDowncast<const DetectionPostProcessQueueDescriptor*>(&descriptor);
298 return std::make_unique<RefDetectionPostProcessWorkload>(*detectionPostProcessQueueDescriptor,
info);
302 auto divisionQueueDescriptor = PolymorphicDowncast<const DivisionQueueDescriptor*>(&descriptor);
305 return std::make_unique<RefDivisionWorkload<int32_t>>(*divisionQueueDescriptor,
info);
309 return std::make_unique<RefDivisionWorkload<float>>(*divisionQueueDescriptor,
info);
314 auto elementwiseUnaryQueueDescriptor
315 = PolymorphicDowncast<const ElementwiseUnaryQueueDescriptor*>(&descriptor);
318 return std::make_unique<RefLogicalUnaryWorkload>(*elementwiseUnaryQueueDescriptor,
info);
320 return std::make_unique<RefElementwiseUnaryWorkload>(*elementwiseUnaryQueueDescriptor,
info);
324 auto fakeQuantizationQueueDescriptor
325 = PolymorphicDowncast<const FakeQuantizationQueueDescriptor*>(&descriptor);
326 return std::make_unique<RefFakeQuantizationFloat32Workload>(*fakeQuantizationQueueDescriptor,
info);
330 auto fillQueueDescriptor = PolymorphicDowncast<const FillQueueDescriptor*>(&descriptor);
331 return std::make_unique<RefFillWorkload>(*fillQueueDescriptor,
info);
335 auto floorQueueDescriptor = PolymorphicDowncast<const FloorQueueDescriptor*>(&descriptor);
342 return std::make_unique<RefFloorWorkload>(*floorQueueDescriptor,
info);
347 auto fullyConnectedQueueDescriptor
348 = PolymorphicDowncast<const FullyConnectedQueueDescriptor*>(&descriptor);
349 return std::make_unique<RefFullyConnectedWorkload>(*fullyConnectedQueueDescriptor,
info);
353 auto gatherQueueDescriptor = PolymorphicDowncast<const GatherQueueDescriptor*>(&descriptor);
354 return std::make_unique<RefGatherWorkload>(*gatherQueueDescriptor,
info);
358 auto inputQueueDescriptor = PolymorphicDowncast<const InputQueueDescriptor*>(&descriptor);
359 if (
info.m_InputTensorInfos.empty() )
361 throw InvalidArgumentException(
"RefWorkloadFactory::CreateInput: Input cannot be zero length");
363 if (
info.m_OutputTensorInfos.empty())
365 throw InvalidArgumentException(
"RefWorkloadFactory::CreateInput: Output cannot be zero length");
368 if (
info.m_InputTensorInfos[0].GetNumBytes() !=
info.m_OutputTensorInfos[0].GetNumBytes())
370 throw InvalidArgumentException(
"RefWorkloadFactory::CreateInput: " 371 "data input and output differ in byte count.");
374 return std::make_unique<CopyMemGenericWorkload>(*inputQueueDescriptor,
info);
378 auto instanceNormalizationQueueDescriptor
379 = PolymorphicDowncast<const InstanceNormalizationQueueDescriptor*>(&descriptor);
380 return std::make_unique<RefInstanceNormalizationWorkload>(*instanceNormalizationQueueDescriptor,
info);
384 auto l2NormalizationQueueDescriptor
385 = PolymorphicDowncast<const L2NormalizationQueueDescriptor*>(&descriptor);
386 return std::make_unique<RefL2NormalizationWorkload>(*l2NormalizationQueueDescriptor,
info);
390 auto logicalBinaryQueueDescriptor = PolymorphicDowncast<const LogicalBinaryQueueDescriptor*>(&descriptor);
391 return std::make_unique<RefLogicalBinaryWorkload>(*logicalBinaryQueueDescriptor,
info);
395 auto logSoftmaxQueueDescriptor = PolymorphicDowncast<const LogSoftmaxQueueDescriptor*>(&descriptor);
396 return std::make_unique<RefLogSoftmaxWorkload>(*logSoftmaxQueueDescriptor,
info);
400 auto lstmQueueDescriptor = PolymorphicDowncast<const LstmQueueDescriptor*>(&descriptor);
401 return std::make_unique<RefLstmWorkload>(*lstmQueueDescriptor,
info);
405 auto maximumQueueDescriptor = PolymorphicDowncast<const MaximumQueueDescriptor*>(&descriptor);
408 return std::make_unique<RefMaximumWorkload<int32_t>>(*maximumQueueDescriptor,
info);
412 return std::make_unique<RefMaximumWorkload<float>>(*maximumQueueDescriptor,
info);
417 auto meanQueueDescriptor = PolymorphicDowncast<const MeanQueueDescriptor*>(&descriptor);
418 return std::make_unique<RefMeanWorkload>(*meanQueueDescriptor,
info);
422 auto memCopyQueueDescriptor = PolymorphicDowncast<const MemCopyQueueDescriptor*>(&descriptor);
423 if (descriptor.m_Inputs.empty())
425 throw InvalidArgumentException(
"RefWorkloadFactory: CreateMemCopy() expected an input tensor.");
427 return std::make_unique<CopyMemGenericWorkload>(*memCopyQueueDescriptor,
info);
431 auto memImportQueueDescriptor = PolymorphicDowncast<const MemImportQueueDescriptor*>(&descriptor);
432 if (descriptor.m_Inputs.empty())
434 throw InvalidArgumentException(
"RefWorkloadFactory: CreateMemImport() expected an input tensor.");
436 return std::make_unique<ImportMemGenericWorkload>(*memImportQueueDescriptor,
info);
440 auto minimumQueueDescriptor = PolymorphicDowncast<const MinimumQueueDescriptor*>(&descriptor);
443 return std::make_unique<RefMinimumWorkload<int32_t>>(*minimumQueueDescriptor,
info);
447 return std::make_unique<RefMinimumWorkload<float>>(*minimumQueueDescriptor,
info);
452 auto multiplicationQueueDescriptor
453 = PolymorphicDowncast<const MultiplicationQueueDescriptor*>(&descriptor);
456 return std::make_unique<RefMultiplicationWorkload<int32_t>>(*multiplicationQueueDescriptor,
info);
460 return std::make_unique<RefMultiplicationWorkload<float>>(*multiplicationQueueDescriptor,
info);
465 auto normalizationQueueDescriptor = PolymorphicDowncast<const NormalizationQueueDescriptor*>(&descriptor);
466 return std::make_unique<RefNormalizationWorkload>(*normalizationQueueDescriptor,
info);
470 auto outputQueueDescriptor = PolymorphicDowncast<const OutputQueueDescriptor*>(&descriptor);
471 if (
info.m_InputTensorInfos.empty() )
473 throw InvalidArgumentException(
"RefWorkloadFactory::CreateOutput: Input cannot be zero length");
475 if (
info.m_OutputTensorInfos.empty())
477 throw InvalidArgumentException(
"RefWorkloadFactory::CreateOutput: Output cannot be zero length");
479 if (
info.m_InputTensorInfos[0].GetNumBytes() !=
info.m_OutputTensorInfos[0].GetNumBytes())
481 throw InvalidArgumentException(
"RefWorkloadFactory::CreateOutput: data input and output " 482 "differ in byte count.");
485 return std::make_unique<CopyMemGenericWorkload>(*outputQueueDescriptor,
info);
489 auto padQueueDescriptor = PolymorphicDowncast<const PadQueueDescriptor*>(&descriptor);
490 return std::make_unique<RefPadWorkload>(*padQueueDescriptor,
info);
494 auto permuteQueueDescriptor = PolymorphicDowncast<const PermuteQueueDescriptor*>(&descriptor);
497 return std::make_unique<RefPermuteQSymm16Workload>(*permuteQueueDescriptor,
info);
501 return std::make_unique<RefPermuteBFloat16Workload>(*permuteQueueDescriptor,
info);
505 return std::make_unique<RefPermuteQAsymmS8Workload>(*permuteQueueDescriptor,
info);
508 NullWorkload, NullWorkload, NullWorkload>(*permuteQueueDescriptor,
info);
512 auto pooling2dQueueDescriptor = PolymorphicDowncast<const Pooling2dQueueDescriptor*>(&descriptor);
513 return std::make_unique<RefPooling2dWorkload>(*pooling2dQueueDescriptor,
info);
517 auto pooling3dQueueDescriptor = PolymorphicDowncast<const Pooling3dQueueDescriptor*>(&descriptor);
518 return std::make_unique<RefPooling3dWorkload>(*pooling3dQueueDescriptor,
info);
526 auto preluQueueDescriptor = PolymorphicDowncast<const PreluQueueDescriptor*>(&descriptor);
527 return std::make_unique<RefPreluWorkload>(*preluQueueDescriptor,
info);
531 auto qlstmQueueDescriptor = PolymorphicDowncast<const QLstmQueueDescriptor*>(&descriptor);
532 return std::make_unique<RefQLstmWorkload>(*qlstmQueueDescriptor,
info);
536 auto quantizeQueueDescriptor = PolymorphicDowncast<const QuantizeQueueDescriptor*>(&descriptor);
537 return std::make_unique<RefQuantizeWorkload>(*quantizeQueueDescriptor,
info);
541 auto rankQueueDescriptor = PolymorphicDowncast<const RankQueueDescriptor*>(&descriptor);
542 return std::make_unique<RefRankWorkload>(*rankQueueDescriptor,
info);
546 auto reduceQueueDescriptor = PolymorphicDowncast<const ReduceQueueDescriptor*>(&descriptor);
547 return std::make_unique<RefReduceWorkload>(*reduceQueueDescriptor,
info);
551 auto reshapeQueueDescriptor = PolymorphicDowncast<const ReshapeQueueDescriptor*>(&descriptor);
552 return std::make_unique<RefReshapeWorkload>(*reshapeQueueDescriptor,
info);
556 auto resizeQueueDescriptor = PolymorphicDowncast<const ResizeQueueDescriptor*>(&descriptor);
557 return std::make_unique<RefResizeWorkload>(*resizeQueueDescriptor,
info);
561 auto shapeQueueDescriptor = PolymorphicDowncast<const ShapeQueueDescriptor*>(&descriptor);
562 return std::make_unique<RefShapeWorkload>(*shapeQueueDescriptor,
info);
566 auto sliceQueueDescriptor = PolymorphicDowncast<const SliceQueueDescriptor*>(&descriptor);
567 return std::make_unique<RefSliceWorkload>(*sliceQueueDescriptor,
info);
571 auto softmaxQueueDescriptor = PolymorphicDowncast<const SoftmaxQueueDescriptor*>(&descriptor);
572 return std::make_unique<RefSoftmaxWorkload>(*softmaxQueueDescriptor,
info);
576 auto spaceToBatchNdQueueDescriptor
577 = PolymorphicDowncast<const SpaceToBatchNdQueueDescriptor*>(&descriptor);
578 return std::make_unique<RefSpaceToBatchNdWorkload>(*spaceToBatchNdQueueDescriptor,
info);
582 auto spaceToDepthQueueDescriptor = PolymorphicDowncast<const SpaceToDepthQueueDescriptor*>(&descriptor);
583 return std::make_unique<RefSpaceToDepthWorkload>(*spaceToDepthQueueDescriptor,
info);
587 auto splitterQueueDescriptor = PolymorphicDowncast<const SplitterQueueDescriptor*>(&descriptor);
588 return std::make_unique<RefSplitterWorkload>(*splitterQueueDescriptor,
info);
592 auto stackQueueDescriptor = PolymorphicDowncast<const StackQueueDescriptor*>(&descriptor);
593 return std::make_unique<RefStackWorkload>(*stackQueueDescriptor,
info);
597 auto stridedSliceQueueDescriptor = PolymorphicDowncast<const StridedSliceQueueDescriptor*>(&descriptor);
598 return std::make_unique<RefStridedSliceWorkload>(*stridedSliceQueueDescriptor,
info);
602 auto subtractionQueueDescriptor = PolymorphicDowncast<const SubtractionQueueDescriptor*>(&descriptor);
605 return std::make_unique<RefSubtractionWorkload<int32_t>>(*subtractionQueueDescriptor,
info);
609 return std::make_unique<RefSubtractionWorkload<float>>(*subtractionQueueDescriptor,
info);
614 auto transposeQueueDescriptor = PolymorphicDowncast<const TransposeQueueDescriptor*>(&descriptor);
617 return std::make_unique<RefTransposeQSymm16Workload>(*transposeQueueDescriptor,
info);
621 return std::make_unique<RefTransposeBFloat16Workload>(*transposeQueueDescriptor,
info);
625 return std::make_unique<RefTransposeQAsymmS8Workload>(*transposeQueueDescriptor,
info);
629 (*transposeQueueDescriptor,
info);
633 auto transposeConvolution2dQueueDescriptor
634 = PolymorphicDowncast<const TransposeConvolution2dQueueDescriptor*>(&descriptor);
635 return std::make_unique<RefTransposeConvolution2dWorkload>(*transposeConvolution2dQueueDescriptor,
info);
639 auto unidirectionalSequenceLstmQueueDescriptor
640 = PolymorphicDowncast<const UnidirectionalSequenceLstmQueueDescriptor*>(&descriptor);
641 return std::make_unique<RefUnidirectionalSequenceLstmWorkload>(*unidirectionalSequenceLstmQueueDescriptor,
constexpr bool IsQuantizedType()
RefPermuteWorkload< DataType::Float16 > RefPermuteFloat16Workload
RefTransposeWorkload< DataType::Float16 > RefTransposeFloat16Workload
bool IsQAsymmS8(const WorkloadInfo &info)
RefPermuteWorkload< DataType::Float32 > RefPermuteFloat32Workload
bool IsQAsymmU8(const WorkloadInfo &info)
bool IsQSymmS8(const WorkloadInfo &info)
bool IsBFloat16(const WorkloadInfo &info)
bool IsFloat16(const WorkloadInfo &info)
RefTransposeWorkload< DataType::Float32 > RefTransposeFloat32Workload
RefTransposeWorkload< DataType::QAsymmU8 > RefTransposeQAsymm8Workload
bool IsSigned32(const WorkloadInfo &info)
RefPermuteWorkload< DataType::QAsymmU8 > RefPermuteQAsymm8Workload
bool IsQSymmS16(const WorkloadInfo &info)