From 82fbe7c0b82f7adadd5120ac4b4f779d0da7c0d5 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Tue, 2 Apr 2019 15:19:08 +0100 Subject: IVGCVSW-2912 Make get_compute_library.sh sole source for clframework pin * Also incorporated fix for break in master build 32-bit NEDepthwiseConvolution errors in clframework * Fixed a failure in the Float16 workloads for ElementwiseOperations !android-nn-driver:963 Change-Id: Ic2cdb0e6c9399fa42b56001c6f4b46b7f150f143 Signed-off-by: Jim Flynn --- src/backends/reference/RefWorkloadFactory.cpp | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/backends/reference') diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index 8ea923d599..b1c3ad79ac 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -27,6 +27,22 @@ std::unique_ptr RefWorkloadFactory::MakeWorkload(const QueueDescripto info); } +bool IsFloat16(const WorkloadInfo& info) +{ + auto checkFloat16 = [](const TensorInfo& tensorInfo) {return tensorInfo.GetDataType() == DataType::Float16;}; + auto it = std::find_if(std::begin(info.m_InputTensorInfos), std::end(info.m_InputTensorInfos), checkFloat16); + if (it != std::end(info.m_InputTensorInfos)) + { + return true; + } + it = std::find_if(std::begin(info.m_OutputTensorInfos), std::end(info.m_OutputTensorInfos), checkFloat16); + if (it != std::end(info.m_OutputTensorInfos)) + { + return true; + } + return false; +} + RefWorkloadFactory::RefWorkloadFactory() { } @@ -174,12 +190,20 @@ std::unique_ptr RefWorkloadFactory::CreateNormalization( std::unique_ptr RefWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, const WorkloadInfo& info) const { + if (IsFloat16(info)) + { + return MakeWorkload(descriptor, info); + } return std::make_unique(descriptor, info); } std::unique_ptr RefWorkloadFactory::CreateMultiplication( const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info) const { + if (IsFloat16(info)) + { + return MakeWorkload(descriptor, info); + } return std::make_unique(descriptor, info); } @@ -266,12 +290,20 @@ std::unique_ptr RefWorkloadFactory::CreateConvertFp32ToFp16( std::unique_ptr RefWorkloadFactory::CreateDivision( const DivisionQueueDescriptor& descriptor, const WorkloadInfo& info) const { + if (IsFloat16(info)) + { + return MakeWorkload(descriptor, info); + } return std::make_unique(descriptor, info); } std::unique_ptr RefWorkloadFactory::CreateSubtraction( const SubtractionQueueDescriptor& descriptor, const WorkloadInfo& info) const { + if (IsFloat16(info)) + { + return MakeWorkload(descriptor, info); + } return std::make_unique(descriptor, info); } -- cgit v1.2.1