ArmNN
 20.02
LayerReleaseConstantDataTest.cpp File Reference
#include "CommonTestUtils.hpp"
#include <Graph.hpp>
#include <backendsCommon/CpuTensorHandle.hpp>
#include <backendsCommon/WorkloadData.hpp>
#include <boost/cast.hpp>
#include <boost/test/unit_test.hpp>
#include <utility>

Go to the source code of this file.

Functions

 BOOST_AUTO_TEST_CASE (ReleaseBatchNormalizationLayerConstantDataTest)
 
 BOOST_AUTO_TEST_CASE (ReleaseConvolution2dLayerConstantDataTest)
 
 BOOST_AUTO_TEST_CASE (ReleaseDepthwiseConvolution2dLayerConstantDataTest)
 
 BOOST_AUTO_TEST_CASE (ReleaseFullyConnectedLayerConstantDataTest)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/4]

BOOST_AUTO_TEST_CASE ( ReleaseBatchNormalizationLayerConstantDataTest  )

Definition at line 29 of file LayerReleaseConstantDataTest.cpp.

References Graph::AddLayer(), BOOST_CHECK(), Connect(), armnn::Float32, BatchNormalizationLayer::m_Beta, BatchNormalizationDescriptor::m_Eps, BatchNormalizationLayer::m_Gamma, BatchNormalizationLayer::m_Mean, BatchNormalizationLayer::m_Variance, and Layer::ReleaseConstantData().

30 {
31  Graph graph;
32 
33  // create the layer we're testing
35  layerDesc.m_Eps = 0.05f;
36  BatchNormalizationLayer* const layer = graph.AddLayer<BatchNormalizationLayer>(layerDesc, "layer");
37 
39  layer->m_Mean = std::make_unique<ScopedCpuTensorHandle>(weightInfo);
40  layer->m_Variance = std::make_unique<ScopedCpuTensorHandle>(weightInfo);
41  layer->m_Beta = std::make_unique<ScopedCpuTensorHandle>(weightInfo);
42  layer->m_Gamma = std::make_unique<ScopedCpuTensorHandle>(weightInfo);
43  layer->m_Mean->Allocate();
44  layer->m_Variance->Allocate();
45  layer->m_Beta->Allocate();
46  layer->m_Gamma->Allocate();
47 
48  // create extra layers
49  Layer* const input = graph.AddLayer<InputLayer>(0, "input");
50  Layer* const output = graph.AddLayer<OutputLayer>(0, "output");
51 
52  // connect up
53  armnn::TensorInfo tensorInfo({2, 3, 1, 1}, armnn::DataType::Float32);
54  Connect(input, layer, tensorInfo);
55  Connect(layer, output, tensorInfo);
56 
57  // check the constants that they are not NULL
58  BOOST_CHECK(layer->m_Mean != nullptr);
59  BOOST_CHECK(layer->m_Variance != nullptr);
60  BOOST_CHECK(layer->m_Beta != nullptr);
61  BOOST_CHECK(layer->m_Gamma != nullptr);
62 
63  // free up the constants..
64  layer->ReleaseConstantData();
65 
66  // check the constants that they are NULL now
67  BOOST_CHECK(layer->m_Mean == nullptr);
68  BOOST_CHECK(layer->m_Variance == nullptr);
69  BOOST_CHECK(layer->m_Beta == nullptr);
70  BOOST_CHECK(layer->m_Gamma == nullptr);
71 
72  }
virtual void ReleaseConstantData()
Definition: Layer.cpp:264
This layer represents a batch normalization operation.
LayerT * AddLayer(Args &&... args)
Adds a new layer, of type LayerType, to the graph constructed with the arguments passed.
Definition: Graph.hpp:397
float m_Eps
Value to add to the variance. Used to avoid dividing by zero.
std::unique_ptr< ScopedCpuTensorHandle > m_Gamma
A unique pointer to store Gamma values.
std::unique_ptr< ScopedCpuTensorHandle > m_Variance
A unique pointer to store Variance values.
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
std::unique_ptr< ScopedCpuTensorHandle > m_Beta
A unique pointer to store Beta values.
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: OutputLayer.hpp:13
std::unique_ptr< ScopedCpuTensorHandle > m_Mean
A unique pointer to store Mean values.
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: InputLayer.hpp:13
void Connect(armnn::IConnectableLayer *from, armnn::IConnectableLayer *to, const armnn::TensorInfo &tensorInfo, unsigned int fromIndex, unsigned int toIndex)
Definition: TestUtils.cpp:12
A BatchNormalizationDescriptor for the BatchNormalizationLayer.

◆ BOOST_AUTO_TEST_CASE() [2/4]

BOOST_AUTO_TEST_CASE ( ReleaseConvolution2dLayerConstantDataTest  )

Definition at line 75 of file LayerReleaseConstantDataTest.cpp.

References Graph::AddLayer(), BOOST_CHECK(), Connect(), armnn::Float32, armnn::GetBiasDataType(), Convolution2dLayer::m_Bias, Convolution2dDescriptor::m_BiasEnabled, Convolution2dDescriptor::m_PadBottom, Convolution2dDescriptor::m_PadLeft, Convolution2dDescriptor::m_PadRight, Convolution2dDescriptor::m_PadTop, Convolution2dDescriptor::m_StrideX, Convolution2dDescriptor::m_StrideY, Convolution2dLayer::m_Weight, and Layer::ReleaseConstantData().

76  {
77  Graph graph;
78 
79  // create the layer we're testing
80  Convolution2dDescriptor layerDesc;
81  layerDesc.m_PadLeft = 3;
82  layerDesc.m_PadRight = 3;
83  layerDesc.m_PadTop = 1;
84  layerDesc.m_PadBottom = 1;
85  layerDesc.m_StrideX = 2;
86  layerDesc.m_StrideY = 4;
87  layerDesc.m_BiasEnabled = true;
88 
89  Convolution2dLayer* const layer = graph.AddLayer<Convolution2dLayer>(layerDesc, "layer");
90 
91  layer->m_Weight = std::make_unique<ScopedCpuTensorHandle>(TensorInfo({2, 3, 5, 3},
93  layer->m_Bias = std::make_unique<ScopedCpuTensorHandle>
95 
96  layer->m_Weight->Allocate();
97  layer->m_Bias->Allocate();
98 
99  // create extra layers
100  Layer* const input = graph.AddLayer<InputLayer>(0, "input");
101  Layer* const output = graph.AddLayer<OutputLayer>(0, "output");
102 
103  // connect up
104  Connect(input, layer, TensorInfo({2, 3, 8, 16}, armnn::DataType::Float32));
105  Connect(layer, output, TensorInfo({2, 2, 2, 10}, armnn::DataType::Float32));
106 
107  // check the constants that they are not NULL
108  BOOST_CHECK(layer->m_Weight != nullptr);
109  BOOST_CHECK(layer->m_Bias != nullptr);
110 
111  // free up the constants..
112  layer->ReleaseConstantData();
113 
114  // check the constants that they are NULL now
115  BOOST_CHECK(layer->m_Weight == nullptr);
116  BOOST_CHECK(layer->m_Bias == nullptr);
117 }
virtual void ReleaseConstantData()
Definition: Layer.cpp:264
uint32_t m_PadBottom
Padding bottom value in the height dimension.
bool m_BiasEnabled
Enable/disable bias.
LayerT * AddLayer(Args &&... args)
Adds a new layer, of type LayerType, to the graph constructed with the arguments passed.
Definition: Graph.hpp:397
std::unique_ptr< ScopedCpuTensorHandle > m_Bias
A unique pointer to store Bias values.
A Convolution2dDescriptor for the Convolution2dLayer.
uint32_t m_PadRight
Padding right value in the width dimension.
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
uint32_t m_PadTop
Padding top value in the height dimension.
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: OutputLayer.hpp:13
std::unique_ptr< ScopedCpuTensorHandle > m_Weight
A unique pointer to store Weight values.
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
DataType GetBiasDataType(DataType inputDataType)
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: InputLayer.hpp:13
This layer represents a convolution 2d operation.
void Connect(armnn::IConnectableLayer *from, armnn::IConnectableLayer *to, const armnn::TensorInfo &tensorInfo, unsigned int fromIndex, unsigned int toIndex)
Definition: TestUtils.cpp:12
uint32_t m_PadLeft
Padding left value in the width dimension.

◆ BOOST_AUTO_TEST_CASE() [3/4]

BOOST_AUTO_TEST_CASE ( ReleaseDepthwiseConvolution2dLayerConstantDataTest  )

Definition at line 119 of file LayerReleaseConstantDataTest.cpp.

References Graph::AddLayer(), BOOST_CHECK(), Connect(), armnn::Float32, DepthwiseConvolution2dLayer::m_Bias, DepthwiseConvolution2dDescriptor::m_BiasEnabled, DepthwiseConvolution2dDescriptor::m_PadBottom, DepthwiseConvolution2dDescriptor::m_PadLeft, DepthwiseConvolution2dDescriptor::m_PadRight, DepthwiseConvolution2dDescriptor::m_PadTop, DepthwiseConvolution2dDescriptor::m_StrideX, DepthwiseConvolution2dDescriptor::m_StrideY, DepthwiseConvolution2dLayer::m_Weight, and Layer::ReleaseConstantData().

120 {
121  Graph graph;
122 
123  // create the layer we're testing
125  layerDesc.m_PadLeft = 3;
126  layerDesc.m_PadRight = 3;
127  layerDesc.m_PadTop = 1;
128  layerDesc.m_PadBottom = 1;
129  layerDesc.m_StrideX = 2;
130  layerDesc.m_StrideY = 4;
131  layerDesc.m_BiasEnabled = true;
132 
133  DepthwiseConvolution2dLayer* const layer = graph.AddLayer<DepthwiseConvolution2dLayer>(layerDesc, "layer");
134 
135  layer->m_Weight = std::make_unique<ScopedCpuTensorHandle>(TensorInfo({3, 3, 5, 3}, DataType::Float32));
136  layer->m_Bias = std::make_unique<ScopedCpuTensorHandle>(TensorInfo({9}, DataType::Float32));
137  layer->m_Weight->Allocate();
138  layer->m_Bias->Allocate();
139 
140  // create extra layers
141  Layer* const input = graph.AddLayer<InputLayer>(0, "input");
142  Layer* const output = graph.AddLayer<OutputLayer>(0, "output");
143 
144  // connect up
145  Connect(input, layer, TensorInfo({2, 3, 8, 16}, armnn::DataType::Float32));
146  Connect(layer, output, TensorInfo({2, 9, 2, 10}, armnn::DataType::Float32));
147 
148  // check the constants that they are not NULL
149  BOOST_CHECK(layer->m_Weight != nullptr);
150  BOOST_CHECK(layer->m_Bias != nullptr);
151 
152  // free up the constants..
153  layer->ReleaseConstantData();
154 
155  // check the constants that they are NULL now
156  BOOST_CHECK(layer->m_Weight == nullptr);
157  BOOST_CHECK(layer->m_Bias == nullptr);
158 }
virtual void ReleaseConstantData()
Definition: Layer.cpp:264
bool m_BiasEnabled
Enable/disable bias.
uint32_t m_PadBottom
Padding bottom value in the height dimension.
This layer represents a depthwise convolution 2d operation.
std::unique_ptr< ScopedCpuTensorHandle > m_Bias
A unique pointer to store Bias values.
LayerT * AddLayer(Args &&... args)
Adds a new layer, of type LayerType, to the graph constructed with the arguments passed.
Definition: Graph.hpp:397
uint32_t m_PadLeft
Padding left value in the width dimension.
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: OutputLayer.hpp:13
uint32_t m_PadTop
Padding top value in the height dimension.
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: InputLayer.hpp:13
void Connect(armnn::IConnectableLayer *from, armnn::IConnectableLayer *to, const armnn::TensorInfo &tensorInfo, unsigned int fromIndex, unsigned int toIndex)
Definition: TestUtils.cpp:12
std::unique_ptr< ScopedCpuTensorHandle > m_Weight
A unique pointer to store Weight values.
A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.
uint32_t m_PadRight
Padding right value in the width dimension.

◆ BOOST_AUTO_TEST_CASE() [4/4]

BOOST_AUTO_TEST_CASE ( ReleaseFullyConnectedLayerConstantDataTest  )

Definition at line 160 of file LayerReleaseConstantDataTest.cpp.

References Graph::AddLayer(), BOOST_AUTO_TEST_SUITE_END(), BOOST_CHECK(), Connect(), armnn::GetBiasDataType(), FullyConnectedLayer::m_Bias, FullyConnectedDescriptor::m_BiasEnabled, FullyConnectedDescriptor::m_TransposeWeightMatrix, FullyConnectedLayer::m_Weight, armnn::QAsymmU8, and Layer::ReleaseConstantData().

161 {
162  Graph graph;
163 
164  // create the layer we're testing
165  FullyConnectedDescriptor layerDesc;
166  layerDesc.m_BiasEnabled = true;
167  layerDesc.m_TransposeWeightMatrix = true;
168 
169  FullyConnectedLayer* const layer = graph.AddLayer<FullyConnectedLayer>(layerDesc, "layer");
170 
171  float inputsQScale = 1.0f;
172  float outputQScale = 2.0f;
173 
174  layer->m_Weight = std::make_unique<ScopedCpuTensorHandle>(TensorInfo({7, 20},
175  DataType::QAsymmU8, inputsQScale, 0));
176  layer->m_Bias = std::make_unique<ScopedCpuTensorHandle>(TensorInfo({7},
177  GetBiasDataType(DataType::QAsymmU8), inputsQScale));
178  layer->m_Weight->Allocate();
179  layer->m_Bias->Allocate();
180 
181  // create extra layers
182  Layer* const input = graph.AddLayer<InputLayer>(0, "input");
183  Layer* const output = graph.AddLayer<OutputLayer>(0, "output");
184 
185  // connect up
186  Connect(input, layer, TensorInfo({3, 1, 4, 5}, DataType::QAsymmU8, inputsQScale));
187  Connect(layer, output, TensorInfo({3, 7}, DataType::QAsymmU8, outputQScale));
188 
189  // check the constants that they are not NULL
190  BOOST_CHECK(layer->m_Weight != nullptr);
191  BOOST_CHECK(layer->m_Bias != nullptr);
192 
193  // free up the constants..
194  layer->ReleaseConstantData();
195 
196  // check the constants that they are NULL now
197  BOOST_CHECK(layer->m_Weight == nullptr);
198  BOOST_CHECK(layer->m_Bias == nullptr);
199 }
virtual void ReleaseConstantData()
Definition: Layer.cpp:264
std::unique_ptr< ScopedCpuTensorHandle > m_Weight
A unique pointer to store Weight values.
LayerT * AddLayer(Args &&... args)
Adds a new layer, of type LayerType, to the graph constructed with the arguments passed.
Definition: Graph.hpp:397
bool m_TransposeWeightMatrix
Enable/disable transpose weight matrix.
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: OutputLayer.hpp:13
This layer represents a fully connected operation.
A FullyConnectedDescriptor for the FullyConnectedLayer.
bool m_BiasEnabled
Enable/disable bias.
DataType GetBiasDataType(DataType inputDataType)
A layer user-provided data can be bound to (e.g. inputs, outputs).
Definition: InputLayer.hpp:13
std::unique_ptr< ScopedCpuTensorHandle > m_Bias
A unique pointer to store Bias values.
void Connect(armnn::IConnectableLayer *from, armnn::IConnectableLayer *to, const armnn::TensorInfo &tensorInfo, unsigned int fromIndex, unsigned int toIndex)
Definition: TestUtils.cpp:12