aboutsummaryrefslogtreecommitdiff
path: root/21.02/_conv2d_test_impl_8cpp_source.xhtml
blob: 1e412e294a1d8876eefb0fa29b776f4bf265fa69 (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
<!-- 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/backends/backendsCommon/test/layerTests/Conv2dTestImpl.cpp 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('_conv2d_test_impl_8cpp_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">Conv2dTestImpl.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_conv2d_test_impl_8cpp.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;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_conv2d_test_impl_8hpp.xhtml">Conv2dTestImpl.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_quantize_helper_8hpp.xhtml">QuantizeHelper.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_tensor_utils_8hpp.xhtml">armnnUtils/TensorUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno">   11</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="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_numeric_cast_8hpp.xhtml">armnn/utility/NumericCast.hpp</a>&gt;</span></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="_permute_8hpp.xhtml">armnnUtils/Permute.hpp</a>&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</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="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_data_layout_utils_8hpp.xhtml">backendsCommon/test/DataLayoutUtils.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="_tensor_copy_utils_8hpp.xhtml">backendsCommon/test/TensorCopyUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_workload_test_utils_8hpp.xhtml">backendsCommon/test/WorkloadTestUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_tensor_helpers_8hpp.xhtml">test/TensorHelpers.hpp</a>&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">// Static data</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">//</span></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="comment">// 2-channel bias used by a number of Conv2d tests.</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">static</span> std::vector&lt;float&gt; Bias2({0, 2});</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">static</span> std::vector&lt;float&gt; Bias4({1, 2, 3, 4});</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">static</span> std::vector&lt;float&gt; Bias8({1, 2, 3, 4, 1, 2, 3, 4});</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// 3-channel 16x8 image used as common input data for a number of Conv2d tests.</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">static</span> std::vector&lt;float&gt; ConvInput3x8x16({</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;});</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_utils.xhtml">armnnUtils</a>;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">// Helper templates</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment">// Helper template that returns either Bias2 or an empty vector depending on whether bias is enabled.</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#ad80bc46727797692d35f94d5935469cb">   73</a></span>&#160;boost::multi_array&lt;T, 1&gt; <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ad80bc46727797692d35f94d5935469cb">GetBias2</a>(<span class="keywordtype">bool</span> biasEnabled, <span class="keywordtype">float</span> qScale)</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;    <span class="keywordflow">if</span>(biasEnabled)</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;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(Bias2.size())}, ArmnnType);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        boost::multi_array&lt;T, 1&gt; bias = MakeTensor&lt;T, 1&gt;(biasDesc, QuantizedVector&lt;T&gt;(Bias2, qScale, 0));</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        <span class="keywordflow">return</span> bias;</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="keywordflow">else</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    {</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;        <span class="keywordflow">return</span> boost::multi_array&lt;T, 1&gt;();</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    }</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;}</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;<span class="comment">// Helper template that returns either Bias4 or an empty vector depending on whether bias is enabled.</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#aa794621b8665d1df93a1c9aa95d5a90d">   89</a></span>&#160;boost::multi_array&lt;T, 1&gt; <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa794621b8665d1df93a1c9aa95d5a90d">GetBias4</a>(<span class="keywordtype">bool</span> biasEnabled, <span class="keywordtype">float</span> qScale)</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;{</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    {</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(Bias4.size())}, ArmnnType);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        boost::multi_array&lt;T, 1&gt; bias = MakeTensor&lt;T, 1&gt;(biasDesc, QuantizedVector&lt;T&gt;(Bias4, qScale, 0));</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        <span class="keywordflow">return</span> bias;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    }</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">else</span></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="keywordflow">return</span> boost::multi_array&lt;T, 1&gt;();</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    }</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="comment">// Helper template that returns either Bias8 or an empty vector depending on whether bias is enabled.</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#ae04bff4e44deed6908feae29e57ffe0c">  105</a></span>&#160;boost::multi_array&lt;T, 1&gt; <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ae04bff4e44deed6908feae29e57ffe0c">GetBias8</a>(<span class="keywordtype">bool</span> biasEnabled, <span class="keywordtype">float</span> qScale)</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;{</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    {</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(Bias4.size())}, ArmnnType);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        boost::multi_array&lt;T, 1&gt; bias = MakeTensor&lt;T, 1&gt;(biasDesc, QuantizedVector&lt;T&gt;(Bias8, qScale, 0));</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordflow">return</span> bias;</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="keywordflow">else</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    {</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <span class="keywordflow">return</span> boost::multi_array&lt;T, 1&gt;();</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    }</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;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="comment">// Helper template that returns either Bias4 or an empty vector depending on whether bias is enabled.</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a3481304dfd3e941b809c64979b940ad5">  121</a></span>&#160;boost::multi_array&lt;T, 1&gt; <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a3481304dfd3e941b809c64979b940ad5">GetBias</a>(<span class="keywordtype">bool</span> biasEnabled, <span class="keywordtype">float</span> qScale, <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputInfo, <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;{</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a> dataLayoutIndexed(layout);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIndex = dataLayoutIndexed.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>();</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[channelsIndex];</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keywordflow">switch</span> (outputChannels)</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    {</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        <span class="keywordflow">case</span> 2:</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        <span class="keywordflow">default</span>:</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="keywordflow">return</span> GetBias2&lt;ArmnnType&gt;(biasEnabled, qScale);</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        }</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="keywordflow">case</span> 4:</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="keywordflow">return</span> GetBias4&lt;ArmnnType&gt;(biasEnabled, qScale);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        }</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keywordflow">case</span> 8:</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;            <span class="keywordflow">return</span> GetBias8&lt;ArmnnType&gt;(biasEnabled, qScale);</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;    }</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;}</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="comment">//</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment">// Implementation templates</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment">// Mapping from input type to bias type for fully connected layers.</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">// float =&gt; float, uint8_t =&gt; int32_t</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="keyword">struct </span>FullyConnectedBiasTypeForInputType;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="keyword">struct </span>FullyConnectedBiasTypeForInputType&lt;float&gt;</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="keyword">using</span> Type = float;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;};</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="keyword">struct </span>FullyConnectedBiasTypeForInputType&lt;uint8_t&gt;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keyword">using</span> Type = int32_t;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;};</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment">// Modifies a std::vector in-place using a specified bias.</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">  168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(std::vector&lt;T&gt;&amp; v, <span class="keywordtype">float</span> vScale, int32_t vOffset,</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keyword">const</span> std::vector&lt;B&gt;&amp; bias, <span class="keywordtype">float</span> bScale, int32_t bOffset, uint32_t w, uint32_t h)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>((armnn::IsQuantizedType&lt;T&gt;() &amp;&amp; vScale != 0.0f) || (!armnn::IsQuantizedType&lt;T&gt;()),</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                     <span class="stringliteral">&quot;Invalid type and parameter combination.&quot;</span>);</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>((armnn::IsQuantizedType&lt;B&gt;() &amp;&amp; bScale != 0.0f) || (!armnn::IsQuantizedType&lt;B&gt;()),</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;                     <span class="stringliteral">&quot;Invalid type and parameter combination.&quot;</span>);</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="comment">// Note we need to dequantize and re-quantize the image value and the bias.</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; bias.size(); ++i)</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="keywordtype">float</span> dBias = <a class="code" href="namespacearmnn_utils.xhtml#a5135dc1ce7a8aeb97623c1a92c5a3543">SelectiveDequantize</a>(bias[i], bScale, bOffset);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        <span class="keywordflow">for</span> (uint32_t y = 0; y &lt; h; ++y)</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        {</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;            <span class="keywordflow">for</span> (uint32_t x = 0; x &lt; w; ++x)</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;            {</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                uint32_t offset = (i * h + y) * w + x;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(offset &lt; v.size());</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;                T&amp; outRef = v[offset];</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                <span class="keywordtype">float</span> dOutput = <a class="code" href="namespacearmnn_utils.xhtml#a5135dc1ce7a8aeb97623c1a92c5a3543">SelectiveDequantize</a>(outRef, vScale, vOffset);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                outRef = SelectiveQuantize&lt;T&gt;(dOutput + dBias, vScale, vOffset);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            }</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;    }</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="comment">//</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="comment">// Convolution2d implementations</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>, <span class="keyword">typename</span> <a class="code" href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571">B</a> = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>&gt;</div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a41cfd5f6819a68241342a0f2c8841d86">  200</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a41cfd5f6819a68241342a0f2c8841d86">SimpleConvolution2dTestImpl</a>(</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; originalInput,</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; originalKernel,</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;B, 1&gt;&amp; bias,</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; originalOutputExpected,</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>,</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    uint32_t padLeft = 0,</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    uint32_t padTop = 0,</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    uint32_t padRight = 0,</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    uint32_t padBottom = 0,</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    uint32_t strideX = 1,</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    uint32_t strideY = 1,</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    uint32_t dilationX = 1,</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    uint32_t dilationY = 1)</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;{</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(memoryManager);</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[2]);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[3]);</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[1]);</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum      = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[0]);</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;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[2]);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[3]);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[1]);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum      = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[0]);</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;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[2]);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[3]);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[1]);</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelDepthMul = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[0]);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <span class="keywordtype">bool</span> biasEnabled = bias.size() &gt; 0;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="comment">// This function currently assumes 1 batch of input/output (and duplicates this into 2 batches).</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputNum == 1);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputNum == 1);</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="comment">// If a bias is used, its size must equal the number of output channels.</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!biasEnabled || bias.size() == outputChannels);</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</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;    <span class="comment">// Note these tensors will use two (identical) batches.</span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo =</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(2*inputNum, inputChannels, inputHeight, inputWidth, layout, ArmnnType);</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo =</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(2*outputNum, outputChannels, outputHeight, outputWidth, layout, ArmnnType);</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc =</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(kernelDepthMul, kernelChannels, kernelHeight, kernelWidth, layout, ArmnnType);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(bias.size())}, ArmnnBType);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    <span class="comment">// Set quantization parameters if the requested type is a quantized type.</span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="keywordflow">if</span>(armnn::IsQuantizedType&lt;T&gt;())</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    {</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        inputTensorInfo.SetQuantizationScale(qScale);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        inputTensorInfo.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        kernelDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        kernelDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;        biasDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale*qScale);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        biasDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(0);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    <span class="comment">// Construct input data - two batches of the same input image.</span></div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    std::vector&lt;T&gt; inputImage;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    inputImage.assign(originalInput.data(), originalInput.data() + 1*inputChannels*inputHeight*inputWidth);</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    std::vector&lt;T&gt; inputData;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    inputData.insert(inputData.end(), inputImage.begin(), inputImage.end());</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    inputData.insert(inputData.end(), inputImage.begin(), inputImage.end());</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <span class="comment">// at this point if we require it permute the input data</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> NCHWToNHWC = { 0, 3, 1, 2 };</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    {</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        std::vector&lt;T&gt; tmp(inputData.size());</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        inputData = tmp;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    }</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keyword">auto</span> batchedInput = MakeTensor&lt;T, 4&gt;(inputTensorInfo, inputData);</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;    std::vector&lt;T&gt; outputImage;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    outputImage.assign(originalOutputExpected.data(),</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;            originalOutputExpected.data() + outputChannels*outputHeight*outputWidth);</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="comment">// Apply bias to output image if it is enabled.</span></div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    {</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        std::vector&lt;T&gt; biasV;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        biasV.assign(bias.data(), bias.data() + outputChannels);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(outputImage, outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(), outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>(),</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;            biasV, biasDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(), biasDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>(),</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;            outputWidth, outputHeight);</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    }</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;    <span class="comment">// Construct expected output data - two identical images.</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    std::vector&lt;T&gt; outputData;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    outputData.insert(outputData.end(), outputImage.begin(), outputImage.end());</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    outputData.insert(outputData.end(), outputImage.begin(), outputImage.end());</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="comment">// at this point if we require it permute the expected output</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    {</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;        std::vector&lt;T&gt; tmp(outputData.size());</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC, outputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;        outputData = tmp;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    }</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a> = MakeTensor&lt;T, 4&gt;(outputTensorInfo, outputData);</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;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</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="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="comment">// Permute the kernel if necessary</span></div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = boost::multi_array&lt;T, 4&gt;(originalKernel);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</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;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(kernelDesc.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC, originalKernel.data(), kernel.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    }</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</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;        <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    }</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor; <span class="comment">// Still set this whether or not bias is enabled - can be a source of bugs.</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strideX;</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strideY;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = padLeft;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = padRight;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = padTop;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = padBottom;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = layout;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> = dilationX;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> = dilationY;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">CreateConvolution2d</a>(data, info);</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;batchedInput[0][0][0][0]);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;}</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="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>, <span class="keyword">typename</span> B = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>,</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;         <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> OutType = ArmnnType, <span class="keyword">typename</span> O = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;OutType&gt;</a>&gt;</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a56f561170b575bdb2c808d35155f88c5">  368</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;O, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a56f561170b575bdb2c808d35155f88c5">SimpleConvolution2dNhwcTestImpl</a>(</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; input,</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; kernel,</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;B, 1&gt;&amp; bias,</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;O, 4&gt;&amp; outputExpected,</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> dataLayout,</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    uint32_t padLeft = 1,</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    uint32_t padTop = 1,</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    uint32_t padRight = 1,</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    uint32_t padBottom = 1,</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    uint32_t strideX  = 1,</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    uint32_t strideY  = 1)</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;{</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(qScale, qOffset);</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum       = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[0]);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels  = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[3]);</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[1]);</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth     = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[2]);</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChanMul  = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[0]);</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[3]);</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[1]);</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[2]);</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum      = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[0]);</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[3]);</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[1]);</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[2]);</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordtype">bool</span> biasEnabled = bias.size() &gt; 0;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <span class="comment">// Creates the tensors.</span></div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({inputNum, inputHeight, inputWidth, inputChannels}, ArmnnType);</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({outputNum, outputHeight, outputWidth, outputChannels},</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;                                       OutType);</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({kernelChanMul, kernelHeight, kernelWidth, kernelChannels}, ArmnnType);</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(bias.size())}, ArmnnBType);</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;    <span class="comment">// Construct the input data.</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    std::vector&lt;T&gt; inputData;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    inputData.assign(input.data(), input.data() + inputHeight*inputWidth*inputChannels);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    <span class="keyword">auto</span> batchedInput = MakeTensor&lt;T, 4&gt;(inputTensorInfo, inputData);</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    <span class="comment">// Construct the output data, with bias applied, as appropriate.</span></div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    std::vector&lt;O&gt; outputData;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    outputData.assign(outputExpected.data(), outputExpected.data() + outputHeight*outputWidth*outputChannels);</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;O, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a> = MakeTensor&lt;O, 4&gt;(outputTensorInfo, outputData);</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;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor; <span class="comment">// Still set this whether or not bias is enabled - can be a source of bugs.</span></div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strideX;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strideY;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = padLeft;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = padRight;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = padTop;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = padBottom;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</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;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">CreateConvolution2d</a>(data, info);</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;batchedInput[0][0][0][0]);</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>[0][0][0][0], outputHandle.get());</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;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;}</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a4805ba0c9778e2cb91b9f4a76019852b">  462</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T,4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a4805ba0c9778e2cb91b9f4a76019852b">Convolution1dTestImpl</a>(</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;{</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="keyword">using</span> B = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="comment">// Until we have a specialist 1D convolution layer, we can fake one using</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    <span class="comment">// 2D convolution with the final dimension set to 1.</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="comment">// I don&#39;t anticipate this being particularly slow, given that convolution is implemented</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="comment">// as a matrix multiplication, at which point dimension doesn&#39;t matter.</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batchSize      = 1;</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels  = 2;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = 3;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputSize      = 5; <span class="comment">// The 1D size (could view as &#39;width&#39; or &#39;height&#39;).</span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelSize     = 3;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padSize        = 2;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stride         = 1;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSize     = 7; <span class="comment">// (inputSize + 2 * padSize - kernelSize + 1) / stride.</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputInfo({batchSize, inputChannels, inputSize, 1}, ArmnnType);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputInfo({batchSize, outputChannels, outputSize, 1}, ArmnnType);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelInfo({outputChannels, inputChannels, kernelSize, 1}, ArmnnType);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasInfo({outputChannels}, ArmnnBType);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="comment">// Set quantization parameters if the requested type is a quantized type.</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="keywordflow">if</span>(armnn::IsQuantizedType&lt;T&gt;())</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    {</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        inputInfo.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        outputInfo.SetQuantizationScale(qScale);</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        outputInfo.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;        kernelInfo.SetQuantizationScale(qScale);</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;        kernelInfo.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        biasInfo.SetQuantizationScale(inputInfo.GetQuantizationScale()*kernelInfo.GetQuantizationScale());</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        biasInfo.SetQuantizationOffset(0);</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    }</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    std::vector&lt;T&gt; inputData = QuantizedVector&lt;T&gt;(</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;             5.0f, -2.0f, 2.5f, 0.0f, 1.0f,</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;            -3.0f,  3.2f, 5.0f, 2.0f, 3.0f,</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        },</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;        inputInfo.GetQuantizationScale(),</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        inputInfo.GetQuantizationOffset());</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    std::vector&lt;T&gt; kernelData = QuantizedVector&lt;T&gt;(</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;            1.0f,  0.0f,  0.0f,</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;            0.0f,  2.0f, -1.5f,</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;            0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;            0.2f,  0.2f,  0.2f,</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;            0.5f,  0.0f,  0.5f,</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;            0.0f, -1.0f,  0.0f</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        },</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        kernelInfo.GetQuantizationScale(),</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;        kernelInfo.GetQuantizationOffset());</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    std::vector&lt;B&gt; biasData =</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        QuantizedVector&lt;B&gt;({ 1.0f, 0.0f, 0.0f }, biasInfo.GetQuantizationScale(), biasInfo.GetQuantizationOffset());</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    std::vector&lt;T&gt; outputData = QuantizedVector&lt;T&gt;(</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        {</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;             4.5f, -10.8f, 5.0f + 6.4f - 7.5f, -2.0f + 10.0f -3.0f, 2.5f + 4.0f - 4.5f, 6.0f, 1.0f,</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;            -0.6f, -0.6f + 0.64f, -0.6f + 0.64f + 1.0f, 0.64f + 1.0f + 0.4f, 1.0f + 0.4f + 0.6f, 0.4f + 0.6f, 0.6f,</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;             2.5f, -1.0f + 3.0f, 1.25f - 3.2f + 2.5f, -1.0f - 5.0f, 1.25f + 0.5f - 2.0f, -3.0f, 0.5f</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;        },</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;        outputInfo.GetQuantizationScale(),</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;        outputInfo.GetQuantizationOffset());</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <span class="comment">// Optionally apply bias to output image.</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</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;        <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(outputData, outputInfo.GetQuantizationScale(), outputInfo.GetQuantizationOffset(),</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;            biasData, biasInfo.GetQuantizationScale(), biasInfo.GetQuantizationOffset(),</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;            1, outputSize);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    }</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle  = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputInfo);</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputInfo);</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a>         weightsTensor(kernelInfo);</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a>         biasTensor(biasInfo);</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, kernelData.data());</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, biasData.data());</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    AddInputToWorkload(data, info, inputInfo, inputHandle.get());</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    AddOutputToWorkload(data, info, outputInfo, outputHandle.get());</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a>         = &amp;weightsTensor;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a>           = &amp;biasTensor;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>        = 1;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>        = stride;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>        = 0;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>       = 0;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>         = padSize;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>      = padSize;</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a>    = biasEnabled;</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;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">CreateConvolution2d</a>(data, info);</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), inputData.data());</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <span class="comment">// Output</span></div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T,4&gt;</a> ret(outputInfo);</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a> = MakeTensor&lt;T, 4&gt;(outputInfo, outputData);</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;}</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="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#afbb87be327f0d9d7d0342ac2681d507c">  585</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#afbb87be327f0d9d7d0342ac2681d507c">SimpleConvolution2d3x3NhwcTestCommon</a>(</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> dataLayout)</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;{</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(biasEnabled);</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="comment">// Use common single-batch 5x5 image.</span></div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({1, 3, 4, 1}, ArmnnType);</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    boost::multi_array&lt;T, 4&gt; input = MakeTensor&lt;T, 4&gt;(inputDesc,</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;                                                       1, 5, 2, 3,</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;                                                       8, 7, 3, 6,</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;                                                       3, 3, 9, 1</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;                                                       });</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    <span class="comment">// Use a 2-element batch of 3-channel 3x3 kernels.</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({1, 3, 3, 1}, ArmnnType);</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, {</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;                                                                    4, 5, 6,</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;                                                                    0, 0, 0,</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;                                                                    3, 2, 1</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;                                                                    });</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="comment">// Expected output is 1 batch of a 5x5 image.</span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 3, 4, 1}, ArmnnType);</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; outputData =</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;                    23, 41, 33, 21,</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;                    44, 65, 76, 52,</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;                    82, 85, 79, 42</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;            };</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputDesc, outputData);</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dNhwcTestImpl&lt;ArmnnType, ArmnnType&gt;(</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;        workloadFactory,</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;        memoryManager,</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        input,</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;        kernel,</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        boost::multi_array&lt;T, 1&gt;(),</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        expectedOutput,</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;        dataLayout,</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        qScale,</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;        qOffset);</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;</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a676232481dc5af6280e8433f0f5397a1">  640</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a676232481dc5af6280e8433f0f5397a1">SimpleConvolution2d3x3Stride2x2TestCommon</a>(</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;        int32_t qOffset,</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>&amp; dataLayout)</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;{</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(biasEnabled);</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    <span class="comment">// Input is a single-batch, 1 channel, 5x5 image.</span></div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({1, 5, 5, 1}, ArmnnType);</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    boost::multi_array&lt;T, 4&gt; input = MakeTensor&lt;T, 4&gt;(inputDesc,</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;            {</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;                1, 5, 2, 3, 5,</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;                8, 7, 3, 6, 3,</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;                3, 3, 9, 1, 9,</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                4, 1, 8, 1, 3,</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                6, 8, 1, 9, 2</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;            });</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    <span class="comment">// Use a 3x3 kernel.</span></div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({1, 3, 3, 1}, ArmnnType);</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = MakeTensor&lt;T, 4&gt;(kernelDesc,</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;            {</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                4, 5, 6,</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                0, 0, 0,</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                3, 2, 1</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;            });</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;    <span class="comment">// Expected output is a single-batch, 1 channel, 3x3 image.</span></div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 3, 3, 1}, ArmnnType);</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    <span class="keyword">const</span> std::vector&lt;T&gt; outputData =</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;                23, 33, 24,</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                91, 99, 48,</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                26, 50, 19</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;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputDesc, outputData);</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    uint32_t padLeft = 1;</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    uint32_t padTop = 1;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    uint32_t padRight = 1;</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    uint32_t padBottom = 1;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    uint32_t strideX  = 2;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    uint32_t strideY  = 2;</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dNhwcTestImpl&lt;ArmnnType, ArmnnType&gt;(</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;        workloadFactory,</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;        memoryManager,</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;        input,</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;        kernel,</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;        boost::multi_array&lt;T, 1&gt;(),</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;        expectedOutput,</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;        dataLayout,</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;        qScale,</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;        qOffset,</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        padLeft,</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;        padTop,</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;        padRight,</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        padBottom,</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        strideX,</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;        strideY);</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;}</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a7cd1a185c5b6d578584d353ec976b1d6">  710</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a7cd1a185c5b6d578584d353ec976b1d6">SimpleConvolution2d3x5TestCommon</a>(</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;{</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="comment">// Use common single-batch 3-channel 16x8 image.</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({1, 3, 8, 16}, ArmnnType);</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    boost::multi_array&lt;T, 4&gt; input = MakeTensor&lt;T, 4&gt;(inputDesc, QuantizedVector&lt;T&gt;(ConvInput3x8x16, qScale, qOffset));</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;    <span class="comment">// Use a 2-element batch with 3-channel 3x5 kernels.</span></div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({2, 3, 5, 3}, ArmnnType);</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;            1, -1, 1,</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;            1,  1, 1,</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;            0,  0, 0,</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;            0,  0, 0</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        },</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;        qScale, qOffset)));</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <span class="comment">// Expected output is 2 batch elements of a 1-channel 14x4 image.</span></div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 2, 4, 14}, ArmnnType);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;            -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24,</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;            -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;            -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f,</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;            -23.5f, -23.5f, -23.5f,</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;            -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f,</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;            -23.5f, -23.5f, -23.5f,</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;            5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;            5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;            5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;            5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;        },</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        qScale, qOffset)));</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        workloadFactory,</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;        memoryManager,</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;        input,</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        kernel,</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;        GetBias2&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale),</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        expectedOutput,</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;        qScale,</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;        qOffset,</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;        layout);</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;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>&gt;</div><div class="line"><a name="l00799"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#ac51fc577b6324ce88e6d202a5f9be78f">  799</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ac51fc577b6324ce88e6d202a5f9be78f">SimpleConvolution2d3x3TestCommon</a>(</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;{</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="comment">// Use a 3x3 kernel, which exercises ArmCompute&#39;s direct convolution path.</span></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;    <span class="comment">// Use common single-batch 3-channel 16x8 image.</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({1, 3, 8, 16}, ArmnnType);</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    boost::multi_array&lt;T, 4&gt; input = MakeTensor&lt;T, 4&gt;(inputDesc, QuantizedVector&lt;T&gt;(ConvInput3x8x16, qScale, qOffset));</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    <span class="comment">// Use a 2-element batch of 3-channel 3x3 kernels.</span></div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({2, 3, 3, 3}, ArmnnType);</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;            1, -1, 1,</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;            2,  2, 2,</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;            1,  1, 1,</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;            1,  1, 1,</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;            0,  0, 0,</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;            0,  0, 0,</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;            0,  0, 0</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;        },</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;        qScale, qOffset)));</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;    <span class="comment">// Expected output is 1 batch of a 2-channel 14x6 image.</span></div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 2, 6, 14}, ArmnnType);</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;            -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15,</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;            -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;            -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;            -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;            -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;            -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;            3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;            3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;            3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;            3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;            3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;            3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</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;        qScale, qOffset)));</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;        workloadFactory,</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;        memoryManager,</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;        input,</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;        kernel,</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;        GetBias2&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale),</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;        expectedOutput,</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;        qScale,</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        qOffset,</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;        layout);</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;}</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>&gt;</div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a71b5e8d33736d32c974e4fff9206f998">  880</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a71b5e8d33736d32c974e4fff9206f998">Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon</a>(</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout,</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    int32_t qOffset)</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;{</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;    <span class="comment">// Use a single-batch 1-channel 3x3 image as input.</span></div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({1, 1, 3, 3}, ArmnnType);</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    boost::multi_array&lt;T, 4&gt; input = MakeTensor&lt;T, 4&gt;(inputDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;            11,21,31,</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;            12,22,32,</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;            13,23,33</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;        },</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;        qScale, qOffset)));</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    <span class="comment">// Use 1 batch of a 1-channel 2x2 kernel.</span></div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({1, 1, 2, 2}, ArmnnType);</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;            -11,-21,</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;            -12,-22,</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;        },</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;        qScale, qOffset)));</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment">// Expected output is 1 batch of a 1-channel 6x8 image.</span></div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<span class="comment">// Manually calculated like this:</span></div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;<span class="comment">//[-11*0 -21*0  -12*0 -22*0  ; -11*0  -21*0  -12*0  -22*0  ; -11*0  -21*0  -12*0  -22*0  ; -11*0  -21*0 -12*0  -22*0 ..]</span></div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;<span class="comment">//[-11*0 -21*0  -12*0 -22*11 ; -11*0  -21*0  -12*11 -22*21 ; -11*0  -21*0  -12*21 -22*31 ; -11*0  -21*0 -12*31 -22*0 ..]</span></div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="comment">//[-11*0 -21*11 -12*0 -22*12 ; -11*11 -21*21 -12*12 -22*22 ; -11*21 -21*31 -12*22 -22*32 ; -11*31 -21*0 -12*32 -22*0 ..]</span></div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;<span class="comment">//[-11*0 -21*12 -12*0 -22*13 ; -11*12 -21*22 -12*13 -22*23 ; -11*22 -21*32 -12*23 -22*33 ; -11*32 -21*0 -12*33 -22*0 ..]</span></div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;<span class="comment">//[-11*0 -21*13 -12*0 -22*0  ; -11*13 -21*23 -12*0  -22*0  ; -11*23 -21*33 -12*0  -22*0  ; -11*33 -21*0 -12*0  -22*0 ..]</span></div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;<span class="comment">//[-11*0 -21*0  -12*0 -22*0  ; -11*0  -21*0  -12*0  -22*0  ; -11*0  -21*0  -12*0  -22*0  ; -11*0  -21*0 -12*0  -22*0 ..]</span></div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="comment">//[..... .....  ..... .....  ; .....  .....  .....  .....  ; .....  .....  .....  .....  ; .....  ..... .....  ..... ..]</span></div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 1, 8, 6}, ArmnnType);</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;               0,    0,      0,    0,    0,    0,</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;            -242,  -594,  -934, -372,    0,    0,</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;            -495, -1190, -1850, -725,    0,    0,</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;            -538, -1256, -1916, -748,    0,    0,</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;            -273, -626,  -946,  -363,    0,    0,</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;               0,    0,     0,     0,    0,    0,</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;               0,    0,     0,     0,    0,    0,</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;               0,    0,     0,     0,    0,    0</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;        },</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;        qScale, qOffset)));</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;        workloadFactory,</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;        memoryManager,</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;        input,</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;        kernel,</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;        GetBias2&lt;ArmnnBType&gt;(<span class="keyword">false</span>, qScale * qScale),</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;        expectedOutput,</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;        qScale,</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;        qOffset,</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;        layout,</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;        1,  <span class="comment">// Padding left.</span></div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;        2,  <span class="comment">// Padding top.</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;        3,  <span class="comment">// Padding right.</span></div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;        4); <span class="comment">// Padding bottom.</span></div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;}</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>&gt;</div><div class="line"><a name="l00949"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a89cc06d59ab4531aed1df4fa027c4cf7">  949</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a89cc06d59ab4531aed1df4fa027c4cf7">SimpleConvolution2dAsymmetricPaddingTestCommon</a>(</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout,</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    int32_t qOffset)</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;{</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    <span class="comment">// Use a single-batch 1-channel 5x5 image as input.</span></div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({ 1, 1, 5, 5 }, ArmnnType);</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    boost::multi_array&lt;T, 4&gt; input = MakeTensor&lt;T, 4&gt;(inputDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;            11,21,31,41,51,</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;            12,22,32,42,52,</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;            13,23,33,43,53,</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;            14,24,34,44,54,</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;            15,25,35,45,55,</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;        }, qScale, qOffset)));</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;    <span class="comment">// Use 1 batch of a 1-channel 4x4 kernel.</span></div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({ 1, 1, 4, 4 }, ArmnnType);</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;            -11,-21,-31,-41,</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;            -12,-22,-32,-42,</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;            -13,-23,-33,-43,</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;            -14,-24,-34,-44,</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;        qScale, qOffset)));</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">// Expected output is 1 batch of a 1-channel 5x5 image.</span></div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({ 1, 1, 5, 5 }, ArmnnType);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    std::vector&lt;T&gt; myVec(outputDesc.GetNumElements(), 0);</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputDesc, std::vector&lt;T&gt;(</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;            -7140, -10580, -13940,  -9300, -5230,</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;            -9590, -14120, -18520, -12290, -6860,</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;            -9980, -14560, -18960, -12560, -7000,</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;            -7518, -10904, -14144,  -9318, -5152,</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;            -5032,  -7256,  -9376,  -6142, -3368,</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;        },</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;        qScale, qOffset)));</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;        workloadFactory,</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;        memoryManager,</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;        input,</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;        kernel,</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;        GetBias2&lt;ArmnnBType&gt;(<span class="keyword">false</span>, qScale * qScale),</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;        expectedOutput,</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;        qScale,</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;        qOffset,</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;        layout,</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;        1,  <span class="comment">// Padding left.</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;        1,  <span class="comment">// Padding top.</span></div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;        2,  <span class="comment">// Padding right.</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;        2); <span class="comment">// Padding bottom.</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;}</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l01010"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a9680e910e263c8d6824c9ddcc1c135a4"> 1010</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a9680e910e263c8d6824c9ddcc1c135a4">Convolution2d3x3DilationTestCommon</a>(</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt;&amp; inputNoQuantizedValues,</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; inputTensorInfo,</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt;&amp; kernelNoQuantizedValues,</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; kernelTensorInfo,</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt;&amp; outputExpectedNoQuantizedValues,</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; outputTensorInfo,</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;    uint32_t dilationX,</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    uint32_t dilationY,</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>,</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    uint32_t padLeft = 0,</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    uint32_t padTop = 0,</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    uint32_t padRight = 0,</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    uint32_t padBottom = 0,</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    uint32_t strideX  = 1,</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    uint32_t strideY  = 1,</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;    <span class="keywordtype">bool</span> biasEnabled = <span class="keyword">false</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;{</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    <span class="keywordtype">float</span> qScale;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;    int32_t qOffset;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    <span class="keywordflow">switch</span> (ArmnnType)</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;    {</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;        {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;            qScale = 0.1f;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;            qOffset = 128;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;            <span class="keywordflow">break</span>;</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="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;        {</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;            qScale = 0.1f;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;            qOffset = 0;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;        }</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;        <span class="keywordflow">default</span>:</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;            qScale = 0.f;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;            qOffset = 0;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;        }</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    }</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    kernelTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    kernelTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;                                  std::vector&lt;T&gt;(QuantizedVector&lt;T&gt;(inputNoQuantizedValues,</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;                                                                    inputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;                                                                    inputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelTensorInfo,</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;                                  std::vector&lt;T&gt;(QuantizedVector&lt;T&gt;(kernelNoQuantizedValues,</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;                                                                    kernelTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;                                                                    kernelTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;    <span class="keyword">auto</span> expectedOutput =</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;        MakeTensor&lt;T, 4&gt;(outputTensorInfo,</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;                         std::vector&lt;T&gt;(QuantizedVector&lt;T&gt;(outputExpectedNoQuantizedValues,</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;                                                           outputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;                                                           outputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;            workloadFactory,</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;            memoryManager,</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;            input,</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;            kernel,</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;            GetBias2&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale),</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;            expectedOutput,</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;            qScale,</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;            qOffset,</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;            layout,</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;            padLeft,</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;            padTop,</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;            padRight,</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;            padBottom,</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;            strideX,</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;            strideY,</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;            dilationX,</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;            dilationY);</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;}</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01101"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a0192d5e1143e77fb9c07f43cac008aa5"> 1101</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a0192d5e1143e77fb9c07f43cac008aa5">Convolution2d3x3Dilation3x3Test</a>(</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;{</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 1, 10, 10}, ArmnnType);</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</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;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;    };</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 1, 3, 3}, ArmnnType);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    {</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;        1, 2, 3,</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;        4, 5, 6,</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;        7, 8, 9</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;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    <span class="comment">// Since the dilation rate is 3 this will dilate the kernel to be like 7x7,</span></div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    <span class="comment">// therefore the output will be 4x4: (I−K+2P)/S +1 =&gt; (10-7 +0)/1 +1</span></div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;        6., 5., 5., 5.,</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;        6., 5., 5., 5.,</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;        6., 5., 5., 5.,</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;        3., 2., 2., 2.</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    };</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    <span class="keywordflow">return</span> Convolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;            workloadFactory,</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;            memoryManager,</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;            3,</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;            3,</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;            layout,</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;            biasEnabled);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;}</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;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01159"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a24ba5e372ff9e8c7603cd380d3673bff"> 1159</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a24ba5e372ff9e8c7603cd380d3673bff">Convolution2d2x3x3Dilation3x3Test</a>(</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;{</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 2, 10, 10}, ArmnnType);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;    {</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;        0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;    };</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 2, 3, 3}, ArmnnType);</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    {</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;        1, 2, 3,</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;        4, 5, 6,</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;        7, 8, 9,</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;        1, 2, 3,</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;        4, 5, 6,</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;        7, 8, 9</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;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;    <span class="comment">// Since the dilation rate is 3 this will dilate the kernel to be like 7x7,</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    <span class="comment">// therefore the output will be 4x4: (I−K+2P)/S +1 =&gt; (10-7 +0)/1 +1</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;    {</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;        12., 10., 10., 10.,</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;        12., 10., 10., 10.,</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;        12., 10., 10., 10.,</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;         6.,  4.,  4.,  4.</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    };</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;    <span class="keywordflow">return</span> Convolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;            workloadFactory,</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;            memoryManager,</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;            3,</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;            3,</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;            layout,</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;            biasEnabled);</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;}</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01232"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a130df3a88eb9a5bf1aaec61642a702d0"> 1232</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a130df3a88eb9a5bf1aaec61642a702d0">Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test</a>(</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a> &amp;workloadFactory,</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a> &amp;memoryManager,</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;{</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 1, 10, 10}, ArmnnType);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    {</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;        1, 1, 1, 1, 1, 1, 1, 1, 1, 1</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;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 1, 2, 2}, ArmnnType);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;    {</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;        1, 2,</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;        3, 4</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;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    <span class="comment">// Since the dilation rate is 2 this will dilate the kernel to be like 3x3: d(K-1)+1 --&gt; 2 x (2-1) + 1 = 3,</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    <span class="comment">// therefore the output will be 4x4: (I − K + 2P)/S +1 =&gt; trunc ( (10 - 3 + 2x2 ) / 3 + 1 )</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    <span class="comment">// where, dilation size = d = 2; kernel size = K = 2; input size = I = 10; padding size = P = 2; stride = S = 3</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</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;        4,  7,  7, 3,</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;        6, 10, 10, 4,</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;        6, 10, 10, 4,</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;        2,  3,  3, 1</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    };</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;    uint32_t padLeft = 1;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;    uint32_t padTop = 1;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;    uint32_t padRight = 1;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;    uint32_t padBottom = 1;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;    <span class="keywordflow">return</span> Convolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;            workloadFactory,</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;            memoryManager,</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;            2,</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;            2,</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;            layout,</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;            padLeft,</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;            padTop,</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;            padRight,</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;            padBottom,</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;            3,</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;            3,</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;            biasEnabled</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;            );</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;}</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;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l01301"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a7c7c49dfc7e8054f4c84929a1b86f4e0"> 1301</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T,4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a7c7c49dfc7e8054f4c84929a1b86f4e0">CompareConvolution2dTestImpl</a>(</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; refWorkloadFactory,</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; refTensorHandleFactory)</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;{</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight   = 8;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth    = 16;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = 3;</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum      = 5;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight = 3;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth  = 3;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideX = 2;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideY = 3;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padX    = 1;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padY    = 1;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum      = inputNum;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = 2;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight   = (inputHeight + 2 * padY - kernelHeight + strideY) / strideY;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth    = (inputWidth + 2 * padX - kernelWidth + strideX) / strideX;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc;</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> biasDesc;</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]  = {inputNum, inputChannels, inputHeight, inputWidth};</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[] = {outputNum, outputChannels, outputHeight, outputWidth};</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelShape[] = {outputChannels, inputChannels, kernelHeight, kernelWidth};</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> biasShape[]   = {outputChannels};</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    inputTensorInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(4, inputShape, ArmnnType);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    outputTensorInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(4, outputShape, ArmnnType);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;    kernelDesc = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(4, kernelShape, ArmnnType);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;    biasDesc = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(1, biasShape, ArmnnType);</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T,4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    <span class="keyword">auto</span> input  = MakeRandomTensor&lt;T, 4&gt;(inputTensorInfo, 124908);</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    <span class="keyword">auto</span> kernel = MakeRandomTensor&lt;T, 4&gt;(kernelDesc, 891234);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    <span class="keyword">auto</span> bias   = MakeRandomTensor&lt;T, 1&gt;(biasDesc, 1028);</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;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</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;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    data.<a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strideX;</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strideY;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = padX;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = padX;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = padY;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = padY;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<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="l01369"></a><span class="lineno"> 1369</span>&#160;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandleRef = refTensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandleRef = refTensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</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="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">armnn::Convolution2dQueueDescriptor</a> refData = data;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a>               refInfo = info;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;    SetWorkloadInput(refData, refInfo, 0, inputTensorInfo, inputHandleRef.get());</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;    SetWorkloadOutput(refData, refInfo, 0, outputTensorInfo, outputHandleRef.get());</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workload  = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">CreateConvolution2d</a>(data, info);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workloadRef = refWorkloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">CreateConvolution2d</a>(refData, refInfo);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;    outputHandleRef-&gt;Allocate();</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    inputHandleRef-&gt;Allocate();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;    outputHandle-&gt;Allocate();</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;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;input[0][0][0][0]);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandleRef.get(), &amp;input[0][0][0][0]);</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;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    workloadRef-&gt;PostAllocationConfigure();</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;    workloadRef-&gt;Execute();</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a>[0][0][0][0], outputHandleRef.get());</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;}</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#afba5868ef96cceb570cc4b8223f3019c"> 1401</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#afba5868ef96cceb570cc4b8223f3019c">Convolution2d3x3Stride2x2BFloat16Test</a>(</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>&amp; dataLayout)</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;{</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;    <span class="comment">// BFloat16 input and weight, Float32 output</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(biasEnabled);</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    <span class="comment">// Input is a single-batch, 1 channel, 5x5 image.</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputDesc({1, 5, 5, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>);</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;    std::vector&lt;armnn::BFloat16&gt; inputValues = armnnUtils::QuantizedVector&lt;armnn::BFloat16&gt;(</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;        {</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;            10.0367984f,  <span class="comment">// 10.0625</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;             2.0380895f,  <span class="comment">// 2.03125</span></div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;            15.0420157f,  <span class="comment">// 15.0625</span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;            22.0675631f,  <span class="comment">// 22.125</span></div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;             8.0938920f,  <span class="comment">// 8.125</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;             5.0476106f,  <span class="comment">// 5.0625</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;            80.1035490f,  <span class="comment">// 80</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;           100.1260370f,  <span class="comment">// 100</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;            55.0461647f,  <span class="comment">// 55</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;           120.0883828f,  <span class="comment">// 120</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;             9.1159540f,  <span class="comment">// 9.125</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;            90.0498519f,  <span class="comment">// 90</span></div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;           200.0104630f,  <span class="comment">// 200</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;            30.0154114f,  <span class="comment">// 30</span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;            75.00137681f, <span class="comment">// 75</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;            30.0344238f,  <span class="comment">// 30</span></div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;            25.0356445f,  <span class="comment">// 25</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;           130.0495605f,  <span class="comment">// 130</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;            60.0683594f,  <span class="comment">// 60</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;            35.0991211f,  <span class="comment">// 35</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;             8.0461426f,  <span class="comment">// 8.0625</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;            12.0996094f,  <span class="comment">// 12.125</span></div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;            98.1269530f,  <span class="comment">// 98</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;           125.0393066f,  <span class="comment">// 125</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;             5.103516f    <span class="comment">// 5.0937</span></div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;       },</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;        1.0f, 0);</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="keyword">auto</span> input = MakeTensor&lt;armnn::BFloat16, 4&gt;(inputDesc, inputValues);</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;    <span class="comment">// Use a 3x3 kernel.</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({1, 3, 3, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>);</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    std::vector&lt;armnn::BFloat16&gt; kernelValues = armnnUtils::QuantizedVector&lt;armnn::BFloat16&gt;(</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;            -0.126184f, <span class="comment">// -0.125977</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;            -0.150468f, <span class="comment">// -0.150391</span></div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;            -0.101412f, <span class="comment">// -0.101562</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;            -0.0586369f,<span class="comment">// -0.0585938</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;            -0.0865864f,<span class="comment">// -0.0864258</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;            -0.0435089f,<span class="comment">// -0.043457</span></div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;            0.0347555f, <span class="comment">// 0.034668</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;            0.0323111f, <span class="comment">// 0.0322266</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;            0.0385381f  <span class="comment">// 0.0385742</span></div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;         },</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;        1.0f, 0);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;armnn::BFloat16, 4&gt;(kernelDesc, kernelValues);</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;    <span class="comment">// Expected output is a single-batch, 1 channel, 3x3 image.</span></div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 3, 3, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    <span class="comment">// Expected output (with results if calculated as FP32 in the comments)</span></div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; outputData =</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;            2.296875f, <span class="comment">//  2.29240716</span></div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;            5.75f,     <span class="comment">//  5.75851926</span></div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;            3.78125f,  <span class="comment">//  3.79855026</span></div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;            -11.625f,  <span class="comment">// -11.65498118</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;            -47.25f,   <span class="comment">// -47.27316893</span></div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;            -30.0f,    <span class="comment">// -30.04771684</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;            -8.25f,    <span class="comment">//  -8.28126168</span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;            -43.5f,    <span class="comment">// -43.46531337</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;            -20.625f   <span class="comment">// -20.63477281</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;        };</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;    boost::multi_array&lt;float, 4&gt; expectedOutput = MakeTensor&lt;float, 4&gt;(outputDesc, outputData);</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;    uint32_t padLeft = 1;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    uint32_t padTop = 1;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;    uint32_t padRight = 1;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;    uint32_t padBottom = 1;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;    uint32_t strideX  = 2;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;    uint32_t strideY  = 2;</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;    <span class="keywordflow">return</span> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a56f561170b575bdb2c808d35155f88c5">SimpleConvolution2dNhwcTestImpl</a></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;        &lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>, float, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <span class="keywordtype">float</span>&gt;(</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;        workloadFactory,</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;        memoryManager,</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;        input,</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;        kernel,</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;        boost::multi_array&lt;float, 1&gt;(),</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;        expectedOutput,</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;        dataLayout,</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;        1.0f,</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;        0,</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;        padLeft,</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;        padTop,</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;        padRight,</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;        padBottom,</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;        strideX,</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;        strideY);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;}</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"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a9573a516a902021f7b24fc8a8172ea8e"> 1511</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a9573a516a902021f7b24fc8a8172ea8e">Convolution2d3x3Stride2x2BFloat16SmallValueTest</a>(</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>&amp; dataLayout)</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;{</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;    <span class="comment">// BFloat16 input and weight, Float32 output</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(biasEnabled);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;    <span class="comment">// Input is a single-batch, 1 channel, 5x5 image.</span></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> inputDesc({1, 5, 5, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>);</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;    std::vector&lt;armnn::BFloat16&gt; inputValues = armnnUtils::QuantizedVector&lt;armnn::BFloat16&gt;(</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;        {</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;            0.0367984f,  <span class="comment">// 0.0368652</span></div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;            0.0380895f,  <span class="comment">// 0.0380859</span></div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;            0.0420157f,  <span class="comment">// 0.0419922</span></div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;            0.0675631f,  <span class="comment">// 0.0673828</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;            0.0938920f,  <span class="comment">// 0.09375</span></div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;            0.0476106f,  <span class="comment">// 0.0476074</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;            0.1035490f,  <span class="comment">// 0.103516</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;            0.1260370f,  <span class="comment">// 0.125977</span></div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;            0.0461647f,  <span class="comment">// 0.0461426</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;            0.0883828f,  <span class="comment">// 0.0883789</span></div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;            0.1159540f,  <span class="comment">// 0.115723</span></div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;            0.0498519f,  <span class="comment">// 0.0498047</span></div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;            0.0104630f,  <span class="comment">// 0.010437</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;            0.0154114f,  <span class="comment">// 0.0154419</span></div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;            0.00137681f, <span class="comment">// 0.00137329</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;            0.0344238f,  <span class="comment">// 0.0344616</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;            0.0356445f,  <span class="comment">// 0.0355693</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;            0.0495605f,  <span class="comment">// 0.0495018</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;            0.0683594f,  <span class="comment">// 0.0683308</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;            0.0991211f,  <span class="comment">// 0.0988837</span></div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;            0.0461426f,  <span class="comment">// 0.0461838</span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;            0.0996094f,  <span class="comment">// 0.0997546</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;            0.1269530f,  <span class="comment">// 0.127099</span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;            0.0393066f,  <span class="comment">// 0.0392791</span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;            0.103516f    <span class="comment">// 0.103641</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;       },</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;        1.0f, 0);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;armnn::BFloat16, 4&gt;(inputDesc, inputValues);</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;    <span class="comment">// Use a 3x3 kernel.</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({1, 3, 3, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;    std::vector&lt;armnn::BFloat16&gt; kernelValues = armnnUtils::QuantizedVector&lt;armnn::BFloat16&gt;(</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;        {</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;            -0.126184f, <span class="comment">// -0.125977</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;            -0.150468f, <span class="comment">// -0.150391</span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;            -0.101412f, <span class="comment">// -0.101562</span></div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;            -0.0586369f,<span class="comment">// -0.0585938</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;            -0.0865864f,<span class="comment">// -0.0864258</span></div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;            -0.0435089f,<span class="comment">// -0.043457</span></div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;            0.0347555f, <span class="comment">// 0.034668</span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;            0.0323111f, <span class="comment">// 0.0322266</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;            0.0385381f  <span class="comment">// 0.0385742</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;        1.0f, 0);</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;armnn::BFloat16, 4&gt;(kernelDesc, kernelValues);</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    <span class="comment">// Expected output is a single-batch, 1 channel, 3x3 image.</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputDesc({1, 3, 3, 1}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</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;    <span class="comment">// Expected output (with results if calculated as FP32 in the comments)</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; outputData =</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;        {</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;             0.000686645508f, <span class="comment">// 0.000685</span></div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;             0.000640869141f, <span class="comment">// 0.000639</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;            -0.00759887695f,  <span class="comment">// -0.007631</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;            -0.02734375f,     <span class="comment">// -0.027388</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;            -0.0356445312f,   <span class="comment">// -0.035737</span></div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;            -0.0145874023f,   <span class="comment">// -0.014568</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;            -0.0170898438f,   <span class="comment">// -0.017124</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;            -0.0373535156f,   <span class="comment">// -0.037431</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;            -0.0346679688f    <span class="comment">// -0.034808</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;        };</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    boost::multi_array&lt;float, 4&gt; expectedOutput = MakeTensor&lt;float, 4&gt;(outputDesc, outputData);</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;    uint32_t padLeft = 1;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    uint32_t padTop = 1;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;    uint32_t padRight = 1;</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;    uint32_t padBottom = 1;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;    uint32_t strideX  = 2;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;    uint32_t strideY  = 2;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a56f561170b575bdb2c808d35155f88c5">SimpleConvolution2dNhwcTestImpl</a></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;        &lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a>, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <a class="code" href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a>, float, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, <span class="keywordtype">float</span>&gt;(</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;        workloadFactory,</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;        memoryManager,</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;        input,</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;        kernel,</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;        boost::multi_array&lt;float, 1&gt;(),</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;        expectedOutput,</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;        dataLayout,</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;        1.0f,</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;        0,</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;        padLeft,</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;        padTop,</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;        padRight,</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;        padBottom,</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;        strideX,</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;        strideY);</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;}</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;<span class="comment">// DepthwiseConvolution2d implementations</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>, <span class="keyword">typename</span> B = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>&gt;</div><div class="line"><a name="l01627"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a3fe8b286943505e7508c64e138cbcf76"> 1627</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a3fe8b286943505e7508c64e138cbcf76">DepthwiseConvolution2dAsymmetricTestImpl</a>(</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; input,</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; kernel,</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;B, 1&gt;&amp; bias,</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; outputExpected,</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout,</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;    uint32_t padLeft = 0,</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;    uint32_t padTop = 0,</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;    uint32_t padRight = 0,</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;    uint32_t padBottom = 0,</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;    uint32_t strideX = 1,</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;    uint32_t strideY = 1)</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;{</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum       = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[0]);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels  = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[1]);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[2]);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth     = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(input.shape()[3]);</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChanMul  = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[0]);</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[1]);</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[2]);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(kernel.shape()[3]);</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum      = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[0]);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[1]);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[2]);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputExpected.shape()[3]);</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;    <span class="comment">// If a bias is used, its size must equal the number of output channels.</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;    <span class="keywordtype">bool</span> biasEnabled = bias.size() &gt; 0;</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!biasEnabled || bias.size() == outputChannels);</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;    <span class="comment">// Creates the tensors.</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo =</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(inputNum, inputChannels, inputHeight, inputWidth, layout, ArmnnType);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo =</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(outputNum, outputChannels, outputHeight, outputWidth, layout, ArmnnType);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({kernelChanMul, kernelChannels, kernelHeight, kernelWidth}, ArmnnType);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(bias.size())}, ArmnnBType);</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">// Set quantization parameters if the requested type is a quantized type.</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;    <span class="keywordflow">if</span> (armnn::IsQuantizedType&lt;T&gt;())</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;    {</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;        inputTensorInfo.SetQuantizationScale(qScale);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;        inputTensorInfo.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;        kernelDesc.SetQuantizationScale(qScale);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;        kernelDesc.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;        biasDesc.SetQuantizationScale(qScale*qScale);</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;        biasDesc.SetQuantizationOffset(0);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    }</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">// Construct the input data.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;    std::vector&lt;T&gt; inputData;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;    inputData.assign(input.data(), input.data() + inputChannels*inputHeight*inputWidth);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;    <span class="comment">// At this point if we require it permute the input data</span></div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> NCHWToNHWC = { 0, 3, 1, 2 };</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    {</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;        std::vector&lt;T&gt; tmp(inputData.size());</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;        inputData = tmp;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;    }</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;    <span class="keyword">auto</span> batchedInput = MakeTensor&lt;T, 4&gt;(inputTensorInfo, inputData);</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">// Construct the output data, with bias applied, as appropriate.</span></div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;    std::vector&lt;T&gt; outputData;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;    outputData.assign(outputExpected.data(), outputExpected.data() + outputChannels*outputHeight*outputWidth);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;    <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;    {</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;        std::vector&lt;T&gt; biasV;</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;        biasV.assign(bias.data(), bias.data() + outputChannels);</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;        <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(outputData, outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(), outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>(),</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;            biasV, biasDesc.GetQuantizationScale(), biasDesc.GetQuantizationOffset(),</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;            outputWidth, outputHeight);</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;</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;    <span class="comment">// At this point if we require it permute the expected output</span></div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;    {</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;        std::vector&lt;T&gt; tmp(outputData.size());</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC, outputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;        outputData = tmp;</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;</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;    ret.outputExpected = MakeTensor&lt;T, 4&gt;(outputTensorInfo, outputData);</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;    <span class="keywordflow">if</span> (biasEnabled)</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;    {</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;        <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;    }</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;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor; <span class="comment">// Still set this whether or not bias is enabled - it can be a source of bugs.</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strideX;</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strideY;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = padLeft;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = padRight;</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = padTop;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = padBottom;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = layout;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</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;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(data, info);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;    outputHandle-&gt;Allocate();</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;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;batchedInput[0][0][0][0]);</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.output[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;}</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l01765"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a8447673c34be8e6c5d7fcc54a852094b"> 1765</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a8447673c34be8e6c5d7fcc54a852094b">DepthwiseConvolution2dDepthMul1TestImpl</a>(</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</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;    <span class="keyword">using</span> B = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>;</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = 3;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = 3;</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = 2;</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum = 1;</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight = 3;</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth = 3;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChannels = inputChannels;</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelDepthMultiplier = 1;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = 1;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = 1;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = kernelChannels;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum = inputNum;</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo =</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(inputNum, inputChannels, inputHeight, inputWidth, layout, ArmnnType);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo =</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(outputNum, outputChannels, outputHeight, outputWidth, layout, ArmnnType);</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({kernelDepthMultiplier, kernelChannels, kernelHeight, kernelWidth},</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;                                 ArmnnType);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({ outputChannels }, ArmnnBType);</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;    <span class="comment">// Set quantization parameters if the requested type is a quantized type.</span></div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;    <span class="keywordflow">if</span>(armnn::IsQuantizedType&lt;T&gt;())</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    {</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;        kernelDesc.SetQuantizationScale(qScale);</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;        kernelDesc.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;        biasDesc.SetQuantizationScale(qScale*qScale);</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;        biasDesc.SetQuantizationOffset(0);</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;    }</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;    std::vector&lt;T&gt; inputData = std::vector&lt;T&gt;(</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;            QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;                1.f, 2.f, 1.f,</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;                2.f, 1.f, 2.f,</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;                1.f, 2.f, 1.f,</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;                1.f, 2.f, 1.f,</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;                2.f, 1.f, 2.f,</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;                1.f, 2.f, 1.f,</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;            },</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;            inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;            inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()));</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;    <span class="comment">// at this point if we require it permute the input data</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> NCHWToNHWC = { 0, 3, 1, 2 };</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</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;        std::vector&lt;T&gt; tmp(inputData.size());</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC, inputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;        inputData = tmp;</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="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo, inputData);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;    std::vector&lt;B&gt; biasV(QuantizedVector&lt;B&gt;({ 0, 2 },</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;                                            biasDesc.GetQuantizationScale(),</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;                                            biasDesc.GetQuantizationOffset()));</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;    <span class="keyword">auto</span> bias = MakeTensor&lt;B, 1&gt;(biasDesc, biasV);</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;    std::vector&lt;T&gt; kernelData = std::vector&lt;T&gt;(</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;            QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;                 1.f, 0.f,  1.f,</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;                 0.f, 0.f,  0.f,</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;                -1.f, 0.f, -1.f,</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;                 1.f, 0.f,  1.f,</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;                 0.f, 0.f,  0.f,</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;                -1.f, 0.f, -1.f,</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;            },</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;            kernelDesc.GetQuantizationScale(),</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;            kernelDesc.GetQuantizationOffset()));</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, kernelData);</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;    <span class="comment">// Manually calculated.</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;    std::vector&lt;T&gt; outputImage(</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;        QuantizedVector&lt;T&gt;({ 0.f, 0.f },</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;                           outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;                           outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>())</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;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;    <span class="comment">// Optionally apply bias to output image.</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</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;        <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(outputImage, outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(), outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>(),</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;                  biasV, biasDesc.GetQuantizationScale(), biasDesc.GetQuantizationOffset(),</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;                  outputWidth, outputHeight);</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;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;    {</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;        std::vector&lt;T&gt; tmp(outputImage.size());</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC, outputImage.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;        outputImage = tmp;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;    }</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;    ret.outputExpected = MakeTensor&lt;T, 4&gt;(outputTensorInfo, outputImage);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</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;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</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;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor; <span class="comment">// Still set this whether or not bias is enabled.</span></div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 1;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 1;</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 0;</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 0;</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 0;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 0;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = layout;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(data, info);</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;input[0][0][0][0]);</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.output[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;    <span class="keywordflow">return</span> ret;</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;</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l01919"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a01cb9a3fc27404adb04ff1a29a858bb4"> 1919</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a01cb9a3fc27404adb04ff1a29a858bb4">DepthwiseConvolution2dTestImpl</a>(</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;{</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;    <span class="keyword">using</span> B = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> depthMultiplier = 2;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight    = 8;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth     = 16;</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels  = 2;</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize = 1;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight = 5;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth  = 3;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight    = inputHeight - kernelHeight + 1 + 2;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth     = (inputWidth - kernelWidth + 1)/2;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels  = inputChannels * depthMultiplier;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = inputBatchSize;</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;            inputBatchSize, inputChannels, inputHeight, inputWidth, layout, ArmnnType);</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;            outputBatchSize, outputChannels, outputHeight, outputWidth, layout, ArmnnType);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({depthMultiplier, inputChannels, kernelHeight, kernelWidth},</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;                                 ArmnnType);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({outputChannels}, ArmnnBType);</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;    <span class="comment">// Set quantization parameters if the requested type is a quantized type.</span></div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;    <span class="keywordflow">if</span>(armnn::IsQuantizedType&lt;T&gt;())</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;    {</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;        kernelDesc.SetQuantizationScale(qScale);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;        kernelDesc.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;        biasDesc.SetQuantizationScale(qScale*qScale);</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;        biasDesc.SetQuantizationOffset(0);</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    }</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="comment">// NOTE: originalInputData is in NCHW format</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;    std::vector&lt;T&gt; originalInputData = std::vector&lt;T&gt;(</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;            QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;                0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;                0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;                0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;            },</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;            inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;            inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()));</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;    std::vector&lt;T&gt; inputData = originalInputData;</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;    <span class="comment">// at this point if we require it permute the input data</span></div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> NCHWToNHWC = { 0, 3, 1, 2 };</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</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;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC,</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;                            originalInputData.data(), inputData.data(), <span class="keyword">sizeof</span>(T));</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;    <span class="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo, inputData);</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;    std::vector&lt;B&gt; biasV = QuantizedVector&lt;B&gt;({ 0, 2, 1, -1 },</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;                                              biasDesc.GetQuantizationScale(),</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;                                              biasDesc.GetQuantizationOffset());</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;    <span class="keyword">auto</span> bias = MakeTensor&lt;B, 1&gt;(biasDesc, biasV);</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;    std::vector&lt;T&gt; kernelData = std::vector&lt;T&gt;(</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;            QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;                1,  1, 1,</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;                1, -1, 1,</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;                1,  1, 1,</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;                1,  1, 1,</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;                1,  1, 1,</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;                2,  2, 2,</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;                2,  2, 2,</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;                2,  2, 2,</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;                2,  2, 2,</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;                2,  2, 2,</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;                0, -1, 0,</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;                0,  1, 0,</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;                0,  0, 0,</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;                0,  0, 0</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;            kernelDesc.GetQuantizationScale(),</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;            kernelDesc.GetQuantizationOffset()));</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelDesc, kernelData);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;    <span class="comment">// Manually calculated.</span></div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    std::vector&lt;T&gt; originalOutputImage = std::vector&lt;T&gt;(</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;             3.5f,  3.5f,  3.5f,  3.5f,  3.5f,  3.5f,  3.5f,</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;             6.0f,  6.0f,  6.0f,  6.0f,  6.0f,  6.0f,  6.0f,</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;             5.0f,  5.0f,  5.0f,  5.0f,  5.0f,  5.0f,  5.0f,</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;             6.5f,  6.5f,  6.5f,  6.5f,  6.5f,  6.5f,  6.5f,</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;             6.5f,  6.5f,  6.5f,  6.5f,  6.5f,  6.5f,  6.5f,</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;             5.0f,  5.0f,  5.0f,  5.0f,  5.0f,  5.0f,  5.0f,</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;            -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f,</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;            -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f,</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;            -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f,</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;            -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f,</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;            -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f,</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;             8.0f,  8.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;            10.0f, 10.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;            10.0f, 10.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;            10.0f, 10.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;            10.0f, 10.0f, 0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;             8.0f,  8.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;             0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f,  0.0f</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;        },</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()));</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;    <span class="comment">// Optionally apply bias to output image.</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;    {</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;        <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(originalOutputImage,</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;                  outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;                  outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>(),</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;                  biasV,</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;                  biasDesc.GetQuantizationScale(),</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;                  biasDesc.GetQuantizationOffset(),</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;                  outputWidth,</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;                  outputHeight);</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;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;    std::vector&lt;T&gt; outputImage = originalOutputImage;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</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;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC,</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;                            originalOutputImage.data(), outputImage.data(), <span class="keyword">sizeof</span>(T));</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;</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;    ret.outputExpected = MakeTensor&lt;T, 4&gt;(outputTensorInfo, outputImage);</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;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor; <span class="comment">// Still set this whether or not bias is enabled.</span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = 2;</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = 1;</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = 0;</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = 0;</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = 1;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = 1;</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = layout;</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(data, info);</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;input[0][0][0][0]);</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;    ExecuteWorkload(*workload, memoryManager);</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;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.output[0][0][0][0], outputHandle.get());</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;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;}</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;        <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>, <span class="keyword">typename</span> B = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnBType&gt;</a>&gt;</div><div class="line"><a name="l02133"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a46b5ad9c44ef79f44db5b239f5f7df21"> 2133</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a01cb9a3fc27404adb04ff1a29a858bb4">DepthwiseConvolution2dTestImpl</a>(</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; originalInput,</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; originalKernel,</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;B, 1&gt;&amp; bias,</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;    <span class="keyword">const</span> boost::multi_array&lt;T, 4&gt;&amp; originalOutputExpected,</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>,</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;    uint32_t padLeft = 0,</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;    uint32_t padTop = 0,</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;    uint32_t padRight = 0,</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;    uint32_t padBottom = 0,</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;    uint32_t strideX = 1,</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    uint32_t strideY = 1,</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;    uint32_t dilationX = 1,</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;    uint32_t dilationY = 1)</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;{</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[2]);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[3]);</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[1]);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum      = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalInput.shape()[0]);</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="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[2]);</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth    = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[3]);</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[1]);</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum      = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalOutputExpected.shape()[0]);</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[2]);</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[3]);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelChannels = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[1]);</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelDepthMul = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(originalKernel.shape()[0]);</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;    <span class="keywordtype">bool</span> biasEnabled = bias.size() &gt; 0;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;    <span class="comment">// This function currently assumes 1 batch of input/output (and duplicates this into 2 batches).</span></div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputNum == 1);</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputNum == 1);</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;    <span class="comment">// If a bias is used, its size must equal the number of output channels.</span></div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!biasEnabled || bias.size() == outputChannels);</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;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;    <span class="comment">// Note these tensors will use two (identical) batches.</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo =</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(2*inputNum, inputChannels, inputHeight, inputWidth, layout, ArmnnType);</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo =</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;            <a class="code" href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a>(2*outputNum, outputChannels, outputHeight, outputWidth, layout, ArmnnType);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;    <span class="comment">// Kernel must be NCHW layout always, independently of the layout of the input and output for depthwise convolution.</span></div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc({kernelDepthMul, kernelChannels, kernelHeight, kernelWidth}, ArmnnType);</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc({<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(bias.size())}, ArmnnBType);</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;    <span class="comment">// Set quantization parameters if the requested type is a quantized type.</span></div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;    <span class="keywordflow">if</span>(armnn::IsQuantizedType&lt;T&gt;())</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;    {</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;        inputTensorInfo.SetQuantizationScale(qScale);</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;        inputTensorInfo.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;        kernelDesc.SetQuantizationScale(qScale);</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;        kernelDesc.SetQuantizationOffset(qOffset);</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;        biasDesc.SetQuantizationScale(qScale*qScale);</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;        biasDesc.SetQuantizationOffset(0);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;    }</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;    <span class="comment">// Construct input data</span></div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;    std::vector&lt;T&gt; input;</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;    input.assign(originalInput.data(), originalInput.data() + 1*inputChannels*inputHeight*inputWidth);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;    std::vector&lt;T&gt; inputData;</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;    inputData.insert(inputData.end(), input.begin(), input.end());</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;    inputData.insert(inputData.end(), input.begin(), input.end());</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">// at this point if we require it permute the input data</span></div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a> NCHWToNHWC = { 0, 3, 1, 2 };</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;    {</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;        std::vector&lt;T&gt; tmp(inputData.size());</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;        inputData = tmp;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;    }</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;    <span class="keyword">auto</span> batchedInput = MakeTensor&lt;T, 4&gt;(inputTensorInfo, inputData);</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;    std::vector&lt;T&gt; output;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;    output.assign(originalOutputExpected.data(),</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;                       originalOutputExpected.data() + outputChannels*outputHeight*outputWidth);</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;    <span class="comment">// Apply bias to output data if it is enabled.</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</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;        std::vector&lt;T&gt; biasV;</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;        biasV.assign(bias.data(), bias.data() + outputChannels);</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;        <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a>(output, outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(), outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>(),</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;                  biasV, biasDesc.GetQuantizationScale(), biasDesc.GetQuantizationOffset(),</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;                  outputWidth, outputHeight);</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;    }</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;    <span class="comment">// Construct expected output data</span></div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;    std::vector&lt;T&gt; outputData;</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;    outputData.insert(outputData.end(), output.begin(), output.end());</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;    outputData.insert(outputData.end(), output.begin(), output.end());</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;    <span class="comment">// at this point if we require it permute the expected output</span></div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>)</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;    {</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;        std::vector&lt;T&gt; tmp(outputData.size());</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), NCHWToNHWC, outputData.data(), tmp.data(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;        outputData = tmp;</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;    }</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;    ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a> = MakeTensor&lt;T, 4&gt;(outputTensorInfo, outputData);</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160;</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;    boost::multi_array&lt;T, 4&gt; kernel = boost::multi_array&lt;T, 4&gt;(originalKernel);</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;    <span class="keywordflow">if</span>(biasEnabled)</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160;    {</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;        <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;    }</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor; <span class="comment">// Still set this whether or not bias is enabled - can be a source of bugs.</span></div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strideX;</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strideY;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = padLeft;</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = padRight;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = padTop;</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = padBottom;</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = biasEnabled;</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = layout;</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> = dilationX;</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> = dilationY;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(data, info);</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;batchedInput[0][0][0][0]);</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;}</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>&gt;</div><div class="line"><a name="l02297"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a99cacef4e22185078218877c62d27ac3"> 2297</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a99cacef4e22185078218877c62d27ac3">DepthwiseConvolution2dAsymmetricTestCommon</a>(</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;{</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;    <span class="comment">// Use a single-batch 2-channel 5x5 image as input.</span></div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 2, 5, 5 }, ArmnnType);</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;             0,  1,  2,  3,  4,</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;             5,  6,  7,  8,  9,</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;            10, 11, 12, 13, 14,</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;            15, 16, 17, 18, 19,</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;            20, 21, 22, 23, 24,</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;            25, 26, 27, 28, 29,</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;            30, 31, 32, 33, 34,</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;            35, 36, 37, 38, 39,</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;            40, 41, 42, 43, 44,</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;            45, 46, 47, 48, 49</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160;        },</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;        inputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160;        inputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;    <span class="comment">// Use a depth multiplier of 1 on a 2-channel 4x4 kernel.</span></div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 2, 4, 4 }, ArmnnType);</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;            32, 31, 30, 29,</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;            28, 27, 26, 25,</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;            24, 23, 22, 21,</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;            20, 19, 18, 17,</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;            16, 15, 14, 13,</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;            12, 11, 10,  9,</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;             8,  7,  6,  5,</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;             4,  3,  2,  1</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;        },</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;        kernelTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;        kernelTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;    <span class="comment">// Expected output is 1 batch of a 2-channel 5x5 image.</span></div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;    <span class="comment">// Calculated using the python tensorflow library with strideX=1, strideY=1.</span></div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 2, 5, 5 }, ArmnnType);</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;            1062, 1580, 1850, 1530, 1117,</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;            2140, 3108, 3500, 2842, 2042,</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;            3580, 5068, 5460, 4342, 3062,</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;            3618, 5072, 5390, 4248, 2971,</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;            3074, 4282, 4510, 3533, 2457,</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;            1550, 2284, 2362, 1955, 1428,</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;            2910, 4206, 4342, 3528, 2536,</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;            3390, 4886, 5022, 4068, 2916,</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;            3566, 5056, 5182, 4133, 2922,</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;            3100, 4352, 4452, 3517, 2465</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;        },</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;        outputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;        outputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dAsymmetricTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;        workloadFactory,</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;        memoryManager,</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;        input,</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;        kernel,</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;        GetBias2&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale),</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;        expectedOutput,</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;        qScale,</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;        qOffset,</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;        layout,</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;        1,  <span class="comment">// Padding left.</span></div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;        1,  <span class="comment">// Padding top.</span></div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;        2,  <span class="comment">// Padding right.</span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;        2,  <span class="comment">// Padding bottom.</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;        1,  <span class="comment">// strideX</span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;        1); <span class="comment">// strideY</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;}</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>&gt;</div><div class="line"><a name="l02383"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a3bb67e016661ad8eb0e6dec4bb3994f7"> 2383</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a3bb67e016661ad8eb0e6dec4bb3994f7">DepthwiseConvolution2dNhwcTestCommon</a>(</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;{</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;    <span class="keyword">auto</span> layout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 2, 5, 5}, ArmnnType);</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;             0,  1,  2,  3,  4,</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;             5,  6,  7,  8,  9,</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;            10, 11, 12, 13, 14,</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;            15, 16, 17, 18, 19,</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;            20, 21, 22, 23, 24,</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;            25, 26, 27, 28, 29,</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;            30, 31, 32, 33, 34,</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;            35, 36, 37, 38, 39,</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;            40, 41, 42, 43, 44,</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;            45, 46, 47, 48, 49</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;        },</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;        inputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160;        inputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 2, 4, 4 }, ArmnnType);</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;             32, 31, 30, 29,</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;             28, 27, 26, 25,</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;             24, 23, 22, 21,</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;             20, 19, 18, 17,</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;             16, 15, 14, 13,</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;             12, 11, 10,  9,</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160;              8,  7,  6,  5,</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;              4,  3,  2,  1</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;        },</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;        kernelTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;        kernelTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 2, 5, 5}, ArmnnType);</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;            1062, 1580, 1850, 1530, 1117,</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;            2140, 3108, 3500, 2842, 2042,</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;            3580, 5068, 5460, 4342, 3062,</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;            3618, 5072, 5390, 4248, 2971,</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;            3074, 4282, 4510, 3533, 2457,</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;            1550, 2284, 2362, 1955, 1428,</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;            2910, 4206, 4342, 3528, 2536,</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;            3390, 4886, 5022, 4068, 2916,</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;            3566, 5056, 5182, 4133, 2922,</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;            3100, 4352, 4452, 3517, 2465</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;        },</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;        outputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;        outputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160;</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;        workloadFactory,</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;        memoryManager,</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;        input,</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;        kernel,</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;        GetBias2&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale),</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;        expectedOutput,</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;        qScale,</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;        qOffset,</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;        layout,</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;        1,  <span class="comment">// Padding left.</span></div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;        1,  <span class="comment">// Padding top.</span></div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;        2,  <span class="comment">// Padding right.</span></div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;        2,  <span class="comment">// Padding bottom.</span></div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;        1,  <span class="comment">// strideX</span></div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;        1);  <span class="comment">// strideY</span></div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;}</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;<span class="keyword">template</span>&lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnType, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> ArmnnBType,</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;         <span class="keyword">typename</span> T = <a class="code" href="namespacearmnn.xhtml#a0743ed5e860c316a20b68ca96301b411">armnn::ResolveType&lt;ArmnnType&gt;</a>&gt;</div><div class="line"><a name="l02466"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a0eed8fa496da4f8825e1d43e84ad3a92"> 2466</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a0eed8fa496da4f8825e1d43e84ad3a92">SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTestCommon</a>(</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;    <span class="keywordtype">float</span> qScale,</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;    int32_t qOffset,</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;{</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;    <span class="keyword">auto</span> layout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 1, 9, 9}, ArmnnType);</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;            0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;            0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;            0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;            0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;            0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;            0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;            0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;            0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;            0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;        },</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;        inputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;        inputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 1, 3, 3}, ArmnnType);</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;            1, 2, 3,</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;            4, 5, 6,</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;            7, 8, 9</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;        },</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;        kernelTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;        kernelTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;    uint32_t padLeft = 0;</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;    uint32_t padTop = 0;</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;    uint32_t padRight = 0;</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;    uint32_t padBottom = 0;</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;    uint32_t strideX  = 1;</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;    uint32_t strideY  = 1;</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;    uint32_t dilationX  = 3;</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;    uint32_t dilationY  = 3;</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;    <span class="comment">// Since the dilation rate is 3 this will reduce the size of the output from 9x9 to 3x3 of all 5s.</span></div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 1, 3, 3}, ArmnnType);</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;    boost::multi_array&lt;T, 4&gt; expectedOutput = MakeTensor&lt;T, 4&gt;(outputTensorInfo, std::vector&lt;T&gt;(</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;        QuantizedVector&lt;T&gt;({</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;            5, 5, 5,</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;            5, 5, 5,</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;            5, 5, 5</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;        },</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;        outputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;        outputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;        workloadFactory,</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;        memoryManager,</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;        input,</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;        kernel,</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;        GetBias2&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale),</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;        expectedOutput,</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;        qScale,</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;        qOffset,</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;        layout,</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;        padLeft,</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;        padTop,</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;        padRight,</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;        padBottom,</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;        strideX,</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;        strideY,</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;        dilationX,</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;        dilationY);</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;}</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l02544"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a9fa295f89db31cb7e7dae62f39cdeb14"> 2544</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a9fa295f89db31cb7e7dae62f39cdeb14">DepthwiseConvolution2d3x3DilationTestCommon</a>(</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;        <span class="keyword">const</span> std::vector&lt;float&gt;&amp; inputNoQuantizedValues,</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; inputTensorInfo,</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;        <span class="keyword">const</span> std::vector&lt;float&gt;&amp; kernelNoQuantizedValues,</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; kernelTensorInfo,</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;        <span class="keyword">const</span> std::vector&lt;float&gt;&amp; outputExpectedNoQuantizedValues,</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; outputTensorInfo,</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;        uint32_t dilationX,</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;        uint32_t dilationY,</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>,</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;        <span class="keywordtype">bool</span> biasEnabled = <span class="keyword">false</span>)</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;{</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;    <span class="keywordtype">float</span> qScale;</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;    int32_t qOffset;</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;    <span class="keywordflow">switch</span> (ArmnnType)</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;    {</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;        {</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;            qScale = 0.1f;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;            qOffset = 128;</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;        }</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>:</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;        {</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;            qScale = 0.1f;</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;            qOffset = 0;</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;        }</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;        {</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;            qScale = 0.f;</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;            qOffset = 0;</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;        }</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;    }</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;    inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;    inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;    kernelTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;    kernelTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;    outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">SetQuantizationScale</a>(qScale);</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;    outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a63cbc581012c957f9d68d224ddc3e43c">SetQuantizationOffset</a>(qOffset);</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;T, 4&gt;(inputTensorInfo,</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;                                  std::vector&lt;T&gt;(QuantizedVector&lt;T&gt;(inputNoQuantizedValues,</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;                                                                    inputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;                                                                    inputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;T, 4&gt;(kernelTensorInfo,</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;                                   std::vector&lt;T&gt;(QuantizedVector&lt;T&gt;(kernelNoQuantizedValues,</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;                                                                     kernelTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;                                                                     kernelTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;    <span class="keyword">auto</span> expectedOutput =</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;        MakeTensor&lt;T, 4&gt;(outputTensorInfo,</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;                         std::vector&lt;T&gt;(QuantizedVector&lt;T&gt;(outputExpectedNoQuantizedValues,</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;                                                           outputTensorInfo.GetQuantizationScale(),</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;                                                           outputTensorInfo.GetQuantizationOffset())));</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;    uint32_t padLeft = 0;</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;    uint32_t padTop = 0;</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;    uint32_t padRight = 0;</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;    uint32_t padBottom = 0;</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;    uint32_t strideX  = 1;</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;    uint32_t strideY  = 1;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;            workloadFactory,</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;            memoryManager,</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;            input,</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;            kernel,</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;            GetBias&lt;ArmnnBType&gt;(biasEnabled, qScale * qScale, outputTensorInfo, layout),</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;            expectedOutput,</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;            qScale,</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;            qOffset,</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;            layout,</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;            padLeft,</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;            padTop,</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;            padRight,</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;            padBottom,</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;            strideX,</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;            strideY,</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;            dilationX,</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;            dilationY);</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;}</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02635"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#ae689ff7f2c5222b1ab4ee153e159cab7"> 2635</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ae689ff7f2c5222b1ab4ee153e159cab7">DepthwiseConvolution2d3x3Dilation3x3Test</a>(</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;{</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 1, 10, 10}, ArmnnType);</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;            {</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;            };</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 1, 3, 3}, ArmnnType);</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;            {</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;                    1, 2, 3,</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;                    4, 5, 6,</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;                    7, 8, 9</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;            };</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160;    <span class="comment">// Since the dilation rate is 3 this will dilate the kernel to be like 7x7,</span></div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160;    <span class="comment">// therefore the output will be 4x4: (I−K+2P)/S +1 =&gt; (10-7 +0)/1 +1</span></div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;            {</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;                    3., 2., 2., 2.</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;            };</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160;</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;            workloadFactory,</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;            memoryManager,</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160;            3,</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;            3,</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;            layout,</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;            biasEnabled);</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;}</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02693"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#adb5b1d96ba9807887953dfd1a71ddb14"> 2693</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#adb5b1d96ba9807887953dfd1a71ddb14">DepthwiseConvolution2d2x3x3Dilation3x3Test</a>(</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160;        <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160;{</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 2, 10, 10}, ArmnnType);</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;            {</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;            };</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 1, 2, 3, 3}, ArmnnType);</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160;            {</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;                    1, 2, 3,</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;                    4, 5, 6,</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;                    7, 8, 9,</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160;</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160;                    1, 2, 3,</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160;                    4, 5, 6,</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;                    7, 8, 9</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;            };</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160;</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;    <span class="comment">// Since the dilation rate is 3 this will dilate the kernel to be like 7x7,</span></div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;    <span class="comment">// therefore the output will be 2x4x4: (I−K+2P)/S +1 =&gt; (10-7 +0)/1 +1</span></div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 2, 4, 4}, ArmnnType);</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;            {</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;                    3., 2., 2., 2.,</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160;</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;                    6., 5., 5., 5.,</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;                    3., 2., 2., 2.</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;            };</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160;</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;            workloadFactory,</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;            memoryManager,</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;            3,</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;            3,</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;            layout,</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;            biasEnabled);</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;}</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02771"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a347ca1c8d1443563807e98e261a84954"> 2771</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a347ca1c8d1443563807e98e261a84954">DepthwiseConvolution2dMult4Test</a>(</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;            <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;            <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;            <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;{</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 2, 3, 3}, ArmnnType);</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;            {</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;                    10.0, 10.0, 10.0,</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;                    10.0, 10.0, 10.0,</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;                    10.0, 10.0, 10.0,</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;                    21.0, 22.0, 23.0,</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;                    24.0, 25.0, 26.0,</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;                    27.0, 28.0, 29.0</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;            };</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 4, 2, 2, 2}, ArmnnType);</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;            {</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;                    0.25f, 0.25f,</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;                    0.25f, 0.25f,</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;                    0.25f, 0.25f,</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160;                    0.25f, 0.25f,</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;                    0.0f , 0.1f,</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;                    0.0f , 0.1f,</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;                    0.2f , 0.0f,</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;                    0.2f , 0.0f,</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;                    0.0f , 0.3f,</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;                    0.0f , 0.3f,</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;                    0.0f , 0.0f</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;            };</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 8, 2, 2}, ArmnnType);</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;            {</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;                    10.f, 10.f,</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;                    10.f, 10.f,</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;                    1.f, 1.f,</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;                    1.f, 1.f,</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;                    2.f, 2.f,</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;                    2.f, 2.f,</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160;</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;                    3.f, 3.f,</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;                    3.f, 3.f,</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;</div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160;                    23.f, 24.f,</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;                    26.f, 27.f,</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;                    2.5f, 2.6000001f,</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;                    2.8f, 2.9f,</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;                    4.2000003f, 4.4f,</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;                    4.8f, 5.f,</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;                    6.6000004f, 6.9f,</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;                    7.5000005f, 7.8f</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;            };</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160;</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160;            workloadFactory,</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;            memoryManager,</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;            1,</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;            1,</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160;            layout,</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;            biasEnabled);</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;}</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, armnn::DataType ArmnnBType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02865"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#ae5aa717dc049d325cb92112049e5e626"> 2865</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ae5aa717dc049d325cb92112049e5e626">DepthwiseConvolution2dMult2Test</a>(</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;            <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;            <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;            <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;{</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({1, 2, 3, 3}, ArmnnType);</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;    std::vector&lt;float&gt; inputNoQuantizedValues =</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;            {</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;                    10.0, 10.0, 10.0,</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;                    10.0, 10.0, 10.0,</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;                    10.0, 10.0, 10.0,</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;                    21.0, 22.0, 23.0,</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;                    24.0, 25.0, 26.0,</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160;                    27.0, 28.0, 29.0</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160;            };</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 2, 2, 2, 2}, ArmnnType);</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160;    std::vector&lt;float&gt; kernelNoQuantizedValues =</div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160;            {</div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;                    0.25f, 0.25f,</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;                    0.25f, 0.25f,</div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;                    0.2f , 0.0f,</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;                    0.0f , 0.0f,</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;                    0.0f , 0.1f,</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;                    0.0f , 0.3f,</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;                    0.0f , 0.0f</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;            };</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 4, 2, 2}, ArmnnType);</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;    std::vector&lt;float&gt; outputExpectedNoQuantizedValues =</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;            {</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;                    10.f, 10.f,</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;                    10.f, 10.f,</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;                    1.f, 1.f,</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;                    1.f, 1.f,</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;                    4.2000003f, 4.4f,</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160;                    4.8f, 5.f,</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;                    6.6000004f, 6.9f,</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;                    7.5000005f, 7.8f</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;            };</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160;</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2d3x3DilationTestCommon&lt;ArmnnType, ArmnnBType&gt;(</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;            workloadFactory,</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;            memoryManager,</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;            inputNoQuantizedValues,</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;            inputTensorInfo,</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;            kernelNoQuantizedValues,</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;            kernelTensorInfo,</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;            outputExpectedNoQuantizedValues,</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;            outputTensorInfo,</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;            1,</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;            1,</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;            layout,</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;            biasEnabled);</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160;}</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l02936"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8cpp.xhtml#a65191a03dfa8bb05dafac2c627dcf8da"> 2936</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a65191a03dfa8bb05dafac2c627dcf8da">CompareDepthwiseConvolution2dTestImpl</a>(</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; workloadFactory,</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp; memoryManager,</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp; refWorkloadFactory,</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; tensorHandleFactory,</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp; refTensorHandleFactory,</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a>&amp; layout)</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;{</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = 8;</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth = 16;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannels = 3;</div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputNum = 5;</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelHeight = 3;</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> kernelWidth = 3;</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelMultiplier = 1;</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideX = 2;</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> strideY = 3;</div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padX = 1;</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> padY = 1;</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160;</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputNum = inputNum;</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannels = inputChannels * channelMultiplier;</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = (inputHeight + 2 * padY - kernelHeight + strideY) / strideY;</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = (inputWidth + 2 * padX - kernelWidth + strideX) / strideX;</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160;</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo;</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo;</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelDesc;</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasDesc;</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160;</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;    std::vector&lt;unsigned int&gt; inputShape;</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160;    std::vector&lt;unsigned int&gt; outputShape;</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160;    std::vector&lt;unsigned int&gt; kernelShape{ channelMultiplier, inputChannels, kernelHeight, kernelWidth };</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;    std::vector&lt;unsigned int&gt; biasShape{ outputChannels };</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;    <span class="keywordflow">switch</span> (layout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>())</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;    {</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>:</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;            inputShape =  { inputNum, inputChannels, inputHeight, inputWidth };</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;            outputShape = { outputNum, outputChannels, outputHeight, outputWidth };</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout ::NHWC</a>:</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;            inputShape =  { inputNum, inputHeight, inputWidth, inputChannels };</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;            outputShape = { outputNum, outputHeight, outputWidth, outputChannels };</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>(<span class="stringliteral">&quot;unknown data layout [&quot;</span></div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;                                                  + std::to_string(static_cast&lt;int&gt;(layout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>())) + <span class="stringliteral">&quot;]&quot;</span>);</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;    }</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;    <span class="keywordtype">float</span> inputsQScale = armnn::IsQuantizedType&lt;T&gt;() ? 1.0f : 0;</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;    <span class="keywordtype">float</span> outputQScale = armnn::IsQuantizedType&lt;T&gt;() ? 2.0f : 0;</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;    int32_t qOffset = 0;</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160;    inputTensorInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(4, inputShape.data(), ArmnnType, inputsQScale, qOffset);</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;    outputTensorInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(4, outputShape.data(), ArmnnType, outputQScale, qOffset);</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;    kernelDesc = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(4, kernelShape.data(), ArmnnType, inputsQScale, qOffset);</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;    biasDesc = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;        1, biasShape.data(), <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">armnn::GetBiasDataType</a>(ArmnnType), inputsQScale, qOffset);</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;T, 4&gt;</a> ret(outputTensorInfo);</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;    <span class="keyword">auto</span> input = MakeRandomTensor&lt;T, 4&gt;(inputTensorInfo, 124908, 0.0f, 255.0f);</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;    <span class="keyword">auto</span> kernel = MakeRandomTensor&lt;T, 4&gt;(kernelDesc, 891234, 0.0f, 255.0f);</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    <span class="keyword">auto</span> bias = MakeRandomTensor&lt;typename FullyConnectedBiasTypeForInputType&lt;T&gt;::Type, 1&gt;(</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;            biasDesc, 1028, 0.0f, 255.0f);</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a> data;</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> weightsTensor(kernelDesc);</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a> biasTensor(biasDesc);</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightsTensor, &amp;kernel[0][0][0][0]);</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, &amp;bias[0]);</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;    AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;    AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">m_Weight</a> = &amp;weightsTensor;</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;    data.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">m_Bias</a> = &amp;biasTensor;</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strideX;</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strideY;</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> = padX;</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> = padX;</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> = padY;</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> = padY;</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;    data.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a>.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = layout.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">GetDataLayout</a>();</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; outputHandleRef = refTensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputTensorInfo);</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;    std::unique_ptr&lt;armnn::ITensorHandle&gt; inputHandleRef = refTensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputTensorInfo);</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">armnn::DepthwiseConvolution2dQueueDescriptor</a> refData = data;</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a> refInfo = info;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;    SetWorkloadInput(refData, refInfo, 0, inputTensorInfo, inputHandleRef.get());</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;    SetWorkloadOutput(refData, refInfo, 0, outputTensorInfo, outputHandleRef.get());</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(data, info);</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;    std::unique_ptr&lt;armnn::IWorkload&gt; workloadRef = refWorkloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(refData, refInfo);</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;    outputHandleRef-&gt;Allocate();</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;    inputHandleRef-&gt;Allocate();</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160;</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160;</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), &amp;input[0][0][0][0]);</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandleRef.get(), &amp;input[0][0][0][0]);</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160;</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;    workloadRef-&gt;PostAllocationConfigure();</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;    workloadRef-&gt;Execute();</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.output[0][0][0][0], outputHandle.get());</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(&amp;ret.outputExpected[0][0][0][0], outputHandleRef.get());</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;}</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;<span class="comment">// Explicit template specializations</span></div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;<span class="keyword">template</span> <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;</a>, 4&gt;</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;Convolution2d3x3Dilation3x3Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;    <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a>&amp;,</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a>&amp;,</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a>&amp;,</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;    bool,</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;<span class="keyword">template</span> <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;</a>, 4&gt;</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;Convolution2d3x3Dilation3x3Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;    bool,</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;<span class="keyword">template</span> <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmS8&gt;</a>, 4&gt;</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;Convolution2d3x3Dilation3x3Test&lt;armnn::DataType::QAsymmS8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;        bool,</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160;</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160;<span class="keyword">template</span> <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmU8&gt;</a>, 4&gt;</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;Convolution2d3x3Dilation3x3Test&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;    bool,</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160;</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;<span class="keyword">template</span> <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QSymmS16&gt;</a>, 4&gt;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;Convolution2d3x3Dilation3x3Test&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;    bool,</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;, 4&gt;</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;Convolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;    bool,</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;<span class="keyword">template</span> <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;</a>, 4&gt;</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;Convolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;    bool,</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmS8&gt;, 4&gt;</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;Convolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::QAsymmS8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;        bool,</div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmU8&gt;, 4&gt;</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160;Convolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160;    bool,</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QSymmS16&gt;, 4&gt;</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;Convolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;    armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;    bool,</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;, 4&gt;</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;    armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160;</div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;, 4&gt;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;    armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160;</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmS8&gt;, 4&gt;</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test&lt;armnn::DataType::QAsymmS8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;        armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmU8&gt;, 4&gt;</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160;    armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QSymmS16&gt;, 4&gt;</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160;Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;    armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160;</div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;, 4&gt;</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;DepthwiseConvolution2d3x3Dilation3x3Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;        bool,</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160;</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;, 4&gt;</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;DepthwiseConvolution2d3x3Dilation3x3Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;        bool,</div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160;</div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmS8&gt;, 4&gt;</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160;DepthwiseConvolution2d3x3Dilation3x3Test&lt;armnn::DataType::QAsymmS8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;        bool,</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160;</div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmU8&gt;, 4&gt;</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;DepthwiseConvolution2d3x3Dilation3x3Test&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;        bool,</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QSymmS16&gt;, 4&gt;</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;DepthwiseConvolution2d3x3Dilation3x3Test&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160;        bool,</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160;</div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;, 4&gt;</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160;DepthwiseConvolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160;        bool,</div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160;</div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;, 4&gt;</div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;DepthwiseConvolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;        bool,</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmS8&gt;, 4&gt;</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;DepthwiseConvolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::QAsymmS8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;        bool,</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QAsymmU8&gt;, 4&gt;</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160;DepthwiseConvolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160;        bool,</div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160;</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::QSymmS16&gt;, 4&gt;</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;DepthwiseConvolution2d2x3x3Dilation3x3Test&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160;        armnn::IWorkloadFactory&amp;,</div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp;,</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp;,</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;        bool,</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a>);</div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160;</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;, 4&gt;</div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;DepthwiseConvolution2dMult4Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;        armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160;</div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;, 4&gt;</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;DepthwiseConvolution2dMult4Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160;        armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::BFloat16&gt;, 4&gt;</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;DepthwiseConvolution2dMult2Test&lt;armnn::DataType::BFloat16, armnn::DataType::BFloat16&gt;(</div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160;        armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;</div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160;<span class="keyword">template</span> LayerTestResult&lt;armnn::ResolveType&lt;armnn::DataType::Float32&gt;, 4&gt;</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160;DepthwiseConvolution2dMult2Test&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;        armnn::IWorkloadFactory &amp;workloadFactory,</div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager,</div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout);</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;<span class="comment">// Implementation functions</span></div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160;</div><div class="line"><a name="l03299"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#af541c93dcb094c01b52b99658704c500"> 3299</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#af541c93dcb094c01b52b99658704c500">SimpleConvolution2d3x5Test</a>(</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160;{</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x5TestCommon&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.f, 0, biasEnabled, layout);</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;}</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;</div><div class="line"><a name="l03310"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a10aae8f4c0c56c2c3574ca9ddf61a7af"> 3310</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a10aae8f4c0c56c2c3574ca9ddf61a7af">SimpleConvolution2d3x5Uint8Test</a>(</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160;{</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x5TestCommon&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;}</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;</div><div class="line"><a name="l03321"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a1c22cdfa99117a1cdbc4b25064fd4c25"> 3321</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a1c22cdfa99117a1cdbc4b25064fd4c25">SimpleConvolution2d3x3Test</a>(</div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;{</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x3TestCommon&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.f, 0, biasEnabled, layout);</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;}</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;</div><div class="line"><a name="l03332"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a4d3ce31fe572451e18fea5add8543bf4"> 3332</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a4d3ce31fe572451e18fea5add8543bf4">SimpleConvolution2d3x3NhwcTest</a>(</div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160;{</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x3NhwcTestCommon&lt;armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;        workloadFactory,</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160;        memoryManager,</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;        0.f,</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;        0,</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;        biasEnabled,</div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>);</div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;}</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160;</div><div class="line"><a name="l03348"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#ad232d77972b88a751dbf6ecd594b0faa"> 3348</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ad232d77972b88a751dbf6ecd594b0faa">SimpleConvolution2d3x3Stride2x2Test</a>(</div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160;        armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;{</div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x3Stride2x2TestCommon&lt;armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;        workloadFactory,</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160;        memoryManager,</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;        tensorHandleFactory,</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;        0.f,</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;        0,</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;        biasEnabled,</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;        layout);</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;}</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;</div><div class="line"><a name="l03365"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a9966f7b9070f4eb34deeb8fc3cb3d277"> 3365</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a9966f7b9070f4eb34deeb8fc3cb3d277">SimpleConvolution2d3x3Uint8Test</a>(</div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;{</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x3TestCommon&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;}</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160;</div><div class="line"><a name="l03376"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a0f6ba53d8a3801fd33288c8a88a55902"> 3376</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;int16_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a0f6ba53d8a3801fd33288c8a88a55902">SimpleConvolution2d3x5QSymm16Test</a>(</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160;{</div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x5TestCommon&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160;}</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160;</div><div class="line"><a name="l03387"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#aebd160fb0c5f5662a1cbaec5974c13ea"> 3387</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;int16_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aebd160fb0c5f5662a1cbaec5974c13ea">SimpleConvolution2d3x3QSymm16Test</a>(</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160;{</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2d3x3TestCommon&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160;            workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;}</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;</div><div class="line"><a name="l03398"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a0431327604bbd8051635e8ebd215e620"> 3398</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a0431327604bbd8051635e8ebd215e620">Convolution2dAsymmetricPaddingTest</a>(</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;{</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160;    <span class="keywordflow">return</span> SimpleConvolution2dAsymmetricPaddingTestCommon&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;            workloadFactory, memoryManager, tensorHandleFactory, layout, 0.0f, 0);</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160;}</div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160;</div><div class="line"><a name="l03408"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#ab1b3e3dfbd3807989911b05b5830f7ea"> 3408</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ab1b3e3dfbd3807989911b05b5830f7ea">Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest</a>(</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160;{</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a71b5e8d33736d32c974e4fff9206f998">Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon</a></div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160;            &lt;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160;            workloadFactory, memoryManager, tensorHandleFactory, layout, 0.0f, 0);</div><div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>&#160;}</div><div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160;</div><div class="line"><a name="l03419"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a7fde274ea5d168e2941e90ff6475262b"> 3419</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a7fde274ea5d168e2941e90ff6475262b">Convolution1dTest</a>(</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;{</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;    <span class="keywordflow">return</span> Convolution1dTestImpl&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;            workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, biasEnabled);</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160;}</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160;</div><div class="line"><a name="l03429"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a2a6493bf0e6583e7d0535f6d01323bfc"> 3429</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a2a6493bf0e6583e7d0535f6d01323bfc">Convolution1dUint8Test</a>(</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160;{</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160;    <span class="keywordflow">return</span> Convolution1dTestImpl&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160;            workloadFactory, memoryManager, tensorHandleFactory, 0.1f, 128, biasEnabled);</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160;}</div><div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160;</div><div class="line"><a name="l03439"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a3db9032b7a4530846a78babe58a1b2dd"> 3439</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a3db9032b7a4530846a78babe58a1b2dd">Convolution2dPerAxisQuantTest</a>(</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;{</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160;</div><div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputType  = DataType::QAsymmU8;</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> kernelType = DataType::QSymmS8;</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> biasType   = DataType::Signed32;</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160;</div><div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo ({ 1, 3, 1, 2 }, inputType, 0.5f, 128);</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo({ 1, 3, 1, 3 }, inputType, 1.0f, 128);</div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160;</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; quantScales{ 0.5f, 0.75f, 1.0f };</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160;    constexpr <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> quantDimension = 0;</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> kernelInfo({ 3, 1, 1, 2 }, kernelType, quantScales, quantDimension);</div><div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160;</div><div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; biasQuantScales{ 0.25f, 0.375f, 0.5f };</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasInfo({ 3 }, biasType, biasQuantScales, quantDimension);</div><div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160;</div><div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160;    std::vector&lt;uint8_t&gt; inputData =</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160;    {</div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160;        138, 108, 138, 108, 138, 108</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160;    };</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160;</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;    std::vector&lt;int8_t&gt; kernelData =</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;    {</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160;        1, 2, 1, 2, 1, 2</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160;    };</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160;    std::vector&lt;int32_t&gt; biasData =</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;    {</div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160;        4, 4, 4</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160;    };</div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160;</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160;    std::vector&lt;uint8_t&gt; expectedOutputData =</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;    {</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160;        121, 118, 115, 121, 118, 115, 121, 118, 115</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160;    };</div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160;</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160;    {</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;        <a class="code" href="_data_layout_utils_8hpp.xhtml#a1452f049aef30409b3b649af2be7ff82">PermuteTensorNhwcToNchw</a>(inputInfo, inputData);</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160;        <a class="code" href="_data_layout_utils_8hpp.xhtml#a1452f049aef30409b3b649af2be7ff82">PermuteTensorNhwcToNchw</a>(kernelInfo, kernelData);</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160;        <a class="code" href="_data_layout_utils_8hpp.xhtml#a1452f049aef30409b3b649af2be7ff82">PermuteTensorNhwcToNchw</a>(outputInfo, expectedOutputData);</div><div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160;    }</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> descriptor;</div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>     = 0;</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>    = 0;</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>      = 0;</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>   = 0;</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160;    descriptor.<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="l03497"></a><span class="lineno"> 3497</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = layout;</div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160;</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160;</div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160;    std::unique_ptr&lt;ITensorHandle&gt; inputHandle  = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputInfo);</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;    std::unique_ptr&lt;ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputInfo);</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160;</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160;</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> workloadInfo;</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">ScopedCpuTensorHandle</a> weightTensor(kernelInfo);</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">ScopedCpuTensorHandle</a> biasTensor(biasInfo);</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160;</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightTensor, kernelData.data());</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, biasData.data());</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160;</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml">Convolution2dQueueDescriptor</a> queueDescriptor;</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;    queueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a> = descriptor;</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;    queueDescriptor.m_Weight     = &amp;weightTensor;</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;    queueDescriptor.m_Bias       = &amp;biasTensor;</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160;</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160;    AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get());</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160;    AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get());</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160;</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;    std::unique_ptr&lt;IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">CreateConvolution2d</a>(queueDescriptor, workloadInfo);</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), inputData.data());</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160;</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160;</div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> ret(outputInfo);</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>.origin(), outputHandle.get());</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;    ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a> = MakeTensor&lt;uint8_t, 4&gt;(outputInfo, expectedOutputData);</div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160;}</div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160;</div><div class="line"><a name="l03534"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a6a885deaaf7b59c13ca6c94dce9e8b36"> 3534</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float,4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a450ab121f9d99c26cfa82084b743ea6f">CompareConvolution2dTest</a>(</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160;    armnn::IWorkloadFactory&amp; refWorkloadFactory,</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; refTensorHandleFactory)</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160;{</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160;    <span class="keywordflow">return</span> CompareConvolution2dTestImpl&lt;armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160;            workloadFactory, memoryManager, refWorkloadFactory, tensorHandleFactory, refTensorHandleFactory);</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;}</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160;</div><div class="line"><a name="l03545"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a9ed9dc40170e362160eb6e6e7edda209"> 3545</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a9ed9dc40170e362160eb6e6e7edda209">DepthwiseConvolution2dTest</a>(</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160;{</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, biasEnabled, layout);</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;}</div><div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;</div><div class="line"><a name="l03556"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#ae9488183b3dc79abe459aaea83524d0a"> 3556</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ae9488183b3dc79abe459aaea83524d0a">DepthwiseConvolution2dDepthNhwcTest</a>(</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160;    <span class="keywordtype">bool</span> biasEnabled)</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;{</div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dNhwcTestCommon&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, biasEnabled);</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160;}</div><div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>&#160;</div><div class="line"><a name="l03566"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#aa1b649cd47b77a98921cc22eb6a451c8"> 3566</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aa1b649cd47b77a98921cc22eb6a451c8">DepthwiseConvolution2dDepthMul1Test</a>(</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160;{</div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dDepthMul1TestImpl&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, biasEnabled, layout);</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;}</div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160;</div><div class="line"><a name="l03577"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a9c68d43c1ebbd68f34b7846046d814d3"> 3577</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a9c68d43c1ebbd68f34b7846046d814d3">DepthwiseConvolution2dDepthMul64Test</a>(</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory)</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;{</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo({ 1, 1, 2, 2 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;    <span class="keyword">auto</span> input = MakeTensor&lt;float, 4&gt;(inputTensorInfo, { 1.f, 2.f, 3.f, 4.f });</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;    std::vector&lt;float&gt; kernelData;</div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160;    std::vector&lt;float&gt; singleDepthKernel{ 1.f, -1.f, -1.f, 1.f };</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; 64; ++i)</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160;    {</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;        kernelData.insert(kernelData.end(), singleDepthKernel.begin(), singleDepthKernel.end());</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;    }</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> kernelTensorInfo({ 64, 1, 2, 2 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;    <span class="keyword">auto</span> kernel = MakeTensor&lt;float, 4&gt;(kernelTensorInfo, kernelData);</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160;</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;    std::vector&lt;float&gt; expectedOutputData(64, 0.f);</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo({ 1, 64, 1, 1 }, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;    <span class="keyword">auto</span> expectedOutput = MakeTensor&lt;float, 4&gt;(outputTensorInfo, expectedOutputData);</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160;</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;            workloadFactory,</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160;            memoryManager,</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160;            input,</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;            kernel,</div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;            boost::multi_array&lt;float, 1&gt;(),</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;            expectedOutput,</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;            0.f,</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;            0,</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;            <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">armnn::DataLayout::NCHW</a>);</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160;}</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160;</div><div class="line"><a name="l03611"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#abdbec483f1020dc684741b37e04d2175"> 3611</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#abdbec483f1020dc684741b37e04d2175">DepthwiseConvolution2dAsymmetricTest</a>(</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160;{</div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dAsymmetricTestCommon&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, biasEnabled, layout);</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;}</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;</div><div class="line"><a name="l03622"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#ae739d5c6193a4b2192f155632a4e2cd6"> 3622</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#ae739d5c6193a4b2192f155632a4e2cd6">DepthwiseConvolution2dUint8Test</a>(</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160;{</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160;}</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;</div><div class="line"><a name="l03633"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a0cbaad29854964598fdbd63d9506d31f"> 3633</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a0cbaad29854964598fdbd63d9506d31f">DepthwiseConvolution2dDepthMul1Uint8Test</a>(</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;    <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160;{</div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dDepthMul1TestImpl&lt;armnn::DataType::QAsymmU8, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;}</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160;</div><div class="line"><a name="l03644"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#af089eef6b8fd167fe95899a3af69aa32"> 3644</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#af089eef6b8fd167fe95899a3af69aa32">SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest</a>(</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160;        armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory)</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;{</div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160;    <span class="keywordflow">return</span> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTestCommon&lt;armnn::DataType::Float32, armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;            workloadFactory,</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;            memoryManager,</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;            tensorHandleFactory,</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;            0.f,</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;            0,</div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;            <span class="keyword">false</span>);</div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160;}</div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160;</div><div class="line"><a name="l03658"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a1599b84e270875cb9b008c23cba9229f"> 3658</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;int16_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a1599b84e270875cb9b008c23cba9229f">DepthwiseConvolution2dInt16Test</a>(</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160;        armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160;        <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>&#160;{</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dTestImpl&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;}</div><div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>&#160;</div><div class="line"><a name="l03669"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a1879a2d6ebde509005aef609d663f664"> 3669</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;int16_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a1879a2d6ebde509005aef609d663f664">DepthwiseConvolution2dDepthMul1Int16Test</a>(</div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160;                armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160;                <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160;                <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160;                <span class="keywordtype">bool</span> biasEnabled,</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160;                <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160;{</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;    <span class="keywordflow">return</span> DepthwiseConvolution2dDepthMul1TestImpl&lt;armnn::DataType::QSymmS16, armnn::DataType::Signed32&gt;(</div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;        workloadFactory, memoryManager, tensorHandleFactory, 0.5f, 50, biasEnabled, layout);</div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160;}</div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160;</div><div class="line"><a name="l03680"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#aeb6f20ff65cd6c5fa68a70a2f3d27788"> 3680</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#aeb6f20ff65cd6c5fa68a70a2f3d27788">DepthwiseConvolution2dPerAxisQuantTest</a>(</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160;        armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160;        <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160;        <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160;{</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160;</div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputType  = DataType::QAsymmU8;</div><div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> kernelType = DataType::QSymmS8;</div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> biasType   = DataType::Signed32;</div><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;</div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo ({ 1, 3, 3, 2 }, inputType, 0.5f, 128); <span class="comment">// N H W C</span></div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo({ 1, 2, 2, 4 }, inputType, 1.0f, 128); <span class="comment">// N H W C</span></div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160;</div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; quantScales{ 1.0f, 0.5f, 1.0f, 0.5f };</div><div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> quantDimension = 0;</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> kernelInfo({ 2, 2, 2, 2 }, kernelType, quantScales, quantDimension); <span class="comment">// M I H W</span></div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160;</div><div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160;    <span class="keyword">const</span> std::vector&lt;float&gt; biasQuantScales{ 0.5f, 0.25f, 0.5f, 0.25f };</div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160;    constexpr <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> biasQuantDimension = 0;</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasInfo({ 4 }, biasType, biasQuantScales, biasQuantDimension);</div><div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160;</div><div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160;    std::vector&lt;uint8_t&gt; inputData =</div><div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160;    {</div><div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160;        129, 130,</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160;        129, 130,</div><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;        129, 130,</div><div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160;        129, 130,</div><div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160;        129, 130,</div><div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>&#160;        129, 130,</div><div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>&#160;        129, 130,</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160;        129, 130,</div><div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160;        129, 130</div><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160;    };</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160;</div><div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160;    std::vector&lt;int8_t&gt; kernelData =</div><div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160;    {</div><div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>&#160;        1, 1, 1, 1,</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160;        1, 1, 1, 1,</div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160;        1, 1, 1, 1,</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160;        1, 1, 1, 1</div><div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>&#160;    };</div><div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160;</div><div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160;    std::vector&lt;int32_t&gt; biasData =</div><div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160;    {</div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160;        4, 4, 4, 4</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160;    };</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160;</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160;    std::vector&lt;uint8_t&gt; expectedOutputData =</div><div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>&#160;    {</div><div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>&#160;        132, 130, 134, 131,</div><div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160;        132, 130, 134, 131,</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160;        132, 130, 134, 131,</div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160;        132, 130, 134, 131</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160;    };</div><div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160;</div><div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160;    <span class="keywordflow">if</span> (layout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>)</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160;    {</div><div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>&#160;        <a class="code" href="_data_layout_utils_8hpp.xhtml#a1452f049aef30409b3b649af2be7ff82">PermuteTensorNhwcToNchw</a>(inputInfo, inputData);</div><div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160;        <a class="code" href="_data_layout_utils_8hpp.xhtml#a1452f049aef30409b3b649af2be7ff82">PermuteTensorNhwcToNchw</a>(outputInfo, expectedOutputData);</div><div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>&#160;    }</div><div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>&#160;</div><div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> descriptor;</div><div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>     = 0;</div><div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>    = 0;</div><div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>      = 0;</div><div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>   = 0;</div><div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>   = 1;</div><div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>   = 1;</div><div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>&#160;    descriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = layout;</div><div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>&#160;</div><div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>&#160;    std::unique_ptr&lt;ITensorHandle&gt; inputHandle  = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(inputInfo);</div><div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>&#160;    std::unique_ptr&lt;ITensorHandle&gt; outputHandle = tensorHandleFactory.<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">CreateTensorHandle</a>(outputInfo);</div><div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>&#160;</div><div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> workloadInfo;</div><div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">ScopedCpuTensorHandle</a> weightTensor(kernelInfo);</div><div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>&#160;    <a class="code" href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">ScopedCpuTensorHandle</a> biasTensor(biasInfo);</div><div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160;</div><div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;weightTensor, kernelData.data());</div><div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a>(&amp;biasTensor, biasData.data());</div><div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160;</div><div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml">DepthwiseConvolution2dQueueDescriptor</a> queueDescriptor;</div><div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160;    queueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">m_Parameters</a> = descriptor;</div><div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160;    queueDescriptor.m_Weight     = &amp;weightTensor;</div><div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>&#160;    queueDescriptor.m_Bias       = &amp;biasTensor;</div><div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160;</div><div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>&#160;    AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get());</div><div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160;    AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get());</div><div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>&#160;</div><div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>&#160;    std::unique_ptr&lt;IWorkload&gt; workload = workloadFactory.<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">CreateDepthwiseConvolution2d</a>(queueDescriptor, workloadInfo);</div><div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>&#160;    inputHandle-&gt;Allocate();</div><div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>&#160;    outputHandle-&gt;Allocate();</div><div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160;</div><div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a>(inputHandle.get(), inputData.data());</div><div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>&#160;</div><div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160;    ExecuteWorkload(*workload, memoryManager);</div><div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160;</div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160;    <a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> ret(outputInfo);</div><div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160;</div><div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>&#160;    <a class="code" href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a>(ret.<a class="code" href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">output</a>.origin(), outputHandle.get());</div><div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160;    ret.<a class="code" href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">outputExpected</a> = MakeTensor&lt;uint8_t, 4&gt;(outputInfo, expectedOutputData);</div><div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160;</div><div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>&#160;}</div><div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>&#160;</div><div class="line"><a name="l03789"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a91334b97ca9cf0a8e006653cd9b7ff16"> 3789</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;float, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a91334b97ca9cf0a8e006653cd9b7ff16">CompareDepthwiseConvolution2dFloatTest</a>(</div><div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160;    armnn::IWorkloadFactory&amp; refWorkloadFactory,</div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; refTensorHandleFactory,</div><div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>&#160;{</div><div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>&#160;    <span class="keywordflow">return</span> CompareDepthwiseConvolution2dTestImpl&lt;armnn::DataType::Float32&gt;(</div><div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>&#160;        workloadFactory, memoryManager, refWorkloadFactory, tensorHandleFactory, refTensorHandleFactory, layout);</div><div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>&#160;}</div><div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160;</div><div class="line"><a name="l03801"></a><span class="lineno"><a class="line" href="_conv2d_test_impl_8hpp.xhtml#a5d8371b1081cd00d8271524f6cd512f1"> 3801</a></span>&#160;<a class="code" href="struct_layer_test_result.xhtml">LayerTestResult&lt;uint8_t, 4&gt;</a> <a class="code" href="_conv2d_test_impl_8cpp.xhtml#a5d8371b1081cd00d8271524f6cd512f1">CompareDepthwiseConvolution2dUint8Test</a>(</div><div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160;    armnn::IWorkloadFactory&amp; workloadFactory,</div><div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160;    <span class="keyword">const</span> armnn::IBackendInternal::IMemoryManagerSharedPtr&amp; memoryManager,</div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160;    armnn::IWorkloadFactory&amp; refWorkloadFactory,</div><div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; tensorHandleFactory,</div><div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160;    <span class="keyword">const</span> armnn::ITensorHandleFactory&amp; refTensorHandleFactory,</div><div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a> layout)</div><div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>&#160;{</div><div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160;    <span class="keywordflow">return</span> CompareDepthwiseConvolution2dTestImpl&lt;armnn::DataType::QAsymmU8&gt;(</div><div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160;        workloadFactory, memoryManager, refWorkloadFactory, tensorHandleFactory, refTensorHandleFactory, layout);</div><div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160;}</div><div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_ae5aa717dc049d325cb92112049e5e626"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ae5aa717dc049d325cb92112049e5e626">DepthwiseConvolution2dMult2Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dMult2Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02865">Conv2dTestImpl.cpp:2865</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_afba5868ef96cceb570cc4b8223f3019c"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#afba5868ef96cceb570cc4b8223f3019c">Convolution2d3x3Stride2x2BFloat16Test</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; Convolution2d3x3Stride2x2BFloat16Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01401">Conv2dTestImpl.cpp:1401</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="_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_convolution2d_queue_descriptor_xhtml_ab3437cee6b0687812104fc1b37cbe8b3"><div class="ttname"><a href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">armnn::Convolution2dQueueDescriptor::m_Bias</a></div><div class="ttdeci">const ConstCpuTensorHandle * m_Bias</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00201">WorkloadData.hpp:201</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="_conv2d_test_impl_8cpp_xhtml_ae739d5c6193a4b2192f155632a4e2cd6"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ae739d5c6193a4b2192f155632a4e2cd6">DepthwiseConvolution2dUint8Test</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; DepthwiseConvolution2dUint8Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03622">Conv2dTestImpl.cpp:3622</a></div></div>
<div class="ttc" id="_tensor_copy_utils_8hpp_xhtml"><div class="ttname"><a href="_tensor_copy_utils_8hpp.xhtml">TensorCopyUtils.hpp</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_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="_conv2d_test_impl_8cpp_xhtml_a0f6ba53d8a3801fd33288c8a88a55902"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a0f6ba53d8a3801fd33288c8a88a55902">SimpleConvolution2d3x5QSymm16Test</a></div><div class="ttdeci">LayerTestResult&lt; int16_t, 4 &gt; SimpleConvolution2d3x5QSymm16Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03376">Conv2dTestImpl.cpp:3376</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a676232481dc5af6280e8433f0f5397a1"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a676232481dc5af6280e8433f0f5397a1">SimpleConvolution2d3x3Stride2x2TestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleConvolution2d3x3Stride2x2TestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, const armnn::DataLayout &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00640">Conv2dTestImpl.cpp:640</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="_conv2d_test_impl_8cpp_xhtml_a71b5e8d33736d32c974e4fff9206f998"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a71b5e8d33736d32c974e4fff9206f998">Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::DataLayout layout, float qScale, int32_t qOffset)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00880">Conv2dTestImpl.cpp:880</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</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="_conv2d_test_impl_8cpp_xhtml_a9573a516a902021f7b24fc8a8172ea8e"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a9573a516a902021f7b24fc8a8172ea8e">Convolution2d3x3Stride2x2BFloat16SmallValueTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; Convolution2d3x3Stride2x2BFloat16SmallValueTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout &amp;dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01511">Conv2dTestImpl.cpp:1511</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_aa1f4ce02e0904dc8cf1b7f42bc34d346"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#aa1f4ce02e0904dc8cf1b7f42bc34d346">ApplyBias</a></div><div class="ttdeci">void ApplyBias(std::vector&lt; T &gt; &amp;v, float vScale, int32_t vOffset, const std::vector&lt; B &gt; &amp;bias, float bScale, int32_t bOffset, uint32_t w, uint32_t h)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00168">Conv2dTestImpl.cpp:168</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a24ba5e372ff9e8c7603cd380d3673bff"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a24ba5e372ff9e8c7603cd380d3673bff">Convolution2d2x3x3Dilation3x3Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; Convolution2d2x3x3Dilation3x3Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01159">Conv2dTestImpl.cpp:1159</a></div></div>
<div class="ttc" id="_inference_test_image_8hpp_xhtml_a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571"><div class="ttname"><a href="_inference_test_image_8hpp.xhtml#a65983f8cb907d873f2328bb8307c296aa9d5ed678fe57bcca610140957afab571">ImageChannel::B</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="_conv2d_test_impl_8cpp_xhtml_a10aae8f4c0c56c2c3574ca9ddf61a7af"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a10aae8f4c0c56c2c3574ca9ddf61a7af">SimpleConvolution2d3x5Uint8Test</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; SimpleConvolution2d3x5Uint8Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03310">Conv2dTestImpl.cpp:3310</a></div></div>
<div class="ttc" id="_quantize_helper_8hpp_xhtml"><div class="ttname"><a href="_quantize_helper_8hpp.xhtml">QuantizeHelper.hpp</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="_workload_test_utils_8hpp_xhtml"><div class="ttname"><a href="_workload_test_utils_8hpp.xhtml">WorkloadTestUtils.hpp</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8hpp_xhtml"><div class="ttname"><a href="_conv2d_test_impl_8hpp.xhtml">Conv2dTestImpl.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_queue_descriptor_xhtml_ab3437cee6b0687812104fc1b37cbe8b3"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#ab3437cee6b0687812104fc1b37cbe8b3">armnn::DepthwiseConvolution2dQueueDescriptor::m_Bias</a></div><div class="ttdeci">const ConstCpuTensorHandle * m_Bias</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00216">WorkloadData.hpp:216</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="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="classarmnn_1_1_b_float16_xhtml"><div class="ttname"><a href="classarmnn_1_1_b_float16.xhtml">armnn::BFloat16</a></div><div class="ttdef"><b>Definition:</b> <a href="_b_float16_8hpp_source.xhtml#l00014">BFloat16.hpp:14</a></div></div>
<div class="ttc" id="struct_layer_test_result_xhtml_a73610ea6c776cc66e5a78dd842a39b8b"><div class="ttname"><a href="struct_layer_test_result.xhtml#a73610ea6c776cc66e5a78dd842a39b8b">LayerTestResult::outputExpected</a></div><div class="ttdeci">boost::multi_array&lt; T, n &gt; outputExpected</div><div class="ttdef"><b>Definition:</b> <a href="_layer_test_result_8hpp_source.xhtml#l00042">LayerTestResult.hpp:42</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a7c7c49dfc7e8054f4c84929a1b86f4e0"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a7c7c49dfc7e8054f4c84929a1b86f4e0">CompareConvolution2dTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; CompareConvolution2dTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, armnn::IWorkloadFactory &amp;refWorkloadFactory, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::ITensorHandleFactory &amp;refTensorHandleFactory)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01301">Conv2dTestImpl.cpp:1301</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a9680e910e263c8d6824c9ddcc1c135a4"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a9680e910e263c8d6824c9ddcc1c135a4">Convolution2d3x3DilationTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; Convolution2d3x3DilationTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const std::vector&lt; float &gt; &amp;inputNoQuantizedValues, armnn::TensorInfo &amp;inputTensorInfo, const std::vector&lt; float &gt; &amp;kernelNoQuantizedValues, armnn::TensorInfo &amp;kernelTensorInfo, const std::vector&lt; float &gt; &amp;outputExpectedNoQuantizedValues, armnn::TensorInfo &amp;outputTensorInfo, uint32_t dilationX, uint32_t dilationY, armnn::DataLayout layout=armnn::DataLayout::NCHW, uint32_t padLeft=0, uint32_t padTop=0, uint32_t padRight=0, uint32_t padBottom=0, uint32_t strideX=1, uint32_t strideY=1, bool biasEnabled=false)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01010">Conv2dTestImpl.cpp:1010</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a4d3ce31fe572451e18fea5add8543bf4"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a4d3ce31fe572451e18fea5add8543bf4">SimpleConvolution2d3x3NhwcTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; SimpleConvolution2d3x3NhwcTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03332">Conv2dTestImpl.cpp:3332</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a8447673c34be8e6c5d7fcc54a852094b"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a8447673c34be8e6c5d7fcc54a852094b">DepthwiseConvolution2dDepthMul1TestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dDepthMul1TestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01765">Conv2dTestImpl.cpp:1765</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="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</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="_conv2d_test_impl_8cpp_xhtml_afbb87be327f0d9d7d0342ac2681d507c"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#afbb87be327f0d9d7d0342ac2681d507c">SimpleConvolution2d3x3NhwcTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleConvolution2d3x3NhwcTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, armnn::DataLayout dataLayout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00585">Conv2dTestImpl.cpp:585</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a01cb9a3fc27404adb04ff1a29a858bb4"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a01cb9a3fc27404adb04ff1a29a858bb4">DepthwiseConvolution2dTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01919">Conv2dTestImpl.cpp:1919</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="_conv2d_test_impl_8cpp_xhtml_a2a6493bf0e6583e7d0535f6d01323bfc"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a2a6493bf0e6583e7d0535f6d01323bfc">Convolution1dUint8Test</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; Convolution1dUint8Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03429">Conv2dTestImpl.cpp:3429</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a89cc06d59ab4531aed1df4fa027c4cf7"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a89cc06d59ab4531aed1df4fa027c4cf7">SimpleConvolution2dAsymmetricPaddingTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleConvolution2dAsymmetricPaddingTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::DataLayout layout, float qScale, int32_t qOffset)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00949">Conv2dTestImpl.cpp:949</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="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="_conv2d_test_impl_8cpp_xhtml_ab1b3e3dfbd3807989911b05b5830f7ea"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ab1b3e3dfbd3807989911b05b5830f7ea">Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03408">Conv2dTestImpl.cpp:3408</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::Convolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation along y axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00452">Descriptors.hpp:452</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_with_parameters_xhtml_aad91b9bbf7aa365d304febe79a3d1333"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor_with_parameters.xhtml#aad91b9bbf7aa365d304febe79a3d1333">armnn::QueueDescriptorWithParameters::m_Parameters</a></div><div class="ttdeci">LayerDescriptor m_Parameters</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00057">WorkloadData.hpp:57</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::DepthwiseConvolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation factor value for height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00504">Descriptors.hpp:504</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a3fe8b286943505e7508c64e138cbcf76"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a3fe8b286943505e7508c64e138cbcf76">DepthwiseConvolution2dAsymmetricTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dAsymmetricTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const boost::multi_array&lt; T, 4 &gt; &amp;input, const boost::multi_array&lt; T, 4 &gt; &amp;kernel, const boost::multi_array&lt; B, 1 &gt; &amp;bias, const boost::multi_array&lt; T, 4 &gt; &amp;outputExpected, float qScale, int32_t qOffset, const armnn::DataLayout layout, uint32_t padLeft=0, uint32_t padTop=0, uint32_t padRight=0, uint32_t padBottom=0, uint32_t strideX=1, uint32_t strideY=1)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01627">Conv2dTestImpl.cpp:1627</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_queue_descriptor_xhtml_a3369b66d9316a773a41711e3f590c041"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">armnn::DepthwiseConvolution2dQueueDescriptor::m_Weight</a></div><div class="ttdeci">const ConstCpuTensorHandle * m_Weight</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00215">WorkloadData.hpp:215</a></div></div>
<div class="ttc" id="_numeric_cast_8hpp_xhtml"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml">NumericCast.hpp</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a347ca1c8d1443563807e98e261a84954"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a347ca1c8d1443563807e98e261a84954">DepthwiseConvolution2dMult4Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dMult4Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02771">Conv2dTestImpl.cpp:2771</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a9c68d43c1ebbd68f34b7846046d814d3"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a9c68d43c1ebbd68f34b7846046d814d3">DepthwiseConvolution2dDepthMul64Test</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; DepthwiseConvolution2dDepthMul64Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03577">Conv2dTestImpl.cpp:3577</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_aebd160fb0c5f5662a1cbaec5974c13ea"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#aebd160fb0c5f5662a1cbaec5974c13ea">SimpleConvolution2d3x3QSymm16Test</a></div><div class="ttdeci">LayerTestResult&lt; int16_t, 4 &gt; SimpleConvolution2d3x3QSymm16Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03387">Conv2dTestImpl.cpp:3387</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="namespacearmnn_utils_xhtml_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00131">Permute.cpp:131</a></div></div>
<div class="ttc" id="_tensor_helpers_8hpp_xhtml"><div class="ttname"><a href="_tensor_helpers_8hpp.xhtml">TensorHelpers.hpp</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a99cacef4e22185078218877c62d27ac3"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a99cacef4e22185078218877c62d27ac3">DepthwiseConvolution2dAsymmetricTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dAsymmetricTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02297">Conv2dTestImpl.cpp:2297</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="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="_conv2d_test_impl_8cpp_xhtml_ae689ff7f2c5222b1ab4ee153e159cab7"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ae689ff7f2c5222b1ab4ee153e159cab7">DepthwiseConvolution2d3x3Dilation3x3Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2d3x3Dilation3x3Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02635">Conv2dTestImpl.cpp:2635</a></div></div>
<div class="ttc" id="_permute_8hpp_xhtml"><div class="ttname"><a href="_permute_8hpp.xhtml">Permute.hpp</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a0cbaad29854964598fdbd63d9506d31f"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a0cbaad29854964598fdbd63d9506d31f">DepthwiseConvolution2dDepthMul1Uint8Test</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; DepthwiseConvolution2dDepthMul1Uint8Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03633">Conv2dTestImpl.cpp:3633</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="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::DepthwiseConvolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation factor value for width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00502">Descriptors.hpp:502</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="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_a693b40e6b94e958836aeb0410ca186bd"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a></div><div class="ttdeci">std::shared_ptr&lt; IMemoryManager &gt; IMemoryManagerSharedPtr</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_backend_internal_8hpp_source.xhtml#l00092">IBackendInternal.hpp:92</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a770b51078da02f44a819e9f95d8058b5"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">armnn::TensorInfo::GetQuantizationOffset</a></div><div class="ttdeci">int32_t GetQuantizationOffset() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00469">Tensor.cpp:469</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a9fa295f89db31cb7e7dae62f39cdeb14"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a9fa295f89db31cb7e7dae62f39cdeb14">DepthwiseConvolution2d3x3DilationTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2d3x3DilationTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const std::vector&lt; float &gt; &amp;inputNoQuantizedValues, armnn::TensorInfo &amp;inputTensorInfo, const std::vector&lt; float &gt; &amp;kernelNoQuantizedValues, armnn::TensorInfo &amp;kernelTensorInfo, const std::vector&lt; float &gt; &amp;outputExpectedNoQuantizedValues, armnn::TensorInfo &amp;outputTensorInfo, uint32_t dilationX, uint32_t dilationY, armnn::DataLayout layout=armnn::DataLayout::NCHW, bool biasEnabled=false)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02544">Conv2dTestImpl.cpp:2544</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a047ca888c43bd7fb5702853bf72410d0"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">armnn::TensorInfo::GetQuantizationScale</a></div><div class="ttdeci">float GetQuantizationScale() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00452">Tensor.cpp:452</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="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_queue_descriptor_xhtml_a3369b66d9316a773a41711e3f590c041"><div class="ttname"><a href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a3369b66d9316a773a41711e3f590c041">armnn::Convolution2dQueueDescriptor::m_Weight</a></div><div class="ttdeci">const ConstCpuTensorHandle * m_Weight</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00200">WorkloadData.hpp:200</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_adb5b1d96ba9807887953dfd1a71ddb14"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#adb5b1d96ba9807887953dfd1a71ddb14">DepthwiseConvolution2d2x3x3Dilation3x3Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2d2x3x3Dilation3x3Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02693">Conv2dTestImpl.cpp:2693</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_ad80bc46727797692d35f94d5935469cb"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ad80bc46727797692d35f94d5935469cb">GetBias2</a></div><div class="ttdeci">boost::multi_array&lt; T, 1 &gt; GetBias2(bool biasEnabled, float qScale)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00073">Conv2dTestImpl.cpp:73</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_af541c93dcb094c01b52b99658704c500"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#af541c93dcb094c01b52b99658704c500">SimpleConvolution2d3x5Test</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; SimpleConvolution2d3x5Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03299">Conv2dTestImpl.cpp:3299</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a685739c4eb65a580e075282cfe6787d6"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a685739c4eb65a580e075282cfe6787d6">armnn::TensorInfo::SetQuantizationScale</a></div><div class="ttdeci">void SetQuantizationScale(float scale)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00464">Tensor.cpp:464</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="_tensor_copy_utils_8cpp_xhtml_afaaca8c3f3a467d124bba44067d2afa8"><div class="ttname"><a href="_tensor_copy_utils_8cpp.xhtml#afaaca8c3f3a467d124bba44067d2afa8">AllocateAndCopyDataToITensorHandle</a></div><div class="ttdeci">void AllocateAndCopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_copy_utils_8cpp_source.xhtml#l00019">TensorCopyUtils.cpp:19</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a7d8b3d755b6ca8f5533657969efb06c4"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a7d8b3d755b6ca8f5533657969efb06c4">armnnUtils::DataLayoutIndexed::GetDataLayout</a></div><div class="ttdeci">armnn::DataLayout GetDataLayout() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00022">DataLayoutIndexed.hpp:22</a></div></div>
<div class="ttc" id="_tensor_copy_utils_8cpp_xhtml_a99b626c58a926dc7d6df78d22ec186c8"><div class="ttname"><a href="_tensor_copy_utils_8cpp.xhtml#a99b626c58a926dc7d6df78d22ec186c8">CopyDataFromITensorHandle</a></div><div class="ttdeci">void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_copy_utils_8cpp_source.xhtml#l00014">TensorCopyUtils.cpp:14</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_aa794621b8665d1df93a1c9aa95d5a90d"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#aa794621b8665d1df93a1c9aa95d5a90d">GetBias4</a></div><div class="ttdeci">boost::multi_array&lt; T, 1 &gt; GetBias4(bool biasEnabled, float qScale)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00089">Conv2dTestImpl.cpp:89</a></div></div>
<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">armnn::DataType::BFloat16</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a65191a03dfa8bb05dafac2c627dcf8da"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a65191a03dfa8bb05dafac2c627dcf8da">CompareDepthwiseConvolution2dTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, armnn::IWorkloadFactory &amp;refWorkloadFactory, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::ITensorHandleFactory &amp;refTensorHandleFactory, const armnnUtils::DataLayoutIndexed &amp;layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02936">Conv2dTestImpl.cpp:2936</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a41cfd5f6819a68241342a0f2c8841d86"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a41cfd5f6819a68241342a0f2c8841d86">SimpleConvolution2dTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleConvolution2dTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const boost::multi_array&lt; T, 4 &gt; &amp;originalInput, const boost::multi_array&lt; T, 4 &gt; &amp;originalKernel, const boost::multi_array&lt; B, 1 &gt; &amp;bias, const boost::multi_array&lt; T, 4 &gt; &amp;originalOutputExpected, float qScale, int32_t qOffset, const armnn::DataLayout layout=armnn::DataLayout::NCHW, uint32_t padLeft=0, uint32_t padTop=0, uint32_t padRight=0, uint32_t padBottom=0, uint32_t strideX=1, uint32_t strideY=1, uint32_t dilationX=1, uint32_t dilationY=1)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00200">Conv2dTestImpl.cpp:200</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00212">Types.hpp:212</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="_conv2d_test_impl_8cpp_xhtml_aa1b649cd47b77a98921cc22eb6a451c8"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#aa1b649cd47b77a98921cc22eb6a451c8">DepthwiseConvolution2dDepthMul1Test</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; DepthwiseConvolution2dDepthMul1Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03566">Conv2dTestImpl.cpp:3566</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="_conv2d_test_impl_8cpp_xhtml_a9966f7b9070f4eb34deeb8fc3cb3d277"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a9966f7b9070f4eb34deeb8fc3cb3d277">SimpleConvolution2d3x3Uint8Test</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; SimpleConvolution2d3x3Uint8Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03365">Conv2dTestImpl.cpp:3365</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a0431327604bbd8051635e8ebd215e620"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a0431327604bbd8051635e8ebd215e620">Convolution2dAsymmetricPaddingTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; Convolution2dAsymmetricPaddingTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03398">Conv2dTestImpl.cpp:3398</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="_conv2d_test_impl_8cpp_xhtml_a56f561170b575bdb2c808d35155f88c5"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a56f561170b575bdb2c808d35155f88c5">SimpleConvolution2dNhwcTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; O, 4 &gt; SimpleConvolution2dNhwcTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const boost::multi_array&lt; T, 4 &gt; &amp;input, const boost::multi_array&lt; T, 4 &gt; &amp;kernel, const boost::multi_array&lt; B, 1 &gt; &amp;bias, const boost::multi_array&lt; O, 4 &gt; &amp;outputExpected, const armnn::DataLayout dataLayout, float qScale, int32_t qOffset, uint32_t padLeft=1, uint32_t padTop=1, uint32_t padRight=1, uint32_t padBottom=1, uint32_t strideX=1, uint32_t strideY=1)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00368">Conv2dTestImpl.cpp:368</a></div></div>
<div class="ttc" id="struct_layer_test_result_xhtml_ac9d44d346bb7c89f7a7aa31d2bee947f"><div class="ttname"><a href="struct_layer_test_result.xhtml#ac9d44d346bb7c89f7a7aa31d2bee947f">LayerTestResult::output</a></div><div class="ttdeci">boost::multi_array&lt; T, n &gt; output</div><div class="ttdef"><b>Definition:</b> <a href="_layer_test_result_8hpp_source.xhtml#l00041">LayerTestResult.hpp:41</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="_conv2d_test_impl_8cpp_xhtml_a1c22cdfa99117a1cdbc4b25064fd4c25"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a1c22cdfa99117a1cdbc4b25064fd4c25">SimpleConvolution2d3x3Test</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; SimpleConvolution2d3x3Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03321">Conv2dTestImpl.cpp:3321</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a0192d5e1143e77fb9c07f43cac008aa5"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a0192d5e1143e77fb9c07f43cac008aa5">Convolution2d3x3Dilation3x3Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; Convolution2d3x3Dilation3x3Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01101">Conv2dTestImpl.cpp:1101</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::Convolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation along x axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00450">Descriptors.hpp:450</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_ae04bff4e44deed6908feae29e57ffe0c"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ae04bff4e44deed6908feae29e57ffe0c">GetBias8</a></div><div class="ttdeci">boost::multi_array&lt; T, 1 &gt; GetBias8(bool biasEnabled, float qScale)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00105">Conv2dTestImpl.cpp:105</a></div></div>
<div class="ttc" id="classarmnn_1_1_scoped_cpu_tensor_handle_xhtml"><div class="ttname"><a href="classarmnn_1_1_scoped_cpu_tensor_handle.xhtml">armnn::ScopedCpuTensorHandle</a></div><div class="ttdef"><b>Definition:</b> <a href="_cpu_tensor_handle_8hpp_source.xhtml#l00106">CpuTensorHandle.hpp:106</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a7fde274ea5d168e2941e90ff6475262b"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a7fde274ea5d168e2941e90ff6475262b">Convolution1dTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; Convolution1dTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03419">Conv2dTestImpl.cpp:3419</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a7cd1a185c5b6d578584d353ec976b1d6"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a7cd1a185c5b6d578584d353ec976b1d6">SimpleConvolution2d3x5TestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleConvolution2d3x5TestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00710">Conv2dTestImpl.cpp:710</a></div></div>
<div class="ttc" id="_tensor_utils_8hpp_xhtml"><div class="ttname"><a href="_tensor_utils_8hpp.xhtml">TensorUtils.hpp</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="_conv2d_test_impl_8cpp_xhtml_aeb6f20ff65cd6c5fa68a70a2f3d27788"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#aeb6f20ff65cd6c5fa68a70a2f3d27788">DepthwiseConvolution2dPerAxisQuantTest</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; DepthwiseConvolution2dPerAxisQuantTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03680">Conv2dTestImpl.cpp:3680</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a3481304dfd3e941b809c64979b940ad5"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a3481304dfd3e941b809c64979b940ad5">GetBias</a></div><div class="ttdeci">boost::multi_array&lt; T, 1 &gt; GetBias(bool biasEnabled, float qScale, armnn::TensorInfo outputInfo, armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00121">Conv2dTestImpl.cpp:121</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_factory_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle_factory.xhtml">armnn::ITensorHandleFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_tensor_handle_factory_8hpp_source.xhtml#l00041">ITensorHandleFactory.hpp:41</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a3bb67e016661ad8eb0e6dec4bb3994f7"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a3bb67e016661ad8eb0e6dec4bb3994f7">DepthwiseConvolution2dNhwcTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; DepthwiseConvolution2dNhwcTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02383">Conv2dTestImpl.cpp:2383</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a4805ba0c9778e2cb91b9f4a76019852b"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a4805ba0c9778e2cb91b9f4a76019852b">Convolution1dTestImpl</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; Convolution1dTestImpl(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00462">Conv2dTestImpl.cpp:462</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a1879a2d6ebde509005aef609d663f664"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a1879a2d6ebde509005aef609d663f664">DepthwiseConvolution2dDepthMul1Int16Test</a></div><div class="ttdeci">LayerTestResult&lt; int16_t, 4 &gt; DepthwiseConvolution2dDepthMul1Int16Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03669">Conv2dTestImpl.cpp:3669</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_utils_xhtml"><div class="ttname"><a href="namespacearmnn_utils.xhtml">armnnUtils</a></div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00013">DataLayoutIndexed.hpp:13</a></div></div>
<div class="ttc" id="namespacearmnn_utils_xhtml_acee63cd08da47910fc166a1990988fa8"><div class="ttname"><a href="namespacearmnn_utils.xhtml#acee63cd08da47910fc166a1990988fa8">armnnUtils::GetTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo GetTensorInfo(unsigned int numberOfBatches, unsigned int numberOfChannels, unsigned int height, unsigned int width, const armnn::DataLayout dataLayout, const armnn::DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00038">TensorUtils.cpp:38</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_abdbec483f1020dc684741b37e04d2175"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#abdbec483f1020dc684741b37e04d2175">DepthwiseConvolution2dAsymmetricTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; DepthwiseConvolution2dAsymmetricTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03611">Conv2dTestImpl.cpp:3611</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="_conv2d_test_impl_8cpp_xhtml_ae9488183b3dc79abe459aaea83524d0a"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ae9488183b3dc79abe459aaea83524d0a">DepthwiseConvolution2dDepthNhwcTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; DepthwiseConvolution2dDepthNhwcTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03556">Conv2dTestImpl.cpp:3556</a></div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a></div><div class="ttdoc">Contains information about inputs and outputs to a layer. </div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00016">WorkloadInfo.hpp:16</a></div></div>
<div class="ttc" id="struct_layer_test_result_xhtml"><div class="ttname"><a href="struct_layer_test_result.xhtml">LayerTestResult</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_test_result_8hpp_source.xhtml#l00030">LayerTestResult.hpp:30</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a91334b97ca9cf0a8e006653cd9b7ff16"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a91334b97ca9cf0a8e006653cd9b7ff16">CompareDepthwiseConvolution2dFloatTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; CompareDepthwiseConvolution2dFloatTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, armnn::IWorkloadFactory &amp;refWorkloadFactory, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::ITensorHandleFactory &amp;refTensorHandleFactory, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03789">Conv2dTestImpl.cpp:3789</a></div></div>
<div class="ttc" id="namespacearmnn_utils_xhtml_a5135dc1ce7a8aeb97623c1a92c5a3543"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a5135dc1ce7a8aeb97623c1a92c5a3543">armnnUtils::SelectiveDequantize</a></div><div class="ttdeci">float SelectiveDequantize(T value, float scale, int32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="_quantize_helper_8hpp_source.xhtml#l00091">QuantizeHelper.hpp:91</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_af089eef6b8fd167fe95899a3af69aa32"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#af089eef6b8fd167fe95899a3af69aa32">SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03644">Conv2dTestImpl.cpp:3644</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="_conv2d_test_impl_8cpp_xhtml_a3db9032b7a4530846a78babe58a1b2dd"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a3db9032b7a4530846a78babe58a1b2dd">Convolution2dPerAxisQuantTest</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; Convolution2dPerAxisQuantTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03439">Conv2dTestImpl.cpp:3439</a></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="_conv2d_test_impl_8cpp_xhtml_a450ab121f9d99c26cfa82084b743ea6f"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a450ab121f9d99c26cfa82084b743ea6f">CompareConvolution2dTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; CompareConvolution2dTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, armnn::IWorkloadFactory &amp;refWorkloadFactory, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::ITensorHandleFactory &amp;refTensorHandleFactory)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03534">Conv2dTestImpl.cpp:3534</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_ac51fc577b6324ce88e6d202a5f9be78f"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ac51fc577b6324ce88e6d202a5f9be78f">SimpleConvolution2d3x3TestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleConvolution2d3x3TestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l00799">Conv2dTestImpl.cpp:799</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_workload_factory_xhtml_accb9759dfd2880efe0f8d2705ddee448"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml#accb9759dfd2880efe0f8d2705ddee448">armnn::IWorkloadFactory::CreateDepthwiseConvolution2d</a></div><div class="ttdeci">virtual std::unique_ptr&lt; IWorkload &gt; CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor &amp;descriptor, const WorkloadInfo &amp;info) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8cpp_source.xhtml#l01386">WorkloadFactory.cpp:1386</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a0eed8fa496da4f8825e1d43e84ad3a92"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a0eed8fa496da4f8825e1d43e84ad3a92">SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTestCommon</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTestCommon(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, float qScale, int32_t qOffset, bool biasEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l02466">Conv2dTestImpl.cpp:2466</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a1599b84e270875cb9b008c23cba9229f"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a1599b84e270875cb9b008c23cba9229f">DepthwiseConvolution2dInt16Test</a></div><div class="ttdeci">LayerTestResult&lt; int16_t, 4 &gt; DepthwiseConvolution2dInt16Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03658">Conv2dTestImpl.cpp:3658</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a861b2621ee46e4b63379988b360b8cd9"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">armnnUtils::DataLayoutIndexed::GetChannelsIndex</a></div><div class="ttdeci">unsigned int GetChannelsIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00023">DataLayoutIndexed.hpp:23</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a5d8371b1081cd00d8271524f6cd512f1"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a5d8371b1081cd00d8271524f6cd512f1">CompareDepthwiseConvolution2dUint8Test</a></div><div class="ttdeci">LayerTestResult&lt; uint8_t, 4 &gt; CompareDepthwiseConvolution2dUint8Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, armnn::IWorkloadFactory &amp;refWorkloadFactory, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, const armnn::ITensorHandleFactory &amp;refTensorHandleFactory, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03801">Conv2dTestImpl.cpp:3801</a></div></div>
<div class="ttc" id="_data_layout_utils_8hpp_xhtml"><div class="ttname"><a href="_data_layout_utils_8hpp.xhtml">DataLayoutUtils.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_factory_xhtml_a375f11dd42ff042435e8771cf287b20c"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle_factory.xhtml#a375f11dd42ff042435e8771cf287b20c">armnn::ITensorHandleFactory::CreateTensorHandle</a></div><div class="ttdeci">virtual std::unique_ptr&lt; ITensorHandle &gt; CreateTensorHandle(const TensorInfo &amp;tensorInfo) const =0</div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a9ed9dc40170e362160eb6e6e7edda209"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a9ed9dc40170e362160eb6e6e7edda209">DepthwiseConvolution2dTest</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; DepthwiseConvolution2dTest(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03545">Conv2dTestImpl.cpp:3545</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="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_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="_conv2d_test_impl_8cpp_xhtml_ad232d77972b88a751dbf6ecd594b0faa"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#ad232d77972b88a751dbf6ecd594b0faa">SimpleConvolution2d3x3Stride2x2Test</a></div><div class="ttdeci">LayerTestResult&lt; float, 4 &gt; SimpleConvolution2d3x3Stride2x2Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l03348">Conv2dTestImpl.cpp:3348</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_workload_factory_xhtml_a2184995027cd2c9f9980206de9658855"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml#a2184995027cd2c9f9980206de9658855">armnn::IWorkloadFactory::CreateConvolution2d</a></div><div class="ttdeci">virtual std::unique_ptr&lt; IWorkload &gt; CreateConvolution2d(const Convolution2dQueueDescriptor &amp;descriptor, const WorkloadInfo &amp;info) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8cpp_source.xhtml#l01368">WorkloadFactory.cpp:1368</a></div></div>
<div class="ttc" id="_tensor_copy_utils_8cpp_xhtml_ae15f1a3c55d2db87683577de9fa4437c"><div class="ttname"><a href="_tensor_copy_utils_8cpp.xhtml#ae15f1a3c55d2db87683577de9fa4437c">CopyDataToITensorHandle</a></div><div class="ttdeci">void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_copy_utils_8cpp_source.xhtml#l00009">TensorCopyUtils.cpp:9</a></div></div>
<div class="ttc" id="_conv2d_test_impl_8cpp_xhtml_a130df3a88eb9a5bf1aaec61642a702d0"><div class="ttname"><a href="_conv2d_test_impl_8cpp.xhtml#a130df3a88eb9a5bf1aaec61642a702d0">Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test</a></div><div class="ttdeci">LayerTestResult&lt; T, 4 &gt; Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test(armnn::IWorkloadFactory &amp;workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &amp;memoryManager, const armnn::ITensorHandleFactory &amp;tensorHandleFactory, bool biasEnabled, const armnn::DataLayout layout)</div><div class="ttdef"><b>Definition:</b> <a href="_conv2d_test_impl_8cpp_source.xhtml#l01232">Conv2dTestImpl.cpp:1232</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="_data_layout_utils_8hpp_xhtml_a1452f049aef30409b3b649af2be7ff82"><div class="ttname"><a href="_data_layout_utils_8hpp.xhtml#a1452f049aef30409b3b649af2be7ff82">PermuteTensorNhwcToNchw</a></div><div class="ttdeci">void PermuteTensorNhwcToNchw(armnn::TensorInfo &amp;tensorInfo, std::vector&lt; T &gt; &amp;tensorData)</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_utils_8hpp_source.xhtml#l00026">DataLayoutUtils.hpp:26</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_0f3cdec46afbc61a1ded8e1687c9c9a0.xhtml">backends</a></li><li class="navelem"><a class="el" href="dir_797a213d7d01b98ef12d53b0820ea64e.xhtml">backendsCommon</a></li><li class="navelem"><a class="el" href="dir_28bfe507f7e135bdae07c2a6b7f66696.xhtml">test</a></li><li class="navelem"><a class="el" href="dir_99a30439342d160875b21dac3498ad7f.xhtml">layerTests</a></li><li class="navelem"><a class="el" href="_conv2d_test_impl_8cpp.xhtml">Conv2dTestImpl.cpp</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:27:51 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>