ArmNN
 21.05
NeonTimerTest.cpp File Reference
#include "NeonWorkloadFactoryHelper.hpp"
#include <test/TensorHelpers.hpp>
#include <backendsCommon/TensorHandle.hpp>
#include <backendsCommon/WorkloadFactory.hpp>
#include <neon/NeonTimer.hpp>
#include <neon/NeonWorkloadFactory.hpp>
#include <backendsCommon/test/LayerTests.hpp>
#include <backendsCommon/test/TensorCopyUtils.hpp>
#include <backendsCommon/test/WorkloadTestUtils.hpp>
#include <boost/test/unit_test.hpp>
#include <cstdlib>
#include <algorithm>

Go to the source code of this file.

Functions

 BOOST_AUTO_TEST_CASE (NeonTimerGetName)
 
 BOOST_AUTO_TEST_CASE (NeonTimerMeasure)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/2]

BOOST_AUTO_TEST_CASE ( NeonTimerGetName  )

Definition at line 31 of file NeonTimerTest.cpp.

References NeonTimer::GetName().

32 {
33  NeonTimer neonTimer;
34  BOOST_CHECK_EQUAL(neonTimer.GetName(), "NeonKernelTimer");
35 }
const char * GetName() const override
Definition: NeonTimer.cpp:57

◆ BOOST_AUTO_TEST_CASE() [2/2]

BOOST_AUTO_TEST_CASE ( NeonTimerMeasure  )

Definition at line 37 of file NeonTimerTest.cpp.

References ARMNN_NO_DEPRECATE_WARN_BEGIN, ARMNN_NO_DEPRECATE_WARN_END, BOOST_AUTO_TEST_SUITE_END(), armnn::BoundedReLu, CopyDataToITensorHandle(), NeonWorkloadFactory::CreateActivation(), NeonWorkloadFactory::CreateTensorHandle(), armnn::Float32, and NeonTimer::Start().

38 {
39  NeonWorkloadFactory workloadFactory =
40  NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
41 
42  unsigned int inputWidth = 2000u;
43  unsigned int inputHeight = 2000u;
44  unsigned int inputChannels = 1u;
45  unsigned int inputBatchSize = 1u;
46 
47  float upperBound = 1.0f;
48  float lowerBound = -1.0f;
49 
50  size_t inputSize = inputWidth * inputHeight * inputChannels * inputBatchSize;
51  std::vector<float> inputData(inputSize, 0.f);
52  std::generate(inputData.begin(), inputData.end(), [](){
53  return (static_cast<float>(rand()) / static_cast<float>(RAND_MAX / 3)) + 1.f; });
54 
55  unsigned int outputWidth = inputWidth;
56  unsigned int outputHeight = inputHeight;
57  unsigned int outputChannels = inputChannels;
58  unsigned int outputBatchSize = inputBatchSize;
59 
60  armnn::TensorInfo inputTensorInfo({ inputBatchSize, inputChannels, inputHeight, inputWidth },
62 
63  armnn::TensorInfo outputTensorInfo({ outputBatchSize, outputChannels, outputHeight, outputWidth },
65 
66  LayerTestResult<float, 4> result(inputTensorInfo);
67 
68  auto input = MakeTensor<float, 4>(inputTensorInfo, inputData);
69 
71  std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
72  std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
74 
75  // Setup bounded ReLu
77  armnn::WorkloadInfo workloadInfo;
78  AddInputToWorkload(descriptor, workloadInfo, inputTensorInfo, inputHandle.get());
79  AddOutputToWorkload(descriptor, workloadInfo, outputTensorInfo, outputHandle.get());
80 
81  descriptor.m_Parameters.m_Function = armnn::ActivationFunction::BoundedReLu;
82  descriptor.m_Parameters.m_A = upperBound;
83  descriptor.m_Parameters.m_B = lowerBound;
84 
85  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateActivation(descriptor, workloadInfo);
86 
87  inputHandle->Allocate();
88  outputHandle->Allocate();
89 
90  CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
91 
92  NeonTimer neonTimer;
93  // Start the timer.
94  neonTimer.Start();
95  // Execute the workload.
96  workload->Execute();
97  // Stop the timer.
98  neonTimer.Stop();
99 
100  std::vector<Measurement> measurements = neonTimer.GetMeasurements();
101 
102  BOOST_CHECK(measurements.size() <= 2);
103  if (measurements.size() > 1)
104  {
105  BOOST_CHECK_EQUAL(measurements[0].m_Name, "NeonKernelTimer/0: NEFillBorderKernel");
106  BOOST_CHECK(measurements[0].m_Value > 0.0);
107  }
108  std::ostringstream oss_neon;
109  std::ostringstream oss_cpu;
110  oss_neon << "NeonKernelTimer/" << measurements.size()-1 << ": NEActivationLayerKernel";
111  oss_cpu << "NeonKernelTimer/" << measurements.size()-1 << ": CpuActivationKernel";
112  BOOST_CHECK(measurements[measurements.size()-1].m_Name == oss_neon.str() ||
113  measurements[measurements.size()-1].m_Name == oss_cpu.str());
114  BOOST_CHECK(measurements[measurements.size()-1].m_Value > 0.0);
115 }
void Start() override
Definition: NeonTimer.cpp:20
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
min(a, max(b, input)) ReLu1 & ReLu6.
std::unique_ptr< IWorkload > CreateActivation(const ActivationQueueDescriptor &descriptor, const WorkloadInfo &info) const override
Contains information about inputs and outputs to a layer.
std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const override
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)