diff options
Diffstat (limited to 'src/backends/neon/NeonWorkloadFactory.cpp')
-rw-r--r-- | src/backends/neon/NeonWorkloadFactory.cpp | 339 |
1 files changed, 173 insertions, 166 deletions
diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index 3492923f72..5bd8f293c5 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -95,18 +95,6 @@ std::unique_ptr<ITensorHandle> NeonWorkloadFactory::CreateTensorHandle(const Ten return tensorHandle; } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateInput(const InputQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<CopyMemGenericWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateOutput(const OutputQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<CopyMemGenericWorkload>(descriptor, info); -} - std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateAbs(const AbsQueueDescriptor& descriptor, const WorkloadInfo& info) const { @@ -119,48 +107,54 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateActivation(const Activatio return std::make_unique<NeonActivationWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonSoftmaxFloatWorkload, NeonSoftmaxUint8Workload>(descriptor, info, - m_MemoryManager->GetIntraLayerManager()); + return std::make_unique<NeonAdditionWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSplitter(const SplitterQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonSplitterWorkload>(descriptor, info); + return std::make_unique<NeonArgMinMaxWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateMerger(const MergerQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateBatchNormalization( + const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return CreateConcat(descriptor, info); + return std::make_unique<NeonBatchNormalizationWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateFullyConnected( - const FullyConnectedQueueDescriptor& descriptor, const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonFullyConnectedWorkload, NeonFullyConnectedWorkload>(descriptor, info, - m_MemoryManager->GetIntraLayerManager()); + return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePermute(const PermuteQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateConcat(const ConcatQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonPermuteWorkload>(descriptor, info); + return std::make_unique<NeonConcatWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonPooling2dWorkload>(descriptor, info); + return std::make_unique<NeonConstantWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePrelu(const armnn::PreluQueueDescriptor &descriptor, - const armnn::WorkloadInfo &info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateConvertFp16ToFp32( + const ConvertFp16ToFp32QueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonPreluWorkload>(descriptor, info); + return std::make_unique<NeonConvertFp16ToFp32Workload>(descriptor, info); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateConvertFp32ToFp16( + const ConvertFp32ToFp16QueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return std::make_unique<NeonConvertFp32ToFp16Workload>(descriptor, info); } std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateConvolution2d( @@ -170,6 +164,12 @@ std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateConvolution2d( m_MemoryManager->GetIntraLayerManager()); } +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateDebug(const DebugQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); +} + std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateDepthToSpace(const DepthToSpaceQueueDescriptor& descriptor, const WorkloadInfo& info) const { @@ -194,41 +194,86 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateDetectionPostProcess( return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateNormalization( - const NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateDivision( + const DivisionQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonNormalizationFloatWorkload, NullWorkload>(descriptor, info, - m_MemoryManager->GetIntraLayerManager()); + return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateEqual(const EqualQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonAdditionWorkload>(descriptor, info); + return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateMultiplication( - const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateFakeQuantization( + const FakeQuantizationQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonMultiplicationWorkload>(descriptor, info); + return nullptr; } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateDivision( - const DivisionQueueDescriptor& descriptor, const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkloadHelper<NeonFloorFloatWorkload, NullWorkload>(descriptor, info); +} + +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateFullyConnected( + const FullyConnectedQueueDescriptor& descriptor, const WorkloadInfo& info) const +{ + return MakeWorkloadHelper<NeonFullyConnectedWorkload, NeonFullyConnectedWorkload>( + descriptor, info, m_MemoryManager->GetIntraLayerManager()); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateGather(const armnn::GatherQueueDescriptor& descriptor, + const armnn::WorkloadInfo& info) const { return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateSubtraction( - const SubtractionQueueDescriptor& descriptor, const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateGreater(const GreaterQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonSubtractionWorkload>(descriptor, info); + return MakeWorkloadHelper<NeonGreaterFloat32Workload, NeonGreaterUint8Workload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateBatchNormalization( - const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateInput(const InputQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonBatchNormalizationWorkload>(descriptor, info); + return std::make_unique<CopyMemGenericWorkload>(descriptor, info); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateInstanceNormalization( + const InstanceNormalizationQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return std::make_unique<NeonInstanceNormalizationWorkload>(descriptor, info); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkloadHelper<NeonL2NormalizationFloatWorkload, NullWorkload>(descriptor, info, + m_MemoryManager->GetIntraLayerManager()); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateLstm(const LstmQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return MakeWorkloadHelper<NeonLstmFloatWorkload, NullWorkload>(descriptor, info); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMaximum(const MaximumQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return std::make_unique<NeonMaximumWorkload>(descriptor, info); +} + +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMean(const MeanQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + return std::make_unique<NeonMeanWorkload>(descriptor, info); } std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateMemCopy(const MemCopyQueueDescriptor& descriptor, @@ -253,87 +298,71 @@ std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateMemImport(const Mem return std::make_unique<ImportMemGenericWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateResize(const ResizeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<NeonResizeWorkload>(descriptor, info); -} - -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateResizeBilinear( - const ResizeBilinearQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateMerger(const MergerQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - ResizeQueueDescriptor resizeDescriptor; - resizeDescriptor.m_Inputs = descriptor.m_Inputs; - resizeDescriptor.m_Outputs = descriptor.m_Outputs; - - resizeDescriptor.m_Parameters.m_DataLayout = descriptor.m_Parameters.m_DataLayout; - resizeDescriptor.m_Parameters.m_TargetWidth = descriptor.m_Parameters.m_TargetWidth; - resizeDescriptor.m_Parameters.m_TargetHeight = descriptor.m_Parameters.m_TargetHeight; - - return CreateResize(resizeDescriptor, info); + return CreateConcat(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateFakeQuantization( - const FakeQuantizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMinimum(const MinimumQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return nullptr; + return std::make_unique<NeonMinimumWorkload>(descriptor, info); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateQuantize(const QuantizeQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateMultiplication( + const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique<NeonQuantizeWorkload>(descriptor, info); + return std::make_unique<NeonMultiplicationWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateNormalization( + const NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonL2NormalizationFloatWorkload, NullWorkload>(descriptor, info, - m_MemoryManager->GetIntraLayerManager()); + return MakeWorkloadHelper<NeonNormalizationFloatWorkload, NullWorkload>(descriptor, info, + m_MemoryManager->GetIntraLayerManager()); } -std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateConcat(const ConcatQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateOutput(const OutputQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonConcatWorkload>(descriptor, info); + return std::make_unique<CopyMemGenericWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonConstantWorkload>(descriptor, info); + return std::make_unique<NeonPadWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePermute(const PermuteQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonReshapeWorkload>(descriptor, info); + return std::make_unique<NeonPermuteWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return nullptr; + return std::make_unique<NeonPooling2dWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSpaceToDepth(const armnn::SpaceToDepthQueueDescriptor& descriptor, - const armnn::WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreatePreCompiled(const PreCompiledQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonSpaceToDepthWorkload>(descriptor, info); + return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePrelu(const armnn::PreluQueueDescriptor &descriptor, + const armnn::WorkloadInfo &info) const { - return MakeWorkloadHelper<NeonFloorFloatWorkload, NullWorkload>(descriptor, info); + return std::make_unique<NeonPreluWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateLstm(const LstmQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateQuantize(const QuantizeQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonLstmFloatWorkload, NullWorkload>(descriptor, info); + return std::make_unique<NeonQuantizeWorkload>(descriptor, info); } std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& descriptor, @@ -342,78 +371,80 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateQuantizedLstm(const Quanti return std::make_unique<NeonQuantizedLstmWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateConvertFp16ToFp32( - const ConvertFp16ToFp32QueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonConvertFp16ToFp32Workload>(descriptor, info); + return std::make_unique<NeonReshapeWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateConvertFp32ToFp16( - const ConvertFp32ToFp16QueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateResize(const ResizeQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonConvertFp32ToFp16Workload>(descriptor, info); + return std::make_unique<NeonResizeWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMaximum(const MaximumQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateResizeBilinear( + const ResizeBilinearQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonMaximumWorkload>(descriptor, info); -} + ResizeQueueDescriptor resizeDescriptor; + resizeDescriptor.m_Inputs = descriptor.m_Inputs; + resizeDescriptor.m_Outputs = descriptor.m_Outputs; -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMean(const MeanQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<NeonMeanWorkload>(descriptor, info); + resizeDescriptor.m_Parameters.m_DataLayout = descriptor.m_Parameters.m_DataLayout; + resizeDescriptor.m_Parameters.m_TargetWidth = descriptor.m_Parameters.m_TargetWidth; + resizeDescriptor.m_Parameters.m_TargetHeight = descriptor.m_Parameters.m_TargetHeight; + + return CreateResize(resizeDescriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateRsqrt(const RsqrtQueueDescriptor &descriptor, + const WorkloadInfo &info) const { - return std::make_unique<NeonPadWorkload>(descriptor, info); + return std::make_unique<NeonRsqrtWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateEqual(const EqualQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); + return MakeWorkloadHelper<NeonSoftmaxFloatWorkload, NeonSoftmaxUint8Workload>( + descriptor, info, m_MemoryManager->GetIntraLayerManager()); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); + return nullptr; } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSpaceToDepth( + const armnn::SpaceToDepthQueueDescriptor& descriptor, const armnn::WorkloadInfo& info) const { - return std::make_unique<NeonStridedSliceWorkload>(descriptor, info); + return std::make_unique<NeonSpaceToDepthWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateMinimum(const MinimumQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateSplitter(const SplitterQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return std::make_unique<NeonMinimumWorkload>(descriptor, info); + return std::make_unique<NeonSplitterWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateGreater(const GreaterQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateStack(const StackQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return MakeWorkloadHelper<NeonGreaterFloat32Workload, NeonGreaterUint8Workload>(descriptor, info); + return std::make_unique<NeonStackWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateDebug(const DebugQueueDescriptor& descriptor, - const WorkloadInfo& info) const +std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor, + const WorkloadInfo& info) const { - return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); + return std::make_unique<NeonStridedSliceWorkload>(descriptor, info); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateRsqrt(const RsqrtQueueDescriptor &descriptor, - const WorkloadInfo &info) const +std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateSubtraction( + const SubtractionQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique<NeonRsqrtWorkload>(descriptor, info); + return std::make_unique<NeonSubtractionWorkload>(descriptor, info); } std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateTransposeConvolution2d( @@ -424,28 +455,4 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateTransposeConvolution2d( m_MemoryManager->GetIntraLayerManager()); } -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreatePreCompiled(const PreCompiledQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateGather(const armnn::GatherQueueDescriptor& descriptor, - const armnn::WorkloadInfo& info) const -{ - return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateStack(const StackQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<NeonStackWorkload>(descriptor, info); -} - -std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return std::make_unique<NeonArgMinMaxWorkload>(descriptor, info); -} - } // namespace armnn |