// // Copyright © 2017 Arm Ltd. All rights reserved. // See LICENSE file in the project root for full license information. // #pragma once #include "WorkloadFactory.hpp" #include "OutputHandler.hpp" #include namespace armnn { template constexpr bool IsOperationQueueDescriptor(const QueueDescriptorType&) { return true; } template <> constexpr bool IsOperationQueueDescriptor(const MemCopyQueueDescriptor&) { return false; } template <> constexpr bool IsOperationQueueDescriptor(const ConstantQueueDescriptor&) { return false; } template <> constexpr bool IsOperationQueueDescriptor(const PermuteQueueDescriptor&) { return false; } // Reference workload factory class RefWorkloadFactory : public IWorkloadFactory { public: explicit RefWorkloadFactory(bool operationWorkloadsAllowed = true); virtual ~RefWorkloadFactory() { }; virtual Compute GetCompute() const override { return Compute::CpuRef; } static bool IsLayerSupported(const Layer& layer, DataType dataType, std::string& outReasonIfUnsupported); virtual bool SupportsSubTensors() const override { return false; } virtual std::unique_ptr CreateSubTensorHandle(ITensorHandle& parent, TensorShape const& subTensorShape, unsigned int const* subTensorOrigin) const override { boost::ignore_unused(parent, subTensorShape, subTensorOrigin); return nullptr; }; virtual std::unique_ptr CreateTensorHandle(const TensorInfo& tensorInfo) const override; virtual std::unique_ptr CreateInput(const InputQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateOutput(const OutputQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateActivation(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateSplitter(const SplitterQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateMerger(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateFullyConnected(const FullyConnectedQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreatePermute(const PermuteQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateDepthwiseConvolution2d( const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateNormalization(const NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateMultiplication(const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateAddition(const AdditionQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateBatchNormalization(const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateMemCopy(const MemCopyQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateFakeQuantization(const FakeQuantizationQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateConstant(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateReshape(const ReshapeQueueDescriptor& descriptor, const WorkloadInfo& info) const override; virtual std::unique_ptr CreateFloor(const FloorQueueDescriptor& descriptor, const WorkloadInfo& info) const override; private: template std::unique_ptr MakeWorkload(const QueueDescriptorType& descriptor, const WorkloadInfo& info) const; const bool m_OperationWorkloadsAllowed; }; } // namespace armnn