ArmNN
 21.02
FakeQuantizationTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
7 
8 
10 
13 
14 #include <test/TensorHelpers.hpp>
15 
17  armnn::IWorkloadFactory& workloadFactory,
19  const armnn::ITensorHandleFactory& tensorHandleFactory)
20 {
21  IgnoreUnused(memoryManager);
22  constexpr unsigned int width = 2;
23  constexpr unsigned int height = 3;
24 
25  const armnn::TensorInfo tensorInfo({height, width },
27 
28  auto input = MakeTensor<float, 2>(tensorInfo, std::vector<float>({
29  -10.0f, -5.0f,
30  0.0f, 5.0f,
31  10.0f, 10.0f
32  }));
33 
34  LayerTestResult<float, 2> ret(tensorInfo);
35 
36  std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(tensorInfo);
37  std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(tensorInfo);
38 
41 
42  AddInputToWorkload(data, info, tensorInfo, inputHandle.get());
43  AddOutputToWorkload(data, info, tensorInfo, outputHandle.get());
44 
45  float min = -10.f;
46  float max = 10.f;
47 
48  data.m_Parameters.m_Min = min;
49  data.m_Parameters.m_Max = max;
50 
51  armnn::PassthroughCpuTensorHandle refHandle(tensorInfo, &ret.outputExpected[0][0]);
53  armnn::WorkloadInfo refInfo = info;
54  SetWorkloadOutput(refData, refInfo, 0, tensorInfo, &refHandle);
55 
56  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFakeQuantization(data, info);
57 
58  inputHandle->Allocate();
59  outputHandle->Allocate();
60 
61  CopyDataToITensorHandle(inputHandle.get(), &input[0][0]);
62 
63  workload->PostAllocationConfigure();
64  workload->Execute();
65 
66  CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
67 
68  ret.outputExpected = MakeTensor<float, 2>(tensorInfo, std::vector<float>({
69  0.0f, 63.0f,
70  128.0f, 191.0f,
71  255.0f, 255.0f
72  }));
73 
74  return ret;
75 }
LayerTestResult< float, 2 > FakeQuantizationTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
boost::multi_array< T, n > outputExpected
virtual std::unique_ptr< IWorkload > CreateFakeQuantization(const FakeQuantizationQueueDescriptor &descriptor, const WorkloadInfo &info) const
void IgnoreUnused(Ts &&...)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
boost::multi_array< T, n > output
Contains information about inputs and outputs to a layer.
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)