diff options
Diffstat (limited to 'src/backends/reference/workloads')
5 files changed, 58 insertions, 0 deletions
diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt index b2d8938745..86764d8a01 100644 --- a/src/backends/reference/workloads/CMakeLists.txt +++ b/src/backends/reference/workloads/CMakeLists.txt @@ -69,6 +69,8 @@ list(APPEND armnnRefBackendWorkloads_sources RefConcatWorkload.hpp RefConstantWorkload.cpp RefConstantWorkload.hpp + RefConvertBf16ToFp32Workload.cpp + RefConvertBf16ToFp32Workload.hpp RefConvertFp16ToFp32Workload.cpp RefConvertFp16ToFp32Workload.hpp RefConvertFp32ToFp16Workload.cpp diff --git a/src/backends/reference/workloads/RefConvertBf16ToFp32Workload.cpp b/src/backends/reference/workloads/RefConvertBf16ToFp32Workload.cpp new file mode 100644 index 0000000000..c4b5416836 --- /dev/null +++ b/src/backends/reference/workloads/RefConvertBf16ToFp32Workload.cpp @@ -0,0 +1,27 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "RefConvertBf16ToFp32Workload.hpp" +#include "RefWorkloadUtils.hpp" + +#include <armnnUtils/FloatingPointConverter.hpp> + +#include <BFloat16.hpp> + +namespace armnn +{ + +void RefConvertBf16ToFp32Workload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefConvertBf16ToFp32Workload_Execute"); + + const BFloat16* const input = GetInputTensorDataBFloat16(0, m_Data); + float* const output = GetOutputTensorDataFloat(0, m_Data); + + unsigned int numElements = GetTensorInfo(m_Data.m_Inputs[0]).GetNumElements(); + armnnUtils::FloatingPointConverter::ConvertBFloat16ToFloat32(input, numElements, output); +} + +} //namespace armnn diff --git a/src/backends/reference/workloads/RefConvertBf16ToFp32Workload.hpp b/src/backends/reference/workloads/RefConvertBf16ToFp32Workload.hpp new file mode 100644 index 0000000000..87cdc3e1e3 --- /dev/null +++ b/src/backends/reference/workloads/RefConvertBf16ToFp32Workload.hpp @@ -0,0 +1,21 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include <backendsCommon/Workload.hpp> +#include <backendsCommon/WorkloadData.hpp> + +namespace armnn +{ + +class RefConvertBf16ToFp32Workload : public BFloat16ToFloat32Workload<ConvertBf16ToFp32QueueDescriptor> +{ +public: + using BFloat16ToFloat32Workload<ConvertBf16ToFp32QueueDescriptor>::BFloat16ToFloat32Workload; + virtual void Execute() const override; +}; + +} //namespace armnn diff --git a/src/backends/reference/workloads/RefWorkloadUtils.hpp b/src/backends/reference/workloads/RefWorkloadUtils.hpp index c3260c8142..69713145c0 100644 --- a/src/backends/reference/workloads/RefWorkloadUtils.hpp +++ b/src/backends/reference/workloads/RefWorkloadUtils.hpp @@ -12,6 +12,7 @@ #include <reference/RefTensorHandle.hpp> +#include <BFloat16.hpp> #include <Half.hpp> #include <boost/polymorphic_cast.hpp> @@ -68,6 +69,12 @@ Half* GetOutputTensorDataHalf(unsigned int idx, const PayloadType& data) return GetOutputTensorData<Half>(idx, data); } +template <typename PayloadType> +const BFloat16* GetInputTensorDataBFloat16(unsigned int idx, const PayloadType& data) +{ + return GetInputTensorData<BFloat16>(idx, data); +} + //////////////////////////////////////////// /// u8 helpers //////////////////////////////////////////// diff --git a/src/backends/reference/workloads/RefWorkloads.hpp b/src/backends/reference/workloads/RefWorkloads.hpp index a0558ff06e..37d79f0fc0 100644 --- a/src/backends/reference/workloads/RefWorkloads.hpp +++ b/src/backends/reference/workloads/RefWorkloads.hpp @@ -22,6 +22,7 @@ #include "RefConvolution2dWorkload.hpp" #include "RefConstantWorkload.hpp" #include "RefConcatWorkload.hpp" +#include "RefConvertBf16ToFp32Workload.hpp" #include "RefConvertFp16ToFp32Workload.hpp" #include "RefConvertFp32ToFp16Workload.hpp" #include "RefDebugWorkload.hpp" |