xref: /aosp_15_r20/external/armnn/src/backends/reference/workloads/RefConvertFp16ToFp32Workload.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "RefConvertFp16ToFp32Workload.hpp"
7 #include "RefWorkloadUtils.hpp"
8 
9 #include <armnnUtils/FloatingPointConverter.hpp>
10 
11 #include <Half.hpp>
12 
13 namespace armnn
14 {
15 
Execute() const16 void RefConvertFp16ToFp32Workload::Execute() const
17 {
18     Execute(m_Data.m_Inputs, m_Data.m_Outputs);
19 }
20 
ExecuteAsync(ExecutionData & executionData)21 void RefConvertFp16ToFp32Workload::ExecuteAsync(ExecutionData& executionData)
22 {
23     WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
24     Execute(workingMemDescriptor->m_Inputs, workingMemDescriptor->m_Outputs);
25 }
26 
Execute(std::vector<ITensorHandle * > inputs,std::vector<ITensorHandle * > outputs) const27 void RefConvertFp16ToFp32Workload::Execute(std::vector<ITensorHandle*> inputs,
28                                            std::vector<ITensorHandle*> outputs) const
29 {
30     ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefConvertFp16ToFp32Workload_Execute");
31 
32     const Half* const input = reinterpret_cast<const Half*>(inputs[0]->Map());
33     float* const output = reinterpret_cast<float*>(outputs[0]->Map());
34 
35     unsigned int numElements = GetTensorInfo(inputs[0]).GetNumElements();
36     armnnUtils::FloatingPointConverter::ConvertFloat16To32(input, numElements, output);
37 }
38 
39 } //namespace armnn
40