aboutsummaryrefslogtreecommitdiff
path: root/21.02/_create_workload_8hpp_source.xhtml
blob: 03f1e06e22b6f7200bcb5ec8f1ec01bcc199ca8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: src/armnn/test/CreateWorkload.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_create_workload_8hpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">CreateWorkload.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_create_workload_8hpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_test_utils_8hpp.xhtml">TestUtils.hpp</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_graph_8hpp.xhtml">Graph.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_network_8hpp.xhtml">Network.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_resolve_type_8hpp.xhtml">ResolveType.hpp</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_data_layout_indexed_8hpp.xhtml">armnnUtils/DataLayoutIndexed.hpp</a>&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_ignore_unused_8hpp.xhtml">armnn/utility/IgnoreUnused.hpp</a>&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_polymorphic_downcast_8hpp.xhtml">armnn/utility/PolymorphicDowncast.hpp</a>&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_workload_data_8hpp.xhtml">backendsCommon/WorkloadData.hpp</a>&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_workload_factory_8hpp.xhtml">backendsCommon/WorkloadFactory.hpp</a>&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_cpu_tensor_handle_8hpp.xhtml">backendsCommon/CpuTensorHandle.hpp</a>&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;boost/test/unit_test.hpp&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">namespace</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.xhtml">std</a>;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">// Calls CreateWorkload for a layer, and checks the returned pointer is of the correct type.</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Workload&gt;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;std::unique_ptr&lt;Workload&gt; MakeAndCheckWorkload(<a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>&amp; layer,</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;                                               <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;                                               <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a>&amp; modelOptions = {})</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;{</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    std::unique_ptr&lt;IWorkload&gt; workload = layer.<a class="code" href="classarmnn_1_1_layer.xhtml#a08d1e10a45f15cd0bd02557be35a3864">CreateWorkload</a>(factory);</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    BOOST_TEST(workload.get() == PolymorphicDowncast&lt;Workload*&gt;(workload.get()),</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;               <span class="stringliteral">&quot;Cannot convert to derived class&quot;</span>);</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    std::string reasonIfUnsupported;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    layer.<a class="code" href="classarmnn_1_1_layer.xhtml#a3f6ad59212fa8a47c9265162fff8a274">SetBackendId</a>(factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">GetBackendId</a>());</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    BOOST_TEST(factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a74dc9ec1a223eab8b072368b2dacee87">IsLayerSupported</a>(layer, layer.<a class="code" href="classarmnn_1_1_layer.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>(), reasonIfUnsupported, modelOptions));</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keywordflow">return</span> std::unique_ptr&lt;Workload&gt;(<span class="keyword">static_cast&lt;</span>Workload*<span class="keyword">&gt;</span>(workload.release()));</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;}</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">// Helper function to create tensor handlers for workloads, assuming they all use the same factory.</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keywordtype">void</span> CreateTensorHandles(<a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                         <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory)</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">TensorHandleFactoryRegistry</a> tmpRegistry;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a9a7209345edfdb2b066b0ceb66414d7c">TopologicalSort</a>())</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    {</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a3ff62126ec713a2708e5fbaa6146a7de">CreateTensorHandles</a>(tmpRegistry, factory);</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    }</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;}</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">/////////////////////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment"></span><span class="comment">// The following functions are called by backendsCommon/test/CreateWorkload*.cpp</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">// They build very simple graphs, and then create a workload.</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">// Some checks are performed on the workload to ensure parameters have been passed correctly.</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">// They return the created workloads so that backend-specific checks can be performed.</span><span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">/////////////////////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ActivationWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;std::unique_ptr&lt;ActivationWorkload&gt; CreateActivationWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;                                                                 <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph)</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;{</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> layerDesc;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">ActivationFunction::Abs</a>;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a>        = 3.5f;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a>        = -10.0f;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <a class="code" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({1, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;ActivationWorkload&gt;(*layer, factory);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <a class="code" href="structarmnn_1_1_activation_queue_descriptor.xhtml">ActivationQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_A == 3.5f);</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_B == -10.0f);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_Function == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">ActivationFunction::Abs</a>));</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;}</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> WorkloadType,</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;          <span class="keyword">typename</span> DescriptorType,</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;          <span class="keyword">typename</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>,</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;          <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;std::unique_ptr&lt;WorkloadType&gt; CreateElementwiseWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a> &amp; factory,</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                                                            <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a> &amp; graph)</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;LayerType&gt;(<span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;input1&quot;</span>);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input2 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;input2&quot;</span>);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input1, layer, tensorInfo, 0, 0);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input2, layer, tensorInfo, 0, 1);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;WorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    DescriptorType queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 2);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;}</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> WorkloadType,</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;         <span class="keyword">typename</span> DescriptorType,</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;         <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;std::unique_ptr&lt;WorkloadType&gt; CreateSubtractionWithBlobWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;                                                                    <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;{</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <a class="code" href="classarmnn_1_1_subtraction_layer.xhtml">SubtractionLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_subtraction_layer.xhtml">SubtractionLayer</a>&gt;(<span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keyword">auto</span> activationDesc = std::make_shared&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    activationDesc-&gt;m_A        = 10.0f;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    activationDesc-&gt;m_B        = 5.0f;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    activationDesc-&gt;m_Function = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">SetAdditionalInfoForObject</a>(activationDesc);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;input1&quot;</span>);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input2 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;input2&quot;</span>);</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input1, layer, tensorInfo, 0, 0);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input2, layer, tensorInfo, 0, 1);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="comment">// Check that the additional information can be queried from the layer</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    std::shared_ptr&lt;ActivationDescriptor&gt;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        activationDescPtr = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aefb14147290b6b928c5fc924ba035acc">GetAdditionalInformation</a>&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        static_cast&lt;ActivationFunction&gt;(activationDescPtr-&gt;m_Function) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    );</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;WorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    DescriptorType queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>* queueDescBlobPtr =</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        queueDescriptor.template GetAdditionalInformation&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(queueDescBlobPtr);</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a>) == 10.0f);</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a>) == 5.0f);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        static_cast&lt;ActivationFunction&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a>) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    );</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 2);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;}</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> WorkloadType,</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;         <span class="keyword">typename</span> DescriptorType,</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;         <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;std::unique_ptr&lt;WorkloadType&gt; CreateMultiplicationWithBlobWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;{</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <a class="code" href="classarmnn_1_1_multiplication_layer.xhtml">MultiplicationLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_multiplication_layer.xhtml">MultiplicationLayer</a>&gt;(<span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    <span class="keyword">auto</span> activationDesc = std::make_shared&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    activationDesc-&gt;m_A        = 10.0f;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    activationDesc-&gt;m_B        = 5.0f;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    activationDesc-&gt;m_Function = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">SetAdditionalInfoForObject</a>(activationDesc);</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;input1&quot;</span>);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input2 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;input2&quot;</span>);</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input1, layer, tensorInfo, 0, 0);</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input2, layer, tensorInfo, 0, 1);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    <span class="comment">// Check that the additional information can be queried from the layer</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    std::shared_ptr&lt;ActivationDescriptor&gt;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        activationDescPtr = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aefb14147290b6b928c5fc924ba035acc">GetAdditionalInformation</a>&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        static_cast&lt;ActivationFunction&gt;(activationDescPtr-&gt;m_Function) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    );</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;WorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    DescriptorType queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 2);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>* queueDescBlobPtr =</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        queueDescriptor.template GetAdditionalInformation&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(queueDescBlobPtr);</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        static_cast&lt;ActivationFunction&gt;(queueDescBlobPtr-&gt;m_Function) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    );</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keywordflow">return</span> workload;<span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;}</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> WorkloadType,</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;         <span class="keyword">typename</span> DescriptorType,</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;         <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;std::unique_ptr&lt;WorkloadType&gt; CreateAdditionWithBlobWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;                                                                 <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;{</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <a class="code" href="classarmnn_1_1_addition_layer.xhtml">AdditionLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_addition_layer.xhtml">AdditionLayer</a>&gt;(<span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keyword">auto</span> activationDesc = std::make_shared&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    activationDesc-&gt;m_A        = 10.0f;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    activationDesc-&gt;m_B        = 5.0f;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    activationDesc-&gt;m_Function = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">SetAdditionalInfoForObject</a>(activationDesc);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;input1&quot;</span>);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input2 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;input2&quot;</span>);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input1, layer, tensorInfo, 0, 0);</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input2, layer, tensorInfo, 0, 1);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="comment">// Check that the additional information can be queried from the layer</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    std::shared_ptr&lt;ActivationDescriptor&gt;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        activationDescPtr = layer-&gt;template GetAdditionalInformation&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;        static_cast&lt;ActivationFunction&gt;(activationDescPtr-&gt;m_Function) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    );</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;WorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    DescriptorType queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>* queueDescBlobPtr =</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        queueDescriptor.template GetAdditionalInformation&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(queueDescBlobPtr);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 2);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a>) == 10.0f);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a>) == 5.0f);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        static_cast&lt;ActivationFunction&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a>) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    );</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;}</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> WorkloadType,</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;          <span class="keyword">typename</span> DescriptorType,</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;          <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>&gt;</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;std::unique_ptr&lt;WorkloadType&gt; CreateElementwiseUnaryWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a> &amp; factory,</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;                                                                 <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a> &amp; graph,</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;                                                                 <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8">armnn::UnaryOperation</a> op)</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;{</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <a class="code" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">ElementwiseUnaryDescriptor</a> desc = <a class="code" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">ElementwiseUnaryDescriptor</a>(op);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_elementwise_unary_layer.xhtml">armnn::ElementwiseUnaryLayer</a>&gt;(desc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input  = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({ 2, 3 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo, 0, 0);</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo, 0, 0);</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;WorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    DescriptorType queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size()  == 1);</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;}</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> BatchNormalizationWorkloadType, armnn::DataType DataType&gt;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;std::unique_ptr&lt;BatchNormalizationWorkloadType&gt; CreateBatchNormalizationWorkloadTest(</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;{</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> tensorShape;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    {</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;            tensorShape = { 2, 4, 4, 3 };</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;            tensorShape = { 2, 3, 4, 4 };</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    }</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> layerDesc;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a11c821c7524251004a72ed13c510853c">m_Eps</a> = 0.05f;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> weightInfo({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a3540afac8fad99bbe68b3f7b57590160">m_Mean</a>     = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aa5685ee78433980cf535d745d1fcab55">m_Variance</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a77c30d191e7ee8917e2c0ff5e97f5640">m_Beta</a>     = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aec22bddf14a932c4a72796c30669066b">m_Gamma</a>    = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a3540afac8fad99bbe68b3f7b57590160">m_Mean</a>-&gt;Allocate();</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aa5685ee78433980cf535d745d1fcab55">m_Variance</a>-&gt;Allocate();</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a77c30d191e7ee8917e2c0ff5e97f5640">m_Beta</a>-&gt;Allocate();</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aec22bddf14a932c4a72796c30669066b">m_Gamma</a>-&gt;Allocate();</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo(tensorShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;BatchNormalizationWorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <a class="code" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml">BatchNormalizationQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_Eps == 0.05f);</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    BOOST_TEST((queueDescriptor.m_Mean-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    BOOST_TEST((queueDescriptor.m_Variance-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    BOOST_TEST((queueDescriptor.m_Gamma-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    BOOST_TEST((queueDescriptor.m_Beta-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;}</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> BatchNormalizationWorkloadType, armnn::DataType DataType&gt;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;std::unique_ptr&lt;BatchNormalizationWorkloadType&gt; CreateBatchNormalizationWithBlobWorkloadTest(</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> tensorShape;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    {</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;            tensorShape = { 2, 4, 4, 3 };</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;            tensorShape = { 2, 3, 4, 4 };</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    }</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> layerDesc;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a11c821c7524251004a72ed13c510853c">m_Eps</a> = 0.05f;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml">BatchNormalizationLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> weightInfo({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a3540afac8fad99bbe68b3f7b57590160">m_Mean</a>     = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aa5685ee78433980cf535d745d1fcab55">m_Variance</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a77c30d191e7ee8917e2c0ff5e97f5640">m_Beta</a>     = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aec22bddf14a932c4a72796c30669066b">m_Gamma</a>    = std::make_unique&lt;ScopedCpuTensorHandle&gt;(weightInfo);</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a3540afac8fad99bbe68b3f7b57590160">m_Mean</a>-&gt;Allocate();</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aa5685ee78433980cf535d745d1fcab55">m_Variance</a>-&gt;Allocate();</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#a77c30d191e7ee8917e2c0ff5e97f5640">m_Beta</a>-&gt;Allocate();</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_batch_normalization_layer.xhtml#aec22bddf14a932c4a72796c30669066b">m_Gamma</a>-&gt;Allocate();</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="keyword">auto</span> activationDesc = std::make_shared&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    activationDesc-&gt;m_A        = 10.0f;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    activationDesc-&gt;m_B        = 5.0f;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    activationDesc-&gt;m_Function = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">SetAdditionalInfoForObject</a>(activationDesc);</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="comment">// Check that the additional information can be queried from the layer</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    std::shared_ptr&lt;ActivationDescriptor&gt; activationDescPtr = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aefb14147290b6b928c5fc924ba035acc">GetAdditionalInformation</a>&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        static_cast&lt;ActivationFunction&gt;(activationDescPtr-&gt;m_Function) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    );</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo(tensorShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;BatchNormalizationWorkloadType&gt;(*layer, factory);</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    <a class="code" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml">BatchNormalizationQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>* queueDescBlobPtr = queueDescriptor.GetAdditionalInformation&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(queueDescBlobPtr);</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a>) == 10.0f);</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a>) == 5.0f);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        static_cast&lt;ActivationFunction&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a>) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    );</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_Eps == 0.05f);</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    BOOST_TEST((queueDescriptor.m_Mean-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    BOOST_TEST((queueDescriptor.m_Variance-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    BOOST_TEST((queueDescriptor.m_Gamma-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    BOOST_TEST((queueDescriptor.m_Beta-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;}</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Convolution2dWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;std::unique_ptr&lt;Convolution2dWorkload&gt; CreateConvolution2dWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;                                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph,</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;                                                                       <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>,</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;                                                                       <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a>&amp; modelOptions = {})</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;{</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> layerDesc;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 3;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 3;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 1;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 1;</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 2;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 4;</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    <a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> weightShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 3, 5, 3} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 5, 3, 3};</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape  = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 3, 8, 16} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 8, 16, 3};</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 2, 2, 10} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 2, 10, 2};</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(weightShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>   = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>-&gt;Allocate();</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;Convolution2dWorkload&gt;(*layer, factory, modelOptions);</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideX == 2);</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideY == 4);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadLeft == 3);</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadRight == 3);</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadTop == 1);</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadBottom == 1);</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_BiasEnabled);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(weightShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    BOOST_TEST((queueDescriptor.m_Bias-&gt;GetTensorInfo() ==</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>))));</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;}</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Convolution2dWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;std::unique_ptr&lt;Convolution2dWorkload&gt; CreateConvolution2dFusedActivationWithBlobWorkloadTest(</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>,</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a>&amp; modelOptions = {})</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;{</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> layerDesc;</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 3;</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 3;</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 1;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 1;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 2;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 4;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> weightShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 3, 5, 3} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 5, 3, 3};</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape  = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 3, 8, 16} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 8, 16, 3};</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 2, 2, 10} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{2, 2, 10, 2};</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(weightShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>   = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>-&gt;Allocate();</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    <span class="keyword">auto</span> activationDesc = std::make_shared&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    activationDesc-&gt;m_A        = 10.0f;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    activationDesc-&gt;m_B        = 5.0f;</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    activationDesc-&gt;m_Function = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">SetAdditionalInfoForObject</a>(activationDesc);</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="comment">// Check that the additional information can be queried from the layer</span></div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    std::shared_ptr&lt;ActivationDescriptor&gt; activationDescPtr = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aefb14147290b6b928c5fc924ba035acc">GetAdditionalInformation</a>&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;        static_cast&lt;ActivationFunction&gt;(activationDescPtr-&gt;m_Function) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    );</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;Convolution2dWorkload&gt;(*layer, factory, modelOptions);</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>* queueDescBlobPtr = queueDescriptor.GetAdditionalInformation&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(queueDescBlobPtr);</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a>) == 10.0f);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a>) == 5.0f);</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        static_cast&lt;ActivationFunction&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a>) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    );</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideX == 2);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideY == 4);</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadLeft == 3);</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadRight == 3);</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadTop == 1);</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadBottom == 1);</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_BiasEnabled);</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(weightShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    BOOST_TEST((queueDescriptor.m_Bias-&gt;GetTensorInfo() ==</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>))));</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;}</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Convolution2dWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;std::unique_ptr&lt;Convolution2dWorkload&gt; CreateConvolution2dWorkloadFastMathTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;                                                                               <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph,</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;                                                                               <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>,</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;                                                                               <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a>&amp; modelOptions = {})</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;{</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> layerDesc;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 0;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 0;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 0;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 0;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 1;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 1;</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> weightShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{32, 32, 3, 3};</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape  = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{1, 32, 149, 149};</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{1, 32, 147, 147};</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(weightShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>   = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>-&gt;Allocate();</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;Convolution2dWorkload&gt;(*layer, factory, modelOptions);</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideX == 1);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideY == 1);</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadLeft == 0);</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadRight == 0);</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadTop == 0);</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadBottom == 0);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(weightShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;}</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> LstmWorkload&gt;</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;std::unique_ptr&lt;LstmWorkload&gt; CreateLstmWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;{</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    <span class="comment">// This parameter setting is for withCifgWithPeepholeNoProjection</span></div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    <a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml">LstmDescriptor</a> layerDesc;</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml#ae1b07ed928036004bd257169e5aeeef4">m_ActivationFunc</a> = 4;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml#a531a3907ec13d3772370da88030191a5">m_ClippingThresCell</a> = 0.0f;</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml#a86e88bef0df4df96df752b4b8955a3af">m_ClippingThresProj</a> = 0.0f;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml#a2837b4396f20c956952d1a7286cab5f8">m_PeepholeEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_lstm_descriptor.xhtml#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <a class="code" href="classarmnn_1_1_lstm_layer.xhtml">LstmLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml">LstmLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize = 2;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = 2;</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUnits = 4;</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = 4;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a5a0d8af26a6aad1e5be521ea7dc550eb">m_InputToForgetWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, inputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a14ab2bc78421c417c4f97a65b0bd78f9">m_InputToCellWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, inputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#ae8d897b8d282f25a6eb784c4aaa98df6">m_InputToOutputWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, inputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a3d5f129421bbe6479a66d4ed1356bf68">m_RecurrentToForgetWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, outputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a6e8c3db3c5474f0760553ff93fbc39e6">m_RecurrentToCellWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, outputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a91dda74af4085ae43913746ad817795a">m_RecurrentToOutputWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, outputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a0e0e17d5b494993407cb75d614455ddd">m_ForgetGateBias</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a51255889cbc063130a3d691c1781c5d3">m_CellBias</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#aacb55e0992b6781a7bd3225ab6e6bb2f">m_OutputGateBias</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;            (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a5a0d8af26a6aad1e5be521ea7dc550eb">m_InputToForgetWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a14ab2bc78421c417c4f97a65b0bd78f9">m_InputToCellWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#ae8d897b8d282f25a6eb784c4aaa98df6">m_InputToOutputWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a3d5f129421bbe6479a66d4ed1356bf68">m_RecurrentToForgetWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a6e8c3db3c5474f0760553ff93fbc39e6">m_RecurrentToCellWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a91dda74af4085ae43913746ad817795a">m_RecurrentToOutputWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a0e0e17d5b494993407cb75d614455ddd">m_ForgetGateBias</a>-&gt;Allocate();</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#a51255889cbc063130a3d691c1781c5d3">m_CellBias</a>-&gt;Allocate();</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_lstm_basic_parameters.xhtml#aacb55e0992b6781a7bd3225ab6e6bb2f">m_OutputGateBias</a>-&gt;Allocate();</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    <span class="keywordflow">if</span> (layerDesc.m_PeepholeEnabled)</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    {</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a4efa0f4d46817ab94e36c8507c26f276">m_PeepholeParameters</a>.<a class="code" href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml#a5d0ebbbb11b727a67877df40b59a628c">m_CellToForgetWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;                (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a4efa0f4d46817ab94e36c8507c26f276">m_PeepholeParameters</a>.<a class="code" href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml#a310e133b0b51b93a74b83008893792e9">m_CellToOutputWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;                (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>));</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a4efa0f4d46817ab94e36c8507c26f276">m_PeepholeParameters</a>.<a class="code" href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml#a5d0ebbbb11b727a67877df40b59a628c">m_CellToForgetWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_lstm_layer.xhtml#a4efa0f4d46817ab94e36c8507c26f276">m_PeepholeParameters</a>.<a class="code" href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml#a310e133b0b51b93a74b83008893792e9">m_CellToOutputWeights</a>-&gt;Allocate();</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    }</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="comment">// create input and output layers</span></div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> outputStateIn = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;outputStateIn&quot;</span>);</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> cellStateIn = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;cellStateIn&quot;</span>);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> scratchBuffer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;scratchBuffer&quot;</span>);</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> outputStateOut = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(1, <span class="stringliteral">&quot;outputStateOut&quot;</span>);</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> cellStateOut = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(2, <span class="stringliteral">&quot;cellStateOut&quot;</span>);</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(3, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    <span class="comment">// connect up</span></div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> lstmTensorInfo1({ batchSize, inputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> lstmTensorInfo2({ batchSize, numUnits}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> lstmTensorInfo3({ batchSize, outputSize }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> lstmTensorInfoScratchBuff({ batchSize, numUnits * (layerDesc.m_CifgEnabled ? 3 : 4) },</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;                                                <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, lstmTensorInfo1, 0, 0);</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(cellStateIn, layer, lstmTensorInfo2, 0, 1);</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(outputStateIn, layer, lstmTensorInfo3, 0, 2);</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, scratchBuffer, lstmTensorInfoScratchBuff, 0, 0);</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, outputStateOut, lstmTensorInfo3, 1, 0);</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, cellStateOut, lstmTensorInfo2, 2, 0);</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, lstmTensorInfo3, 3, 0);</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    <span class="comment">// make the workload and check it</span></div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;LstmWorkload&gt;(*layer, factory);</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.xhtml">LstmQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_ActivationFunc == 4);</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_ClippingThresCell == 0.0f);</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_ClippingThresProj == 0.0f);</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 3);</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 4);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToForgetWeights-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits, inputSize },</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;                                                                                     <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)));</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    BOOST_TEST((queueDescriptor.m_OutputGateBias-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits },</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                                                                                     <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)));</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    BOOST_TEST((queueDescriptor.m_CellBias-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ numUnits }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)));</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;}</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> QuantizedLstmWorkload&gt;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;std::unique_ptr&lt;QuantizedLstmWorkload&gt; CreateQuantizedLstmWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;                                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;{</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    <span class="keyword">auto</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_quantized_lstm_layer.xhtml">QuantizedLstmLayer</a>&gt;(<span class="stringliteral">&quot;quantizedLstmlayer&quot;</span>);</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numBatches = 2;</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize = 2;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = 4;</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    <span class="comment">// Scale/Offset for input/output, cellState In/Out, weights, bias</span></div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="keywordtype">float</span> inputOutputScale = 0.0078125f;</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    int32_t inputOutputOffset = 128;</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    <span class="keywordtype">float</span> cellStateScale = 0.00048828125f;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    int32_t cellStateOffset = 0;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="keywordtype">float</span> weightsScale = 0.00408021f;</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    int32_t weightsOffset = 100;</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <span class="keywordtype">float</span> biasScale = 3.1876640625e-05f;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    int32_t biasOffset = 0;</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <span class="comment">// Weights and bias tensor and quantization info</span></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputWeightsInfo({outputSize, inputSize},</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;                                       <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>,</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;                                       weightsScale,</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;                                       weightsOffset);</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> recurrentWeightsInfo({outputSize, outputSize},</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;                                           <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>,</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;                                           weightsScale,</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;                                           weightsOffset);</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasInfo({outputSize},</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;                               <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>,</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;                               biasScale,</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;                               biasOffset);</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    <span class="comment">// Weights and bias</span></div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToInputWeights =</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToForgetWeights =</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToCellWeights =</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToOutputWeights =</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToInputWeights =</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToForgetWeights =</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToCellWeights =</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToOutputWeights =</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputGateBias = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_ForgetGateBias = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_CellBias = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_OutputGateBias = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    <span class="comment">// Allocate weights and bias</span></div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToInputWeights-&gt;Allocate();</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToForgetWeights-&gt;Allocate();</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToCellWeights-&gt;Allocate();</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputToOutputWeights-&gt;Allocate();</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToInputWeights-&gt;Allocate();</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToForgetWeights-&gt;Allocate();</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToCellWeights-&gt;Allocate();</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_RecurrentToOutputWeights-&gt;Allocate();</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_InputGateBias-&gt;Allocate();</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_ForgetGateBias-&gt;Allocate();</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_CellBias-&gt;Allocate();</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    layer-&gt;m_QuantizedLstmParameters.m_OutputGateBias-&gt;Allocate();</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    <span class="comment">// Create input and output layers</span></div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> cellStateIn = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;cellStateIn&quot;</span>);</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> outputStateIn = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;outputStateIn&quot;</span>);</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> cellStateOut = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;cellStateOut&quot;</span>);</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> outputStateOut = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(1, <span class="stringliteral">&quot;outputStateOut&quot;</span>);</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    <span class="comment">// Input/output tensor info and quantization info</span></div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputInfo({numBatches , inputSize},</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;                                <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>,</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;                                inputOutputScale,</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;                                inputOutputOffset);</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> cellStateInfo({numBatches , outputSize},</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                                    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>,</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;                                    cellStateScale,</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;                                    cellStateOffset);</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputStateInfo({numBatches , outputSize},</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;                                      <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>,</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;                                      inputOutputScale,</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;                                      inputOutputOffset);</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    <span class="comment">// Connect input/output slots</span></div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputInfo, 0, 0);</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(cellStateIn, layer, cellStateInfo, 0, 1);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(outputStateIn, layer, outputStateInfo, 0, 2);</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, cellStateOut, cellStateInfo, 0, 0);</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, outputStateOut, outputStateInfo, 1, 0);</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    <span class="comment">// Create workload and check layer support</span></div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;QuantizedLstmWorkload&gt;(*layer, factory);</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    <a class="code" href="structarmnn_1_1_quantized_lstm_queue_descriptor.xhtml">QuantizedLstmQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <span class="comment">// Validate input/output sizes</span></div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 3);</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 2);</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    <span class="comment">// Validate weight tensor info</span></div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToInputWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToForgetWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToCellWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToOutputWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToInputWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToForgetWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToCellWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToOutputWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    BOOST_TEST((queueDescriptor.m_InputGateBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    BOOST_TEST((queueDescriptor.m_ForgetGateBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    BOOST_TEST((queueDescriptor.m_CellBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    BOOST_TEST((queueDescriptor.m_OutputGateBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;}</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> QLstmWorkload&gt;</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;std::unique_ptr&lt;QLstmWorkload&gt; CreateQLstmWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;{</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;    <a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml">QLstmDescriptor</a> layerDesc;</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#ad474e5c51a0b194ef32e812b86c0cbdb">m_CifgEnabled</a>       = <span class="keyword">true</span>;</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#a2837b4396f20c956952d1a7286cab5f8">m_PeepholeEnabled</a>   = <span class="keyword">false</span>;</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#a6c9de81fc65b3c4924cab11907075a17">m_ProjectionEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#a4a8ec49f130084445d44297549254780">m_LayerNormEnabled</a>  = <span class="keyword">true</span>;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#ac81fb0e66dc623dc37c77f219f53a6d3">m_CellClip</a>       = 0.0f;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#aa6a518b65088f34803b3214334bdff61">m_ProjectionClip</a> = 0.0f;</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#a4556cbd764d4848d8ad0637a9eed580d">m_HiddenStateZeroPoint</a> = 0;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#af8f724af7210b52529216feefa993c98">m_HiddenStateScale</a>     = 0.007f;</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#a09e1f097944f61cc901240f9300364cf">m_InputIntermediateScale</a>  = 0.007059f;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#afec7f36158448f723b426a9527acb189">m_ForgetIntermediateScale</a> = 0.007812f;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#a0477ee1b44ace6090119178eea78cb0b">m_CellIntermediateScale</a>   = 0.007059f;</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_q_lstm_descriptor.xhtml#aa43409f9b457352c95c89f20ce5d844d">m_OutputIntermediateScale</a> = 0.007812f;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    <a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml">QLstmLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml">QLstmLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;qLstm&quot;</span>);</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numBatches = 2;</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize  = 4;</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numUnits   = 4;</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize = 4;</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    <span class="comment">// Scale/Offset quantization info</span></div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;    <span class="keywordtype">float</span> inputScale    = 0.0078125f;</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;    int32_t inputOffset = 0;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    <span class="comment">// if (!projectionEnabled) outputScale == hiddenStateScale</span></div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;    <span class="keywordtype">float</span> outputScale    = layerDesc.m_HiddenStateScale;</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    int32_t outputOffset = layerDesc.m_HiddenStateZeroPoint;</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;    <span class="keywordtype">float</span> cellStateScale    = 3.05176e-05f;</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    int32_t cellStateOffset = 0;</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    <span class="keywordtype">float</span> weightsScale    = 0.00784314f;</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;    int32_t weightsOffset = 0;</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    <span class="keywordtype">float</span> layerNormScale    = 3.05182e-05f;</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    int32_t layerNormOffset = 0;</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;    <span class="keywordtype">float</span> biasScale    = layerNormScale / 1024;</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    int32_t biasOffset = 0;</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    <span class="comment">// Weights and bias tensor and quantization info</span></div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputWeightsInfo({outputSize, inputSize},</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;                                       <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>,</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;                                       weightsScale,</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;                                       weightsOffset);</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> recurrentWeightsInfo({outputSize, outputSize},</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;                                           <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>,</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;                                           weightsScale,</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;                                           weightsOffset);</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasInfo({outputSize}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>, biasScale, biasOffset);</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> layerNormWeightsInfo({numUnits}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>, layerNormScale, layerNormOffset);</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    <span class="comment">// Create and allocate tensors</span></div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a5a0d8af26a6aad1e5be521ea7dc550eb">m_InputToForgetWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a14ab2bc78421c417c4f97a65b0bd78f9">m_InputToCellWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#ae8d897b8d282f25a6eb784c4aaa98df6">m_InputToOutputWeights</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(inputWeightsInfo);</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a3d5f129421bbe6479a66d4ed1356bf68">m_RecurrentToForgetWeights</a> =</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a6e8c3db3c5474f0760553ff93fbc39e6">m_RecurrentToCellWeights</a> =</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a91dda74af4085ae43913746ad817795a">m_RecurrentToOutputWeights</a> =</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(recurrentWeightsInfo);</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a0e0e17d5b494993407cb75d614455ddd">m_ForgetGateBias</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a51255889cbc063130a3d691c1781c5d3">m_CellBias</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#aacb55e0992b6781a7bd3225ab6e6bb2f">m_OutputGateBias</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(biasInfo);</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">m_LayerNormParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a559113765ea5e2ddbd9e9e5e2869a103">m_ForgetLayerNormWeights</a> =</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(layerNormWeightsInfo);</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">m_LayerNormParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a3cab71ebbe91e75be538e5670a40fec5">m_CellLayerNormWeights</a> =</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(layerNormWeightsInfo);</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">m_LayerNormParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a69fdb952b874669cbb2a281815a20be2">m_OutputLayerNormWeights</a> =</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;            std::make_unique&lt;ScopedCpuTensorHandle&gt;(layerNormWeightsInfo);</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a5a0d8af26a6aad1e5be521ea7dc550eb">m_InputToForgetWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a14ab2bc78421c417c4f97a65b0bd78f9">m_InputToCellWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#ae8d897b8d282f25a6eb784c4aaa98df6">m_InputToOutputWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a3d5f129421bbe6479a66d4ed1356bf68">m_RecurrentToForgetWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a6e8c3db3c5474f0760553ff93fbc39e6">m_RecurrentToCellWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a91dda74af4085ae43913746ad817795a">m_RecurrentToOutputWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a0e0e17d5b494993407cb75d614455ddd">m_ForgetGateBias</a>-&gt;Allocate();</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a51255889cbc063130a3d691c1781c5d3">m_CellBias</a>-&gt;Allocate();</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">m_BasicParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#aacb55e0992b6781a7bd3225ab6e6bb2f">m_OutputGateBias</a>-&gt;Allocate();</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">m_LayerNormParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a559113765ea5e2ddbd9e9e5e2869a103">m_ForgetLayerNormWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">m_LayerNormParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a3cab71ebbe91e75be538e5670a40fec5">m_CellLayerNormWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">m_LayerNormParameters</a>.<a class="code" href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a69fdb952b874669cbb2a281815a20be2">m_OutputLayerNormWeights</a>-&gt;Allocate();</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    <span class="comment">// Input and output layers</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> outputStateIn = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;outputStateIn&quot;</span>);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> cellStateIn = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(2, <span class="stringliteral">&quot;cellStateIn&quot;</span>);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> outputStateOut = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;outputStateOut&quot;</span>);</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> cellStateOut = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(1, <span class="stringliteral">&quot;cellStateOut&quot;</span>);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(2, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    <span class="comment">// Input/Output tensor info</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputInfo({numBatches , inputSize},</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;                                <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>,</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;                                inputScale,</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;                                inputOffset);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> cellStateInfo({numBatches , numUnits},</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;                                    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>,</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;                                    cellStateScale,</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;                                    cellStateOffset);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputStateInfo({numBatches , outputSize},</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;                                      <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>,</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;                                      outputScale,</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;                                      outputOffset);</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;    <span class="comment">// Connect layers to slots</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputInfo, 0, 0);</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(outputStateIn, layer, outputStateInfo, 0, 1);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(cellStateIn, layer, cellStateInfo, 0, 2);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, outputStateOut, outputStateInfo, 0, 0);</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, cellStateOut, cellStateInfo, 1, 0);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputStateInfo, 2, 0);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    <span class="comment">// Create and check workload</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;QLstmWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <a class="code" href="structarmnn_1_1_q_lstm_queue_descriptor.xhtml">QLstmQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_CellClip == 0.0f);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_ProjectionClip == 0.0f);</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 3);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 3);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToForgetWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToCellWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;    BOOST_TEST((queueDescriptor.m_InputToOutputWeights-&gt;GetTensorInfo() == inputWeightsInfo));</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToForgetWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToCellWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    BOOST_TEST((queueDescriptor.m_RecurrentToOutputWeights-&gt;GetTensorInfo() == recurrentWeightsInfo));</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    BOOST_TEST((queueDescriptor.m_ForgetGateBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;    BOOST_TEST((queueDescriptor.m_CellBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;    BOOST_TEST((queueDescriptor.m_OutputGateBias-&gt;GetTensorInfo() == biasInfo));</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;}</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Convolution2dWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;std::unique_ptr&lt;Convolution2dWorkload&gt; CreateDirectConvolution2dWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;                                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph)</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;{</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> layerDesc;</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 1;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 1;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 1;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 1;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 1;</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 1;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;    <a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    <span class="keywordtype">float</span> inputsQScale = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8 ? 1.0f : 0.0;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    <span class="keywordtype">float</span> outputQScale = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8 ? 2.0f : 0.0;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ 2, 3, 3, 3 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale));</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>   = std::make_unique&lt;ScopedCpuTensorHandle&gt;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;        (<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2},  <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>), inputsQScale));</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>-&gt;Allocate();</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2, 3, 6, 6}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale));</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2, 2, 6, 6}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, outputQScale));</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;Convolution2dWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideX == 1);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideY == 1);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadLeft == 1);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadRight == 1);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadTop == 1);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadBottom == 1);</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_BiasEnabled == <span class="keyword">true</span>);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2, 3, 3, 3},</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale)));</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;    BOOST_TEST((queueDescriptor.m_Bias-&gt;GetTensorInfo()</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;                == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({2},  <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>), inputsQScale)));</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;}</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DepthwiseConvolution2dFloat32Workload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;std::unique_ptr&lt;DepthwiseConvolution2dFloat32Workload&gt; CreateDepthwiseConvolution2dWorkloadTest(</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;{</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> layerDesc;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>     = 1;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>    = 2;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>      = 1;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>   = 2;</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = dataLayout;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;    <a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({1, 2, 4, 4}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)); <span class="comment">// [ M, I, H, W ]</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ?</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 2, 2, 5, 5 } : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 2, 5, 5, 2 };</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ?</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 2, 2, 5, 5 } : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 2, 5, 5, 2 };</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;DepthwiseConvolution2dFloat32Workload&gt;(*layer, factory);</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">DepthwiseConvolution2dQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideX == 1);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideY == 1);</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadLeft == 1);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadRight == 2);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadTop == 1);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadBottom == 2);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_BiasEnabled == <span class="keyword">false</span>);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({1, 2, 4, 4}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>)));</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;}</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> FullyConnectedWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;std::unique_ptr&lt;FullyConnectedWorkload&gt; CreateFullyConnectedWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;                                                                         <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph)</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;{</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    <a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> layerDesc;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#a281fcaec86e17c97f7b8402633f6b55a">m_TransposeWeightMatrix</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;    <a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    <span class="keywordtype">float</span> inputsQScale = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8 ? 1.0f : 0.0;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;    <span class="keywordtype">float</span> outputQScale = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8 ? 2.0f : 0.0;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7, 20}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale, 0));</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>   = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>), inputsQScale));</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>-&gt;Allocate();</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3, 1, 4, 5}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale));</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3, 7}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, outputQScale));</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;FullyConnectedWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    <a class="code" href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml">FullyConnectedQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_BiasEnabled == <span class="keyword">true</span>);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_TransposeWeightMatrix == <span class="keyword">true</span>);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7, 20}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale)));</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    BOOST_TEST((queueDescriptor.m_Bias-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>), inputsQScale)));</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;}</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> FullyConnectedWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;std::unique_ptr&lt;FullyConnectedWorkload&gt; CreateFullyConnectedWithBlobWorkloadTest</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;    (<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;     <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;{</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;    <a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> layerDesc;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#a281fcaec86e17c97f7b8402633f6b55a">m_TransposeWeightMatrix</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;    <a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml">FullyConnectedLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;    <span class="keywordtype">float</span> inputsQScale = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8 ? 1.0f : 0.0;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;    <span class="keywordtype">float</span> outputQScale = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8 ? 2.0f : 0.0;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7, 20}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale, 0));</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>   = std::make_unique&lt;ScopedCpuTensorHandle&gt;(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>), inputsQScale));</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a2664044e28e69309ea08ef385fe53903">m_Weight</a>-&gt;Allocate();</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_fully_connected_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">m_Bias</a>-&gt;Allocate();</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;    <span class="keyword">auto</span> activationDesc = std::make_shared&lt;ActivationDescriptor&gt;();</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    activationDesc-&gt;m_A        = 10.0f;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    activationDesc-&gt;m_B        = 5.0f;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;    activationDesc-&gt;m_Function = <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">SetAdditionalInfoForObject</a>(activationDesc);</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;    <span class="comment">// Check that the additional information can be queried from the layer</span></div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    std::shared_ptr&lt;ActivationDescriptor&gt; activationDescPtr = layer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#aefb14147290b6b928c5fc924ba035acc">GetAdditionalInformation</a>&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_A) == 10.0f);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(activationDescPtr-&gt;m_B) == 5.0f);</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;    BOOST_ASSERT(static_cast&lt;ActivationFunction&gt;(activationDescPtr-&gt;m_Function) ==</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a>);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3, 1, 4, 5}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale));</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({3, 7}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, outputQScale));</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;FullyConnectedWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;    <a class="code" href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml">FullyConnectedQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>* queueDescBlobPtr = queueDescriptor.GetAdditionalInformation&lt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a>&gt;();</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(queueDescBlobPtr);</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a>) == 10.0f);</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;    BOOST_ASSERT(static_cast&lt;float&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a>) == 5.0f);</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;    BOOST_ASSERT(</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;        static_cast&lt;ActivationFunction&gt;(queueDescBlobPtr-&gt;<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a>) == <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;    );</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_BiasEnabled == <span class="keyword">true</span>);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_TransposeWeightMatrix == <span class="keyword">true</span>);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;    BOOST_TEST((queueDescriptor.m_Weight-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7, 20}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>, inputsQScale)));</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;    BOOST_TEST((queueDescriptor.m_Bias-&gt;GetTensorInfo() == <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({7}, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>), inputsQScale)));</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;}</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> NormalizationWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;std::unique_ptr&lt;NormalizationWorkload&gt; CreateNormalizationWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;                                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;                                                                       <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;{</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;    <a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> layerDesc;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#afe1f0f09d49ad2befc01f8789187b7dd">m_NormChannelType</a> = <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">NormalizationAlgorithmChannel::Across</a>;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a05945f080edf694b631960728b87aadb">m_NormMethodType</a> = <a class="code" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">NormalizationAlgorithmMethod::LocalBrightness</a>;</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#aa70c05f1aad12fbd9d9ec43ea4557b03">m_NormSize</a> = 3;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a174279be57d7596eeb04c6b7f7510f99">m_Alpha</a> = 0.5f;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">m_Beta</a> = -1.0f;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a8526ea7cf860d8e7f8340e9f9354f9f0">m_K</a> = 0.2f;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    <a class="code" href="classarmnn_1_1_normalization_layer.xhtml">NormalizationLayer</a>* layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_normalization_layer.xhtml">NormalizationLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ?</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 3, 5, 5, 1 } : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 3, 1, 5, 5 };</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ?</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 3, 5, 5, 1 } : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 3, 1, 5, 5 };</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;NormalizationWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;    <a class="code" href="structarmnn_1_1_normalization_queue_descriptor.xhtml">NormalizationQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_NormChannelType == <a class="code" href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">NormalizationAlgorithmChannel::Across</a>));</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_NormMethodType == <a class="code" href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">NormalizationAlgorithmMethod::LocalBrightness</a>));</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_NormSize == 3);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_Alpha == 0.5f);</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_Beta == -1.0f);</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_K == 0.2f);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;}</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pooling2dWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;std::unique_ptr&lt;Pooling2dWorkload&gt; CreatePooling2dWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;                                                               <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph,</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;                                                               <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;{</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> layerDesc;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a> = <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">PoolingAlgorithm::Average</a>;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a> = 3;</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = 3;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 2;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 2;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 1;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 1;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 2;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 3;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#affb5b68b3eba3ed45a06c7cde7781962">m_OutputShapeRounding</a> = <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">OutputShapeRounding::Floor</a>;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;    <a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;    <span class="comment">// Create extra layers</span></div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape  = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{3, 2, 5, 5} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{3, 5, 5, 2};</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{3, 2, 2, 4} : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{3, 2, 4, 2};</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    <span class="comment">// Connect up</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>));</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;    <span class="comment">// Make the workload and checks it</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;Pooling2dWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_queue_descriptor.xhtml">Pooling2dQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_PoolType == <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">PoolingAlgorithm::Average</a>));</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_OutputShapeRounding == <a class="code" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">OutputShapeRounding::Floor</a>));</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PoolWidth == 3);</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PoolHeight == 3);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideX == 2);</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_StrideY == 3);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadLeft == 2);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadRight == 2);</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadTop == 1);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_PadBottom == 1);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;    <span class="comment">// Return so we can do extra, backend-specific tests</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;}</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SoftmaxWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;std::unique_ptr&lt;SoftmaxWorkload&gt; CreateSoftmaxWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;                                                           <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;            graph)</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;{</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;    <span class="comment">// Create the layer we&#39;re testing.</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;    <a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> softmaxDescriptor;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;    <span class="comment">// Set Axis to -1 if CL or Neon until further Axes are supported.</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;    <span class="keywordflow">if</span> (factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">GetBackendId</a>() == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a> || factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">GetBackendId</a>() == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>)</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    {</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;        softmaxDescriptor.<a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml#a214c3636fdf0ea5bac8edb42d0e6c7f0">m_Axis</a> = -1;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    }</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_softmax_layer.xhtml">SoftmaxLayer</a>&gt;(softmaxDescriptor, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;    <span class="comment">// Create extra layers.</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;    <span class="comment">// Connect up</span></div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({4, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmU8)</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;    {</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;        tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(0);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;        tensorInfo.SetQuantizationScale(1.f / 256);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;    }</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> == armnn::DataType::QAsymmS8)</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;    {</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;        tensorInfo.SetQuantizationOffset(-128);</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;        tensorInfo.SetQuantizationScale(1.f / 256);</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;    }</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    <span class="comment">// Make the workload and checks it.</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;SoftmaxWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    <a class="code" href="structarmnn_1_1_softmax_queue_descriptor.xhtml">SoftmaxQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <span class="comment">// Return so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;}</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> SplitterWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;std::unique_ptr&lt;SplitterWorkload&gt;</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;    CreateSplitterWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;{</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;    <span class="comment">// Create the layer we&#39;re testing.</span></div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;    <span class="comment">// NOTE: need three dimensions channels, height/y, width/x because the Compute</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;    <span class="comment">//       library restricts subtensors to have the same x and y dimensions as</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;    <span class="comment">//       their parent tensors, and therefore the origin on the x and y dimension</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    <span class="comment">//       has to be zero for any view. So we need a third dimension to split...</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    <span class="comment">// NOTE: arguments are: number of views, number of dimensions.</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">ViewsDescriptor</a> layerDesc(3, 3);</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    <span class="comment">// NOTE: arguments are: view, dimension, value.</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;    layerDesc.SetViewOriginCoord(0, 0, 0);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    layerDesc.SetViewOriginCoord(1, 0, 1);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;    layerDesc.SetViewOriginCoord(2, 0, 3);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_splitter_layer.xhtml">SplitterLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;    <span class="comment">// Adds extra layers.</span></div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output0 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output0&quot;</span>);</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(1, <span class="stringliteral">&quot;output1&quot;</span>);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output2 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(2, <span class="stringliteral">&quot;output2&quot;</span>);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({5, 7, 7}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> output0Info({1, 7, 7}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> output1Info({2, 7, 7}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> output2Info({2, 7, 7}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output0, output0Info, 0, 0);</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output1, output1Info, 1, 0);</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output2, output2Info, 2, 0);</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;SplitterWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    <a class="code" href="structarmnn_1_1_splitter_queue_descriptor.xhtml">SplitterQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 3);</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins.size() == 3);</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[0].m_Origin[0] == 0);</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[1].m_Origin[0] == 1);</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[2].m_Origin[0] == 3);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[0].m_Origin[1] == 0);</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[1].m_Origin[1] == 0);</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[2].m_Origin[1] == 0);</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[0].m_Origin[2] == 0);</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[1].m_Origin[2] == 0);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;    BOOST_TEST(queueDescriptor.m_ViewOrigins[2].m_Origin[2] == 0);</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;}</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;<span class="comment">/// This function constructs a graph with both a splitter and a concat, and returns a pair of the workloads.</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> SplitterWorkload, <span class="keyword">typename</span> ConcatWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;std::pair&lt;std::unique_ptr&lt;SplitterWorkload&gt;, std::unique_ptr&lt;ConcatWorkload&gt;&gt;</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;    CreateSplitterConcatWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a> &amp;factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a> &amp;graph)</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;{</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 2, 100, 10 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> splitTensorInfo1({ 1, 1, 100, 10 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> splitTensorInfo2({ 1, 1, 100, 10 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;    <span class="comment">//Constructs the graph.</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">armnn::ViewsDescriptor</a> splitterViews(2);</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    splitterViews.SetViewOriginCoord(0, 0, 0);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    splitterViews.SetViewOriginCoord(0, 1, 0);</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;    splitterViews.SetViewOriginCoord(0, 2, 0);</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;    splitterViews.SetViewOriginCoord(0, 3, 0);</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;    splitterViews.SetViewOriginCoord(1, 0, 0);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;    splitterViews.SetViewOriginCoord(1, 1, 1);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;    splitterViews.SetViewOriginCoord(1, 2, 0);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;    splitterViews.SetViewOriginCoord(1, 3, 0);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> splitter = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_splitter_layer.xhtml">SplitterLayer</a>&gt;(splitterViews, <span class="stringliteral">&quot;splitter&quot;</span>);</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created splitter layer&quot;</span>);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;    <a class="code" href="structarmnn_1_1_origins_descriptor.xhtml">armnn::OriginsDescriptor</a> concatViews(2);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;    concatViews.SetViewOriginCoord(0, 0, 0);</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;    concatViews.SetViewOriginCoord(0, 1, 1);</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;    concatViews.SetViewOriginCoord(0, 2, 0);</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;    concatViews.SetViewOriginCoord(0, 3, 0);</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;    concatViews.SetViewOriginCoord(1, 0, 0);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;    concatViews.SetViewOriginCoord(1, 1, 0);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;    concatViews.SetViewOriginCoord(1, 2, 0);</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;    concatViews.SetViewOriginCoord(1, 3, 0);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> concat = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_concat_layer.xhtml">ConcatLayer</a>&gt;(concatViews, <span class="stringliteral">&quot;concat&quot;</span>);</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created concat layer&quot;</span>);</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;    <span class="comment">// Adds connections.</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, splitter, inputTensorInfo, 0, 0);</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect input to splitter&quot;</span>);</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(splitter, concat, splitTensorInfo1, 0, 1); <span class="comment">// The splitter &amp; concat are connected up.</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect splitter[0] to concat[1]&quot;</span>);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(splitter, concat, splitTensorInfo2, 1, 0); <span class="comment">// So that the outputs are flipped round.</span></div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect splitter[1] to concat[0]&quot;</span>);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(concat, output, inputTensorInfo, 0, 0);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect concat to output&quot;</span>);</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created tensor handles&quot;</span>);</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    <span class="keyword">auto</span> workloadSplitter = MakeAndCheckWorkload&lt;SplitterWorkload&gt;(*splitter, factory);</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created splitter workload&quot;</span>);</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;    <span class="keyword">auto</span> workloadConcat = MakeAndCheckWorkload&lt;ConcatWorkload&gt;(*concat, factory);</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created concat workload&quot;</span>);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;    <span class="keywordflow">return</span> {std::move(workloadSplitter), std::move(workloadConcat)};</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;}</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;<span class="comment">/// This function constructs a graph with a splitter with two outputs. Each of the outputs is then</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;<span class="comment">/// connected to two different activation layers</span></div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> SplitterWorkload, <span class="keyword">typename</span> ActivationWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;<span class="keywordtype">void</span> CreateSplitterMultipleInputsOneOutputWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;                                 std::unique_ptr&lt;SplitterWorkload&gt;&amp; wlSplitter,</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;                                 std::unique_ptr&lt;ActivationWorkload&gt;&amp; wlActiv0_0,</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;                                 std::unique_ptr&lt;ActivationWorkload&gt;&amp; wlActiv0_1,</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;                                 std::unique_ptr&lt;ActivationWorkload&gt;&amp; wlActiv1_0,</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;                                 std::unique_ptr&lt;ActivationWorkload&gt;&amp; wlActiv1_1)</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;{</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo ({ 1, 3, 100, 50 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> splitTensorInfo1({ 1, 1, 100, 50 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> splitTensorInfo2({ 1, 2, 100, 50 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    <span class="comment">//Constructs the graph.</span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">armnn::ViewsDescriptor</a> splitterViews(2);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;    splitterViews.SetViewOriginCoord(0, 0, 0);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    splitterViews.SetViewOriginCoord(0, 1, 0);</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;    splitterViews.SetViewOriginCoord(0, 2, 0);</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;    splitterViews.SetViewOriginCoord(0, 3, 0);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;    splitterViews.SetViewOriginCoord(1, 0, 0);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;    splitterViews.SetViewOriginCoord(1, 1, 1);</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;    splitterViews.SetViewOriginCoord(1, 2, 0);</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;    splitterViews.SetViewOriginCoord(1, 3, 0);</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> splitter = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_splitter_layer.xhtml">SplitterLayer</a>&gt;(splitterViews, <span class="stringliteral">&quot;splitter&quot;</span>);</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;    <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> activ0_0 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a>&gt;(activationDesc, <span class="stringliteral">&quot;activ0_0&quot;</span>);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> activ0_1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a>&gt;(activationDesc, <span class="stringliteral">&quot;activ0_1&quot;</span>);</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> activ1_0 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a>&gt;(activationDesc, <span class="stringliteral">&quot;activ1_0&quot;</span>);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> activ1_1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_activation_layer.xhtml">ActivationLayer</a>&gt;(activationDesc, <span class="stringliteral">&quot;activ1_1&quot;</span>);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(1, <span class="stringliteral">&quot;output1&quot;</span>);</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output2 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(2, <span class="stringliteral">&quot;output2&quot;</span>);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output3 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(3, <span class="stringliteral">&quot;output3&quot;</span>);</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output4 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(4, <span class="stringliteral">&quot;output4&quot;</span>);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;    <span class="comment">// Adds connections.</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, splitter, inputTensorInfo, 0, 0);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(splitter, activ0_0, splitTensorInfo1, 0, 0);</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(splitter, activ0_1, splitTensorInfo1, 0, 0);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(splitter, activ1_0, splitTensorInfo2, 1, 0);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(splitter, activ1_1, splitTensorInfo2, 1, 0);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(activ0_0, output1, splitTensorInfo1, 0, 0);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(activ0_1, output2, splitTensorInfo1, 0, 0);</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(activ1_0, output3, splitTensorInfo2, 0, 0);</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(activ1_1, output4, splitTensorInfo2, 0, 0);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;    <span class="keyword">auto</span> workloadSplitter = MakeAndCheckWorkload&lt;SplitterWorkload&gt;(*splitter, factory);</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;    <span class="keyword">auto</span> workloadActiv0_0 = MakeAndCheckWorkload&lt;ActivationWorkload&gt;(*activ0_0, factory);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;    <span class="keyword">auto</span> workloadActiv0_1 = MakeAndCheckWorkload&lt;ActivationWorkload&gt;(*activ0_1, factory);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;    <span class="keyword">auto</span> workloadActiv1_0 = MakeAndCheckWorkload&lt;ActivationWorkload&gt;(*activ1_0, factory);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;    <span class="keyword">auto</span> workloadActiv1_1 = MakeAndCheckWorkload&lt;ActivationWorkload&gt;(*activ1_1, factory);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;    wlSplitter = std::move(workloadSplitter);</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;    wlActiv0_0 = std::move(workloadActiv0_0);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;    wlActiv0_1 = std::move(workloadActiv0_1);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;    wlActiv1_0 = std::move(workloadActiv1_0);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;    wlActiv1_1 = std::move(workloadActiv1_1);</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;}</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ResizeWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;std::unique_ptr&lt;ResizeWorkload&gt; CreateResizeBilinearWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;                                                                 <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;                                                                 <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;{</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape;</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;    <span class="keywordflow">switch</span> (dataLayout) {</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>:</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;            inputShape =  { 2, 4, 4, 3 };</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;            outputShape = { 2, 2, 2, 3 };</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>:</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;            inputShape =  { 2, 3, 4, 4 };</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;            outputShape = { 2, 3, 2, 2 };</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;    }</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;    <a class="code" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> resizeDesc;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;    <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dimensionIndices = dataLayout;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;    resizeDesc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">m_Method</a>       = <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">ResizeMethod::Bilinear</a>;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;    resizeDesc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#adcf5037208faac36c0788239a073f75c">m_TargetWidth</a>  = outputShape[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()];</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;    resizeDesc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a46c3fa15c46fb0d1dcdc24d0ea5cb5cd">m_TargetHeight</a> = outputShape[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()];</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;    resizeDesc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>   = dataLayout;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_resize_layer.xhtml">ResizeLayer</a>&gt;(resizeDesc, <span class="stringliteral">&quot;resize&quot;</span>);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input  = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;ResizeWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;    <span class="keyword">auto</span> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;    BOOST_CHECK(queueDescriptor.m_Inputs.size()  == 1);</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;    BOOST_CHECK(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;    BOOST_CHECK(queueDescriptor.m_Parameters.m_DataLayout == dataLayout);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;}</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> BatchToSpaceNdWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;std::unique_ptr&lt;BatchToSpaceNdWorkload&gt; CreateBatchToSpaceNdWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;                                                                         <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;  graph)</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;{</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;    <a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">BatchToSpaceNdDescriptor</a> desc;</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_batch_to_space_nd_layer.xhtml">BatchToSpaceNdLayer</a>&gt;(desc, <span class="stringliteral">&quot;batchToSpace&quot;</span>);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({1, 1, 1, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;BatchToSpaceNdWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;    <a class="code" href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.xhtml">BatchToSpaceNdQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;}</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> LogSoftmaxWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;std::unique_ptr&lt;LogSoftmaxWorkload&gt; CreateLogSoftmaxWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;                                                                 <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;{</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    <span class="comment">// Create the layer we&#39;re testing.</span></div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;    <a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml">LogSoftmaxDescriptor</a> logSoftmaxDescriptor;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;    <span class="comment">// Set Axis to -1 if CL or Neon until further Axes are supported.</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;    <span class="keywordflow">if</span> (factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">GetBackendId</a>() == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a> || factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">GetBackendId</a>() == <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a>)</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;    {</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;        logSoftmaxDescriptor.<a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml#a214c3636fdf0ea5bac8edb42d0e6c7f0">m_Axis</a> = -1;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;    }</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_log_softmax_layer.xhtml">LogSoftmaxLayer</a>&gt;(logSoftmaxDescriptor, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;    <span class="comment">// Create extra layers.</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;    <span class="comment">// Connect up</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo({4, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, tensorInfo);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, tensorInfo);</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;    <span class="comment">// Make the workload and checks it.</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;LogSoftmaxWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;    <a class="code" href="structarmnn_1_1_log_softmax_queue_descriptor.xhtml">LogSoftmaxQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;    <span class="comment">// Return so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;}</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> L2NormalizationWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;std::unique_ptr&lt;L2NormalizationWorkload&gt; CreateL2NormalizationWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;{</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;    <a class="code" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> layerDesc;</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;    layerDesc.<a class="code" href="structarmnn_1_1_l2_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_l2_normalization_layer.xhtml">L2NormalizationLayer</a>&gt;(layerDesc, <span class="stringliteral">&quot;l2norm&quot;</span>);</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> inputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ?</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 5, 20, 50, 67 } : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 5, 50, 67, 20 };</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = (dataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ?</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 5, 20, 50, 67 } : <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>{ 5, 50, 67, 20 };</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;L2NormalizationWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;    <a class="code" href="structarmnn_1_1_l2_normalization_queue_descriptor.xhtml">L2NormalizationQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;    BOOST_TEST((queueDescriptor.m_Parameters.m_DataLayout == dataLayout));</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;}</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ReshapeWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;std::unique_ptr&lt;ReshapeWorkload&gt; CreateReshapeWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;{</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape({ 1, 4 });</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;    <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;    reshapeDesc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = outputShape;</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_reshape_layer.xhtml">ReshapeLayer</a>&gt;(reshapeDesc, <span class="stringliteral">&quot;layer&quot;</span>);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 4, 1 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;ReshapeWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;    <a class="code" href="structarmnn_1_1_reshape_queue_descriptor.xhtml">ReshapeQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;}</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ConvertFp16ToFp32Float32Workload&gt;</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;std::unique_ptr&lt;ConvertFp16ToFp32Float32Workload&gt; CreateConvertFp16ToFp32WorkloadTest(</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;{</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;    <a class="code" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">ConvertFp16ToFp32Layer</a>&gt;(<span class="stringliteral">&quot;Fp16ToFp32Converter&quot;</span>);</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 3, 2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>);</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({1, 3, 2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;ConvertFp16ToFp32Float32Workload&gt;(*layer, factory);</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;    <a class="code" href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.xhtml">ConvertFp16ToFp32QueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;}</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ConvertFp32ToFp16Float16Workload&gt;</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;std::unique_ptr&lt;ConvertFp32ToFp16Float16Workload&gt; CreateConvertFp32ToFp16WorkloadTest(</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;{</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    <a class="code" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">ConvertFp32ToFp16Layer</a>&gt;(<span class="stringliteral">&quot;Fp32ToFp16Converter&quot;</span>);</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 3, 2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({1, 3, 2, 3}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a>);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;ConvertFp32ToFp16Float16Workload&gt;(*layer, factory);</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;    <a class="code" href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.xhtml">ConvertFp32ToFp16QueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;}</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> MeanWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;std::unique_ptr&lt;MeanWorkload&gt; CreateMeanWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory, <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph)</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;{</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;    <span class="comment">// Reduce along the first and second dimensions, and do not keep the reduced dimensions.</span></div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    <a class="code" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> descriptor({ 1, 2 }, <span class="keyword">false</span>);</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    <span class="comment">// Creates the layer we&#39;re testing.</span></div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_mean_layer.xhtml">MeanLayer</a>&gt;(descriptor, <span class="stringliteral">&quot;mean&quot;</span>);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 3, 7, 4 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 4 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;MeanWorkload&gt;(*layer, factory);</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;    <a class="code" href="structarmnn_1_1_mean_queue_descriptor.xhtml">MeanQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_Axis == descriptor.m_Axis);</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;    BOOST_TEST(queueDescriptor.m_Parameters.m_KeepDims == descriptor.m_KeepDims);</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;}</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ConcatWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;std::unique_ptr&lt;ConcatWorkload&gt; CreateConcatWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a> &amp;factory,</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;                                                         <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a> &amp;graph,</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;                                                         <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &amp;outputShape,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;                                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> concatAxis)</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;{</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 2, 3, 2, 5 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;    <span class="comment">// Constructs the graph.</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input0 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input0&quot;</span>);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input1 = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(1, <span class="stringliteral">&quot;input1&quot;</span>);</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;    <a class="code" href="structarmnn_1_1_origins_descriptor.xhtml">armnn::OriginsDescriptor</a> descriptor;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;    std::vector&lt;armnn::TensorShape&gt; inputShapes{{ 2, 3, 2, 5 }, { 2, 3, 2, 5 }};</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;    descriptor = <a class="code" href="namespacearmnn.xhtml#a733ae6b70d0bfa43433c3e7606992328">CreateDescriptorForConcatenation</a>(inputShapes.begin(),</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;                                                  inputShapes.end(),</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;                                                  concatAxis);</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> concat = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_concat_layer.xhtml">ConcatLayer</a>&gt;(descriptor, <span class="stringliteral">&quot;concat&quot;</span>);</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created concat layer&quot;</span>);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;    <span class="comment">// Adds connections.</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input0, concat, inputTensorInfo, 0, 0);</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect input0 to concat&quot;</span>);</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input1, concat, inputTensorInfo, 0, 1);</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect input1 to concat&quot;</span>);</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(concat, output, outputTensorInfo, 0, 0);</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect concat to output&quot;</span>);</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created tensor handles&quot;</span>);</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;    <span class="keyword">auto</span> workloadConcat = MakeAndCheckWorkload&lt;ConcatWorkload&gt;(*concat, factory);</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created concat workload&quot;</span>);</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;    <span class="keywordflow">return</span> workloadConcat;</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;}</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PreCompiledWorkload, armnn::DataType dataType&gt;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;std::pair&lt;armnn::IOptimizedNetworkPtr, std::unique_ptr&lt;PreCompiledWorkload&gt;&gt; CreatePreCompiledWorkloadTest(</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;    <span class="keywordtype">bool</span> biasEnabled = <span class="keyword">false</span>)</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;{</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graph);</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;    <span class="comment">// build up the structure of the network</span></div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> net(<a class="code" href="classarmnn_1_1_i_network.xhtml#a464f0ff87b1aabf71febaa71321dd40b">armnn::INetwork::Create</a>());</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;    <span class="comment">// Add an input layer</span></div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* <span class="keyword">const</span> inputLayer = net-&gt;AddInputLayer(0, <span class="stringliteral">&quot;input layer&quot;</span>);</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;    BOOST_TEST(inputLayer);</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;    <span class="comment">// ArmNN weights tensor shape is OIHW (out channels, in channels, height, width) for NCHW</span></div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;    <span class="comment">// ArmNN weights tensor shape is OHWI (out channels, height, width, in channels) for NHWC</span></div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;    <span class="comment">// this test is using NHWC, so the weights shape is OHWI</span></div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightsTensorInfo(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({16, 1, 1, 16}), dataType, 0.9f, 0);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsLength = weightsTensorInfo.GetNumElements();</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;    <span class="keyword">using</span> WeightType = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;dataType&gt;</a>;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    std::vector&lt;WeightType&gt; convWeightsData(weightsLength);</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; weightsLength; ++i)</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;    {</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;        convWeightsData[i] = <span class="keyword">static_cast&lt;</span>WeightType<span class="keyword">&gt;</span>(i);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;    }</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;    <a class="code" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a> weights(weightsTensorInfo, convWeightsData);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;    <span class="comment">// Add a layer that can be used in the PreCompiled layer</span></div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a> convDesc2d;</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;    convDesc2d.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 1;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;    convDesc2d.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 1;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;    convDesc2d.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;    convDesc2d.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* convLayer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;    <span class="keyword">const</span> std::string convLayerName(<span class="stringliteral">&quot;conv layer&quot;</span>);</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;    <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;    {</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;        constexpr <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> biasDataType = ( dataType == <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>) ?</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;            armnn::DataType::Signed32 : <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasTensorInfo(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({16}), biasDataType, 0.9f * 0.9f, 0);</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> biasLength = biasTensorInfo.GetNumElements();</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;        <span class="keyword">using</span> BiasType = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;biasDataType&gt;</a>;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;        std::vector&lt;BiasType&gt; biasData(biasLength);</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;        std::fill(biasData.begin(), biasData.end(), <span class="keyword">static_cast&lt;</span>BiasType<span class="keyword">&gt;</span>(0));</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;        <a class="code" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a> biases(biasTensorInfo, biasData);</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;        <span class="comment">// Create convolution layer with biases</span></div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;        convLayer = net-&gt;AddConvolution2dLayer(convDesc2d,</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;                                              weights,</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;                                              <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biases),</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;                                              convLayerName.c_str());</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;    }</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;    {</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;        <span class="comment">// Create convolution layer without biases</span></div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;        convLayer = net-&gt;AddConvolution2dLayer(convDesc2d,</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;                                              weights,</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;                                              <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;                                              convLayerName.c_str());</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;    }</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;    BOOST_TEST(convLayer);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    <span class="comment">// Add an output layer</span></div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* <span class="keyword">const</span> outputLayer = net-&gt;AddOutputLayer(0, <span class="stringliteral">&quot;output layer&quot;</span>);</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    BOOST_TEST(outputLayer);</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;    <span class="comment">// set the tensors in the network (NHWC format)</span></div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({ 1, 16, 16, 16 }), dataType);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;    <span class="keywordflow">if</span> (dataType == armnn::DataType::QAsymmU8)</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    {</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;        inputTensorInfo.SetQuantizationOffset(0);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;        inputTensorInfo.SetQuantizationScale(0.9f);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    }</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>({1, 16, 16, 16}), dataType);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;    <span class="keywordflow">if</span> (dataType == armnn::DataType::QAsymmU8)</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;    {</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;        outputTensorInfo.SetQuantizationOffset(0);</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;        outputTensorInfo.SetQuantizationScale(0.9f);</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;    }</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;    <span class="comment">// Connect the layers</span></div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;    inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(convLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;    inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(inputTensorInfo);</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;    convLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(outputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;    convLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;    <span class="comment">// Optimize the network for the backend supported by the factory</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;    std::vector&lt;armnn::BackendId&gt; backends = {factory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">GetBackendId</a>()};</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a> options;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">armnn::IRuntimePtr</a> runtime(<a class="code" href="classarmnn_1_1_i_runtime.xhtml#ad44ecd3700748dc30dc4bbe34ba5bde7">armnn::IRuntime::Create</a>(options));</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;    <a class="code" href="structarmnn_1_1_optimizer_options.xhtml">armnn::OptimizerOptions</a> optimizerOptions;</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a> optimizedNet = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">armnn::Optimize</a>(*net, backends, runtime-&gt;GetDeviceSpec(),</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;                                                               optimizerOptions);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;    BOOST_CHECK(optimizedNet != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;    <span class="comment">// Find the PreCompiled layer in the optimised graph</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; optimisedGraph = <a class="code" href="namespacearmnn.xhtml#a6a2659750d6161b693d0e51616791959">GetGraphForTesting</a>(optimizedNet.get());</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* preCompiledLayer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; layer : optimisedGraph)</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;    {</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;        <span class="keywordflow">if</span> (layer-&gt;GetType() == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278">LayerType::PreCompiled</a>)</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;        {</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;            preCompiledLayer = layer;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;        }</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;    }</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;    BOOST_CHECK(preCompiledLayer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;    <span class="comment">// Create the TensorHandles.</span></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;    CreateTensorHandles(optimisedGraph, factory);</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;    <span class="comment">// Make the workload and check it.</span></div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;PreCompiledWorkload&gt;(*preCompiledLayer, factory);</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;    <a class="code" href="structarmnn_1_1_pre_compiled_queue_descriptor.xhtml">PreCompiledQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size()  == 1);</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;    <span class="comment">// Returns the workload so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;    <span class="comment">// NOTE: We need to return the optimised network as well, otherwise it gets</span></div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;    <span class="comment">// out of scope and the tensor handles get destructed</span></div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;    <span class="keywordflow">return</span> std::make_pair(std::move(optimizedNet), std::move(workload));</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;}</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ConstantWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;std::unique_ptr&lt;ConstantWorkload&gt; CreateConstantWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;                                                             <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;                                                             <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; outputShape)</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;{</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    <span class="keyword">auto</span> constant = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_constant_layer.xhtml">ConstantLayer</a>&gt;(<span class="stringliteral">&quot;constant&quot;</span>);</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;    constant-&gt;<a class="code" href="classarmnn_1_1_constant_layer.xhtml#a67ccc257eeefce0964c1cafc4b255c9f">m_LayerOutput</a> = std::make_unique&lt;ScopedCpuTensorHandle&gt;(outputTensorInfo);</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created constant layer&quot;</span>);</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;    <span class="comment">// Adds connections.</span></div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(constant, output, outputTensorInfo, 0, 0);</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;connect constant to output&quot;</span>);</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created tensor handles&quot;</span>);</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;    <span class="keyword">auto</span> workloadConstant = MakeAndCheckWorkload&lt;ConstantWorkload&gt;(*constant, factory);</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;    BOOST_TEST_CHECKPOINT(<span class="stringliteral">&quot;created Constant workload&quot;</span>);</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;    <span class="keywordflow">return</span> workloadConstant;</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;}</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PreluWorkload&gt;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;std::unique_ptr&lt;PreluWorkload&gt; CreatePreluWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;                                                       <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; inputShape,</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;                                                       <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; alphaShape,</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;                                                       <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; outputShape,</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;                                                       <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> dataType)</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;{</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;    <span class="comment">// Creates the PReLU layer</span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_prelu_layer.xhtml">PreluLayer</a>&gt;(<span class="stringliteral">&quot;prelu&quot;</span>);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    BOOST_CHECK(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;    <span class="comment">// Creates extra layers</span></div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input  = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt; (0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> alpha  = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt; (1, <span class="stringliteral">&quot;alpha&quot;</span>);</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;    BOOST_CHECK(input  != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;    BOOST_CHECK(alpha  != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;    BOOST_CHECK(output != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    <span class="comment">// Connects up</span></div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo (inputShape,  dataType);</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> alphaTensorInfo (alphaShape,  dataType);</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, dataType);</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer,  inputTensorInfo,  0, 0);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(alpha, layer,  alphaTensorInfo,  0, 1);</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo, 0, 0);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;    <span class="comment">// Makes the workload and checks it</span></div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;PreluWorkload&gt;(*layer, factory);</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;    <a class="code" href="structarmnn_1_1_prelu_queue_descriptor.xhtml">PreluQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 2);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;    <span class="comment">// Returns so we can do extra, backend-specific tests.</span></div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;}</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SpaceToDepthWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;std::unique_ptr&lt;SpaceToDepthWorkload&gt; CreateSpaceToDepthWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;                                                                     <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp;  graph)</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;{</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;    <a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">SpaceToDepthDescriptor</a> desc;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;    desc.<a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6c6b8957f1e176867e5fb05b1a1a1486">m_BlockSize</a> = 2;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_space_to_depth_layer.xhtml">SpaceToDepthLayer</a>&gt;(desc, <span class="stringliteral">&quot;spaceToDepth&quot;</span>);</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;    <span class="comment">// Creates extra layers.</span></div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;    <span class="comment">// Connects up.</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 2, 2, 1 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 1, 1, 4 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(input, layer, inputTensorInfo);</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(layer, output, outputTensorInfo);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;    <span class="comment">// Makes the workload and checks it.</span></div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;    <span class="keyword">auto</span> workload = MakeAndCheckWorkload&lt;SpaceToDepthWorkload&gt;(*layer, factory);</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;    <a class="code" href="structarmnn_1_1_space_to_depth_queue_descriptor.xhtml">SpaceToDepthQueueDescriptor</a> queueDescriptor = workload-&gt;GetData();</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == 1);</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;    <span class="keywordflow">return</span> workload;</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;}</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackWorkload, armnn::DataType DataType&gt;</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;std::unique_ptr&lt;StackWorkload&gt; CreateStackWorkloadTest(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; factory,</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;                                                       <a class="code" href="classarmnn_1_1_graph.xhtml">armnn::Graph</a>&amp; graph,</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;                                                       <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; inputShape,</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;                                                       <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; outputShape,</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;                                                       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> axis,</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;                                                       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs)</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;{</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo(inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo(outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a>);</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;    <span class="comment">// Constructs the Stack layer.</span></div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;    <a class="code" href="structarmnn_1_1_stack_descriptor.xhtml">armnn::StackDescriptor</a> descriptor(axis, numInputs, inputShape);</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> stackLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_stack_layer.xhtml">StackLayer</a>&gt;(descriptor, <span class="stringliteral">&quot;stack&quot;</span>);</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;    BOOST_CHECK(stackLayer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;    <span class="comment">// Constructs layer inputs and output.</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;    std::vector&lt;Layer*&gt; inputs;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;numInputs; ++i)</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;    {</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;        inputs.push_back(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;            static_cast&lt;int&gt;(i),</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;            (<span class="stringliteral">&quot;input&quot;</span> + std::to_string(i)).c_str()</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;        ));</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;        BOOST_CHECK(inputs[i] != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;    }</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;    BOOST_CHECK(output != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;    <span class="comment">// Adds connections.</span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;numInputs; ++i)</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;    {</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;        <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(inputs[i], stackLayer, inputTensorInfo, 0, i);</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;    }</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;    <a class="code" href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a>(stackLayer, output, outputTensorInfo, 0, 0);</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;    CreateTensorHandles(graph, factory);</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;    <span class="keyword">auto</span> stackWorkload = MakeAndCheckWorkload&lt;StackWorkload&gt;(*stackLayer, factory);</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;    <a class="code" href="structarmnn_1_1_stack_queue_descriptor.xhtml">StackQueueDescriptor</a> queueDescriptor = stackWorkload-&gt;GetData();</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;    BOOST_TEST(queueDescriptor.m_Inputs.size() == numInputs);</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;    BOOST_TEST(queueDescriptor.m_Outputs.size() == 1);</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;    <span class="keywordflow">return</span> stackWorkload;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;}</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;} <span class="comment">// Anonymous namespace</span></div><div class="ttc" id="classarmnn_1_1_constant_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_constant_layer.xhtml">armnn::ConstantLayer</a></div><div class="ttdoc">A layer that the constant data can be bound to. </div><div class="ttdef"><b>Definition:</b> <a href="_constant_layer_8hpp_source.xhtml#l00015">ConstantLayer.hpp:15</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a0e0e17d5b494993407cb75d614455ddd"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a0e0e17d5b494993407cb75d614455ddd">armnn::LstmBasicParameters::m_ForgetGateBias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_ForgetGateBias</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00069">LstmLayer.hpp:69</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Convolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00444">Descriptors.hpp:444</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::Convolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00454">Descriptors.hpp:454</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_ae8d897b8d282f25a6eb784c4aaa98df6"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#ae8d897b8d282f25a6eb784c4aaa98df6">armnn::LstmBasicParameters::m_InputToOutputWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_InputToOutputWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00061">LstmLayer.hpp:61</a></div></div>
<div class="ttc" id="_ignore_unused_8hpp_xhtml"><div class="ttname"><a href="_ignore_unused_8hpp.xhtml">IgnoreUnused.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a6e8c3db3c5474f0760553ff93fbc39e6"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a6e8c3db3c5474f0760553ff93fbc39e6">armnn::LstmBasicParameters::m_RecurrentToCellWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_RecurrentToCellWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00065">LstmLayer.hpp:65</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml_a6c9de81fc65b3c4924cab11907075a17"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml#a6c9de81fc65b3c4924cab11907075a17">armnn::LstmDescriptor::m_ProjectionEnabled</a></div><div class="ttdeci">bool m_ProjectionEnabled</div><div class="ttdoc">Enable/disable the projection layer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00945">Descriptors.hpp:945</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Convolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00456">Descriptors.hpp:456</a></div></div>
<div class="ttc" id="_workload_data_8hpp_xhtml"><div class="ttname"><a href="_workload_data_8hpp.xhtml">WorkloadData.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_splitter_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_splitter_layer.xhtml">armnn::SplitterLayer</a></div><div class="ttdoc">This layer represents a split operation. </div><div class="ttdef"><b>Definition:</b> <a href="_splitter_layer_8hpp_source.xhtml#l00013">SplitterLayer.hpp:13</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_ad44ecd3700748dc30dc4bbe34ba5bde7"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#ad44ecd3700748dc30dc4bbe34ba5bde7">armnn::IRuntime::Create</a></div><div class="ttdeci">static IRuntimePtr Create(const CreationOptions &amp;options)</div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00037">Runtime.cpp:37</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_workload_factory_xhtml_a9f7e4296485d2812e7996089149c96d1"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml#a9f7e4296485d2812e7996089149c96d1">armnn::IWorkloadFactory::GetBackendId</a></div><div class="ttdeci">virtual const BackendId &amp; GetBackendId() const =0</div></div>
<div class="ttc" id="classarmnn_1_1_lstm_layer_xhtml_a8838b317568861294a9df608221f185e"><div class="ttname"><a href="classarmnn_1_1_lstm_layer.xhtml#a8838b317568861294a9df608221f185e">armnn::LstmLayer::m_BasicParameters</a></div><div class="ttdeci">LstmBasicParameters m_BasicParameters</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00081">LstmLayer.hpp:81</a></div></div>
<div class="ttc" id="classarmnn_1_1_batch_normalization_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_batch_normalization_layer.xhtml">armnn::BatchNormalizationLayer</a></div><div class="ttdoc">This layer represents a batch normalization operation. </div><div class="ttdef"><b>Definition:</b> <a href="_batch_normalization_layer_8hpp_source.xhtml#l00015">BatchNormalizationLayer.hpp:15</a></div></div>
<div class="ttc" id="_data_layout_indexed_8hpp_xhtml"><div class="ttname"><a href="_data_layout_indexed_8hpp.xhtml">DataLayoutIndexed.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml">armnn::ViewsDescriptor</a></div><div class="ttdoc">A ViewsDescriptor for the SplitterLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00206">Descriptors.hpp:206</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Pooling2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00371">Descriptors.hpp:371</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::DepthwiseConvolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00506">Descriptors.hpp:506</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00050">Types.hpp:50</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a8526ea7cf860d8e7f8340e9f9354f9f0"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a8526ea7cf860d8e7f8340e9f9354f9f0">armnn::NormalizationDescriptor::m_K</a></div><div class="ttdeci">float m_K</div><div class="ttdoc">Kappa value used for the across channel normalization equation. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00601">Descriptors.hpp:601</a></div></div>
<div class="ttc" id="structarmnn_1_1_softmax_descriptor_xhtml_a214c3636fdf0ea5bac8edb42d0e6c7f0"><div class="ttname"><a href="structarmnn_1_1_softmax_descriptor.xhtml#a214c3636fdf0ea5bac8edb42d0e6c7f0">armnn::SoftmaxDescriptor::m_Axis</a></div><div class="ttdeci">int m_Axis</div><div class="ttdoc">Scalar, defaulted to the last index (-1), specifying the dimension the activation will be performed o...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00154">Descriptors.hpp:154</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::DepthwiseConvolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00496">Descriptors.hpp:496</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Pooling2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00365">Descriptors.hpp:365</a></div></div>
<div class="ttc" id="classarmnn_1_1_fully_connected_layer_xhtml_a2664044e28e69309ea08ef385fe53903"><div class="ttname"><a href="classarmnn_1_1_fully_connected_layer.xhtml#a2664044e28e69309ea08ef385fe53903">armnn::FullyConnectedLayer::m_Weight</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Weight</div><div class="ttdoc">A unique pointer to store Weight values. </div><div class="ttdef"><b>Definition:</b> <a href="_fully_connected_layer_8hpp_source.xhtml#l00019">FullyConnectedLayer.hpp:19</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml_a86e88bef0df4df96df752b4b8955a3af"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml#a86e88bef0df4df96df752b4b8955a3af">armnn::LstmDescriptor::m_ClippingThresProj</a></div><div class="ttdeci">float m_ClippingThresProj</div><div class="ttdoc">Clipping threshold value for the projection. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00939">Descriptors.hpp:939</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional</a></div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00270">Optional.hpp:270</a></div></div>
<div class="ttc" id="structarmnn_1_1_splitter_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_splitter_queue_descriptor.xhtml">armnn::SplitterQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00101">WorkloadData.hpp:101</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3"><div class="ttname"><a href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">armnn::OutputShapeRounding::Floor</a></div></div>
<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a></div><div class="ttdoc">A ReshapeDescriptor for the ReshapeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00832">Descriptors.hpp:832</a></div></div>
<div class="ttc" id="structarmnn_1_1_quantized_lstm_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_quantized_lstm_queue_descriptor.xhtml">armnn::QuantizedLstmQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00604">WorkloadData.hpp:604</a></div></div>
<div class="ttc" id="_workload_factory_8hpp_xhtml"><div class="ttname"><a href="_workload_factory_8hpp.xhtml">WorkloadFactory.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::DepthwiseConvolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00508">Descriptors.hpp:508</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_workload_factory_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8hpp_source.xhtml#l00022">WorkloadFactory.hpp:22</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_aacb55e0992b6781a7bd3225ab6e6bb2f"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#aacb55e0992b6781a7bd3225ab6e6bb2f">armnn::QLstmBasicParameters::m_OutputGateBias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_OutputGateBias</div><div class="ttdoc">A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00035">QLstmLayer.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1_depthwise_convolution2d_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">armnn::DepthwiseConvolution2dLayer</a></div><div class="ttdoc">This layer represents a depthwise convolution 2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_depthwise_convolution2d_layer_8hpp_source.xhtml#l00015">DepthwiseConvolution2dLayer.hpp:15</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_opt_layer_norm_parameters_xhtml_a3cab71ebbe91e75be538e5670a40fec5"><div class="ttname"><a href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a3cab71ebbe91e75be538e5670a40fec5">armnn::QLstmOptLayerNormParameters::m_CellLayerNormWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_CellLayerNormWeights</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16). </div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00073">QLstmLayer.hpp:73</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a7563c5b899e7d0ada08fd0fdb202f205"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">armnn::Graph::AddLayer</a></div><div class="ttdeci">LayerT * AddLayer(Args &amp;&amp;... args)</div><div class="ttdoc">Adds a new layer, of type LayerType, to the graph constructed with the arguments passed. </div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00402">Graph.hpp:402</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml_a281fcaec86e17c97f7b8402633f6b55a"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml#a281fcaec86e17c97f7b8402633f6b55a">armnn::FullyConnectedDescriptor::m_TransposeWeightMatrix</a></div><div class="ttdeci">bool m_TransposeWeightMatrix</div><div class="ttdoc">Enable/disable transpose weight matrix. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00404">Descriptors.hpp:404</a></div></div>
<div class="ttc" id="classarmnn_1_1_convolution2d_layer_xhtml_a39925bc24d3afcfb322a46a5884fadb9"><div class="ttname"><a href="classarmnn_1_1_convolution2d_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">armnn::Convolution2dLayer::m_Bias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Bias</div><div class="ttdoc">A unique pointer to store Bias values. </div><div class="ttdef"><b>Definition:</b> <a href="_convolution2d_layer_8hpp_source.xhtml#l00022">Convolution2dLayer.hpp:22</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a5b6893cda5b69359a4244c06054da18f"><div class="ttname"><a href="namespacearmnn.xhtml#a5b6893cda5b69359a4244c06054da18f">armnn::ModelOptions</a></div><div class="ttdeci">std::vector&lt; BackendOptions &gt; ModelOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00017">BackendOptions.hpp:17</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">armnn::Pooling2dDescriptor::m_PoolWidth</a></div><div class="ttdeci">uint32_t m_PoolWidth</div><div class="ttdoc">Pooling width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00373">Descriptors.hpp:373</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_a2837b4396f20c956952d1a7286cab5f8"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#a2837b4396f20c956952d1a7286cab5f8">armnn::QLstmDescriptor::m_PeepholeEnabled</a></div><div class="ttdeci">bool m_PeepholeEnabled</div><div class="ttdoc">Enable/disable peephole. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01193">Descriptors.hpp:1193</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a></div><div class="ttdoc">A Convolution2dDescriptor for the Convolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00408">Descriptors.hpp:408</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a174279be57d7596eeb04c6b7f7510f99"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a174279be57d7596eeb04c6b7f7510f99">armnn::NormalizationDescriptor::m_Alpha</a></div><div class="ttdeci">float m_Alpha</div><div class="ttdoc">Alpha value for the normalization equation. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00597">Descriptors.hpp:597</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::DepthwiseConvolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00490">Descriptors.hpp:490</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a3d5f129421bbe6479a66d4ed1356bf68"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a3d5f129421bbe6479a66d4ed1356bf68">armnn::LstmBasicParameters::m_RecurrentToForgetWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_RecurrentToForgetWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00063">LstmLayer.hpp:63</a></div></div>
<div class="ttc" id="classarmnn_1_1_convert_fp16_to_fp32_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_convert_fp16_to_fp32_layer.xhtml">armnn::ConvertFp16ToFp32Layer</a></div><div class="ttdoc">This layer converts data type Float 16 to Float 32. </div><div class="ttdef"><b>Definition:</b> <a href="_convert_fp16_to_fp32_layer_8hpp_source.xhtml#l00014">ConvertFp16ToFp32Layer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_af8f724af7210b52529216feefa993c98"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#af8f724af7210b52529216feefa993c98">armnn::QLstmDescriptor::m_HiddenStateScale</a></div><div class="ttdeci">float m_HiddenStateScale</div><div class="ttdoc">Hidden State quantization scale. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01209">Descriptors.hpp:1209</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_aa43409f9b457352c95c89f20ce5d844d"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#aa43409f9b457352c95c89f20ce5d844d">armnn::QLstmDescriptor::m_OutputIntermediateScale</a></div><div class="ttdeci">float m_OutputIntermediateScale</div><div class="ttdoc">Output intermediate quantization scale. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01205">Descriptors.hpp:1205</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a869254cb56968986a78a79e1d6d4a86b"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">armnn::ResizeDescriptor::m_Method</a></div><div class="ttdeci">ResizeMethod m_Method</div><div class="ttdoc">The Interpolation method to use (Bilinear, NearestNeighbor). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00821">Descriptors.hpp:821</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a150468a02bd7b2d2d061c4aaaee939f0"><div class="ttname"><a href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">armnn::IRuntimePtr</a></div><div class="ttdeci">std::unique_ptr&lt; IRuntime, void(*)(IRuntime *runtime)&gt; IRuntimePtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00026">IRuntime.hpp:26</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_normalization_descriptor_xhtml_a11c821c7524251004a72ed13c510853c"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a11c821c7524251004a72ed13c510853c">armnn::BatchNormalizationDescriptor::m_Eps</a></div><div class="ttdeci">float m_Eps</div><div class="ttdoc">Value to add to the variance. Used to avoid dividing by zero. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00639">Descriptors.hpp:639</a></div></div>
<div class="ttc" id="classarmnn_1_1_space_to_depth_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_space_to_depth_layer.xhtml">armnn::SpaceToDepthLayer</a></div><div class="ttdoc">This layer represents a SpaceToDepth operation. </div><div class="ttdef"><b>Definition:</b> <a href="_space_to_depth_layer_8hpp_source.xhtml#l00014">SpaceToDepthLayer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_normalization_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::BatchNormalizationDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00641">Descriptors.hpp:641</a></div></div>
<div class="ttc" id="classarmnn_1_1_batch_normalization_layer_xhtml_aec22bddf14a932c4a72796c30669066b"><div class="ttname"><a href="classarmnn_1_1_batch_normalization_layer.xhtml#aec22bddf14a932c4a72796c30669066b">armnn::BatchNormalizationLayer::m_Gamma</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Gamma</div><div class="ttdoc">A unique pointer to store Gamma values. </div><div class="ttdef"><b>Definition:</b> <a href="_batch_normalization_layer_8hpp_source.xhtml#l00025">BatchNormalizationLayer.hpp:25</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_aacb55e0992b6781a7bd3225ab6e6bb2f"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#aacb55e0992b6781a7bd3225ab6e6bb2f">armnn::LstmBasicParameters::m_OutputGateBias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_OutputGateBias</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00073">LstmLayer.hpp:73</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_stack_queue_descriptor.xhtml">armnn::StackQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00142">WorkloadData.hpp:142</a></div></div>
<div class="ttc" id="classarmnn_1_1_reshape_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_reshape_layer.xhtml">armnn::ReshapeLayer</a></div><div class="ttdoc">This layer represents a reshape operation. </div><div class="ttdef"><b>Definition:</b> <a href="_reshape_layer_8hpp_source.xhtml#l00015">ReshapeLayer.hpp:15</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6">armnn::ActivationFunction::Abs</a></div></div>
<div class="ttc" id="classarmnn_1_1_batch_normalization_layer_xhtml_aa5685ee78433980cf535d745d1fcab55"><div class="ttname"><a href="classarmnn_1_1_batch_normalization_layer.xhtml#aa5685ee78433980cf535d745d1fcab55">armnn::BatchNormalizationLayer::m_Variance</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Variance</div><div class="ttdoc">A unique pointer to store Variance values. </div><div class="ttdef"><b>Definition:</b> <a href="_batch_normalization_layer_8hpp_source.xhtml#l00021">BatchNormalizationLayer.hpp:21</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a5a0d8af26a6aad1e5be521ea7dc550eb"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a5a0d8af26a6aad1e5be521ea7dc550eb">armnn::QLstmBasicParameters::m_InputToForgetWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_InputToForgetWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00017">QLstmLayer.hpp:17</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a51255889cbc063130a3d691c1781c5d3"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a51255889cbc063130a3d691c1781c5d3">armnn::QLstmBasicParameters::m_CellBias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_CellBias</div><div class="ttdoc">A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00033">QLstmLayer.hpp:33</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a0743ed5e860c316a20b68ca96301b411"><div class="ttname"><a href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType</a></div><div class="ttdeci">typename ResolveTypeImpl&lt; DT &gt;::Type ResolveType</div><div class="ttdef"><b>Definition:</b> <a href="_resolve_type_8hpp_source.xhtml#l00073">ResolveType.hpp:73</a></div></div>
<div class="ttc" id="classarmnn_1_1_activation_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_activation_layer.xhtml">armnn::ActivationLayer</a></div><div class="ttdoc">This layer represents an activation operation with the specified activation function. </div><div class="ttdef"><b>Definition:</b> <a href="_activation_layer_8hpp_source.xhtml#l00012">ActivationLayer.hpp:12</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Pooling2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00369">Descriptors.hpp:369</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div>
<div class="ttc" id="_resolve_type_8hpp_xhtml"><div class="ttname"><a href="_resolve_type_8hpp.xhtml">ResolveType.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Convolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00440">Descriptors.hpp:440</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::NormalizationDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00603">Descriptors.hpp:603</a></div></div>
<div class="ttc" id="_test_utils_8hpp_xhtml"><div class="ttname"><a href="_test_utils_8hpp.xhtml">TestUtils.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml">armnn::FullyConnectedQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00165">WorkloadData.hpp:165</a></div></div>
<div class="ttc" id="classarmnn_1_1_lstm_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_lstm_layer.xhtml">armnn::LstmLayer</a></div><div class="ttdoc">This layer represents a LSTM operation. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00077">LstmLayer.hpp:77</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_ae8d897b8d282f25a6eb784c4aaa98df6"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#ae8d897b8d282f25a6eb784c4aaa98df6">armnn::QLstmBasicParameters::m_InputToOutputWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_InputToOutputWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00021">QLstmLayer.hpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_a3f6ad59212fa8a47c9265162fff8a274"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a3f6ad59212fa8a47c9265162fff8a274">armnn::Layer::SetBackendId</a></div><div class="ttdeci">void SetBackendId(const BackendId &amp;id)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00270">Layer.hpp:270</a></div></div>
<div class="ttc" id="structarmnn_1_1_prelu_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_prelu_queue_descriptor.xhtml">armnn::PreluQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00529">WorkloadData.hpp:529</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.xhtml">armnn::BatchToSpaceNdQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00459">WorkloadData.hpp:459</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml">armnn::SpaceToDepthDescriptor</a></div><div class="ttdoc">A SpaceToDepthDescriptor for the SpaceToDepthLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00884">Descriptors.hpp:884</a></div></div>
<div class="ttc" id="structarmnn_1_1_softmax_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_softmax_queue_descriptor.xhtml">armnn::SoftmaxQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00095">WorkloadData.hpp:95</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">armnn::BatchToSpaceNdDescriptor</a></div><div class="ttdoc">A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00673">Descriptors.hpp:673</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_opt_layer_norm_parameters_xhtml_a69fdb952b874669cbb2a281815a20be2"><div class="ttname"><a href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a69fdb952b874669cbb2a281815a20be2">armnn::QLstmOptLayerNormParameters::m_OutputLayerNormWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_OutputLayerNormWeights</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16). </div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00075">QLstmLayer.hpp:75</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Pooling2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00377">Descriptors.hpp:377</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a51255889cbc063130a3d691c1781c5d3"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a51255889cbc063130a3d691c1781c5d3">armnn::LstmBasicParameters::m_CellBias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_CellBias</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00071">LstmLayer.hpp:71</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
<div class="ttc" id="classarmnn_1_1_q_lstm_layer_xhtml_ab43a687e3d705b3b0414d6fedb869e9d"><div class="ttname"><a href="classarmnn_1_1_q_lstm_layer.xhtml#ab43a687e3d705b3b0414d6fedb869e9d">armnn::QLstmLayer::m_LayerNormParameters</a></div><div class="ttdeci">QLstmOptLayerNormParameters m_LayerNormParameters</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00087">QLstmLayer.hpp:87</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a05945f080edf694b631960728b87aadb"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a05945f080edf694b631960728b87aadb">armnn::NormalizationDescriptor::m_NormMethodType</a></div><div class="ttdeci">NormalizationAlgorithmMethod m_NormMethodType</div><div class="ttdoc">Normalization method algorithm to use (LocalBrightness, LocalContrast). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00593">Descriptors.hpp:593</a></div></div>
<div class="ttc" id="classarmnn_1_1_elementwise_unary_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_elementwise_unary_layer.xhtml">armnn::ElementwiseUnaryLayer</a></div><div class="ttdoc">This layer represents a elementwiseUnary operation. </div><div class="ttdef"><b>Definition:</b> <a href="_elementwise_unary_layer_8hpp_source.xhtml#l00014">ElementwiseUnaryLayer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml">armnn::ResizeDescriptor</a></div><div class="ttdoc">A ResizeDescriptor for the ResizeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00794">Descriptors.hpp:794</a></div></div>
<div class="ttc" id="classarmnn_1_1_batch_normalization_layer_xhtml_a77c30d191e7ee8917e2c0ff5e97f5640"><div class="ttname"><a href="classarmnn_1_1_batch_normalization_layer.xhtml#a77c30d191e7ee8917e2c0ff5e97f5640">armnn::BatchNormalizationLayer::m_Beta</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Beta</div><div class="ttdoc">A unique pointer to store Beta values. </div><div class="ttdef"><b>Definition:</b> <a href="_batch_normalization_layer_8hpp_source.xhtml#l00023">BatchNormalizationLayer.hpp:23</a></div></div>
<div class="ttc" id="structarmnn_1_1_l2_normalization_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_l2_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::L2NormalizationDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00622">Descriptors.hpp:622</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_depth_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_queue_descriptor.xhtml">armnn::SpaceToDepthQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00377">WorkloadData.hpp:377</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml">armnn::StackDescriptor</a></div><div class="ttdoc">A StackDescriptor for the StackLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01024">Descriptors.hpp:1024</a></div></div>
<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml_a1178f4dafdda81f59c15145ec327f7d9"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">armnn::ReshapeDescriptor::m_TargetShape</a></div><div class="ttdeci">TensorShape m_TargetShape</div><div class="ttdoc">Target shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00848">Descriptors.hpp:848</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a3d5f129421bbe6479a66d4ed1356bf68"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a3d5f129421bbe6479a66d4ed1356bf68">armnn::QLstmBasicParameters::m_RecurrentToForgetWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_RecurrentToForgetWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00024">QLstmLayer.hpp:24</a></div></div>
<div class="ttc" id="_polymorphic_downcast_8hpp_xhtml"><div class="ttname"><a href="_polymorphic_downcast_8hpp.xhtml">PolymorphicDowncast.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">armnn::Pooling2dDescriptor::m_PoolHeight</a></div><div class="ttdeci">uint32_t m_PoolHeight</div><div class="ttdoc">Pooling height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00375">Descriptors.hpp:375</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Convolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00442">Descriptors.hpp:442</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_opt_peephole_parameters_xhtml_a5d0ebbbb11b727a67877df40b59a628c"><div class="ttname"><a href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml#a5d0ebbbb11b727a67877df40b59a628c">armnn::LstmOptPeepholeParameters::m_CellToForgetWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_CellToForgetWeights</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00049">LstmLayer.hpp:49</a></div></div>
<div class="ttc" id="namespacestd_xhtml"><div class="ttname"><a href="namespacestd.xhtml">std</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00147">BackendId.hpp:147</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Convolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00446">Descriptors.hpp:446</a></div></div>
<div class="ttc" id="classarmnn_1_1_constant_layer_xhtml_a67ccc257eeefce0964c1cafc4b255c9f"><div class="ttname"><a href="classarmnn_1_1_constant_layer.xhtml#a67ccc257eeefce0964c1cafc4b255c9f">armnn::ConstantLayer::m_LayerOutput</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_LayerOutput</div><div class="ttdef"><b>Definition:</b> <a href="_constant_layer_8hpp_source.xhtml#l00046">ConstantLayer.hpp:46</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::DepthwiseConvolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00498">Descriptors.hpp:498</a></div></div>
<div class="ttc" id="classarmnn_1_1_output_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_output_layer.xhtml">armnn::OutputLayer</a></div><div class="ttdoc">A layer user-provided data can be bound to (e.g. inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_output_layer_8hpp_source.xhtml#l00013">OutputLayer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_a4a8ec49f130084445d44297549254780"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#a4a8ec49f130084445d44297549254780">armnn::QLstmDescriptor::m_LayerNormEnabled</a></div><div class="ttdeci">bool m_LayerNormEnabled</div><div class="ttdoc">Enable/disable layer normalization. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01197">Descriptors.hpp:1197</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00032">Types.hpp:32</a></div></div>
<div class="ttc" id="classarmnn_1_1_fully_connected_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_fully_connected_layer.xhtml">armnn::FullyConnectedLayer</a></div><div class="ttdoc">This layer represents a fully connected operation. </div><div class="ttdef"><b>Definition:</b> <a href="_fully_connected_layer_8hpp_source.xhtml#l00015">FullyConnectedLayer.hpp:15</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml">armnn::LstmDescriptor</a></div><div class="ttdoc">An LstmDescriptor for the LstmLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00911">Descriptors.hpp:911</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Pooling2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00367">Descriptors.hpp:367</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::DepthwiseConvolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00494">Descriptors.hpp:494</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a82e98ef05fd67036d1195ba17174d685"><div class="ttname"><a href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">armnn::Optimize</a></div><div class="ttdeci">IOptimizedNetworkPtr Optimize(const INetwork &amp;network, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptions &amp;options=OptimizerOptions(), Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; messages=EmptyOptional())</div><div class="ttdoc">Create an optimized version of the network. </div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01502">Network.cpp:1502</a></div></div>
<div class="ttc" id="classarmnn_1_1_quantized_lstm_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_quantized_lstm_layer.xhtml">armnn::QuantizedLstmLayer</a></div><div class="ttdoc">This layer represents a QuantizedLstm operation. </div><div class="ttdef"><b>Definition:</b> <a href="_quantized_lstm_layer_8hpp_source.xhtml#l00045">QuantizedLstmLayer.hpp:45</a></div></div>
<div class="ttc" id="classarmnn_1_1_log_softmax_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_log_softmax_layer.xhtml">armnn::LogSoftmaxLayer</a></div><div class="ttdoc">This layer represents a log softmax operation. </div><div class="ttdef"><b>Definition:</b> <a href="_log_softmax_layer_8hpp_source.xhtml#l00014">LogSoftmaxLayer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_lstm_queue_descriptor.xhtml">armnn::LstmQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00387">WorkloadData.hpp:387</a></div></div>
<div class="ttc" id="classarmnn_1_1_batch_normalization_layer_xhtml_a3540afac8fad99bbe68b3f7b57590160"><div class="ttname"><a href="classarmnn_1_1_batch_normalization_layer.xhtml#a3540afac8fad99bbe68b3f7b57590160">armnn::BatchNormalizationLayer::m_Mean</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Mean</div><div class="ttdoc">A unique pointer to store Mean values. </div><div class="ttdef"><b>Definition:</b> <a href="_batch_normalization_layer_8hpp_source.xhtml#l00019">BatchNormalizationLayer.hpp:19</a></div></div>
<div class="ttc" id="structarmnn_1_1_l2_normalization_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_l2_normalization_descriptor.xhtml">armnn::L2NormalizationDescriptor</a></div><div class="ttdoc">A L2NormalizationDescriptor for the L2NormalizationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00607">Descriptors.hpp:607</a></div></div>
<div class="ttc" id="_graph_8hpp_xhtml"><div class="ttname"><a href="_graph_8hpp.xhtml">Graph.hpp</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
<div class="ttc" id="structarmnn_1_1_origins_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_origins_descriptor.xhtml">armnn::OriginsDescriptor</a></div><div class="ttdoc">An OriginsDescriptor for the ConcatLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00163">Descriptors.hpp:163</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_aa6a518b65088f34803b3214334bdff61"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#aa6a518b65088f34803b3214334bdff61">armnn::QLstmDescriptor::m_ProjectionClip</a></div><div class="ttdeci">float m_ProjectionClip</div><div class="ttdoc">Clipping threshold value for the projection. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01189">Descriptors.hpp:1189</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml">armnn::FullyConnectedDescriptor</a></div><div class="ttdoc">A FullyConnectedDescriptor for the FullyConnectedLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00389">Descriptors.hpp:389</a></div></div>
<div class="ttc" id="classarmnn_1_1_convolution2d_layer_xhtml_a2664044e28e69309ea08ef385fe53903"><div class="ttname"><a href="classarmnn_1_1_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">armnn::Convolution2dLayer::m_Weight</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Weight</div><div class="ttdoc">A unique pointer to store Weight values. </div><div class="ttdef"><b>Definition:</b> <a href="_convolution2d_layer_8hpp_source.xhtml#l00020">Convolution2dLayer.hpp:20</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::FullyConnectedDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00402">Descriptors.hpp:402</a></div></div>
<div class="ttc" id="classarmnn_1_1_stack_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_stack_layer.xhtml">armnn::StackLayer</a></div><div class="ttdoc">This layer represents a stack operation. </div><div class="ttdef"><b>Definition:</b> <a href="_stack_layer_8hpp_source.xhtml#l00013">StackLayer.hpp:13</a></div></div>
<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_a09e1f097944f61cc901240f9300364cf"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#a09e1f097944f61cc901240f9300364cf">armnn::QLstmDescriptor::m_InputIntermediateScale</a></div><div class="ttdeci">float m_InputIntermediateScale</div><div class="ttdoc">Input intermediate quantization scale. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01199">Descriptors.hpp:1199</a></div></div>
<div class="ttc" id="classarmnn_1_1_concat_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_concat_layer.xhtml">armnn::ConcatLayer</a></div><div class="ttdoc">This layer represents a merge operation. </div><div class="ttdef"><b>Definition:</b> <a href="_concat_layer_8hpp_source.xhtml#l00013">ConcatLayer.hpp:13</a></div></div>
<div class="ttc" id="classarmnn_1_1_softmax_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_softmax_layer.xhtml">armnn::SoftmaxLayer</a></div><div class="ttdoc">This layer represents a softmax operation. </div><div class="ttdef"><b>Definition:</b> <a href="_softmax_layer_8hpp_source.xhtml#l00013">SoftmaxLayer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_adcf5037208faac36c0788239a073f75c"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#adcf5037208faac36c0788239a073f75c">armnn::ResizeDescriptor::m_TargetWidth</a></div><div class="ttdeci">uint32_t m_TargetWidth</div><div class="ttdoc">Target width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00816">Descriptors.hpp:816</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml_a2837b4396f20c956952d1a7286cab5f8"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml#a2837b4396f20c956952d1a7286cab5f8">armnn::LstmDescriptor::m_PeepholeEnabled</a></div><div class="ttdeci">bool m_PeepholeEnabled</div><div class="ttdoc">Enable/disable peephole. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00943">Descriptors.hpp:943</a></div></div>
<div class="ttc" id="classarmnn_1_1_batch_to_space_nd_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_batch_to_space_nd_layer.xhtml">armnn::BatchToSpaceNdLayer</a></div><div class="ttdoc">This layer represents a BatchToSpaceNd operation. </div><div class="ttdef"><b>Definition:</b> <a href="_batch_to_space_nd_layer_8hpp_source.xhtml#l00013">BatchToSpaceNdLayer.hpp:13</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a674efcf6cbdb9e831d653ff0e821fb38"><div class="ttname"><a href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IOptimizedNetwork, void(*)(IOptimizedNetwork *network)&gt; IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00174">INetwork.hpp:174</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">armnn::PoolingAlgorithm::Average</a></div></div>
<div class="ttc" id="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.xhtml">armnn::ConvertFp16ToFp32QueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00449">WorkloadData.hpp:449</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a1ba143ebe524d46181a4b53470693278">armnn::LayerType::PreCompiled</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml">armnn::QLstmDescriptor</a></div><div class="ttdoc">A QLstmDescriptor for the QLstmLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01153">Descriptors.hpp:1153</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_opt_layer_norm_parameters_xhtml_a559113765ea5e2ddbd9e9e5e2869a103"><div class="ttname"><a href="structarmnn_1_1_q_lstm_opt_layer_norm_parameters.xhtml#a559113765ea5e2ddbd9e9e5e2869a103">armnn::QLstmOptLayerNormParameters::m_ForgetLayerNormWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_ForgetLayerNormWeights</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units] (QSymmS16). </div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00071">QLstmLayer.hpp:71</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeafaa4524e3df19ada32643ce9a222362b">armnn::Compute::GpuAcc</a></div><div class="ttdoc">GPU Execution: OpenCL: ArmCompute. </div></div>
<div class="ttc" id="classarmnn_1_1_i_workload_factory_xhtml_a74dc9ec1a223eab8b072368b2dacee87"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml#a74dc9ec1a223eab8b072368b2dacee87">armnn::IWorkloadFactory::IsLayerSupported</a></div><div class="ttdeci">static bool IsLayerSupported(const BackendId &amp;backendId, const IConnectableLayer &amp;layer, Optional&lt; DataType &gt; dataType, std::string &amp;outReasonIfUnsupported)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8cpp_source.xhtml#l01246">WorkloadFactory.cpp:1246</a></div></div>
<div class="ttc" id="structarmnn_1_1_optimizer_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_optimizer_options.xhtml">armnn::OptimizerOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00110">INetwork.hpp:110</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9eaabc5a0f0d6e7cf7fca73299dcd46c0f0d">armnn::ActivationFunction::BoundedReLu</a></div><div class="ttdoc">min(a, max(b, input)) ReLu1 &amp; ReLu6. </div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a46c3fa15c46fb0d1dcdc24d0ea5cb5cd"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a46c3fa15c46fb0d1dcdc24d0ea5cb5cd">armnn::ResizeDescriptor::m_TargetHeight</a></div><div class="ttdeci">uint32_t m_TargetHeight</div><div class="ttdoc">Target height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00818">Descriptors.hpp:818</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml_ae1b07ed928036004bd257169e5aeeef4"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml#ae1b07ed928036004bd257169e5aeeef4">armnn::LstmDescriptor::m_ActivationFunc</a></div><div class="ttdeci">uint32_t m_ActivationFunc</div><div class="ttdoc">The activation function to use. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00935">Descriptors.hpp:935</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Convolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00448">Descriptors.hpp:448</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml">armnn::Graph</a></div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00029">Graph.hpp:29</a></div></div>
<div class="ttc" id="classarmnn_1_1_normalization_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_normalization_layer.xhtml">armnn::NormalizationLayer</a></div><div class="ttdoc">This layer represents a normalization operation. </div><div class="ttdef"><b>Definition:</b> <a href="_normalization_layer_8hpp_source.xhtml#l00013">NormalizationLayer.hpp:13</a></div></div>
<div class="ttc" id="classarmnn_1_1_pooling2d_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_pooling2d_layer.xhtml">armnn::Pooling2dLayer</a></div><div class="ttdoc">This layer represents a pooling 2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_pooling2d_layer_8hpp_source.xhtml#l00013">Pooling2dLayer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml_a531a3907ec13d3772370da88030191a5"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml#a531a3907ec13d3772370da88030191a5">armnn::LstmDescriptor::m_ClippingThresCell</a></div><div class="ttdeci">float m_ClippingThresCell</div><div class="ttdoc">Clipping threshold value for the cell state. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00937">Descriptors.hpp:937</a></div></div>
<div class="ttc" id="classarmnn_1_1_convert_fp32_to_fp16_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_convert_fp32_to_fp16_layer.xhtml">armnn::ConvertFp32ToFp16Layer</a></div><div class="ttdoc">This layer converts data type Float 32 to Float 16. </div><div class="ttdef"><b>Definition:</b> <a href="_convert_fp32_to_fp16_layer_8hpp_source.xhtml#l00013">ConvertFp32ToFp16Layer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml_a6c6b8957f1e176867e5fb05b1a1a1486"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml#a6c6b8957f1e176867e5fb05b1a1a1486">armnn::SpaceToDepthDescriptor::m_BlockSize</a></div><div class="ttdeci">unsigned int m_BlockSize</div><div class="ttdoc">Scalar specifying the input block size. It must be &gt;= 1. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00901">Descriptors.hpp:901</a></div></div>
<div class="ttc" id="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.xhtml">armnn::ConvertFp32ToFp16QueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00454">WorkloadData.hpp:454</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a872803f5667392efc3c8e5607bd453ad"><div class="ttname"><a href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">armnn::GetBiasDataType</a></div><div class="ttdeci">DataType GetBiasDataType(DataType inputDataType)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00025">WorkloadData.cpp:25</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_aea1c8483ebeabc0dcbd9090b4f648f1d"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#aea1c8483ebeabc0dcbd9090b4f648f1d">armnn::Layer::SetAdditionalInfoForObject</a></div><div class="ttdeci">void SetAdditionalInfoForObject(const AdditionalInfoObjectPtr &amp;additionalInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00347">Layer.hpp:347</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a14ab2bc78421c417c4f97a65b0bd78f9"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a14ab2bc78421c417c4f97a65b0bd78f9">armnn::QLstmBasicParameters::m_InputToCellWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_InputToCellWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [num_units, inputSize] (QSymmS8)...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00019">QLstmLayer.hpp:19</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_afec7f36158448f723b426a9527acb189"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#afec7f36158448f723b426a9527acb189">armnn::QLstmDescriptor::m_ForgetIntermediateScale</a></div><div class="ttdeci">float m_ForgetIntermediateScale</div><div class="ttdoc">Forget intermediate quantization scale. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01201">Descriptors.hpp:1201</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Pooling2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00385">Descriptors.hpp:385</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_handle_factory_registry_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_handle_factory_registry.xhtml">armnn::TensorHandleFactoryRegistry</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_handle_factory_registry_8hpp_source.xhtml#l00020">TensorHandleFactoryRegistry.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_1_1_addition_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_addition_layer.xhtml">armnn::AdditionLayer</a></div><div class="ttdoc">This layer represents an addition operation. </div><div class="ttdef"><b>Definition:</b> <a href="_addition_layer_8hpp_source.xhtml#l00013">AdditionLayer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a91dda74af4085ae43913746ad817795a"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a91dda74af4085ae43913746ad817795a">armnn::LstmBasicParameters::m_RecurrentToOutputWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_RecurrentToOutputWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [output_size, num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00067">LstmLayer.hpp:67</a></div></div>
<div class="ttc" id="classarmnn_1_1_q_lstm_layer_xhtml_aada2b9060461ecf785d483eee0dc071a"><div class="ttname"><a href="classarmnn_1_1_q_lstm_layer.xhtml#aada2b9060461ecf785d483eee0dc071a">armnn::QLstmLayer::m_BasicParameters</a></div><div class="ttdeci">QLstmBasicParameters m_BasicParameters</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00083">QLstmLayer.hpp:83</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00043">IRuntime.hpp:43</a></div></div>
<div class="ttc" id="classarmnn_1_1_lstm_layer_xhtml_a4efa0f4d46817ab94e36c8507c26f276"><div class="ttname"><a href="classarmnn_1_1_lstm_layer.xhtml#a4efa0f4d46817ab94e36c8507c26f276">armnn::LstmLayer::m_PeepholeParameters</a></div><div class="ttdeci">LstmOptPeepholeParameters m_PeepholeParameters</div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00084">LstmLayer.hpp:84</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a6a2659750d6161b693d0e51616791959"><div class="ttname"><a href="namespacearmnn.xhtml#a6a2659750d6161b693d0e51616791959">armnn::GetGraphForTesting</a></div><div class="ttdeci">Graph &amp; GetGraphForTesting(IOptimizedNetwork *optNet)</div><div class="ttdef"><b>Definition:</b> <a href="_test_utils_8cpp_source.xhtml#l00025">TestUtils.cpp:25</a></div></div>
<div class="ttc" id="_cpu_tensor_handle_8hpp_xhtml"><div class="ttname"><a href="_cpu_tensor_handle_8hpp.xhtml">CpuTensorHandle.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00192">WorkloadData.hpp:192</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_afe1f0f09d49ad2befc01f8789187b7dd"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#afe1f0f09d49ad2befc01f8789187b7dd">armnn::NormalizationDescriptor::m_NormChannelType</a></div><div class="ttdeci">NormalizationAlgorithmChannel m_NormChannelType</div><div class="ttdoc">Normalization channel algorithm to use (Across, Within). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00591">Descriptors.hpp:591</a></div></div>
<div class="ttc" id="classarmnn_1_1_q_lstm_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_q_lstm_layer.xhtml">armnn::QLstmLayer</a></div><div class="ttdoc">This layer represents a QLstm operation. </div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00079">QLstmLayer.hpp:79</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_ac81fb0e66dc623dc37c77f219f53a6d3"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#ac81fb0e66dc623dc37c77f219f53a6d3">armnn::QLstmDescriptor::m_CellClip</a></div><div class="ttdeci">float m_CellClip</div><div class="ttdoc">Clipping threshold value for the cell state. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01187">Descriptors.hpp:1187</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a017b2990003a014234f13e999dc7c689"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">armnn::ActivationDescriptor::m_A</a></div><div class="ttdeci">float m_A</div><div class="ttdoc">Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00050">Descriptors.hpp:50</a></div></div>
<div class="ttc" id="classarmnn_1_1_subtraction_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_subtraction_layer.xhtml">armnn::SubtractionLayer</a></div><div class="ttdoc">This layer represents a subtraction operation. </div><div class="ttdef"><b>Definition:</b> <a href="_subtraction_layer_8hpp_source.xhtml#l00014">SubtractionLayer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_descriptor_xhtml_ad474e5c51a0b194ef32e812b86c0cbdb"><div class="ttname"><a href="structarmnn_1_1_lstm_descriptor.xhtml#ad474e5c51a0b194ef32e812b86c0cbdb">armnn::LstmDescriptor::m_CifgEnabled</a></div><div class="ttdeci">bool m_CifgEnabled</div><div class="ttdoc">Enable/disable cifg (coupled input &amp; forget gate). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00941">Descriptors.hpp:941</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a14ab2bc78421c417c4f97a65b0bd78f9"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a14ab2bc78421c417c4f97a65b0bd78f9">armnn::LstmBasicParameters::m_InputToCellWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_InputToCellWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00059">LstmLayer.hpp:59</a></div></div>
<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a0e0e17d5b494993407cb75d614455ddd"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a0e0e17d5b494993407cb75d614455ddd">armnn::QLstmBasicParameters::m_ForgetGateBias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_ForgetGateBias</div><div class="ttdoc">A unique pointer to represent 1D bias tensor with dimensions [num_units] (int32). ...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00031">QLstmLayer.hpp:31</a></div></div>
<div class="ttc" id="structarmnn_1_1_elementwise_unary_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">armnn::ElementwiseUnaryDescriptor</a></div><div class="ttdoc">A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00098">Descriptors.hpp:98</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">armnn::Pooling2dDescriptor::m_PoolType</a></div><div class="ttdeci">PoolingAlgorithm m_PoolType</div><div class="ttdoc">The pooling algorithm to use (Max. Average, L2). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00363">Descriptors.hpp:363</a></div></div>
<div class="ttc" id="structarmnn_1_1_l2_normalization_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_l2_normalization_queue_descriptor.xhtml">armnn::L2NormalizationQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00345">WorkloadData.hpp:345</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::DepthwiseConvolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00500">Descriptors.hpp:500</a></div></div>
<div class="ttc" id="classarmnn_1_1_l2_normalization_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_l2_normalization_layer.xhtml">armnn::L2NormalizationLayer</a></div><div class="ttdoc">This layer represents a L2 normalization operation. </div><div class="ttdef"><b>Definition:</b> <a href="_l2_normalization_layer_8hpp_source.xhtml#l00013">L2NormalizationLayer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_q_lstm_queue_descriptor.xhtml">armnn::QLstmQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00552">WorkloadData.hpp:552</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a6e8c3db3c5474f0760553ff93fbc39e6"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a6e8c3db3c5474f0760553ff93fbc39e6">armnn::QLstmBasicParameters::m_RecurrentToCellWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_RecurrentToCellWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00026">QLstmLayer.hpp:26</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdoc">CPU Execution: NEON: ArmCompute. </div></div>
<div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_a6c9de81fc65b3c4924cab11907075a17"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#a6c9de81fc65b3c4924cab11907075a17">armnn::QLstmDescriptor::m_ProjectionEnabled</a></div><div class="ttdeci">bool m_ProjectionEnabled</div><div class="ttdoc">Enable/disable the projection layer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01195">Descriptors.hpp:1195</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_affb5b68b3eba3ed45a06c7cde7781962"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#affb5b68b3eba3ed45a06c7cde7781962">armnn::Pooling2dDescriptor::m_OutputShapeRounding</a></div><div class="ttdeci">OutputShapeRounding m_OutputShapeRounding</div><div class="ttdoc">The rounding method for the output shape. (Floor, Ceiling). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00381">Descriptors.hpp:381</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_normalization_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml">armnn::BatchNormalizationQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00293">WorkloadData.hpp:293</a></div></div>
<div class="ttc" id="classarmnn_1_1_input_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_input_layer.xhtml">armnn::InputLayer</a></div><div class="ttdoc">A layer user-provided data can be bound to (e.g. inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_input_layer_8hpp_source.xhtml#l00013">InputLayer.hpp:13</a></div></div>
<div class="ttc" id="_network_8hpp_xhtml"><div class="ttname"><a href="_network_8hpp.xhtml">Network.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_fully_connected_layer_xhtml_a39925bc24d3afcfb322a46a5884fadb9"><div class="ttname"><a href="classarmnn_1_1_fully_connected_layer.xhtml#a39925bc24d3afcfb322a46a5884fadb9">armnn::FullyConnectedLayer::m_Bias</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Bias</div><div class="ttdoc">A unique pointer to store Bias values. </div><div class="ttdef"><b>Definition:</b> <a href="_fully_connected_layer_8hpp_source.xhtml#l00021">FullyConnectedLayer.hpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml">armnn::MeanDescriptor</a></div><div class="ttdoc">A MeanDescriptor for the MeanLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00951">Descriptors.hpp:951</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8">armnn::UnaryOperation</a></div><div class="ttdeci">UnaryOperation</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00094">Types.hpp:94</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_opt_peephole_parameters_xhtml_a310e133b0b51b93a74b83008893792e9"><div class="ttname"><a href="structarmnn_1_1_lstm_opt_peephole_parameters.xhtml#a310e133b0b51b93a74b83008893792e9">armnn::LstmOptPeepholeParameters::m_CellToOutputWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_CellToOutputWeights</div><div class="ttdoc">A unique pointer to represent 1D weights tensor with dimensions [num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00051">LstmLayer.hpp:51</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#aea909c7327109228ef618d459015def3">armnn::Layer::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.xhtml#l00283">Layer.cpp:283</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_basic_parameters_xhtml_a91dda74af4085ae43913746ad817795a"><div class="ttname"><a href="structarmnn_1_1_q_lstm_basic_parameters.xhtml#a91dda74af4085ae43913746ad817795a">armnn::QLstmBasicParameters::m_RecurrentToOutputWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_RecurrentToOutputWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [num_units, outputSize] (QSymmS8)...</div><div class="ttdef"><b>Definition:</b> <a href="_q_lstm_layer_8hpp_source.xhtml#l00028">QLstmLayer.hpp:28</a></div></div>
<div class="ttc" id="classarmnn_1_1_prelu_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_prelu_layer.xhtml">armnn::PreluLayer</a></div><div class="ttdef"><b>Definition:</b> <a href="_prelu_layer_8hpp_source.xhtml#l00014">PreluLayer.hpp:14</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
<div class="ttc" id="classarmnn_1_1_convolution2d_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_convolution2d_layer.xhtml">armnn::Convolution2dLayer</a></div><div class="ttdoc">This layer represents a convolution 2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_convolution2d_layer_8hpp_source.xhtml#l00015">Convolution2dLayer.hpp:15</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a63cbc581012c957f9d68d224ddc3e43c"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">armnn::TensorInfo::SetQuantizationOffset</a></div><div class="ttdeci">void SetQuantizationOffset(int32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00480">Tensor.cpp:480</a></div></div>
<div class="ttc" id="_test_utils_8cpp_xhtml_a0b295acb179f15eb3fb862b32008f782"><div class="ttname"><a href="_test_utils_8cpp.xhtml#a0b295acb179f15eb3fb862b32008f782">Connect</a></div><div class="ttdeci">void Connect(armnn::IConnectableLayer *from, armnn::IConnectableLayer *to, const armnn::TensorInfo &amp;tensorInfo, unsigned int fromIndex, unsigned int toIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_test_utils_8cpp_source.xhtml#l00012">TestUtils.cpp:12</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a733ae6b70d0bfa43433c3e7606992328"><div class="ttname"><a href="namespacearmnn.xhtml#a733ae6b70d0bfa43433c3e7606992328">armnn::CreateDescriptorForConcatenation</a></div><div class="ttdeci">OriginsDescriptor CreateDescriptorForConcatenation(TensorShapeIt first, TensorShapeIt last, unsigned int concatenationDimension)</div><div class="ttdoc">Convenience template to create an OriginsDescriptor to use when creating a ConcatLayer for performing...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00258">Descriptors.hpp:258</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a9a7209345edfdb2b066b0ceb66414d7c"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a9a7209345edfdb2b066b0ceb66414d7c">armnn::Graph::TopologicalSort</a></div><div class="ttdeci">Graph &amp; TopologicalSort()</div><div class="ttdoc">Sorts layers in topological order and return this. </div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00177">Graph.hpp:177</a></div></div>
<div class="ttc" id="classarmnn_1_1_mean_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_mean_layer.xhtml">armnn::MeanLayer</a></div><div class="ttdoc">This layer represents a mean operation. </div><div class="ttdef"><b>Definition:</b> <a href="_mean_layer_8hpp_source.xhtml#l00014">MeanLayer.hpp:14</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ace74f6f9feb95a964a49d79458232703"><div class="ttname"><a href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; INetwork, void(*)(INetwork *network)&gt; INetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00173">INetwork.hpp:173</a></div></div>
<div class="ttc" id="structarmnn_1_1_pre_compiled_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pre_compiled_queue_descriptor.xhtml">armnn::PreCompiledQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00502">WorkloadData.hpp:502</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d"><div class="ttname"><a href="namespacearmnn.xhtml#ad605d1661fa0d8c7fea651d82fbe11c9ac65d2e51c610dd3853a3c777aa8bfe9d">armnn::NormalizationAlgorithmMethod::LocalBrightness</a></div><div class="ttdoc">Krichevsky 2012: Local Brightness Normalization. </div></div>
<div class="ttc" id="classarmnn_1_1_depthwise_convolution2d_layer_xhtml_a2664044e28e69309ea08ef385fe53903"><div class="ttname"><a href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml#a2664044e28e69309ea08ef385fe53903">armnn::DepthwiseConvolution2dLayer::m_Weight</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_Weight</div><div class="ttdoc">A unique pointer to store Weight values. </div><div class="ttdef"><b>Definition:</b> <a href="_depthwise_convolution2d_layer_8hpp_source.xhtml#l00019">DepthwiseConvolution2dLayer.hpp:19</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pooling2d_queue_descriptor.xhtml">armnn::Pooling2dQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00186">WorkloadData.hpp:186</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml">armnn::Pooling2dDescriptor</a></div><div class="ttdoc">A Pooling2dDescriptor for the Pooling2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00329">Descriptors.hpp:329</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc"><div class="ttname"><a href="namespacearmnn.xhtml#abe18a5033f2ab9c0de82c676b48f5437a810f43f3996922151c39b76143faeecc">armnn::NormalizationAlgorithmChannel::Across</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml">armnn::NormalizationDescriptor</a></div><div class="ttdoc">A NormalizationDescriptor for the NormalizationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00567">Descriptors.hpp:567</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::ResizeDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00823">Descriptors.hpp:823</a></div></div>
<div class="ttc" id="structarmnn_1_1_mean_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_mean_queue_descriptor.xhtml">armnn::MeanQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00270">WorkloadData.hpp:270</a></div></div>
<div class="ttc" id="classarmnn_1_1_multiplication_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_multiplication_layer.xhtml">armnn::MultiplicationLayer</a></div><div class="ttdoc">This layer represents a multiplication operation. </div><div class="ttdef"><b>Definition:</b> <a href="_multiplication_layer_8hpp_source.xhtml#l00014">MultiplicationLayer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_log_softmax_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_log_softmax_queue_descriptor.xhtml">armnn::LogSoftmaxQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00350">WorkloadData.hpp:350</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_a3ff62126ec713a2708e5fbaa6146a7de"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a3ff62126ec713a2708e5fbaa6146a7de">armnn::Layer::CreateTensorHandles</a></div><div class="ttdeci">virtual void CreateTensorHandles(const TensorHandleFactoryRegistry &amp;registry, const IWorkloadFactory &amp;factory, const bool IsMemoryManaged=true)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.xhtml#l00250">Layer.cpp:250</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_a08d1e10a45f15cd0bd02557be35a3864"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a08d1e10a45f15cd0bd02557be35a3864">armnn::Layer::CreateWorkload</a></div><div class="ttdeci">virtual std::unique_ptr&lt; IWorkload &gt; CreateWorkload(const IWorkloadFactory &amp;factory) const =0</div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_a0477ee1b44ace6090119178eea78cb0b"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#a0477ee1b44ace6090119178eea78cb0b">armnn::QLstmDescriptor::m_CellIntermediateScale</a></div><div class="ttdeci">float m_CellIntermediateScale</div><div class="ttdoc">Cell intermediate quantization scale. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01203">Descriptors.hpp:1203</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_network_xhtml_a464f0ff87b1aabf71febaa71321dd40b"><div class="ttname"><a href="classarmnn_1_1_i_network.xhtml#a464f0ff87b1aabf71febaa71321dd40b">armnn::INetwork::Create</a></div><div class="ttdeci">static INetworkPtr Create(NetworkOptions networkOptions={})</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00510">Network.cpp:510</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_basic_parameters_xhtml_a5a0d8af26a6aad1e5be521ea7dc550eb"><div class="ttname"><a href="structarmnn_1_1_lstm_basic_parameters.xhtml#a5a0d8af26a6aad1e5be521ea7dc550eb">armnn::LstmBasicParameters::m_InputToForgetWeights</a></div><div class="ttdeci">std::unique_ptr&lt; ScopedCpuTensorHandle &gt; m_InputToForgetWeights</div><div class="ttdoc">A unique pointer to represent 2D weights tensor with dimensions [input_size, num_units]. </div><div class="ttdef"><b>Definition:</b> <a href="_lstm_layer_8hpp_source.xhtml#l00057">LstmLayer.hpp:57</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a28c4c9cb15f6be3499abbc46b356060b"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">armnn::ActivationDescriptor::m_B</a></div><div class="ttdeci">float m_B</div><div class="ttdoc">Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00052">Descriptors.hpp:52</a></div></div>
<div class="ttc" id="structarmnn_1_1_softmax_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_softmax_descriptor.xhtml">armnn::SoftmaxDescriptor</a></div><div class="ttdoc">A SoftmaxDescriptor for the SoftmaxLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00139">Descriptors.hpp:139</a></div></div>
<div class="ttc" id="structarmnn_1_1_reshape_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reshape_queue_descriptor.xhtml">armnn::ReshapeQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00367">WorkloadData.hpp:367</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a8275d51ef9a584feb95726ea0522f6e5"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">armnn::NormalizationDescriptor::m_Beta</a></div><div class="ttdeci">float m_Beta</div><div class="ttdoc">Beta value for the normalization equation. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00599">Descriptors.hpp:599</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_ad474e5c51a0b194ef32e812b86c0cbdb"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#ad474e5c51a0b194ef32e812b86c0cbdb">armnn::QLstmDescriptor::m_CifgEnabled</a></div><div class="ttdeci">bool m_CifgEnabled</div><div class="ttdoc">Enable/disable CIFG (coupled input &amp; forget gate). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01191">Descriptors.hpp:1191</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_aa70c05f1aad12fbd9d9ec43ea4557b03"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#aa70c05f1aad12fbd9d9ec43ea4557b03">armnn::NormalizationDescriptor::m_NormSize</a></div><div class="ttdeci">uint32_t m_NormSize</div><div class="ttdoc">Depth radius value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00595">Descriptors.hpp:595</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Pooling2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00379">Descriptors.hpp:379</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">armnn::DepthwiseConvolution2dDescriptor</a></div><div class="ttdoc">A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00460">Descriptors.hpp:460</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml">armnn::Layer</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00210">Layer.hpp:210</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00207">WorkloadData.hpp:207</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_queue_descriptor.xhtml">armnn::ActivationQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00148">WorkloadData.hpp:148</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_normalization_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_descriptor.xhtml">armnn::BatchNormalizationDescriptor</a></div><div class="ttdoc">A BatchNormalizationDescriptor for the BatchNormalizationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00626">Descriptors.hpp:626</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Convolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00438">Descriptors.hpp:438</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_aefb14147290b6b928c5fc924ba035acc"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#aefb14147290b6b928c5fc924ba035acc">armnn::Layer::GetAdditionalInformation</a></div><div class="ttdeci">std::shared_ptr&lt; T &gt; GetAdditionalInformation() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00342">Layer.hpp:342</a></div></div>
<div class="ttc" id="classarmnn_1_1_resize_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_resize_layer.xhtml">armnn::ResizeLayer</a></div><div class="ttdoc">This layer represents a resize operation. </div><div class="ttdef"><b>Definition:</b> <a href="_resize_layer_8hpp_source.xhtml#l00013">ResizeLayer.hpp:13</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4">armnn::LayerType</a></div><div class="ttdeci">LayerType</div><div class="ttdoc">When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00419">Types.hpp:419</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::DepthwiseConvolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00492">Descriptors.hpp:492</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_descriptor_xhtml_a4556cbd764d4848d8ad0637a9eed580d"><div class="ttname"><a href="structarmnn_1_1_q_lstm_descriptor.xhtml#a4556cbd764d4848d8ad0637a9eed580d">armnn::QLstmDescriptor::m_HiddenStateZeroPoint</a></div><div class="ttdeci">int32_t m_HiddenStateZeroPoint</div><div class="ttdoc">Hidden State zero point. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01207">Descriptors.hpp:1207</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_normalization_queue_descriptor.xhtml">armnn::NormalizationQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00234">WorkloadData.hpp:234</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_e0a84d05c80a2ef4231141dcbbeac5c8.xhtml">armnn</a></li><li class="navelem"><a class="el" href="dir_9d86fd1fbecbedf5bdb69c7e7235fe5f.xhtml">test</a></li><li class="navelem"><a class="el" href="_create_workload_8hpp.xhtml">CreateWorkload.hpp</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:27:29 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>