diff options
author | Cian McGriskin <cian.mcgriskin@arm.com> | 2023-08-01 14:04:09 +0100 |
---|---|---|
committer | Francis Murtagh <francis.murtagh@arm.com> | 2023-08-04 14:58:17 +0100 |
commit | 7894ef93ad568250afda12e1b67bc5bfa4c0b41c (patch) | |
tree | 980a6d139c13585d18587505f6fba8e7069952ac /src/backends/reference/RefWorkloadFactory.cpp | |
parent | 66277031d8fb9588b5a9f3436b6a5f06173668a8 (diff) | |
download | armnn-7894ef93ad568250afda12e1b67bc5bfa4c0b41c.tar.gz |
IVGCVSW-7635 Remove deprecated code due to be removed in 23.08 (WorkloadFactory)
* WorkloadFactory.hpp CreateXXXWorkload replaced with CreateWorkload
accepting LayerType for ABI stability.
* These effect ref neon cl and mock backends
* Also removed small deprecation comment in Optimization Views
* Fixed ABI Version Issue
Signed-off-by: Cian McGriskin <cian.mcgriskin@arm.com>
Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Change-Id: Id37af2f882fc9d12b8c779de6b714013af866028
Diffstat (limited to 'src/backends/reference/RefWorkloadFactory.cpp')
-rw-r--r-- | src/backends/reference/RefWorkloadFactory.cpp | 597 |
1 files changed, 25 insertions, 572 deletions
diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index 86a584452d..fa2082d4f2 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -3,15 +3,16 @@ // SPDX-License-Identifier: MIT // #include <Layer.hpp> -#include <armnn/backends/MemCopyWorkload.hpp> + #include <backendsCommon/MemImportWorkload.hpp> #include <backendsCommon/MakeWorkloadHelper.hpp> +#include <armnn/backends/MemCopyWorkload.hpp> #include <armnn/backends/TensorHandle.hpp> + #include "RefWorkloadFactory.hpp" #include "RefBackendId.hpp" -#include "workloads/RefWorkloads.hpp" #include "RefTensorHandle.hpp" - +#include "workloads/RefWorkloads.hpp" namespace armnn { @@ -25,7 +26,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::MakeWorkload(const QueueDescripto const WorkloadInfo& info) const { return MakeWorkloadHelper<NullWorkload, F32Workload, U8Workload, NullWorkload, NullWorkload, NullWorkload> - (descriptor, info); + (descriptor, info); } template <DataType ArmnnType> @@ -44,37 +45,30 @@ bool IsDataType(const WorkloadInfo& info) } return false; } - bool IsSigned32(const WorkloadInfo& info) { return IsDataType<DataType::Signed32>(info); } - bool IsBFloat16(const WorkloadInfo& info) { return IsDataType<DataType::BFloat16>(info); } - bool IsFloat16(const WorkloadInfo& info) { return IsDataType<DataType::Float16>(info); } - bool IsQSymmS16(const WorkloadInfo& info) { return IsDataType<DataType::QSymmS16>(info); } - bool IsQSymmS8(const WorkloadInfo& info) { return IsDataType<DataType::QSymmS8>(info); } - bool IsQAsymmS8(const WorkloadInfo& info) { return IsDataType<DataType::QAsymmS8>(info); } - bool IsQAsymmU8(const WorkloadInfo& info) { return IsDataType<DataType::QAsymmU8>(info); @@ -155,7 +149,6 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::Addition : { auto additionQueueDescriptor = PolymorphicDowncast<const AdditionQueueDescriptor*>(&descriptor); - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) { return std::make_unique<RefAdditionWorkload<int32_t>>(*additionQueueDescriptor, info); @@ -183,9 +176,9 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::BatchToSpaceNd : { auto batchToSpaceNdQueueDescriptor - = PolymorphicDowncast<const BatchToSpaceNdQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const BatchToSpaceNdQueueDescriptor*>(&descriptor); return std::make_unique<RefBatchToSpaceNdWorkload>(*batchToSpaceNdQueueDescriptor, info); - } + } case LayerType::Cast : { auto castQueueDescriptor = PolymorphicDowncast<const CastQueueDescriptor*>(&descriptor); @@ -194,7 +187,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::ChannelShuffle : { auto channelShuffleQueueDescriptor - = PolymorphicDowncast<const ChannelShuffleQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const ChannelShuffleQueueDescriptor*>(&descriptor); return std::make_unique<RefChannelShuffleWorkload>(*channelShuffleQueueDescriptor, info); } case LayerType::Comparison : @@ -215,13 +208,13 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::ConvertFp16ToFp32: { auto convertFp16ToFp32QueueDescriptor - = PolymorphicDowncast<const ConvertFp16ToFp32QueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const ConvertFp16ToFp32QueueDescriptor*>(&descriptor); return std::make_unique<RefConvertFp16ToFp32Workload>(*convertFp16ToFp32QueueDescriptor, info); } case LayerType::ConvertFp32ToFp16: { auto convertFp32ToFp16QueueDescriptor - = PolymorphicDowncast<const ConvertFp32ToFp16QueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const ConvertFp32ToFp16QueueDescriptor*>(&descriptor); return std::make_unique<RefConvertFp32ToFp16Workload>(*convertFp32ToFp16QueueDescriptor, info); } case LayerType::Convolution2d: @@ -265,7 +258,6 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, { return std::make_unique<RefDebugSigned32Workload>(*debugQueueDescriptor, info); } - return MakeWorkload<RefDebugFloat32Workload, RefDebugQAsymmU8Workload>(*debugQueueDescriptor, info); } case LayerType::DepthToSpace: @@ -276,7 +268,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::DepthwiseConvolution2d: { auto depthwiseConvolution2DQueueDescriptor - = PolymorphicDowncast<const DepthwiseConvolution2dQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const DepthwiseConvolution2dQueueDescriptor*>(&descriptor); return std::make_unique<RefDepthwiseConvolution2dWorkload>(*depthwiseConvolution2DQueueDescriptor, info); } case LayerType::Dequantize: @@ -287,7 +279,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::DetectionPostProcess: { auto detectionPostProcessQueueDescriptor - = PolymorphicDowncast<const DetectionPostProcessQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const DetectionPostProcessQueueDescriptor*>(&descriptor); return std::make_unique<RefDetectionPostProcessWorkload>(*detectionPostProcessQueueDescriptor, info); } case LayerType::Division: @@ -305,13 +297,13 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::ElementwiseBinary: { auto elementwiseBinaryQueueDescriptor - = PolymorphicDowncast<const ElementwiseBinaryQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const ElementwiseBinaryQueueDescriptor*>(&descriptor); return std::make_unique<RefElementwiseBinaryWorkload>(*elementwiseBinaryQueueDescriptor, info); } case LayerType::ElementwiseUnary: { auto elementwiseUnaryQueueDescriptor - = PolymorphicDowncast<const ElementwiseUnaryQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const ElementwiseUnaryQueueDescriptor*>(&descriptor); if ((*elementwiseUnaryQueueDescriptor).m_Parameters.m_Operation == UnaryOperation::LogicalNot) { return std::make_unique<RefLogicalUnaryWorkload>(*elementwiseUnaryQueueDescriptor, info); @@ -321,7 +313,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::FakeQuantization: { auto fakeQuantizationQueueDescriptor - = PolymorphicDowncast<const FakeQuantizationQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const FakeQuantizationQueueDescriptor*>(&descriptor); return std::make_unique<RefFakeQuantizationFloat32Workload>(*fakeQuantizationQueueDescriptor, info); } case LayerType::Fill: @@ -344,7 +336,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::FullyConnected: { auto fullyConnectedQueueDescriptor - = PolymorphicDowncast<const FullyConnectedQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const FullyConnectedQueueDescriptor*>(&descriptor); return std::make_unique<RefFullyConnectedWorkload>(*fullyConnectedQueueDescriptor, info); } case LayerType::Gather: @@ -368,25 +360,23 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, { throw InvalidArgumentException("RefWorkloadFactory::CreateInput: Output cannot be zero length"); } - if (info.m_InputTensorInfos[0].GetNumBytes() != info.m_OutputTensorInfos[0].GetNumBytes()) { throw InvalidArgumentException("RefWorkloadFactory::CreateInput: " "data input and output differ in byte count."); } - return std::make_unique<CopyMemGenericWorkload>(*inputQueueDescriptor, info); } case LayerType::InstanceNormalization: { auto instanceNormalizationQueueDescriptor - = PolymorphicDowncast<const InstanceNormalizationQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const InstanceNormalizationQueueDescriptor*>(&descriptor); return std::make_unique<RefInstanceNormalizationWorkload>(*instanceNormalizationQueueDescriptor, info); } case LayerType::L2Normalization: { auto l2NormalizationQueueDescriptor - = PolymorphicDowncast<const L2NormalizationQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const L2NormalizationQueueDescriptor*>(&descriptor); return std::make_unique<RefL2NormalizationWorkload>(*l2NormalizationQueueDescriptor, info); } case LayerType::LogicalBinary: @@ -454,7 +444,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::Multiplication: { auto multiplicationQueueDescriptor - = PolymorphicDowncast<const MultiplicationQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const MultiplicationQueueDescriptor*>(&descriptor); if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) { return std::make_unique<RefMultiplicationWorkload<int32_t>>(*multiplicationQueueDescriptor, info); @@ -485,7 +475,6 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, throw InvalidArgumentException("RefWorkloadFactory::CreateOutput: data input and output " "differ in byte count."); } - return std::make_unique<CopyMemGenericWorkload>(*outputQueueDescriptor, info); } case LayerType::Pad: @@ -509,7 +498,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, return std::make_unique<RefPermuteQAsymmS8Workload>(*permuteQueueDescriptor, info); } return MakeWorkloadHelper<RefPermuteFloat16Workload, RefPermuteFloat32Workload, RefPermuteQAsymm8Workload, - NullWorkload, NullWorkload, NullWorkload>(*permuteQueueDescriptor, info); + NullWorkload, NullWorkload, NullWorkload>(*permuteQueueDescriptor, info); } case LayerType::Pooling2d: { @@ -583,7 +572,7 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, case LayerType::SpaceToBatchNd: { auto spaceToBatchNdQueueDescriptor - = PolymorphicDowncast<const SpaceToBatchNdQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const SpaceToBatchNdQueueDescriptor*>(&descriptor); return std::make_unique<RefSpaceToBatchNdWorkload>(*spaceToBatchNdQueueDescriptor, info); } case LayerType::SpaceToDepth: @@ -639,19 +628,19 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, return std::make_unique<RefTransposeQAsymmS8Workload>(*transposeQueueDescriptor, info); } return MakeWorkloadHelper<RefTransposeFloat16Workload, RefTransposeFloat32Workload, - RefTransposeQAsymm8Workload, NullWorkload, NullWorkload, NullWorkload> - (*transposeQueueDescriptor, info); + RefTransposeQAsymm8Workload, NullWorkload, NullWorkload, NullWorkload> + (*transposeQueueDescriptor, info); } case LayerType::TransposeConvolution2d: { auto transposeConvolution2dQueueDescriptor - = PolymorphicDowncast<const TransposeConvolution2dQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const TransposeConvolution2dQueueDescriptor*>(&descriptor); return std::make_unique<RefTransposeConvolution2dWorkload>(*transposeConvolution2dQueueDescriptor, info); } case LayerType::UnidirectionalSequenceLstm: { auto unidirectionalSequenceLstmQueueDescriptor - = PolymorphicDowncast<const UnidirectionalSequenceLstmQueueDescriptor*>(&descriptor); + = PolymorphicDowncast<const UnidirectionalSequenceLstmQueueDescriptor*>(&descriptor); return std::make_unique<RefUnidirectionalSequenceLstmWorkload>(*unidirectionalSequenceLstmQueueDescriptor, info); } @@ -660,540 +649,4 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateWorkload(LayerType type, } } -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateActivation(const ActivationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefActivationWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) - { - return std::make_unique<RefAdditionWorkload<int32_t>>(descriptor, info); - } - else - { - return std::make_unique<RefAdditionWorkload<float>>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefArgMinMaxWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateBatchNormalization( - const BatchNormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefBatchNormalizationWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefBatchToSpaceNdWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateCast(const CastQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefCastWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateChannelShuffle(const ChannelShuffleQueueDescriptor &descriptor, - const WorkloadInfo &info) const -{ - return std::make_unique<RefChannelShuffleWorkload>(descriptor,info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateComparison(const ComparisonQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefComparisonWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConcat(const ConcatQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefConcatWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefConstantWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConvertFp16ToFp32( - const ConvertFp16ToFp32QueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefConvertFp16ToFp32Workload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConvertFp32ToFp16( - const ConvertFp32ToFp16QueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefConvertFp32ToFp16Workload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefConvolution2dWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConvolution3d(const Convolution3dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefConvolution3dWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDebug(const DebugQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (IsBFloat16(info)) - { - return std::make_unique<RefDebugBFloat16Workload>(descriptor, info); - } - if (IsFloat16(info)) - { - return std::make_unique<RefDebugFloat16Workload>(descriptor, info); - } - if (IsQSymmS16(info)) - { - return std::make_unique<RefDebugQSymmS16Workload>(descriptor, info); - } - if (IsQSymmS8(info)) - { - return std::make_unique<RefDebugQSymmS8Workload>(descriptor, info); - } - if (IsQAsymmU8(info)) - { - return std::make_unique<RefDebugQAsymmU8Workload>(descriptor, info); - } - if (IsQAsymmS8(info)) - { - return std::make_unique<RefDebugQAsymmS8Workload>(descriptor, info); - } - if (IsSigned32(info)) - { - return std::make_unique<RefDebugSigned32Workload>(descriptor, info); - } - - return MakeWorkload<RefDebugFloat32Workload, RefDebugQAsymmU8Workload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDepthToSpace(const DepthToSpaceQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefDepthToSpaceWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDepthwiseConvolution2d( - const DepthwiseConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefDepthwiseConvolution2dWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDequantize(const DequantizeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefDequantizeWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDetectionPostProcess( - const DetectionPostProcessQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefDetectionPostProcessWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDivision(const DivisionQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) - { - return std::make_unique<RefDivisionWorkload<int32_t>>(descriptor, info); - } - else - { - return std::make_unique<RefDivisionWorkload<float>>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (descriptor.m_Parameters.m_Operation == UnaryOperation::LogicalNot) - { - return std::make_unique<RefLogicalUnaryWorkload>(descriptor, info); - } - return std::make_unique<RefElementwiseUnaryWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateFakeQuantization(const FakeQuantizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return MakeWorkload<RefFakeQuantizationFloat32Workload, NullWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateFill(const FillQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefFillWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if(IsQuantizedType(info.m_InputTensorInfos[0].GetDataType())) - { - return nullptr; - } - else - { - return std::make_unique<RefFloorWorkload>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateFullyConnected( - const FullyConnectedQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefFullyConnectedWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateGather(const GatherQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefGatherWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateInput(const InputQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos.empty() ) - { - throw InvalidArgumentException("RefWorkloadFactory::CreateInput: Input cannot be zero length"); - } - if (info.m_OutputTensorInfos.empty()) - { - throw InvalidArgumentException("RefWorkloadFactory::CreateInput: Output cannot be zero length"); - } - - if (info.m_InputTensorInfos[0].GetNumBytes() != info.m_OutputTensorInfos[0].GetNumBytes()) - { - throw InvalidArgumentException("RefWorkloadFactory::CreateInput: data input and output differ in byte count."); - } - - return std::make_unique<CopyMemGenericWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateInstanceNormalization( - const InstanceNormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefInstanceNormalizationWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefL2NormalizationWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateLogicalBinary(const LogicalBinaryQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefLogicalBinaryWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateLogSoftmax(const LogSoftmaxQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefLogSoftmaxWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateLstm(const LstmQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefLstmWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateMaximum(const MaximumQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) - { - return std::make_unique<RefMaximumWorkload<int32_t>>(descriptor, info); - } - else - { - return std::make_unique<RefMaximumWorkload<float>>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateMean(const MeanQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefMeanWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateMemCopy(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (descriptor.m_Inputs.empty()) - { - throw InvalidArgumentException("RefWorkloadFactory: CreateMemCopy() expected an input tensor."); - } - return std::make_unique<CopyMemGenericWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateMemImport(const MemImportQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (descriptor.m_Inputs.empty()) - { - throw InvalidArgumentException("RefWorkloadFactory: CreateMemImport() expected an input tensor."); - } - return std::make_unique<ImportMemGenericWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateMinimum(const MinimumQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) - { - return std::make_unique<RefMinimumWorkload<int32_t>>(descriptor, info); - } - else - { - return std::make_unique<RefMinimumWorkload<float>>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateMultiplication(const MultiplicationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) - { - return std::make_unique<RefMultiplicationWorkload<int32_t>>(descriptor, info); - } - else - { - return std::make_unique<RefMultiplicationWorkload<float>>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateNormalization(const NormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefNormalizationWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateOutput(const OutputQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos.empty() ) - { - throw InvalidArgumentException("RefWorkloadFactory::CreateOutput: Input cannot be zero length"); - } - if (info.m_OutputTensorInfos.empty()) - { - throw InvalidArgumentException("RefWorkloadFactory::CreateOutput: Output cannot be zero length"); - } - if (info.m_InputTensorInfos[0].GetNumBytes() != info.m_OutputTensorInfos[0].GetNumBytes()) - { - throw InvalidArgumentException("RefWorkloadFactory::CreateOutput: data input and output differ in byte count."); - } - - return std::make_unique<CopyMemGenericWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefPadWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePermute(const PermuteQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (IsQSymmS16(info)) - { - return std::make_unique<RefPermuteQSymm16Workload>(descriptor, info); - } - else if (IsBFloat16(info)) - { - return std::make_unique<RefPermuteBFloat16Workload>(descriptor, info); - } - else if (IsQAsymmS8(info)) - { - return std::make_unique<RefPermuteQAsymmS8Workload>(descriptor, info); - } - return MakeWorkloadHelper<RefPermuteFloat16Workload, RefPermuteFloat32Workload, RefPermuteQAsymm8Workload, - NullWorkload, NullWorkload, NullWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefPooling2dWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePooling3d(const Pooling3dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefPooling3dWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePreCompiled(const PreCompiledQueueDescriptor& /*descriptor*/, - const WorkloadInfo& /*info*/) const -{ - return nullptr; -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePrelu(const PreluQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefPreluWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateQLstm(const QLstmQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefQLstmWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateQuantize(const QuantizeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefQuantizeWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateRank(const RankQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefRankWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateReduce(const ReduceQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefReduceWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefReshapeWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateResize(const ResizeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefResizeWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateShape(const ShapeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefShapeWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateSlice(const SliceQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefSliceWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefSoftmaxWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefSpaceToBatchNdWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefSpaceToDepthWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateSplitter(const SplitterQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefSplitterWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateStack(const StackQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefStackWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefStridedSliceWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateSubtraction(const SubtractionQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (info.m_InputTensorInfos[0].GetDataType() == armnn::DataType::Signed32) - { - return std::make_unique<RefSubtractionWorkload<int32_t>>(descriptor, info); - } - else - { - return std::make_unique<RefSubtractionWorkload<float>>(descriptor, info); - } -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateTranspose(const TransposeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - if (IsQSymmS16(info)) - { - return std::make_unique<RefTransposeQSymm16Workload>(descriptor, info); - } - else if (IsBFloat16(info)) - { - return std::make_unique<RefTransposeBFloat16Workload>(descriptor, info); - } - else if (IsQAsymmS8(info)) - { - return std::make_unique<RefTransposeQAsymmS8Workload>(descriptor, info); - } - return MakeWorkloadHelper<RefTransposeFloat16Workload, RefTransposeFloat32Workload, RefTransposeQAsymm8Workload, - NullWorkload, NullWorkload, NullWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateTransposeConvolution2d( - const TransposeConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefTransposeConvolution2dWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> RefWorkloadFactory::CreateUnidirectionalSequenceLstm( - const UnidirectionalSequenceLstmQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<RefUnidirectionalSequenceLstmWorkload>(descriptor, info);; -} - } // namespace armnn |