blob: 77808417660d770730830fb091a4ed09d48468d4 [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
Mike Kelly7cbe7812023-07-25 17:37:33 +01002// Copyright © 2017-2018,2020-2023 Arm Ltd and Contributors. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5
6#include "RefFakeQuantizationFloat32Workload.hpp"
7
8#include "RefWorkloadUtils.hpp"
9
10#include "Profiling.hpp"
11
Matthew Sloyan24ac8592020-09-23 16:57:23 +010012#include <armnn/utility/NumericCast.hpp>
telsoa014fcda012018-03-09 14:13:49 +000013
14namespace armnn
15{
16
17void FakeQuantization(const float* inputData, float* outputData, uint32_t numElements, float min, float max)
18{
19 float scale = (max - min) / 255.f;
Matthew Sloyan24ac8592020-09-23 16:57:23 +010020 int32_t offset = armnn::numeric_cast<int32_t>((-min * 255.f) / (max - min));
telsoa014fcda012018-03-09 14:13:49 +000021
22 for (uint32_t i = 0; i < numElements; i++)
23 {
24 outputData[i] = static_cast<float>(armnn::Quantize<uint8_t>(inputData[i], scale, offset));
25 }
26
27}
28
29void RefFakeQuantizationFloat32Workload::Execute() const
30{
Finn Williamsb8181f72021-04-07 10:23:21 +010031 Execute(m_Data.m_Inputs, m_Data.m_Outputs);
32}
33
Matthew Sloyan2d213a72022-06-30 17:13:04 +010034void RefFakeQuantizationFloat32Workload::ExecuteAsync(ExecutionData& executionData)
Finn Williamsb8181f72021-04-07 10:23:21 +010035{
Matthew Sloyan2d213a72022-06-30 17:13:04 +010036 WorkingMemDescriptor* workingMemDescriptor = static_cast<WorkingMemDescriptor*>(executionData.m_Data);
37 Execute(workingMemDescriptor->m_Inputs, workingMemDescriptor->m_Outputs);
Finn Williamsb8181f72021-04-07 10:23:21 +010038}
39
40void RefFakeQuantizationFloat32Workload::Execute(std::vector<ITensorHandle*> inputs,
41 std::vector<ITensorHandle*> outputs) const
42{
Mike Kelly7cbe7812023-07-25 17:37:33 +010043 ARMNN_SCOPED_PROFILING_EVENT_REF_NAME_GUID("RefFakeQuantizationFloat32Workload_Execute");
telsoa014fcda012018-03-09 14:13:49 +000044
Finn Williamsb8181f72021-04-07 10:23:21 +010045 const TensorInfo& inputInfo = GetTensorInfo(inputs[0]);
telsoa014fcda012018-03-09 14:13:49 +000046
Finn Williamsb8181f72021-04-07 10:23:21 +010047 const float* inputData = reinterpret_cast<const float*>(inputs[0]->Map());
48 float* outputData = reinterpret_cast<float*>(outputs[0]->Map());
telsoa014fcda012018-03-09 14:13:49 +000049 FakeQuantization(inputData, outputData, inputInfo.GetNumElements(),
50 m_Data.m_Parameters.m_Min,
51 m_Data.m_Parameters.m_Max);
52}
53
54} //namespace armnn