aboutsummaryrefslogtreecommitdiff
path: root/src/backends/neon/workloads
diff options
context:
space:
mode:
authorRyan OShea <ryan.oshea3@arm.com>2022-11-07 16:20:48 +0000
committerryan.oshea3 <ryan.oshea3@arm.com>2022-11-16 15:22:50 +0000
commit31441595009182c985dacbedc70c41ee6664d070 (patch)
tree248a85295aeff4022c9b395fc97748b0a0aa6b35 /src/backends/neon/workloads
parentbd18eab07a8f30492de1e462b1815189014cb8d5 (diff)
downloadarmnn-31441595009182c985dacbedc70c41ee6664d070.tar.gz
IVGCVSW-7214 Disable BF16-Turbo-Mode and remove conversion layers
- Remove Bf16ToFp32 Conversion Layer - Remove Fp32ToBf16 Conversion Layer - Remove B16 Conversion tests * Throw exception if m_ReduceFp32ToBf16 optimzer option is set to true * Provide comments to enable fast math in order to use bf16 * Update docs to inform users to enable fast math for bf16 Execute Network Changes * Require bf16_turbo_mode to also have fast_math_enabled set to true - Remove setting m_ReduceFp32ToBf16 optimizer option Signed-off-by: Ryan OShea <ryan.oshea3@arm.com> Change-Id: Ibaa6da9d29c96a1ce32ff5196b0847fde9f04a1c
Diffstat (limited to 'src/backends/neon/workloads')
-rw-r--r--src/backends/neon/workloads/CMakeLists.txt4
-rw-r--r--src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.cpp81
-rw-r--r--src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.hpp31
-rw-r--r--src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.cpp82
-rw-r--r--src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.hpp31
-rw-r--r--src/backends/neon/workloads/NeonWorkloads.hpp2
6 files changed, 0 insertions, 231 deletions
diff --git a/src/backends/neon/workloads/CMakeLists.txt b/src/backends/neon/workloads/CMakeLists.txt
index dd09ecf015..a3eb883079 100644
--- a/src/backends/neon/workloads/CMakeLists.txt
+++ b/src/backends/neon/workloads/CMakeLists.txt
@@ -28,12 +28,8 @@ list(APPEND armnnNeonBackendWorkloads_sources
NeonConcatWorkload.hpp
NeonConstantWorkload.cpp
NeonConstantWorkload.hpp
- NeonConvertBf16ToFp32Workload.cpp
- NeonConvertBf16ToFp32Workload.hpp
NeonConvertFp16ToFp32Workload.cpp
NeonConvertFp16ToFp32Workload.hpp
- NeonConvertFp32ToBf16Workload.cpp
- NeonConvertFp32ToBf16Workload.hpp
NeonConvertFp32ToFp16Workload.cpp
NeonConvertFp32ToFp16Workload.hpp
NeonConvolution2dWorkload.cpp
diff --git a/src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.cpp b/src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.cpp
deleted file mode 100644
index 7a2ff9ac1a..0000000000
--- a/src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "NeonConvertBf16ToFp32Workload.hpp"
-
-#include <armnnUtils/FloatingPointConverter.hpp>
-
-#include <BFloat16.hpp>
-
-#include <backendsCommon/WorkloadUtils.hpp>
-
-namespace armnn
-{
-
-NeonConvertBf16ToFp32Workload::NeonConvertBf16ToFp32Workload(const ConvertBf16ToFp32QueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : BFloat16ToFloat32Workload<ConvertBf16ToFp32QueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("NeonConvertBf16ToFp32Workload", 1, 1);
- GatherTensorHandlePairs(descriptor, m_TensorHandlePairs);
-}
-
-void NeonConvertBf16ToFp32Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_NEON_GUID("NeonConvertBf16ToFp32Workload_Execute", this->GetGuid());
-
- auto convertFunc = [](uint8_t* dst, const uint8_t* src, size_t size)
- {
- auto input = reinterpret_cast<const BFloat16*>(src);
- auto output = reinterpret_cast<float*>(dst);
- size_t numElements = size/2; // 2 bytes per Bf16
- armnnUtils::FloatingPointConverter::ConvertBFloat16ToFloat32(input, numElements, output);
- };
-
- for (const auto& pair : m_TensorHandlePairs)
- {
- CopyTensorContentsGeneric(pair.first, pair.second, convertFunc);
- }
-}
-
-void NeonConvertBf16ToFp32Workload::ReplaceInputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot)
-{
- ITensorHandle* backupHandle = this->m_Data.m_Inputs[slot];
- this->m_Data.m_Inputs[slot] = tensorHandle;
- try
- {
- Reconfigure();
- }
- catch(armnn::UnimplementedException& e)
- {
- // Cannot reconfigure, revert the slot back and throw the exception.
- this->m_Data.m_Inputs[slot] = backupHandle;
- throw e;
- }
-}
-
-// Replace output tensor handle with the given TensorHandle
-void NeonConvertBf16ToFp32Workload::ReplaceOutputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot)
-{
- ITensorHandle* backupHandle = this->m_Data.m_Inputs[slot];
- this->m_Data.m_Inputs[slot] = tensorHandle;
- try
- {
- Reconfigure();
- }
- catch(armnn::UnimplementedException& e)
- {
- // Cannot reconfigure, revert the slot back and throw the exception.
- this->m_Data.m_Inputs[slot] = backupHandle;
- throw e;
- }
-}
-
-void NeonConvertBf16ToFp32Workload::Reconfigure()
-{
- throw armnn::UnimplementedException("Reconfigure not implemented for this workload");
-}
-
-} //namespace armnn
diff --git a/src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.hpp b/src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.hpp
deleted file mode 100644
index 9d44ad2cac..0000000000
--- a/src/backends/neon/workloads/NeonConvertBf16ToFp32Workload.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/backends/Workload.hpp>
-#include <armnn/backends/WorkloadData.hpp>
-#include <neon/workloads/NeonWorkloadUtils.hpp>
-
-namespace armnn
-{
-
-class NeonConvertBf16ToFp32Workload : public BFloat16ToFloat32Workload<ConvertBf16ToFp32QueueDescriptor>
-{
-public:
- NeonConvertBf16ToFp32Workload(const ConvertBf16ToFp32QueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
- // Replace input tensor handle with the given TensorHandle
- void ReplaceInputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot) override;
-
- // Replace output tensor handle with the given TensorHandle
- void ReplaceOutputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot) override;
-private:
- using TensorHandlePair = std::pair<const ITensorHandle*, ITensorHandle*>;
- std::vector<TensorHandlePair> m_TensorHandlePairs;
- virtual void Reconfigure();
-};
-
-} //namespace armnn
diff --git a/src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.cpp b/src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.cpp
deleted file mode 100644
index acd1a1ea8f..0000000000
--- a/src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "NeonConvertFp32ToBf16Workload.hpp"
-
-#include <BFloat16.hpp>
-#include <Profiling.hpp>
-
-#include <armnnUtils/FloatingPointConverter.hpp>
-
-#include <backendsCommon/WorkloadUtils.hpp>
-
-namespace armnn
-{
-
-NeonConvertFp32ToBf16Workload::NeonConvertFp32ToBf16Workload(const ConvertFp32ToBf16QueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : Float32ToBFloat16Workload<ConvertFp32ToBf16QueueDescriptor>(descriptor, info)
-{
- this->m_Data.ValidateInputsOutputs("NeonConvertFp32ToBf16Workload", 1, 1);
- GatherTensorHandlePairs(descriptor, m_TensorHandlePairs);
-}
-
-void NeonConvertFp32ToBf16Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_NEON_GUID("NeonConvertFp32ToBf16Workload_Execute", this->GetGuid());
-
- auto convertFunc = [](uint8_t* dst, const uint8_t* src, size_t size)
- {
- auto input = reinterpret_cast<const float*>(src);
- auto output = reinterpret_cast<BFloat16*>(dst);
- size_t numElements = size/2; // 2 bytes per bf16
- armnnUtils::FloatingPointConverter::ConvertFloat32ToBFloat16(input, numElements, output);
- };
-
- for (const auto& pair : m_TensorHandlePairs)
- {
- CopyTensorContentsGeneric(pair.first, pair.second, convertFunc);
- }
-}
-
-void NeonConvertFp32ToBf16Workload::ReplaceInputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot)
-{
- ITensorHandle* backupHandle = this->m_Data.m_Inputs[slot];
- this->m_Data.m_Inputs[slot] = tensorHandle;
- try
- {
- Reconfigure();
- }
- catch(armnn::UnimplementedException& e)
- {
- // Cannot reconfigure, revert the slot back and throw the exception.
- this->m_Data.m_Inputs[slot] = backupHandle;
- throw e;
- }
-}
-
-// Replace output tensor handle with the given TensorHandle
-void NeonConvertFp32ToBf16Workload::ReplaceOutputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot)
-{
- ITensorHandle* backupHandle = this->m_Data.m_Inputs[slot];
- this->m_Data.m_Inputs[slot] = tensorHandle;
- try
- {
- Reconfigure();
- }
- catch(armnn::UnimplementedException& e)
- {
- // Cannot reconfigure, revert the slot back and throw the exception.
- this->m_Data.m_Inputs[slot] = backupHandle;
- throw e;
- }
-}
-
-void NeonConvertFp32ToBf16Workload::Reconfigure()
-{
- throw armnn::UnimplementedException("Reconfigure not implemented for this workload");
-}
-
-} //namespace armnn
diff --git a/src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.hpp b/src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.hpp
deleted file mode 100644
index 2304f8a1d4..0000000000
--- a/src/backends/neon/workloads/NeonConvertFp32ToBf16Workload.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/backends/Workload.hpp>
-#include <armnn/backends/WorkloadData.hpp>
-#include <neon/workloads/NeonWorkloadUtils.hpp>
-
-namespace armnn
-{
-
-class NeonConvertFp32ToBf16Workload : public Float32ToBFloat16Workload<ConvertFp32ToBf16QueueDescriptor>
-{
-public:
- NeonConvertFp32ToBf16Workload(const ConvertFp32ToBf16QueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
- // Replace input tensor handle with the given TensorHandle
- void ReplaceInputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot) override;
-
- // Replace output tensor handle with the given TensorHandle
- void ReplaceOutputTensorHandle(ITensorHandle* tensorHandle, unsigned int slot) override;
-private:
- using TensorHandlePair = std::pair<const ITensorHandle*, ITensorHandle*>;
- std::vector<TensorHandlePair> m_TensorHandlePairs;
- virtual void Reconfigure();
-};
-
-} //namespace armnn
diff --git a/src/backends/neon/workloads/NeonWorkloads.hpp b/src/backends/neon/workloads/NeonWorkloads.hpp
index c9c5421804..01fd2f7dba 100644
--- a/src/backends/neon/workloads/NeonWorkloads.hpp
+++ b/src/backends/neon/workloads/NeonWorkloads.hpp
@@ -16,9 +16,7 @@
#include "NeonComparisonWorkload.hpp"
#include "NeonConcatWorkload.hpp"
#include "NeonConstantWorkload.hpp"
-#include "NeonConvertBf16ToFp32Workload.hpp"
#include "NeonConvertFp16ToFp32Workload.hpp"
-#include "NeonConvertFp32ToBf16Workload.hpp"
#include "NeonConvertFp32ToFp16Workload.hpp"
#include "NeonConvolution2dWorkload.hpp"
#include "NeonConvolution3dWorkload.hpp"