diff options
author | Matthew Jackson <matthew.jackson@arm.com> | 2019-09-11 09:19:18 +0100 |
---|---|---|
committer | Matthew Jackson <matthew.jackson@arm.com> | 2019-09-11 10:49:25 +0000 |
commit | 252df3a8b6bbf70a21f81d1bf239d08f8b09086f (patch) | |
tree | 6e6eaf6814d71ca61c9bd700d4c1757ff671c292 /src/backends/reference/RefWorkloadFactory.cpp | |
parent | 0cfcf235c4bcd2ae570eea8bc2677f471281b8e6 (diff) | |
download | armnn-252df3a8b6bbf70a21f81d1bf239d08f8b09086f.tar.gz |
IVGCVSW-3845 Add Reference FP16 support for required layers
* Working on layers required by FSRCNN, FCRN and DeepSpeaker
* Updates RefLayerSupport and RefWorkloadFactory methods
* Adds RefPadFloat16Workload
* Tested by successful execution of these networks on Reference FP16 backend
Signed-off-by: Matthew Jackson <matthew.jackson@arm.com>
Change-Id: I4817dca0a89bba6902f0feffc494b27a26a0ab2d
Diffstat (limited to 'src/backends/reference/RefWorkloadFactory.cpp')
-rw-r--r-- | src/backends/reference/RefWorkloadFactory.cpp | 32 |
1 files changed, 4 insertions, 28 deletions
diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index f2dfb980b3..a3d4bf08c2 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -131,10 +131,6 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateOutput(const OutputQueueDes std::unique_ptr<IWorkload> RefWorkloadFactory::CreateActivation(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefActivationWorkload>(descriptor, info); } @@ -184,10 +180,6 @@ std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreatePermute(const Permut std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefPooling2dWorkload>(descriptor, info); } @@ -218,20 +210,12 @@ std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateNormalization( std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefAdditionWorkload>(descriptor, info); } std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateMultiplication( const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefMultiplicationWorkload>(descriptor, info); } @@ -293,10 +277,6 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateFakeQuantization( std::unique_ptr<IWorkload> RefWorkloadFactory::CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefL2NormalizationWorkload>(descriptor, info); } @@ -401,10 +381,6 @@ std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateMaximum( std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateMean( const MeanQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefMeanWorkload>(descriptor, info); } @@ -425,6 +401,10 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreatePad(const PadQueueDescripto { return std::make_unique<RefPadQSymm16Workload>(descriptor, info); } + else if (IsFloat16(info)) + { + return std::make_unique<RefPadFloat16Workload>(descriptor, info); + } return MakeWorkload<RefPadFloat32Workload, RefPadQAsymm8Workload>(descriptor, info); } @@ -518,10 +498,6 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateTransposeConvolution2d( const TransposeConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info); - } return std::make_unique<RefTransposeConvolution2dWorkload>(descriptor, info); } |