aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2019-04-02 15:19:08 +0100
committerJim Flynn <jim.flynn@arm.com>2019-04-10 13:36:27 +0100
commit82fbe7c0b82f7adadd5120ac4b4f779d0da7c0d5 (patch)
tree472bd548f7d84777e53cd20f8e6d9d084e0d25c5 /src/backends/reference
parent2999a02f0c6a6f290ce45f28c998a1c000d48f67 (diff)
downloadarmnn-82fbe7c0b82f7adadd5120ac4b4f779d0da7c0d5.tar.gz
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 <jim.flynn@arm.com>
Diffstat (limited to 'src/backends/reference')
-rw-r--r--src/backends/reference/RefWorkloadFactory.cpp32
1 files changed, 32 insertions, 0 deletions
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<IWorkload> 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<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);
}
@@ -266,12 +290,20 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConvertFp32ToFp16(
std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateDivision(
const DivisionQueueDescriptor& descriptor, const WorkloadInfo& info) const
{
+ if (IsFloat16(info))
+ {
+ return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info);
+ }
return std::make_unique<RefDivisionWorkload>(descriptor, info);
}
std::unique_ptr<armnn::IWorkload> RefWorkloadFactory::CreateSubtraction(
const SubtractionQueueDescriptor& descriptor, const WorkloadInfo& info) const
{
+ if (IsFloat16(info))
+ {
+ return MakeWorkload<NullWorkload, NullWorkload>(descriptor, info);
+ }
return std::make_unique<RefSubtractionWorkload>(descriptor, info);
}