aboutsummaryrefslogtreecommitdiff
path: root/21.02/_workload_data_8cpp_source.xhtml
blob: 9eaea889092699ee939e01266daee8b4122af34f (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
<!-- 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/WorkloadData.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('_workload_data_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">WorkloadData.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_workload_data_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. 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 &lt;<a class="code" href="_workload_data_8hpp.xhtml">backendsCommon/WorkloadData.hpp</a>&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</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="l00008"></a><span class="lineno">    8</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="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;<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="l00011"></a><span class="lineno">   11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;fmt/format.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_utils.xhtml">armnnUtils</a>;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;{</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">   25</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputDataType)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordflow">switch</span> (inputDataType)</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    {</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;        <span class="keywordflow">case</span> DataType::Float16:</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;            <span class="keywordflow">return</span> DataType::Float16;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>:</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        <span class="keywordflow">case</span> DataType::Float32:</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;            <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        <span class="keywordflow">case</span> DataType::QAsymmS8:</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;            <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <span class="keywordflow">case</span> DataType::QAsymmU8:</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;            <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        <span class="keywordflow">case</span> DataType::QSymmS8:</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;            <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;        <span class="keywordflow">case</span> DataType::QSymmS16:</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;            <span class="keywordflow">return</span> DataType::Signed32;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;            <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Invalid input data type&quot;</span>);</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;            <span class="keywordflow">return</span> DataType::Float32;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    }</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keyword">namespace</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;{</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">//android ndk does not support std::to_string function.</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;std::string to_string(T value)</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    std::ostringstream os;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    os &lt;&lt; value;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">return</span> os.str();</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;}</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keywordtype">void</span> ValidatePointer(<span class="keyword">const</span> <span class="keywordtype">void</span>* ptr, std::string <span class="keyword">const</span>&amp; descName, std::string <span class="keyword">const</span>&amp; paramName)</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;    <span class="keywordflow">if</span> (!ptr)</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    {</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName +  <span class="stringliteral">&quot;: Invalid null pointer. The &quot;</span> +</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;                                      paramName + <span class="stringliteral">&quot; parameter must be set.&quot;</span>);</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    }</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;}</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">//---------------------------------------------------------------</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keywordtype">void</span> ValidateTensorShapesMatch(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; first,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;                               <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; second,</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;                               std::string <span class="keyword">const</span>&amp; descName,</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                               std::string <span class="keyword">const</span>&amp; firstName,</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;                               std::string <span class="keyword">const</span>&amp; secondName)</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;{</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="keywordflow">if</span> (first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>() != second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>())</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;                                       + firstName + <span class="stringliteral">&quot; &amp; &quot;</span> + secondName + <span class="stringliteral">&quot; must have identical shapes&quot;</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;}</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;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="keywordtype">void</span> ValidateNumInputs(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo, std::string <span class="keyword">const</span>&amp; descName, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> expectedSize)</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != expectedSize)</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    {</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName +</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                                       <span class="stringliteral">&quot;: Requires exactly &quot;</span> + to_string(expectedSize) + <span class="stringliteral">&quot;input(s). &quot;</span> +</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                                       to_string(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size()) + <span class="stringliteral">&quot; have been provided.&quot;</span>);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    }</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;}</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keywordtype">void</span> ValidateNumOutputs(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo, std::string <span class="keyword">const</span>&amp; descName, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> expectedSize)</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">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() != expectedSize)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName +</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;                                       <span class="stringliteral">&quot;: Requires exactly &quot;</span> + to_string(expectedSize) + <span class="stringliteral">&quot; output(s). &quot;</span> +</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;                                       to_string(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size()) + <span class="stringliteral">&quot; has been provided.&quot;</span>);</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    }</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;}</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="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keywordtype">void</span> ValidateTensorNumDimensions(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensor,</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;                                 std::string <span class="keyword">const</span>&amp; descName,</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimensions,</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;                                 std::string <span class="keyword">const</span>&amp; tensorName)</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">if</span> (tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() != numDimensions)</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">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: Expected &quot;</span> + to_string(numDimensions) + <span class="stringliteral">&quot; but got &quot;</span> +</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;            to_string(tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()) + <span class="stringliteral">&quot; dimensions for &quot;</span> +</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;            tensorName + <span class="stringliteral">&quot; tensor.&quot;</span>);</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;}</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="keywordtype">void</span> ValidateTensorNumElements(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensor,</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;                               std::string <span class="keyword">const</span>&amp; descName,</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;                               <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements,</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                               std::string <span class="keyword">const</span>&amp; tensorName)</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">if</span> (tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() != numElements)</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">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: Expected &quot;</span> + to_string(numElements) + <span class="stringliteral">&quot; but got &quot;</span> +</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;                                       to_string(tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>()) + <span class="stringliteral">&quot; elements for &quot;</span> +</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;                                       tensorName + <span class="stringliteral">&quot; tensor.&quot;</span>);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    }</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;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="keywordtype">void</span> ValidateTensorNumDimNumElem(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimension,</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements,</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;                                 std::string <span class="keyword">const</span>&amp; tensorName)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keyword">const</span> std::string functionName{<span class="stringliteral">&quot;ValidateTensorNumDimNumElem&quot;</span>};</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    ValidateTensorNumDimensions(tensorInfo, functionName, numDimension, tensorName);</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    ValidateTensorNumElements(tensorInfo, functionName, numElements, tensorName);</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;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="keywordtype">void</span> ValidateTensorDataType(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensor, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType,</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="keyword">const</span> std::string&amp; descName, std::string <span class="keyword">const</span>&amp; tensorName)</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;{</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">if</span> (tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != dataType)</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    {</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: Expected data type &quot;</span> + <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(dataType) + <span class="stringliteral">&quot; but got &quot;</span> +</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()) + <span class="stringliteral">&quot; for &quot;</span> + tensorName + <span class="stringliteral">&quot; tensor.&quot;</span>);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    }</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;}</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="keywordtype">void</span> ValidPerAxisQuantizedDataType(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensor, <span class="keyword">const</span> std::string&amp; descName, <span class="keyword">const</span> std::string&amp; tensorName)</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;    <a class="code" href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="keywordflow">if</span> (tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != DataType::QSymmS8 &amp;&amp;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != DataType::QuantizedSymm8PerAxis)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName +</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;            <span class="stringliteral">&quot;: Expected data type which supports per-axis quantization scheme but got &quot;</span> +</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(tensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()) + <span class="stringliteral">&quot; for &quot;</span> + tensorName + <span class="stringliteral">&quot; tensor.&quot;</span>);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    <a class="code" href="_deprecated_8hpp.xhtml#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;}</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="keywordtype">void</span> ValidateTensorQuantizationSpace(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; first,</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                                     <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; second,</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;                                     <span class="keyword">const</span> std::string&amp; descName,</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;                                     std::string <span class="keyword">const</span>&amp; firstName,</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;                                     std::string <span class="keyword">const</span>&amp; secondName)</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;{</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">if</span> (!first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a7c00efeb540198b33b8558c76e5cc2dd">IsQuantized</a>() ||</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        !second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a7c00efeb540198b33b8558c76e5cc2dd">IsQuantized</a>())</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    {</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        <span class="comment">// Not a quantized type, ignore the validation</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    }</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;    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> firstDataType  = first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> secondDataType = second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keywordflow">if</span> (firstDataType != secondDataType)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    {</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span> + firstName + <span class="stringliteral">&quot; and &quot;</span> + secondName +</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;                                       <span class="stringliteral">&quot; must be of the same quantized type, &quot;</span> +</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;                                       firstName + <span class="stringliteral">&quot; is &quot;</span> + <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(firstDataType) + <span class="stringliteral">&quot;, &quot;</span> +</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;                                       secondName + <span class="stringliteral">&quot; is &quot;</span> + <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(secondDataType));</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;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keywordflow">if</span> (!first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a22f377fc4e10dc1773a3f979061e85f1">IsTypeSpaceMatch</a>(second))</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    {</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span> + firstName + <span class="stringliteral">&quot; and &quot;</span> + secondName +</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                                       <span class="stringliteral">&quot; must have the same quantization space, &quot;</span> +</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;                                       firstName + <span class="stringliteral">&quot; has offset &quot;</span> + to_string(first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()) +</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;                                       <span class="stringliteral">&quot; and scale &quot;</span> + to_string(first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>()) + <span class="stringliteral">&quot;, &quot;</span> +</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;                                       secondName + <span class="stringliteral">&quot; has offset &quot;</span> + to_string(second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()) +</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;                                       <span class="stringliteral">&quot; and scale &quot;</span> + to_string(second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>()));</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    }</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;}</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="keywordtype">void</span> ValidateBiasTensorQuantization(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; biasTensor,</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;                                    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo,</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;                                    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightsTensorInfo,</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;                                    <span class="keyword">const</span> std::string&amp; descName)</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;{</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    <span class="comment">// Helper lambda function to validate a single bias quantization scale value</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="keyword">auto</span> VerifyBiasQuantizationScale = [&amp;descName](<span class="keywordtype">float</span> biasScale, <span class="keywordtype">float</span> expectedScale) -&gt; <span class="keywordtype">void</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    {</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        constexpr <span class="keywordtype">float</span> tolerance = 0.000001f;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="keywordflow">if</span> (std::abs(biasScale - expectedScale) &gt; tolerance)</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        {</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;            <span class="comment">// Print the float values with extra precision to see very small differences</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;            std::stringstream msg;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;            msg &lt;&lt; std::setprecision(10) &lt;&lt; descName &lt;&lt; <span class="stringliteral">&quot;: Expected &quot;</span> &lt;&lt; expectedScale &lt;&lt;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                <span class="stringliteral">&quot; quantization scale for bias tensor (the product of the input and weight scales), but got &quot;</span> &lt;&lt;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;                biasScale;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(msg.str(), <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        }</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;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <span class="keywordflow">if</span> (biasTensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>() != 0)</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    {</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: Expected zero quantization offset for bias tensor but got &quot;</span> +</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;            to_string(biasTensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()));</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    }</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordflow">if</span> (biasTensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#af672d1c9e2a120a18926cb645981fbb7">HasMultipleQuantizationScales</a>() || weightsTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#af672d1c9e2a120a18926cb645981fbb7">HasMultipleQuantizationScales</a>())</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    {</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="comment">// Validate per-axis quantization scales</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <span class="keyword">const</span> std::vector&lt;float&gt;&amp; weightScales = weightsTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8bc11f1fa23ef42532f9fdd04d355270">GetQuantizationScales</a>();</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        <span class="keyword">const</span> std::vector&lt;float&gt;&amp; biasScales   = biasTensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8bc11f1fa23ef42532f9fdd04d355270">GetQuantizationScales</a>();</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <span class="keywordflow">if</span> (weightScales.size() != biasScales.size())</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        {</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;            std::stringstream msg;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;            msg &lt;&lt; descName &lt;&lt; <span class="stringliteral">&quot;: Expected matching number of per-axis quantization scales for weights and bias, &quot;</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;                &lt;&lt; <span class="stringliteral">&quot;but got different values. This is currently unsupported: weights=&quot;</span> &lt;&lt; weightScales.size()</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;                &lt;&lt; <span class="stringliteral">&quot;, biases=&quot;</span> &lt;&lt; biasScales.size();</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(msg.str(), <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        }</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0ul; i &lt; biasScales.size(); ++i)</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        {</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">float</span> expectedScale = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>() * weightScales[i];</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;            VerifyBiasQuantizationScale(biasScales[i], expectedScale);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        }</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    }</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    {</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        <span class="comment">// Validate per-tensor quantization scale</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">float</span> expectedScale = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>() * weightsTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>();</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        VerifyBiasQuantizationScale(biasTensor.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(), expectedScale);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    }</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;}</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="keywordtype">void</span> ValidateTensors(<span class="keyword">const</span> std::vector&lt;ITensorHandle*&gt;&amp; vec,</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numExpected,</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keyword">const</span> std::string&amp; descName,</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keyword">const</span> std::string&amp; varName)</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;    <span class="keywordflow">if</span> (vec.empty() &amp;&amp; numExpected &gt; 0)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: Invalid empty &quot;</span> + varName + <span class="stringliteral">&quot; array.&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numExpected; ++i)</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    {</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <span class="keywordflow">if</span> (!vec[i])</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: Invalid NULL for &quot;</span> + varName + to_string(i));</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        }</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    }</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;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;<span class="keywordtype">void</span> ValidateBroadcastTensorShapesMatch(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; first,</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;                                        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; second,</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;                                        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; output,</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;                                        std::string <span class="keyword">const</span>&amp; descName,</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;                                        std::string <span class="keyword">const</span>&amp; firstName,</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;                                        std::string <span class="keyword">const</span>&amp; secondName)</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;{</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="comment">// Tensors must have the same number of dimensions in order to be explicit about which dimensions will get</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    <span class="comment">// broadcasted.</span></div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keywordflow">if</span> (first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() != second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName  + <span class="stringliteral">&quot;: Tensors &quot;</span></div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;            + firstName + <span class="stringliteral">&quot; &amp; &quot;</span> + secondName</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;            + <span class="stringliteral">&quot; must have the same number of dimensions in order to be broadcasted&quot;</span>);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    }</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    uint32_t numDims = first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    std::vector&lt;uint32_t&gt; outputDims(numDims, 0u);</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numDims; i++)</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="keyword">const</span> <span class="keywordtype">bool</span> dimsNotEqual = first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i] != second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i];</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> dimsNotOne = (first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i] != 1) &amp;&amp; (second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i] != 1);</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        <span class="keywordflow">if</span> (dimsNotEqual &amp;&amp; dimsNotOne)</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;        {</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;Broadcasting is not possible for incompatible shapes&quot;</span>);</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        }</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        outputDims[i] = std::max(first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i], second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]);</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;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> broadcastShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(armnn::numeric_cast&lt;unsigned int&gt;(outputDims.size()), outputDims.data());</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keywordflow">if</span> (broadcastShape != output.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>())</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    {</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: The tensor shape resulting from adding &quot;</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;                                       + firstName + <span class="stringliteral">&quot; &amp; &quot;</span> + secondName</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;                                       + <span class="stringliteral">&quot; does not match the output shape&quot;</span>);</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    }</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;}</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;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="keywordtype">void</span> ValidateDataTypes(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>,</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;                       <span class="keyword">const</span> std::vector&lt;armnn::DataType&gt;&amp; supportedTypes,</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;                       std::string <span class="keyword">const</span>&amp; descName)</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;{</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="keyword">auto</span> iterator = std::find(supportedTypes.begin(), supportedTypes.end(), info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>());</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">if</span> (iterator == supportedTypes.end())</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName  + <span class="stringliteral">&quot;: &quot;</span> + <span class="stringliteral">&quot; Tensor type is not supported.&quot;</span>);</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;}</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="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<span class="keywordtype">void</span> ValidateTensorDataTypesMatch(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; first,</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;                                  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; second,</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;                                  std::string <span class="keyword">const</span>&amp; descName,</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;                                  std::string <span class="keyword">const</span>&amp; firstName,</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;                                  std::string <span class="keyword">const</span>&amp; secondName)</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;{</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="keywordflow">if</span> (first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>())</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    {</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span> + firstName + <span class="stringliteral">&quot; &amp; &quot;</span> + secondName +</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;                                       <span class="stringliteral">&quot; must have identical data types.&quot;</span>);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    }</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;}</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="keywordtype">void</span> ValidateTensorNumElementsMatch(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; first,</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;                                    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; second,</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;                                    std::string <span class="keyword">const</span>&amp; descName,</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                                    std::string <span class="keyword">const</span>&amp; firstName,</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;                                    std::string <span class="keyword">const</span>&amp; secondName)</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;    <span class="keywordflow">if</span> (first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() != second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>())</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    {</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span> + firstName + <span class="stringliteral">&quot; &amp; &quot;</span> + secondName +</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;                                       <span class="stringliteral">&quot; must have the same number of elements.&quot;</span>);</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    }</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;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="keywordtype">void</span> ValidateWeightDataType(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputInfo,</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightInfo,</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;                            <span class="keyword">const</span> std::string&amp; descName)</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;{</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputType = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a>(inputType))</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    {</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        <a class="code" href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="keyword">const</span> std::vector&lt;DataType&gt; validTypes =</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;        {</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;            DataType::QAsymmS8,</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;            DataType::QAsymmU8,</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;            DataType::QSymmS8,</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;            DataType::QuantizedSymm8PerAxis <span class="comment">// deprecated</span></div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        };</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;        <a class="code" href="_deprecated_8hpp.xhtml#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        ValidateDataTypes(weightInfo, validTypes, descName);</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    }</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    {</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        ValidateTensorDataTypesMatch(inputInfo, weightInfo, descName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    }</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;}</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="keywordtype">void</span> ValidatePerAxisQuantizationDimension(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                                          <span class="keyword">const</span> std::string&amp; descName,</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                                          <span class="keyword">const</span> std::string&amp; tensorName)</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;{</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;unsigned int&gt;</a>&amp; quantizationDim = tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b8fc85ce966c035d789cf22db5088a1">GetQuantizationDim</a>();</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="keywordflow">if</span> (!quantizationDim.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>())</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    {</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;{0}: Quantization dimension for per-axis quantization &quot;</span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;                                                   <span class="stringliteral">&quot;not set on tensor {1}.&quot;</span>, descName, tensorName));</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    }</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <span class="keywordflow">if</span> (quantizationDim.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>() != 0)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;            <span class="stringliteral">&quot;{0}: Quantization dimension for per-axis quantization expected to be 0 on tensor {1}, &quot;</span></div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;            <span class="stringliteral">&quot;but got: {2}&quot;</span>, descName, tensorName, quantizationDim.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>()));</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    }</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;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;<span class="keywordtype">void</span> ValidatePerAxisQuantizationOffset(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                                       <span class="keyword">const</span> std::string&amp; descName,</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                                       <span class="keyword">const</span> std::string&amp; tensorName)</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    int32_t quantizationOffset = tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>();</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    <span class="keywordflow">if</span> (quantizationOffset != 0)</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    {</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;            <span class="stringliteral">&quot;{0}: Quantization offset for per-axis quantization expected to be 0 on tensor {1}, but got: {2}&quot;</span>,</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;            descName, tensorName, quantizationOffset));</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    }</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;}</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="keywordtype">void</span> ValidatePerAxisQuantization(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputInfo,</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;                                 <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputInfo,</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                                 <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightInfo,</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                                 <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;TensorInfo&gt;</a>&amp; optionalBiasInfo,</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;                                 <span class="keyword">const</span> std::string&amp; descName)</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;{</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    <span class="keywordflow">if</span> (weightInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#ab85cd8cc10c96a7c99c14042c251fc48">HasPerAxisQuantization</a>())</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    {</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> inputDataType  = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> outputDataType = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> canHavePerAxisQuantization = (<a class="code" href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">IsQuantized8BitType</a>(inputDataType)) &amp;&amp; inputDataType == outputDataType;</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;        <span class="keywordflow">if</span> (!canHavePerAxisQuantization)</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;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;                <span class="stringliteral">&quot;{0}: Per-axis quantization parameters set on tensor {1}, but data type does not support &quot;</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;                <span class="stringliteral">&quot;per-axis quantization.&quot;</span>, descName, <span class="stringliteral">&quot;weight&quot;</span>));</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        }</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        ValidPerAxisQuantizedDataType(weightInfo, descName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        ValidatePerAxisQuantizationDimension(weightInfo, descName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;        ValidatePerAxisQuantizationOffset(weightInfo, descName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        <span class="keywordflow">if</span> (optionalBiasInfo.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>())</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        {</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; biasInfo = optionalBiasInfo.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>();</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;            <span class="keywordflow">if</span> (!biasInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#ab85cd8cc10c96a7c99c14042c251fc48">HasPerAxisQuantization</a>())</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;            {</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                        <span class="stringliteral">&quot;{}: Per-axis quantization parameters not set on bias tensor, &quot;</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                        <span class="stringliteral">&quot;despite being set on weight tensor.&quot;</span>, descName));</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;            }</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;            ValidateTensorDataType(biasInfo, DataType::Signed32, descName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;            ValidatePerAxisQuantizationDimension(biasInfo, descName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;            ValidatePerAxisQuantizationOffset(biasInfo, descName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        }</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;}</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="comment">// anonymous namespace</span></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"><a class="line" href="structarmnn_1_1_queue_descriptor.xhtml#a765d2cee4ccce5b9467e0c2b6d25b84a">  460</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a765d2cee4ccce5b9467e0c2b6d25b84a">QueueDescriptor::ValidateInputsOutputs</a>(<span class="keyword">const</span> std::string&amp; descName,</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numExpectedIn, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numExpectedOut)<span class="keyword"> const</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    ValidateTensors(<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>, numExpectedIn, descName, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    ValidateTensors(<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>, numExpectedOut, descName, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="structarmnn_1_1_map_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  468</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_map_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MapQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;MapQueueDescriptor&quot;</span>};</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 0);</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size(); ++i)</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    {</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>[i])</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        {</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;                fmt::format(<span class="stringliteral">&quot;{}: Invalid NULL input {}.&quot;</span>, descriptorName, static_cast&lt;int&gt;(i)));</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;        }</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    }</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;}</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;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="structarmnn_1_1_unmap_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  486</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_unmap_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">UnmapQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;UnmapQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 0);</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;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size(); ++i)</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    {</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>[i])</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        {</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                fmt::format(<span class="stringliteral">&quot;{}: Invalid NULL input {}.&quot;</span>, descriptorName, static_cast&lt;int&gt;(i)));</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        }</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    }</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;}</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;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  504</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MemCopyQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;MemCopyQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName , 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    ValidateTensorNumElementsMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size() != <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size())</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;            <span class="stringliteral">&quot;{0}: Number of inputs ({1}) does not match the number of outputs ({2}).&quot;</span>,</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;            descriptorName, <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size(), <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size()));</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    }</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size(); ++i)</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    {</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>[i])</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;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;                <span class="stringliteral">&quot;{0}: Invalid NULL input {1}.&quot;</span>, descriptorName, i));</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        }</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>[i])</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;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;{0}: Invalid NULL output {1}&quot;</span>, descriptorName, i));</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;        }</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;}</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="structarmnn_1_1_mem_import_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  540</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_mem_import_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MemImportQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    ValidateNumInputs(workloadInfo, <span class="stringliteral">&quot;MemImportQueueDescriptor&quot;</span>, 1);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    ValidateNumOutputs(workloadInfo, <span class="stringliteral">&quot;MemImportQueueDescriptor&quot;</span> , 1);</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;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != 1)</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    {</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Number of input infos ({}) is not 1.&quot;</span>,</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;                                                   workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size()));</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    }</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size())</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    {</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;            <span class="stringliteral">&quot;Number of input infos ({0}) does not match the number of output infos ({1})&quot;</span>,</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;            workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(), workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size()));</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    }</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    <span class="keywordflow">for</span> (std::size_t i = 0; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    {</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;        <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i].GetNumElements() !=</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;            workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[i].GetNumElements())</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        {</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;                <span class="stringliteral">&quot;Number of elements for tensor input and output {} does not match&quot;</span>, i ));</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;        }</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    }</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;    <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size() != 1)</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    {</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Number of inputs ({}) is not 1.&quot;</span>, <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size()));</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;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size() != <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size())</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    {</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;            <span class="stringliteral">&quot;Number of inputs ({0}) does not match the number of outputs ({1})&quot;</span>,</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;            <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size(), <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size()));</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    }</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size(); ++i)</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;        <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>[i])</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        {</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Invalid null input {}&quot;</span>, i));</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        }</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>[i])</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        {</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Invalid null output {}&quot;</span>, i));</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;        }</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    }</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;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;<span class="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00596"></a><span class="lineno"><a class="line" href="structarmnn_1_1_mem_sync_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  596</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_mem_sync_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MemSyncQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    ValidateNumInputs(workloadInfo, <span class="stringliteral">&quot;MemSyncQueueDescriptor&quot;</span>, 1);</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    ValidateNumOutputs(workloadInfo, <span class="stringliteral">&quot;MemSyncQueueDescriptor&quot;</span> , 1);</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size() != 1)</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    {</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Number of inputs ({}) is not 1.&quot;</span>, <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size()));</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="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size() != 0)</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    {</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Number of outputs ({}) is not 0.&quot;</span>, <a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size()));</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    }</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>[0])</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Invalid null input 0&quot;</span>));</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    }</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;}</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="comment">//---------------------------------------------------------------</span></div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="structarmnn_1_1_activation_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  618</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_activation_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ActivationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ActivationQueueDescriptor&quot;</span>};</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    {</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;}</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="structarmnn_1_1_arg_min_max_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  643</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_arg_min_max_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ArgMinMaxQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ArgMinMaxQueueDescriptor&quot;</span>};</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a> &amp;&amp;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">DataType::Signed64</a>)</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    {</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output of ArgMinMax layer must be Int32 or Int64.&quot;</span>);</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    }</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    std::vector&lt;DataType&gt; supportedInputTypes =</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;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">DataType::Signed64</a></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;    ValidateDataTypes(inputTensorInfo, supportedInputTypes, descriptorName);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    <span class="keyword">auto</span> inputShape = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    <span class="keyword">auto</span> outputShape = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</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;    <span class="keyword">auto</span> inputNumDimensions = inputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    <span class="keyword">auto</span> unsignedAxis = <a class="code" href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a>(inputNumDimensions, m_Parameters.m_Axis);</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    <span class="keyword">const</span> std::string outputShapeError{<span class="stringliteral">&quot;: Output tensor shape does not match shape inferred from input tensor.&quot;</span>};</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;    <span class="comment">// 1D input shape results in scalar output shape</span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keywordflow">if</span> (inputShape.GetNumDimensions() == 1)</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    {</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;        <span class="keywordflow">if</span> (outputShape.GetNumDimensions() != 1 &amp;&amp; outputShape[0] != 1)</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;        {</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + outputShapeError);</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        }</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    }</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    {</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; unsignedAxis; ++i)</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;        {</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;            <span class="keywordflow">if</span> (outputShape[i] != inputShape[i])</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;            {</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + outputShapeError);</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;            }</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;        }</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = unsignedAxis + 1; i &lt; inputNumDimensions; ++i)</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;        {</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;            <span class="keywordflow">if</span> (outputShape[i - 1] != inputShape[i])</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;            {</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + outputShapeError);</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;            }</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        }</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    }</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"><a class="line" href="structarmnn_1_1_softmax_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  709</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_softmax_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SoftmaxQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;SoftmaxQueueDescriptor&quot;</span>};</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    {</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    };</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;</div><div class="line"><a name="l00734"></a><span class="lineno"><a class="line" href="structarmnn_1_1_splitter_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  734</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_splitter_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SplitterQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;SplitterQueueDescriptor&quot;</span>};</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    ValidateNumInputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    {</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>,</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i = 0ul; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size(); ++i)</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    {</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[i];</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        <span class="keyword">const</span> std::string outputName = <span class="stringliteral">&quot;output_&quot;</span> + std::to_string(i);</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;        ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, outputName);</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    }</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() &lt;= 0)</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    {</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: At least one output needs to be provided.&quot;</span>);</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    }</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() != m_ViewOrigins.size())</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    {</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;            descriptorName + <span class="stringliteral">&quot;: Number of split windows &quot;</span></div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;            <span class="stringliteral">&quot;has to match number of workloadInfo.m_OutputTensorInfos. &quot;</span></div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;            <span class="stringliteral">&quot;Number of windows: &quot;</span> +</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;            to_string(m_ViewOrigins.size()) +</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;            <span class="stringliteral">&quot;. Number of workloadInfo.m_OutputTensorInfos: &quot;</span> + to_string(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size()));</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;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="comment">//The dimensionality of all the windows has to match the dimensionality (not shape) of the input.</span></div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    std::size_t inputDims = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetNumDimensions();</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; m_ViewOrigins.size(); ++w )</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;        <span class="comment">//Checks that the dimensionality of input is same as the split windows.</span></div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;        <a class="code" href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml">ViewOrigin</a> <span class="keyword">const</span>&amp; e = m_ViewOrigins[w];</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        <span class="keywordflow">if</span> (e.<a class="code" href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>.size() != inputDims)</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        {</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Window origin have to &quot;</span></div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                                           <span class="stringliteral">&quot;have the same dimensionality as the input tensor. &quot;</span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;                                           <span class="stringliteral">&quot;Window origin (index: &quot;</span> +</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;                                           to_string(w) + <span class="stringliteral">&quot;) has &quot;</span> + to_string(e.<a class="code" href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>.size()) +</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;                                           <span class="stringliteral">&quot; dimensions, the input &quot;</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;                                           <span class="stringliteral">&quot;tensor has &quot;</span> +</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;                                           to_string(inputDims) + <span class="stringliteral">&quot; dimensions.&quot;</span>);</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;        }</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; e.<a class="code" href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>.size(); ++i)</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;        {</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;            <span class="keywordflow">if</span> (e.<a class="code" href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>[i] + workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[w].GetShape()[i] &gt;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;                workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[i])</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;            {</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Window extent coordinates have to &quot;</span></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;                                               <span class="stringliteral">&quot;be smaller or equal than the size of the input in that coord.&quot;</span>);</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;            }</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;        }</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    }</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;}</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno"><a class="line" href="structarmnn_1_1_concat_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  806</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_concat_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ConcatQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ConcatQueueDescriptor&quot;</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;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.size() &lt;= 0)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: At least one input needs to be provided.&quot;</span>);</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    }</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.size() &lt;= 0)</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    {</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: At least one output needs to be provided.&quot;</span>);</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    }</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() &lt;= 0)</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    {</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: At least one TensorInfo input needs to be provided.&quot;</span>);</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    }</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() &lt;= 0)</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    {</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: At least one TensorInfo output needs to be provided.&quot;</span>);</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    }</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;    <span class="keywordflow">if</span>(m_Parameters.GetConcatAxis() &gt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape().GetNumDimensions())</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;    {</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Invalid concatenation axis provided.&quot;</span>);</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    }</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape().GetNumDimensions() - m_Parameters.GetConcatAxis() == 1)</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    {</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;        <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != m_ViewOrigins.size())</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    {</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;            descriptorName + <span class="stringliteral">&quot;: Number of split windows &quot;</span></div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;            <span class="stringliteral">&quot;has to match number of workloadInfo.m_InputTensorInfos. &quot;</span></div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;            <span class="stringliteral">&quot;Number of windows: &quot;</span> +</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;            to_string(m_ViewOrigins.size()) +</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;            <span class="stringliteral">&quot;. Number of workloadInfo.m_InputTensorInfos: &quot;</span> + to_string(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size()));</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;    }</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    <span class="comment">//The dimensionality of all the windows has to match the dimensionality (not shape) of the output.</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    std::size_t outputDims = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0].GetNumDimensions();</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w = 0; w &lt; m_ViewOrigins.size(); ++w )</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    {</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;        <span class="comment">//Checks that the dimensionality of output is same as the split windows.</span></div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;        <a class="code" href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml">ViewOrigin</a> <span class="keyword">const</span>&amp; e = m_ViewOrigins[w];</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;        <span class="keywordflow">if</span> (e.<a class="code" href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>.size() != outputDims)</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;        {</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Window origin have to &quot;</span></div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;                                           <span class="stringliteral">&quot;have the same dimensionality as the output tensor. &quot;</span></div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;                                           <span class="stringliteral">&quot;Window origin (index: &quot;</span> +</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;                                           to_string(w) + <span class="stringliteral">&quot;) has &quot;</span> + to_string(e.<a class="code" href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>.size()) +</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;                                           <span class="stringliteral">&quot; dimensions, the output &quot;</span></div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;                                           <span class="stringliteral">&quot;tensor has &quot;</span> +</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;                                           to_string(outputDims) + <span class="stringliteral">&quot; dimensions.&quot;</span>);</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;        }</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;        <span class="comment">//Checks that the merge windows are within the output tensor.</span></div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; e.<a class="code" href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>.size(); ++i)</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;        {</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;            <span class="keywordflow">if</span> (e.<a class="code" href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">m_Origin</a>[i] + workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[w].GetShape()[i]</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                &gt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0].GetShape()[i])</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;            {</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Window extent coordinates have to &quot;</span></div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;                                               <span class="stringliteral">&quot;be smaller or equal than the size of the output in that coord.&quot;</span>);</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;            }</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;        }</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="comment">// Check the supported data types</span></div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;    {</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>,</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    };</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i = 0ul; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    {</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i];</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;        ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;        <span class="keyword">const</span> std::string inputName = <span class="stringliteral">&quot;input_&quot;</span> + std::to_string(i);</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;        ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, inputName, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    }</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;}</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="structarmnn_1_1_stack_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  902</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_stack_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">StackQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;StackQueueDescriptor&quot;</span>};</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_NumInputs != workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size())</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    {</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Must have the defined number of input tensors.&quot;</span>);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    }</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    <span class="comment">// All inputs must have the same shape, which is defined in parameters</span></div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = m_Parameters.m_InputShape;</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    {</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;        <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i].GetShape() != inputShape)</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;        {</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: All input tensor shapes must match the defined shape.&quot;</span>);</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;        }</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    }</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    <span class="keywordflow">if</span> (inputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; 4)</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    {</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor may have up to 4 dimensions.&quot;</span>);</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    }</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;    <span class="comment">// m_Axis is 0-based and may take values from 0 to the number of input dimensions (inclusive),</span></div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;    <span class="comment">// since the output tensor has an additional dimension.</span></div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_Axis &gt; inputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    {</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Axis may not be greater &quot;</span></div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;                                       <span class="stringliteral">&quot;than the number of input dimensions.&quot;</span>);</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    }</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    <span class="comment">// Output shape must be as inferred from the input shape</span></div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; outputShape = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0].GetShape();</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; m_Parameters.m_Axis; ++i)</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    {</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;        <span class="keywordflow">if</span> (outputShape[i] != inputShape[i])</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;        {</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor must &quot;</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;                                           <span class="stringliteral">&quot;match shape inferred from input tensor.&quot;</span>);</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;        }</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="keywordflow">if</span> (outputShape[m_Parameters.m_Axis] != m_Parameters.m_NumInputs)</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    {</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor must &quot;</span></div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;                                       <span class="stringliteral">&quot;match shape inferred from input tensor.&quot;</span>);</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;    }</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = m_Parameters.m_Axis + 1; i &lt; inputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() + 1; ++i)</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;    {</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;        <span class="keywordflow">if</span> (outputShape[i] != inputShape[i-1])</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor must &quot;</span></div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;                                           <span class="stringliteral">&quot;match shape inferred from input tensor.&quot;</span>);</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;        }</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;    }</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    <span class="keywordflow">if</span> (outputShape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; 5)</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    {</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor may have up to 5 dimensions.&quot;</span>);</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    }</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;    {</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>,</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    ValidateDataTypes(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], supportedTypes, descriptorName);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1ul; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    {</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;        ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;                                     workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i],</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;                                     descriptorName,</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;                                     <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;                                     <span class="stringliteral">&quot;input_&quot;</span> + std::to_string(i));</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;</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;    ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;                                 workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0],</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;                                 descriptorName,</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;                                 <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;                                 <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;}</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;</div><div class="line"><a name="l00998"></a><span class="lineno"><a class="line" href="structarmnn_1_1_fill_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">  998</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_fill_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">FillQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;FillQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateTensorNumDimensions(inputTensorInfo, descriptorName, 1, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    };</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;}</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div><div class="line"><a name="l01021"></a><span class="lineno"><a class="line" href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1021</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">FullyConnectedQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;FullyConnectedQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 2, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;    <span class="keywordflow">if</span> (!(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 2 || inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 4))</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    {</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor must have 2 or 4 dimensions.&quot;</span>);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    }</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    ValidatePointer(m_Weight, descriptorName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightTensorInfo = m_Weight-&gt;GetTensorInfo();</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    ValidateTensorNumDimensions(weightTensorInfo, descriptorName, 2, <span class="stringliteral">&quot;weight&quot;</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">if</span> (m_Parameters.m_BiasEnabled)</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;        ValidatePointer(m_Bias, descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;        <span class="comment">// Validates type and quantization values.</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; biasTensorInfo = m_Bias-&gt;GetTensorInfo();</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;        ValidateBiasTensorQuantization(biasTensorInfo, inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;        ValidateTensorDataType(biasTensorInfo, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()), descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;        ValidateTensorNumDimensions(biasTensorInfo, descriptorName, 1, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;    }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</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;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    <span class="comment">// For FullyConnected, we allow to have BFloat16 input with Float32 output for optimization.</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() == <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>)</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    {</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &amp;&amp; outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        {</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName  + <span class="stringliteral">&quot;: &quot;</span> + <span class="stringliteral">&quot; Output tensor type must be BFloat16 or Float32 &quot;</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;                                           <span class="stringliteral">&quot;for BFloat16 input.&quot;</span>);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;        }</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    }</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    <span class="keywordflow">else</span></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;        ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;}</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;</div><div class="line"><a name="l01083"></a><span class="lineno"><a class="line" href="structarmnn_1_1_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1083</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">NormalizationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;NormalizationQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    {</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    };</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;}</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"><a class="line" href="structarmnn_1_1_addition_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1111</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_addition_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">AdditionQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;AdditionQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    {</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    };</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo0, inputTensorInfo1, descriptorName, <span class="stringliteral">&quot;input_0&quot;</span>, <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo1, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input_1&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;                                       descriptorName,</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;}</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;</div><div class="line"><a name="l01148"></a><span class="lineno"><a class="line" href="structarmnn_1_1_multiplication_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1148</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_multiplication_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MultiplicationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;MultiplicationQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;    {</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></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;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo0, inputTensorInfo1, descriptorName, <span class="stringliteral">&quot;input_0&quot;</span>, <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo1, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input_1&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;                                       descriptorName,</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;}</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01185"></a><span class="lineno"><a class="line" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1185</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">BatchNormalizationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;BatchNormalizationQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;    ValidatePointer(m_Mean,     descriptorName, <span class="stringliteral">&quot;mean&quot;</span>);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;    ValidatePointer(m_Variance, descriptorName, <span class="stringliteral">&quot;variance&quot;</span>);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    ValidatePointer(m_Beta,     descriptorName, <span class="stringliteral">&quot;beta&quot;</span>);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;    ValidatePointer(m_Gamma,    descriptorName, <span class="stringliteral">&quot;gamma&quot;</span>);</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; mean     = m_Mean-&gt;GetTensorInfo();</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; variance = m_Variance-&gt;GetTensorInfo();</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; beta     = m_Beta-&gt;GetTensorInfo();</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; gamma    = m_Gamma-&gt;GetTensorInfo();</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    ValidateTensorNumDimensions(mean,     descriptorName, 1, <span class="stringliteral">&quot;mean&quot;</span>);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    ValidateTensorNumDimensions(variance, descriptorName, 1, <span class="stringliteral">&quot;variance&quot;</span>);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;    ValidateTensorNumDimensions(beta,     descriptorName, 1, <span class="stringliteral">&quot;beta&quot;</span>);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    ValidateTensorNumDimensions(gamma,    descriptorName, 1, <span class="stringliteral">&quot;gamma&quot;</span>);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    ValidateTensorShapesMatch(mean, variance, descriptorName, <span class="stringliteral">&quot;mean&quot;</span>, <span class="stringliteral">&quot;variance&quot;</span>);</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    ValidateTensorShapesMatch(mean, beta,     descriptorName, <span class="stringliteral">&quot;mean&quot;</span>, <span class="stringliteral">&quot;beta&quot;</span>);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;    ValidateTensorShapesMatch(mean, gamma,    descriptorName, <span class="stringliteral">&quot;mean&quot;</span>, <span class="stringliteral">&quot;gamma&quot;</span>);</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"><a class="line" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1231</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">Convolution2dQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;Convolution2dQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;    ValidatePointer(m_Weight, descriptorName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightTensorInfo = m_Weight-&gt;GetTensorInfo();</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;    ValidateTensorNumDimensions(weightTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;    ValidateWeightDataType(inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;TensorInfo&gt;</a> optionalBiasTensorInfo;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_BiasEnabled)</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;        ValidatePointer(m_Bias, descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;        optionalBiasTensorInfo = MakeOptional&lt;TensorInfo&gt;(m_Bias-&gt;GetTensorInfo());</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; biasTensorInfo = optionalBiasTensorInfo.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>();</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;        ValidateTensorDataType(biasTensorInfo, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()), descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;        ValidateBiasTensorQuantization(biasTensorInfo, inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    }</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_StrideX &lt;= 0 || m_Parameters.m_StrideY &lt;= 0  )</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;    {</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;            fmt::format(<span class="stringliteral">&quot;{}: strideX (provided {}) and strideY (provided {}) &quot;</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;                        <span class="stringliteral">&quot;cannot be either negative or 0.&quot;</span>,</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;                        descriptorName, m_Parameters.m_StrideX, m_Parameters.m_StrideY));</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;    }</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    ValidatePerAxisQuantization(inputTensorInfo,</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;                                outputTensorInfo,</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;                                weightTensorInfo,</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;                                optionalBiasTensorInfo,</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;                                descriptorName);</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;    {</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a></div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;    };</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;    <span class="comment">// For Convolution2d, we allow to have BFloat16 input with Float32 output for optimization.</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() == <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>)</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;    {</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;        <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a> &amp;&amp; outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;        {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName  + <span class="stringliteral">&quot;: &quot;</span> + <span class="stringliteral">&quot; Output tensor type must be BFloat16 or Float32 &quot;</span></div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;                                           <span class="stringliteral">&quot;for BFloat16 input.&quot;</span>);</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;    <span class="keywordflow">else</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;    {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;        ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;    }</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;}</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;</div><div class="line"><a name="l01305"></a><span class="lineno"><a class="line" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1305</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">DepthwiseConvolution2dQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;DepthwiseConvolution2dQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;    ValidatePointer(m_Weight, descriptorName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightTensorInfo = m_Weight-&gt;GetTensorInfo();</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;    ValidateTensorNumDimensions(weightTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_DilationX &lt; 1 || m_Parameters.m_DilationY &lt; 1 )</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    {</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;            fmt::format(<span class="stringliteral">&quot;{}: dilationX (provided {}) and dilationY (provided {}) &quot;</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;                        <span class="stringliteral">&quot;cannot be smaller than 1.&quot;</span>,</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;                        descriptorName, m_Parameters.m_DilationX, m_Parameters.m_DilationX));</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    }</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="keywordflow">if</span> (m_Parameters.m_StrideX &lt;= 0 || m_Parameters.m_StrideY &lt;= 0  )</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    {</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;            fmt::format(<span class="stringliteral">&quot;{}: strideX (provided {}) and strideY (provided {}) &quot;</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;                        <span class="stringliteral">&quot;cannot be either negative or 0.&quot;</span>,</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;                        descriptorName, m_Parameters.m_StrideX, m_Parameters.m_StrideY));</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    }</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelIndex = (m_Parameters.m_DataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0a6b99f356fe3b30a2a850b5ea897c289f">DataLayout::NCHW</a>) ? 1 : 3;</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;    <span class="comment">// Expected weight shape: [ M, I, H, W ] - This shape does NOT depend on the data layout</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;    <span class="comment">// inputChannels * channelMultiplier should be equal to outputChannels.</span></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numWeightChannelMultiplier = weightTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numWeightInputChannels     = weightTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1];</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numWeightOutputChannels    = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[channelIndex];</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    <span class="keywordflow">if</span> (numWeightChannelMultiplier * numWeightInputChannels != numWeightOutputChannels)</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;            <span class="stringliteral">&quot;{0}: output_channels (provided {1}) should be equal to input_channels (provided {2}) &quot;</span></div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;            <span class="stringliteral">&quot;multiplied by channel_multiplier (provided {3}).&quot;</span>,</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;            descriptorName, numWeightOutputChannels, numWeightInputChannels, numWeightChannelMultiplier));</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;    }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;    ValidateWeightDataType(inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;TensorInfo&gt;</a> optionalBiasTensorInfo;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_BiasEnabled)</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;    {</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;        ValidatePointer(m_Bias, descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;        optionalBiasTensorInfo = MakeOptional&lt;TensorInfo&gt;(m_Bias-&gt;GetTensorInfo());</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; biasTensorInfo = optionalBiasTensorInfo.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>();</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;        ValidateBiasTensorQuantization(biasTensorInfo, inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;        ValidateTensorDataType(biasTensorInfo, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()), descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    }</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    ValidatePerAxisQuantization(inputTensorInfo,</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;                                outputTensorInfo,</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;                                weightTensorInfo,</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;                                optionalBiasTensorInfo,</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;                                descriptorName);</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;    {</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;    };</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;}</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"><a class="line" href="structarmnn_1_1_permute_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1387</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_permute_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">PermuteQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;PermuteQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a>&amp; mapping = m_Parameters.m_DimMappings;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, mapping.<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>(), <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, mapping.<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>(), <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; mapping.<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>(); ++i)</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;    {</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;        <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i] != outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[mapping[i]])</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;        {</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: src dimension &quot;</span> + to_string(i) +</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;                                           <span class="stringliteral">&quot; (=&quot;</span> + to_string(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]) + <span class="stringliteral">&quot;) &quot;</span> +</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;                                           <span class="stringliteral">&quot;must match dst dimension &quot;</span> + to_string(mapping[i]) +</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;                                           <span class="stringliteral">&quot; (=&quot;</span> + to_string(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[mapping[i]]) + <span class="stringliteral">&quot;)&quot;</span>);</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;    }</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;}</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"><a class="line" href="structarmnn_1_1_pooling2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1416</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_pooling2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">Pooling2dQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;Pooling2dQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;    {</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;    };</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</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;</div><div class="line"><a name="l01443"></a><span class="lineno"><a class="line" href="structarmnn_1_1_resize_bilinear_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1443</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_resize_bilinear_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ResizeBilinearQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ResizeBilinearQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;    {</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;    <span class="comment">// ResizeBilinear only changes width and height: batch and channel count must match.</span></div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;    <span class="keywordflow">if</span> (inputBatchSize != outputBatchSize)</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;    {</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;            fmt::format(<span class="stringliteral">&quot;{}: Input batch size ({}) does not match output batch size ({})&quot;</span>,</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;                        descriptorName, inputBatchSize, outputBatchSize));</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;    }</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dimensionIndices(m_Parameters.m_DataLayout);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannelCount  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannelCount = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;    <span class="keywordflow">if</span> (inputChannelCount != outputChannelCount)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;            fmt::format(<span class="stringliteral">&quot;{}: Input channel count ({}) does not match output channel count ({})&quot;</span>,</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;                        descriptorName, inputChannelCount, outputChannelCount));</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;    }</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;}</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"><a class="line" href="structarmnn_1_1_resize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1490</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_resize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ResizeQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ResizeQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;    {</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;    };</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;    <span class="comment">// Resize only changes width and height: batch and channel count must match.</span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputBatchSize  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputBatchSize = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    <span class="keywordflow">if</span> (inputBatchSize != outputBatchSize)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;                fmt::format(<span class="stringliteral">&quot;{}: Input batch size ({}) does not match output batch size ({})&quot;</span>,</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;                            descriptorName, inputBatchSize, outputBatchSize));</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;    }</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;    <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dimensionIndices(m_Parameters.m_DataLayout);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputChannelCount  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputChannelCount = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    <span class="keywordflow">if</span> (inputChannelCount != outputChannelCount)</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    {</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;                fmt::format(<span class="stringliteral">&quot;{}: Input channel count ({}) does not match output channel count ({})&quot;</span>,</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;                            descriptorName, inputChannelCount, outputChannelCount));</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;    }</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;}</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;</div><div class="line"><a name="l01537"></a><span class="lineno"><a class="line" href="structarmnn_1_1_fake_quantization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1537</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_fake_quantization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">FakeQuantizationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;FakeQuantizationQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 2, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 2, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo,  descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</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;    <span class="keywordflow">if</span> (m_Parameters.m_Min &gt; m_Parameters.m_Max)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: min cannot be greater than max&quot;</span>);</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;    }</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;}</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;</div><div class="line"><a name="l01558"></a><span class="lineno"><a class="line" href="structarmnn_1_1_instance_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1558</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_instance_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">InstanceNormalizationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;InstanceNormalizationQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; 4)</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;    {</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensors with rank greater than 4 are not supported.&quot;</span>);</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    }</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;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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">// Check the supported data types</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</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;            <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;            <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;            <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;        };</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;}</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;</div><div class="line"><a name="l01587"></a><span class="lineno"><a class="line" href="structarmnn_1_1_l2_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1587</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_l2_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">L2NormalizationQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;L2NormalizationQueueDescriptor&quot;</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; 4)</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;    {</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensors with rank greater than 4 are not supported.&quot;</span>);</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;</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;    {</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;    };</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;}</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;</div><div class="line"><a name="l01619"></a><span class="lineno"><a class="line" href="structarmnn_1_1_log_softmax_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1619</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_log_softmax_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">LogSoftmaxQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;LogSoftmaxQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;    {</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;    };</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;}</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;</div><div class="line"><a name="l01642"></a><span class="lineno"><a class="line" href="structarmnn_1_1_constant_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1642</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_constant_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ConstantQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ConstantQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 0);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;    <span class="keywordflow">if</span> (!m_LayerOutput)</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;    {</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: No const input specified.&quot;</span>);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;    }</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;    ValidateTensorShapesMatch(m_LayerOutput-&gt;GetTensorInfo(), outputTensorInfo, descriptorName, <span class="stringliteral">&quot;constant&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;    {</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a>,</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;    };</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;}</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"><a class="line" href="structarmnn_1_1_reshape_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1673</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_reshape_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ReshapeQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ReshapeQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateTensorNumElementsMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;    <span class="comment">// Check the supported data types</span></div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;    {</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;}</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;</div><div class="line"><a name="l01702"></a><span class="lineno"><a class="line" href="structarmnn_1_1_space_to_batch_nd_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1702</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_space_to_batch_nd_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SpaceToBatchNdQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;SpaceToBatchNdQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</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;    <span class="keywordflow">if</span> (m_Parameters.m_BlockShape.size() != 2)</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;    {</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Block Shape must contain 2 spatial dimensions.&quot;</span>);</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;    <span class="keywordflow">if</span> (m_Parameters.m_BlockShape.size() != m_Parameters.m_PadList.size())</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Pad List must contain the same number of &quot;</span></div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;                                       <span class="stringliteral">&quot;dimensions as Block Shape.&quot;</span>);</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;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;    std::pair&lt;unsigned int, unsigned int&gt; heightPad = m_Parameters.m_PadList[0];</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;    std::pair&lt;unsigned int, unsigned int&gt; widthPad  = m_Parameters.m_PadList[1];</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;    <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dimensionIndices(m_Parameters.m_DataLayout);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputShape[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>()] +</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;                                     widthPad.first + widthPad.second;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputShape[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>()] +</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;                                     heightPad.first + heightPad.second;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputElements  = inputShape[0] * inputHeight * inputWidth *</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;                                           inputShape[dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>()];</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputElements = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>();</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;    <span class="keywordflow">if</span> (numOutputElements != numInputElements)</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;    {</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor has &quot;</span> +</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;            to_string(numInputElements) + <span class="stringliteral">&quot; after padding but output tensor has &quot;</span> +</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;            to_string(numOutputElements) + <span class="stringliteral">&quot; elements.&quot;</span>);</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;    }</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    <span class="keywordflow">if</span> (inputHeight % m_Parameters.m_BlockShape[0] != 0 || inputWidth % m_Parameters.m_BlockShape[1] != 0)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input shape after padding must be &quot;</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;                                       <span class="stringliteral">&quot;divisible by Block Shape in all spatial dimensions&quot;</span>);</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;    }</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;    std::vector&lt;DataType&gt; supportedTypes =</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;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;}</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;</div><div class="line"><a name="l01769"></a><span class="lineno"><a class="line" href="structarmnn_1_1_space_to_depth_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1769</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_space_to_depth_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SpaceToDepthQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;SpaceToDepthQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;    {</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;    ValidateTensorNumElementsMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_BlockSize == 0)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Block size cannot be 0.&quot;</span>);</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;    }</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;    <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dimensionIndices(m_Parameters.m_DataLayout);</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> wIndex = dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>();</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hIndex = dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>();</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cIndex = dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>();</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;    <span class="keywordflow">if</span> (inputShape[hIndex] % m_Parameters.m_BlockSize != 0 || inputShape[wIndex]  % m_Parameters.m_BlockSize != 0)</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;    {</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input shape must be divisible &quot;</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;                                       <span class="stringliteral">&quot;by block size in all spatial dimensions&quot;</span>);</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;    }</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; outputShape = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;    <span class="keywordflow">if</span> (outputShape[cIndex] % (m_Parameters.m_BlockSize * m_Parameters.m_BlockSize) != 0)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: The depth of the output tensor&quot;</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;                                       <span class="stringliteral">&quot;must be divisible by the square of block size.&quot;</span> );</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;    }</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;</div><div class="line"><a name="l01822"></a><span class="lineno"><a class="line" href="structarmnn_1_1_floor_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1822</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_floor_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">FloorQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;FloorQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    std::vector&lt;DataType&gt; supportedTypes =</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;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo != outputTensorInfo)</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    {</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input and output tensor infos do not match.&quot;</span>);</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;}</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;</div><div class="line"><a name="l01848"></a><span class="lineno"><a class="line" href="structarmnn_1_1_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 1848</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">LstmQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;    <span class="comment">// ported from android/ml/nn/common/operations/LSTM.cpp CheckInputTensorDimensions()</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;LstmQueueDescriptor&quot;</span>};</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;    <span class="comment">// check dimensions of all inputs and outputs</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size() != 3)</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;    {</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Invalid number of inputs.&quot;</span>);</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;    }</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() != 4)</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;    {</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Invalid number of outputs.&quot;</span>);</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;    }</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;    {</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    };</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;    <span class="comment">// check for supported type of one input and match them with all the other input and output</span></div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;    ValidateDataTypes(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], supportedTypes, descriptorName);</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;    <span class="comment">// type matches all other inputs</span></div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 1u; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.size(); ++i)</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;        ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;                                     workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[i],</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;                                     descriptorName,</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;                                     <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;                                     <span class="stringliteral">&quot;input_&quot;</span> + std::to_string(i));</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;    }</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    <span class="comment">// type matches all other outputs</span></div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0u; i &lt; workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size(); ++i)</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;    {</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;        ValidateTensorDataTypesMatch(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0],</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;                                     workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[i],</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;                                     <span class="stringliteral">&quot;LstmQueueDescriptor&quot;</span>,</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;                                     <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;                                     <span class="stringliteral">&quot;output_&quot;</span> + std::to_string(i));</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;    }</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;    <span class="comment">// Making sure clipping parameters have valid values.</span></div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;    <span class="comment">// == 0 means no clipping</span></div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;    <span class="comment">//  &gt; 0 means clipping</span></div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_ClippingThresCell &lt; 0.0f)</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    {</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: negative cell clipping threshold is invalid&quot;</span>);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    }</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_ClippingThresProj &lt; 0.0f)</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;    {</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: negative projection clipping threshold is invalid&quot;</span>);</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;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;    <span class="comment">// Inferring batch size, number of outputs and number of cells from the inputs.</span></div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;    <span class="keyword">const</span> uint32_t n_input = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[1];</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;    <span class="keyword">const</span> uint32_t n_batch = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0].GetShape()[0];</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;    ValidatePointer(m_InputToOutputWeights, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;InputToOutputWeights&quot;</span>);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;    <span class="keyword">const</span> uint32_t n_cell = m_InputToOutputWeights-&gt;GetShape()[0];</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;    ValidatePointer(m_RecurrentToOutputWeights, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;RecurrentToOutputWeights&quot;</span>);</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;    <span class="keyword">const</span> uint32_t n_output = m_RecurrentToOutputWeights-&gt;GetShape()[1];</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="comment">// input tensor</span></div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0], 2, (n_batch * n_input),</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;                                descriptorName + <span class="stringliteral">&quot; input_0&quot;</span>);</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;    <span class="comment">// outputStateInTensor</span></div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1], 2, (n_batch * n_output),</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;                                descriptorName + <span class="stringliteral">&quot; input_1&quot;</span>);</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    <span class="comment">// outputStateInTensor</span></div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[2], 2, (n_batch * n_cell),</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;                                descriptorName + <span class="stringliteral">&quot; input_2&quot;</span>);</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;    <span class="comment">// scratchBufferTensor</span></div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> scratchBufferSize = m_Parameters.m_CifgEnabled ? n_cell * 3 : n_cell * 4;</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0], 2, (n_batch * scratchBufferSize),</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;                                descriptorName + <span class="stringliteral">&quot; output_0&quot;</span>);</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;    <span class="comment">// outputStateOutTensor</span></div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1], 2, (n_batch * n_output),</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;                                descriptorName + <span class="stringliteral">&quot; output_1&quot;</span>);</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;    <span class="comment">// cellStateOutTensor</span></div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[2], 2, (n_batch * n_cell),</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;                                descriptorName + <span class="stringliteral">&quot; output_2&quot;</span>);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;    <span class="comment">// outputTensor</span></div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;    ValidateTensorNumDimNumElem(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[3], 2, (n_batch * n_output),</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;                                descriptorName + <span class="stringliteral">&quot; output_3&quot;</span>);</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;    <span class="comment">// check that dimensions of inputs/outputs and QueueDescriptor data match with each other</span></div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;    <span class="keywordflow">if</span> ( m_InputToInputWeights )</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;    {</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;        ValidateTensorNumDimNumElem(m_InputToInputWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;                                      (n_cell * n_input), <span class="stringliteral">&quot;InputLayerNormWeights&quot;</span>);</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;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;    ValidatePointer(m_InputToForgetWeights, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;InputToForgetWeights&quot;</span>);</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;    ValidateTensorNumDimNumElem(m_InputToForgetWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;                                  (n_cell * n_input), <span class="stringliteral">&quot;InputToForgetWeights&quot;</span>);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;    ValidatePointer(m_InputToCellWeights, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;InputToCellWeights&quot;</span>);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;    ValidateTensorNumDimNumElem(m_InputToCellWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;                                  (n_cell * n_input), <span class="stringliteral">&quot;InputToCellWeights&quot;</span>);</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;    <span class="keywordflow">if</span> ( m_RecurrentToInputWeights )</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;        ValidateTensorNumDimNumElem(m_RecurrentToInputWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;                                      (n_cell * n_output), <span class="stringliteral">&quot;RecurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;    }</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;    ValidatePointer(m_RecurrentToForgetWeights, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;RecurrentToForgetWeights&quot;</span>);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;    ValidateTensorNumDimNumElem(m_RecurrentToForgetWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;                                  (n_cell * n_output), <span class="stringliteral">&quot;RecurrentToForgetWeights&quot;</span>);</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    ValidatePointer(m_RecurrentToCellWeights, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;    ValidateTensorNumDimNumElem(m_RecurrentToCellWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;                                  (n_cell * n_output), <span class="stringliteral">&quot;RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;    <span class="comment">// Make sure the input-gate&#39;s parameters are either both present (regular</span></div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;    <span class="comment">// LSTM) or not at all (CIFG-LSTM). And CifgEnable is set accordingly.</span></div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;    <span class="keywordtype">bool</span> cifg_weights_all_or_none = ((m_InputToInputWeights &amp;&amp; m_RecurrentToInputWeights &amp;&amp;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;                                     !m_Parameters.m_CifgEnabled) ||</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;                                     (!m_InputToInputWeights &amp;&amp; !m_RecurrentToInputWeights &amp;&amp;</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;                                     m_Parameters.m_CifgEnabled));</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;    <span class="keywordflow">if</span> (!cifg_weights_all_or_none)</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;    {</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input-Gate&#39;s parameters InputToInputWeights and &quot;</span></div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;                                       <span class="stringliteral">&quot;RecurrentToInputWeights must either both be present (regular LSTM) &quot;</span></div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;                                       <span class="stringliteral">&quot;or both not present (CIFG-LSTM). In addition CifgEnable must be set &quot;</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;                                       <span class="stringliteral">&quot;accordingly.&quot;</span>);</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;    }</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;    <span class="keywordflow">if</span> ( m_CellToInputWeights )</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;    {</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;        ValidateTensorNumDimNumElem(m_CellToInputWeights-&gt;GetTensorInfo(), 1,</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;                                      n_cell, <span class="stringliteral">&quot;CellToInputWeights&quot;</span>);</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;    }</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;    <span class="keywordflow">if</span> ( m_CellToForgetWeights )</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;        ValidateTensorNumDimNumElem(m_CellToForgetWeights-&gt;GetTensorInfo(), 1,</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;                                      n_cell, <span class="stringliteral">&quot;CellToForgetWeights&quot;</span>);</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    }</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;    <span class="keywordflow">if</span> ( m_CellToOutputWeights )</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;        ValidateTensorNumDimNumElem(m_CellToOutputWeights-&gt;GetTensorInfo(), 1,</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;                                      n_cell, <span class="stringliteral">&quot;CellToOutputWeights&quot;</span>);</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;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;    <span class="comment">// Making sure the peephole weights are there all or none. And PeepholeEnable is set accordingly.</span></div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;    <span class="keywordtype">bool</span> peephole_weights_all_or_none =</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;            (((m_CellToInputWeights || m_Parameters.m_CifgEnabled) &amp;&amp;  m_CellToForgetWeights</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;            &amp;&amp; m_CellToOutputWeights &amp;&amp; m_Parameters.m_PeepholeEnabled)</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;            || ( !m_CellToInputWeights &amp;&amp; !m_CellToForgetWeights</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;            &amp;&amp; !m_CellToOutputWeights &amp;&amp; !m_Parameters.m_PeepholeEnabled));</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;    <span class="keywordflow">if</span> (!peephole_weights_all_or_none)</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;    {</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Invalid combination of peephole parameters.&quot;</span>);</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;    }</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;    <span class="comment">// Make sure the input gate bias is present only when not a CIFG-LSTM.</span></div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_CifgEnabled)</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;    {</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;        <span class="keywordflow">if</span> (m_InputGateBias)</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;        {</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: InputGateBias is present and CIFG-LSTM is enabled.&quot;</span>);</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;        }</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;    }</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;    <span class="keywordflow">else</span></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;        <span class="keywordflow">if</span> (!m_InputGateBias)</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;        {</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: If CIFG-LSTM is disabled InputGateBias &quot;</span></div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;                                           <span class="stringliteral">&quot;must be present.&quot;</span>);</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;        }</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;        ValidateTensorNumDimNumElem(m_InputGateBias-&gt;GetTensorInfo(), 1,</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;                                      n_cell, <span class="stringliteral">&quot;InputGateBias&quot;</span>);</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;    }</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;    ValidatePointer(m_ForgetGateBias, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;ForgetGateBias&quot;</span>);</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;    ValidateTensorNumDimNumElem(m_ForgetGateBias-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;ForgetGateBias&quot;</span>);</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;    ValidatePointer(m_CellBias, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;CellBias&quot;</span>);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;    ValidateTensorNumDimNumElem(m_CellBias-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;CellBias&quot;</span>);</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;    ValidatePointer(m_OutputGateBias, <span class="stringliteral">&quot;Null pointer check&quot;</span>, <span class="stringliteral">&quot;OutputGateBias&quot;</span>);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;    ValidateTensorNumDimNumElem(m_OutputGateBias-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;OutputGateBias&quot;</span>);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    <span class="keywordflow">if</span> (m_ProjectionWeights)</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;    {</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;        ValidateTensorNumDimNumElem(m_ProjectionWeights-&gt;GetTensorInfo(), 2,</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;                                      (n_cell * n_output), <span class="stringliteral">&quot;ProjectionWeights&quot;</span>);</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    }</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    <span class="keywordflow">if</span> (m_ProjectionBias)</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    {</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;        ValidateTensorNumDimNumElem(m_ProjectionBias-&gt;GetTensorInfo(), 1, n_output, <span class="stringliteral">&quot;ProjectionBias&quot;</span>);</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;</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    <span class="comment">// Making sure the projection tensors are consistent:</span></div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;    <span class="comment">// 1) If projection weight is not present, then projection bias should not be</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;    <span class="comment">// present.</span></div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    <span class="comment">// 2) If projection weight is present, then projection bias is optional.</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;    <span class="keywordtype">bool</span> projecton_tensors_consistent = ((!m_ProjectionWeights &amp;&amp; !m_ProjectionBias &amp;&amp;</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;                                        !m_Parameters.m_ProjectionEnabled)</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;                                        || (m_ProjectionWeights &amp;&amp; !m_ProjectionBias &amp;&amp;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;                                        m_Parameters.m_ProjectionEnabled)</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;                                        || (m_ProjectionWeights &amp;&amp; m_ProjectionBias &amp;&amp;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;                                        m_Parameters.m_ProjectionEnabled));</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;    <span class="keywordflow">if</span> (!projecton_tensors_consistent)</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;    {</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Projection tensors are inconsistent.&quot;</span>);</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;    }</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;    <span class="comment">// The four layer normalization weights either all have values or none of them have values. Additionally, if</span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;    <span class="comment">// CIFG is used, input layer normalization weights tensor is omitted and the other layer normalization weights</span></div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;    <span class="comment">// either all have values or none of them have values. Layer normalization is used when the values of all the</span></div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;    <span class="comment">// layer normalization weights are present</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;    <span class="keywordflow">if</span> (m_InputLayerNormWeights)</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;    {</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;        ValidateTensorNumDimNumElem(m_InputLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;InputLayerNormWeights&quot;</span>);</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="keywordflow">if</span> (m_ForgetLayerNormWeights)</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;    {</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;        ValidateTensorNumDimNumElem(m_ForgetLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;ForgetLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;    }</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;    <span class="keywordflow">if</span> (m_CellLayerNormWeights)</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;    {</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;        ValidateTensorNumDimNumElem(m_CellLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;CellLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;    }</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;    <span class="keywordflow">if</span> (m_OutputLayerNormWeights)</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;    {</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;        ValidateTensorNumDimNumElem(m_OutputLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;OutputLayerNormWeights&quot;</span>);</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;    <span class="keywordflow">if</span> (m_Parameters.m_LayerNormEnabled)</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;    {</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;        <span class="keywordflow">if</span> (!m_Parameters.m_CifgEnabled)</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;        {</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;            <span class="keywordflow">if</span> (!m_InputLayerNormWeights)</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;            {</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;                <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Layer normalisation is enabled and CIFG-LSTM is &quot;</span></div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;                                               <span class="stringliteral">&quot;disabled but InputLayerNormWeights are not present&quot;</span>);</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;            }</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;            ValidateTensorNumDimNumElem(m_InputLayerNormWeights-&gt;GetTensorInfo(),</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;                                          1, n_cell, <span class="stringliteral">&quot;InputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;        }</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_InputLayerNormWeights)</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;        {</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;:InputLayerNormWeights are present while CIFG is &quot;</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;                                           <span class="stringliteral">&quot;enabled&quot;</span>);</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;        }</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;        ValidatePointer(m_ForgetLayerNormWeights, <span class="stringliteral">&quot;Null pointer check layer normalisation enabled&quot;</span>,</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;                        <span class="stringliteral">&quot;ForgetLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;        ValidateTensorNumDimNumElem(m_ForgetLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;ForgetLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;        ValidatePointer(m_OutputLayerNormWeights, <span class="stringliteral">&quot;Null pointer check layer normalisation enabled&quot;</span>,</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;                        <span class="stringliteral">&quot;OutputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;        ValidateTensorNumDimNumElem(m_OutputLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;OutputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;        ValidatePointer(m_CellLayerNormWeights, <span class="stringliteral">&quot;Null pointer check layer normalisation enabled&quot;</span>,</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;                        <span class="stringliteral">&quot;CellLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;        ValidateTensorNumDimNumElem(m_CellLayerNormWeights-&gt;GetTensorInfo(), 1, n_cell, <span class="stringliteral">&quot;CellLayerNormWeights&quot;</span>);</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    }</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_InputLayerNormWeights || m_ForgetLayerNormWeights || m_OutputLayerNormWeights || m_CellLayerNormWeights)</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;    {</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Layer normalisation is disabled but one or more layer &quot;</span></div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;                                       <span class="stringliteral">&quot;normalisation weights are present.&quot;</span>);</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;}</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="structarmnn_1_1_convert_bf16_to_fp32_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2120</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_convert_bf16_to_fp32_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ConvertBf16ToFp32QueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ConvertBf16ToFp32QueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>)</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;    {</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor type must be BFloat16.&quot;</span>);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;    }</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;    {</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Float32.&quot;</span>);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;    }</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;}</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;</div><div class="line"><a name="l02143"></a><span class="lineno"><a class="line" href="structarmnn_1_1_convert_fp32_to_bf16_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2143</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_convert_fp32_to_bf16_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ConvertFp32ToBf16QueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ConvertFp32ToBf16QueueDescriptor&quot;</span>};</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;    {</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor type must be Float32.&quot;</span>);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    }</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="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>)</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;    {</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be BFloat16.&quot;</span>);</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;    }</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;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;}</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;</div><div class="line"><a name="l02166"></a><span class="lineno"><a class="line" href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2166</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ConvertFp32ToFp16QueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ConvertFp32ToFp16QueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor type must be Float32.&quot;</span>);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;    }</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>)</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;    {</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Float16.&quot;</span>);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;    }</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;}</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02189"></a><span class="lineno"><a class="line" href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2189</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ConvertFp16ToFp32QueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ConvertFp16ToFp32QueueDescriptor&quot;</span>};</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor type must be Float16.&quot;</span>);</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;    }</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="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>)</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;    {</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Float32.&quot;</span>);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;    }</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;</div><div class="line"><a name="l02212"></a><span class="lineno"><a class="line" href="structarmnn_1_1_division_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2212</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_division_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">DivisionQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;DivisionQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;    {</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;    };</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;}</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;</div><div class="line"><a name="l02246"></a><span class="lineno"><a class="line" href="structarmnn_1_1_subtraction_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2246</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_subtraction_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SubtractionQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;SubtractionQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;    {</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;    };</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;}</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;</div><div class="line"><a name="l02280"></a><span class="lineno"><a class="line" href="structarmnn_1_1_maximum_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2280</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_maximum_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MaximumQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;MaximumQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;    {</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;    };</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</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;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;}</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;</div><div class="line"><a name="l02314"></a><span class="lineno"><a class="line" href="structarmnn_1_1_mean_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2314</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_mean_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MeanQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;MeanQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160;</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;    {</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;    };</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;    <span class="comment">// First check if input tensor data type is supported, then</span></div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;    <span class="comment">// check if this data type matches the output tensor data type</span></div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;    ValidateDataTypes(inputTensorInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;    <span class="keywordflow">if</span> (m_Parameters.m_KeepDims)</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;    {</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;        ValidateTensorNumDimensions(outputTensorInfo, descriptorName, inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;    }</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_Parameters.m_Axis.empty())</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;    {</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;        ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 1, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;    }</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;    {</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDim =</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;            inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() - <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(m_Parameters.m_Axis.size());</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;        ValidateTensorNumDimensions(outputTensorInfo,</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;                                    descriptorName,</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;                                    outputDim &gt; 0 ? outputDim : 1,</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;                                    <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;    }</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;}</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"><a class="line" href="structarmnn_1_1_pad_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_pad_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">PadQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;PadQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;    <span class="comment">// input and output should have the same number of dimensions</span></div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;    <span class="comment">// there should be entry in the pad list for each dimension in the input tensor</span></div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_PadList.size() != inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()) {</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;:Pad List should contain the same number of entries &quot;</span></div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;                                       <span class="stringliteral">&quot;as there are dimensions in the input tensor that is &quot;</span> +</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;                                       std::to_string(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()) + <span class="stringliteral">&quot; entries &quot;</span> +</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;                                       <span class="stringliteral">&quot; not &quot;</span> + std::to_string(m_Parameters.m_PadList.size()) + <span class="stringliteral">&quot; entries.&quot;</span>);</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;    }</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;}</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"><a class="line" href="structarmnn_1_1_quantize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2380</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_quantize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">QuantizeQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;QuantizeQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;    {</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a>,</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;    };</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()))</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;    {</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output of quantized layer must be quantized type.&quot;</span>);</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;    }</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;</div><div class="line"><a name="l02409"></a><span class="lineno"><a class="line" href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2409</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">BatchToSpaceNdQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;BatchToSpaceNdQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;    {</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;    };</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;}</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;</div><div class="line"><a name="l02433"></a><span class="lineno"><a class="line" href="structarmnn_1_1_strided_slice_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2433</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_strided_slice_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">StridedSliceQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;StridedSliceQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</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;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;    };</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;    ValidateTensorQuantizationSpace(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;    <span class="keyword">const</span> uint32_t rank = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;    <span class="keywordflow">if</span> (rank &gt; 4)</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;    {</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensors with rank greater than 4 are not supported.&quot;</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="comment">// Begin, End &amp; Stride length must be of rank(input0)</span></div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_Begin.size() != rank)</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;    {</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Begin length must be of rank &quot;</span> + std::to_string(rank));</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;    }</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_End.size() != rank)</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;    {</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: End length must be of rank &quot;</span> + std::to_string(rank));</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;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_Stride.size() != rank)</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;    {</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Stride length must be of rank &quot;</span> + std::to_string(rank));</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;    }</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;    <span class="comment">// Stride entries must be non-zero</span></div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; stride : m_Parameters.m_Stride)</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;    {</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;        <span class="keywordflow">if</span> (stride == 0)</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;        {</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Stride entries must be non-zero.&quot;</span>);</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;        }</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;    }</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;</div><div class="line"><a name="l02490"></a><span class="lineno"><a class="line" href="structarmnn_1_1_minimum_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2490</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_minimum_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MinimumQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;MinimumQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;    {</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></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;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;}</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;</div><div class="line"><a name="l02524"></a><span class="lineno"><a class="line" href="structarmnn_1_1_debug_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2524</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_debug_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">DebugQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;DebugQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;}</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;</div><div class="line"><a name="l02532"></a><span class="lineno"><a class="line" href="structarmnn_1_1_equal_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2532</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_equal_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">EqualQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;EqualQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>)</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;    {</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Boolean.&quot;</span>);</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;    }</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;}</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;</div><div class="line"><a name="l02556"></a><span class="lineno"><a class="line" href="structarmnn_1_1_greater_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2556</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_greater_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">GreaterQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;GreaterQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>)</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">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Boolean.&quot;</span>);</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;    }</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;</div><div class="line"><a name="l02580"></a><span class="lineno"><a class="line" href="structarmnn_1_1_rsqrt_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2580</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_rsqrt_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">RsqrtQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;RsqrtQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;    {</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;    };</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;}</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"><a class="line" href="structarmnn_1_1_gather_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2606</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_gather_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">GatherQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;GatherQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 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="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; indicesTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;    <span class="keywordflow">if</span> (indicesTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>)</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;    {</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Indices tensor type must be Int32.&quot;</span>);</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;    }</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;    {</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a>,</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDim  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() + indicesTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() - 1;</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, outputDim, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;}</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;</div><div class="line"><a name="l02641"></a><span class="lineno"><a class="line" href="structarmnn_1_1_detection_post_process_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2641</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_detection_post_process_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">DetectionPostProcessQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;    <span class="keyword">const</span> std::string&amp; descriptorName{<span class="stringliteral">&quot;DetectionPostProcessQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo, descriptorName, 2);</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;    <span class="keywordflow">if</span> (workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size() != 4)</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;    {</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Requires exactly four outputs. &quot;</span> +</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;                                       to_string(workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.size()) + <span class="stringliteral">&quot; has been provided.&quot;</span>);</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160;    }</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;    <span class="keywordflow">if</span> (m_Anchors == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;    {</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Anchors tensor descriptor is missing.&quot;</span>);</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;</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; boxEncodingsInfo =  workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; <a class="code" href="_neon_end_to_end_tests_8cpp.xhtml#a64c1dd1b6dd60be9f4a16db9c8f427a5">scoresInfo</a>       =  workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; <a class="code" href="_neon_end_to_end_tests_8cpp.xhtml#a358cb7cd3c0647b25be049fd734b8c22">anchorsInfo</a>      = m_Anchors-&gt;GetTensorInfo();</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; detectionBoxesInfo   = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; detectionClassesInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1];</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; detectionScoresInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[2];</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; numDetectionsInfo    = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[3];</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160;</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160;    ValidateTensorNumDimensions(boxEncodingsInfo, descriptorName, 3, <span class="stringliteral">&quot;box encodings&quot;</span>);</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160;    ValidateTensorNumDimensions(scoresInfo, descriptorName, 3, <span class="stringliteral">&quot;scores&quot;</span>);</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;    ValidateTensorNumDimensions(anchorsInfo, descriptorName, 2, <span class="stringliteral">&quot;anchors&quot;</span>);</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160;</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;    <span class="keyword">const</span> std::vector&lt;DataType&gt; supportedInputTypes =</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160;    {</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;    };</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160;    ValidateDataTypes(boxEncodingsInfo, supportedInputTypes, descriptorName);</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;    ValidateDataTypes(scoresInfo, supportedInputTypes, descriptorName);</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160;    ValidateDataTypes(anchorsInfo, supportedInputTypes, descriptorName);</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;    ValidateTensorNumDimensions(detectionBoxesInfo, descriptorName, 3, <span class="stringliteral">&quot;detection boxes&quot;</span>);</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160;    ValidateTensorNumDimensions(detectionScoresInfo, descriptorName, 2, <span class="stringliteral">&quot;detection scores&quot;</span>);</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;    ValidateTensorNumDimensions(detectionClassesInfo, descriptorName, 2, <span class="stringliteral">&quot;detection classes&quot;</span>);</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;    ValidateTensorNumDimensions(numDetectionsInfo, descriptorName, 1, <span class="stringliteral">&quot;num detections&quot;</span>);</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;    <span class="comment">// NOTE: Output is always Float32 regardless of input type</span></div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;    ValidateTensorDataType(detectionBoxesInfo, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>, descriptorName, <span class="stringliteral">&quot;detection boxes&quot;</span>);</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;    ValidateTensorDataType(detectionScoresInfo, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>, descriptorName, <span class="stringliteral">&quot;detection scores&quot;</span>);</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;    ValidateTensorDataType(detectionClassesInfo, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>, descriptorName, <span class="stringliteral">&quot;detection classes&quot;</span>);</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160;    ValidateTensorDataType(numDetectionsInfo, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>, descriptorName, <span class="stringliteral">&quot;num detections&quot;</span>);</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_NmsIouThreshold &lt;= 0.0f || m_Parameters.m_NmsIouThreshold &gt; 1.0f)</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;    {</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Intersection over union threshold &quot;</span></div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160;                                       <span class="stringliteral">&quot;must be positive and less than or equal to 1.&quot;</span>);</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160;    }</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;    <span class="keywordflow">if</span> (scoresInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[2] != m_Parameters.m_NumClasses + 1)</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160;    {</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Number of classes with background &quot;</span></div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;                                       <span class="stringliteral">&quot;should be equal to number of classes + 1.&quot;</span>);</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;    }</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;}</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;</div><div class="line"><a name="l02709"></a><span class="lineno"><a class="line" href="structarmnn_1_1_dequantize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2709</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_dequantize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">DequantizeQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;    <span class="keyword">const</span> std::string&amp; descriptorName{<span class="stringliteral">&quot;DequantizeQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">IsQuantizedType</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()))</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;    {</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input to dequantize layer must be quantized type.&quot;</span>);</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;    }</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</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="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a></div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;    };</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</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;</div><div class="line"><a name="l02734"></a><span class="lineno"><a class="line" href="structarmnn_1_1_merge_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2734</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_merge_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">MergeQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;    <span class="keyword">const</span> std::string&amp; descriptorName{<span class="stringliteral">&quot;MergeQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo0, inputTensorInfo1, descriptorName, <span class="stringliteral">&quot;input_0&quot;</span>, <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo0, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input_0&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;    ValidateTensorDataTypesMatch(inputTensorInfo0, inputTensorInfo1, descriptorName, <span class="stringliteral">&quot;input_0&quot;</span>, <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo0, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input_0&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;}</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;</div><div class="line"><a name="l02752"></a><span class="lineno"><a class="line" href="structarmnn_1_1_switch_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2752</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_switch_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SwitchQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;    <span class="keyword">const</span> std::string&amp; descriptorName{<span class="stringliteral">&quot;SwitchQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 2);</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1];</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;    {</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;    };</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;    ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;    ValidateDataTypes(inputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;    ValidateDataTypes(outputTensorInfo0, supportedTypes, descriptorName);</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;    ValidateDataTypes(outputTensorInfo1, supportedTypes, descriptorName);</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;                              outputTensorInfo0,</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;                              descriptorName,</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;                              <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;                              <span class="stringliteral">&quot;output_0&quot;</span>);</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;                              outputTensorInfo1,</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;                              descriptorName,</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;                              <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;                              <span class="stringliteral">&quot;output_1&quot;</span>);</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;</div><div class="line"><a name="l02793"></a><span class="lineno"><a class="line" href="structarmnn_1_1_pre_compiled_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2793</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_pre_compiled_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">PreCompiledQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; <span class="comment">/*workloadInfo*/</span>)<span class="keyword"> const</span></div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;    <span class="comment">// This is internally generated so it should not need validation.</span></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;</div><div class="line"><a name="l02798"></a><span class="lineno"><a class="line" href="structarmnn_1_1_prelu_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2798</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_prelu_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">PreluQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;    <span class="keyword">const</span> std::string&amp; descriptorName{<span class="stringliteral">&quot;PreluQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; alphaTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    std::vector&lt;DataType&gt; supportedTypes</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;    {</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;    ValidateDataTypes(alphaTensorInfo, supportedTypes, descriptorName);</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;    ValidateDataTypes(outputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, alphaTensorInfo,  descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;alpha&quot;</span>);</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;ouptut&quot;</span>);</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo,</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;                                       alphaTensorInfo,</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160;                                       descriptorName,</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;                                       <span class="stringliteral">&quot;input&quot;</span>,</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;                                       <span class="stringliteral">&quot;alpha&quot;</span>);</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;</div><div class="line"><a name="l02835"></a><span class="lineno"><a class="line" href="structarmnn_1_1_transpose_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2835</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_transpose_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">TransposeConvolution2dQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;TransposeConvolution2dQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</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;    ValidatePointer(m_Weight, descriptorName, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160;</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightTensorInfo = m_Weight-&gt;GetTensorInfo();</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160;    ValidateTensorNumDimensions(weightTensorInfo, descriptorName, 4, <span class="stringliteral">&quot;weight&quot;</span>);</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;    ValidateWeightDataType(inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;    <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;TensorInfo&gt;</a> optionalBiasTensorInfo;</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_BiasEnabled)</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;    {</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;        ValidatePointer(m_Bias, descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160;        optionalBiasTensorInfo = MakeOptional&lt;TensorInfo&gt;(m_Bias-&gt;GetTensorInfo());</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; biasTensorInfo = optionalBiasTensorInfo.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>();</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;        ValidateTensorDataType(biasTensorInfo, <a class="code" href="namespacearmnn.xhtml#a872803f5667392efc3c8e5607bd453ad">GetBiasDataType</a>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()), descriptorName, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;        ValidateBiasTensorQuantization(biasTensorInfo, inputTensorInfo, weightTensorInfo, descriptorName);</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;    }</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;    ValidatePerAxisQuantization(inputTensorInfo,</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;                                outputTensorInfo,</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;                                weightTensorInfo,</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;                                optionalBiasTensorInfo,</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;                                descriptorName);</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</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;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;</div><div class="line"><a name="l02887"></a><span class="lineno"><a class="line" href="structarmnn_1_1_transpose_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2887</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_transpose_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">TransposeQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;TransposeQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a>&amp; mapping = m_Parameters.m_DimMappings;</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;    ValidateTensorNumDimensions(inputTensorInfo,  descriptorName, mapping.<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>(), <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, mapping.<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>(), <span class="stringliteral">&quot;output&quot;</span>);</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;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; mapping.<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>(); ++i)</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;    {</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;        <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[mapping[i]] != outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i])</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;        {</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: src dimension &quot;</span> + to_string(mapping[i]) +</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;                                           <span class="stringliteral">&quot; (=&quot;</span> + to_string(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[mapping[i]]) + <span class="stringliteral">&quot;) &quot;</span> +</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;                                           <span class="stringliteral">&quot;must match dst dimension &quot;</span> + to_string(i) +</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;                                           <span class="stringliteral">&quot; (=&quot;</span> + to_string(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]) + <span class="stringliteral">&quot;)&quot;</span>);</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;    }</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160;</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;}</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;</div><div class="line"><a name="l02916"></a><span class="lineno"><a class="line" href="structarmnn_1_1_q_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 2916</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_q_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">QLstmQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;QLstmQueueDescriptor&quot;</span>};</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;    <span class="comment">// Validate number of inputs/outputs</span></div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 3);</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 3);</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;    <span class="comment">// Input/output tensor info</span></div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;    <span class="keyword">auto</span> inputInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;    <span class="keyword">auto</span> outputStateInInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;    <span class="keyword">auto</span> cellStateInInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[2];</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;    <span class="keyword">auto</span> outputStateOutInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;    <span class="keyword">auto</span> cellStateOutInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1];</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;    <span class="keyword">auto</span> outputInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[2];</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160;    <span class="comment">// Supported types for various tensors in QLSTM</span></div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;    std::vector&lt;DataType&gt; inputOutputSupportedTypes =</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;    {</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a></div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;    };</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;    std::vector&lt;DataType&gt; cellStateSupportedTypes =</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;    {</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;    };</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;    std::vector&lt;DataType&gt; weightsSupportedTypes =</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;    {</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a></div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160;    };</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;    std::vector&lt;DataType&gt; layerNormPeepholeWeightsSupportedTypes =</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160;    {</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;    std::vector&lt;DataType&gt; biasSupportedTypes =</div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;    {</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></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;</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;    <span class="comment">// Validate types of input/output tensors</span></div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;    ValidateDataTypes(inputInfo, inputOutputSupportedTypes, descriptorName);</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;    ValidateDataTypes(outputStateInInfo, inputOutputSupportedTypes, descriptorName);</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160;    ValidateDataTypes(cellStateInInfo, cellStateSupportedTypes, descriptorName);</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;    ValidateDataTypes(outputStateOutInfo, inputOutputSupportedTypes, descriptorName);</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;    ValidateDataTypes(cellStateOutInfo, cellStateSupportedTypes, descriptorName);</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;    ValidateDataTypes(outputInfo, inputOutputSupportedTypes, descriptorName);</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;    <span class="comment">// Validate matching types of input/output tensors</span></div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;    ValidateTensorDataTypesMatch(inputInfo, outputStateInInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;outputStateIn&quot;</span>);</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160;    ValidateTensorDataTypesMatch(outputStateInInfo, outputStateOutInfo, descriptorName,</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160;                                 <span class="stringliteral">&quot;outputStateIn&quot;</span>, <span class="stringliteral">&quot;outputStateOut&quot;</span>);</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;    ValidateTensorDataTypesMatch(cellStateInInfo, cellStateOutInfo, descriptorName, <span class="stringliteral">&quot;cellStateIn&quot;</span>, <span class="stringliteral">&quot;cellStateOut&quot;</span>);</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;    <span class="comment">// Infer number of batches, number of units, input size and output size from tensor dimensions</span></div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;    <span class="keyword">const</span> uint32_t numBatches = inputInfo.GetShape()[0];</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;    <span class="keyword">const</span> uint32_t inputSize  = inputInfo.GetShape()[1];</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;    <span class="keyword">const</span> uint32_t outputSize = outputStateInInfo.GetShape()[1];</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;    <span class="keyword">const</span> uint32_t numUnits = cellStateInInfo.GetShape()[1];</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;    <span class="comment">// Validate number of dimensions and number of elements for input/output tensors</span></div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;    ValidateTensorNumDimNumElem(inputInfo, 2, (numBatches * inputSize), descriptorName + <span class="stringliteral">&quot; input&quot;</span>);</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;    ValidateTensorNumDimNumElem(outputStateInInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; outputStateIn&quot;</span>);</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;    ValidateTensorNumDimNumElem(cellStateInInfo, 2, (numBatches * numUnits), descriptorName + <span class="stringliteral">&quot; cellStateIn&quot;</span>);</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;    ValidateTensorNumDimNumElem(outputStateOutInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; outputStateOut&quot;</span>);</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;    ValidateTensorNumDimNumElem(cellStateOutInfo, 2, (numBatches * numUnits), descriptorName + <span class="stringliteral">&quot; cellStateOut&quot;</span>);</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;    ValidateTensorNumDimNumElem(outputInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; output&quot;</span>);</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;    <span class="comment">// Validate number of dimensions and number of elements for MANDATORY weight tensors</span></div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;    ValidatePointer(m_InputToForgetWeights, descriptorName, <span class="stringliteral">&quot;InputToForgetWeights&quot;</span>);</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;    <span class="keyword">auto</span> inputToForgetWeightsInfo = m_InputToForgetWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160;    ValidateTensorNumDimNumElem(inputToForgetWeightsInfo, 2, (numUnits * inputSize), <span class="stringliteral">&quot; InputToForgetWeights&quot;</span>);</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;    ValidatePointer(m_InputToCellWeights, descriptorName, <span class="stringliteral">&quot;InputToCellWeights&quot;</span>);</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;    <span class="keyword">auto</span> inputToCellWeightsInfo = m_InputToCellWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;    ValidateTensorNumDimNumElem(inputToCellWeightsInfo, 2, (numUnits * inputSize), <span class="stringliteral">&quot; InputToCellWeights&quot;</span>);</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;    ValidatePointer(m_InputToOutputWeights, descriptorName, <span class="stringliteral">&quot;InputToOutputWeights&quot;</span>);</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;    <span class="keyword">auto</span> inputToOutputWeightsInfo = m_InputToOutputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;    ValidateTensorNumDimNumElem(inputToOutputWeightsInfo, 2, (numUnits * inputSize), <span class="stringliteral">&quot; InputToOutputWeights&quot;</span>);</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    ValidatePointer(m_RecurrentToForgetWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToForgetWeights&quot;</span>);</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;    <span class="keyword">auto</span> recurrentToForgetWeightsInfo = m_RecurrentToForgetWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;    ValidateTensorNumDimNumElem(recurrentToForgetWeightsInfo, 2, (numUnits * outputSize),</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;                                <span class="stringliteral">&quot; RecurrentToForgetWeights&quot;</span>);</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;    ValidatePointer(m_RecurrentToCellWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;    <span class="keyword">auto</span> recurrentToCellWeightsInfo = m_RecurrentToCellWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;    ValidateTensorNumDimNumElem(recurrentToCellWeightsInfo, 2, (numUnits * outputSize), <span class="stringliteral">&quot; RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;    ValidatePointer(m_RecurrentToOutputWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToOutputWeights&quot;</span>);</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;    <span class="keyword">auto</span> recurrentToOutputWeightsInfo = m_RecurrentToOutputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;    ValidateTensorNumDimNumElem(recurrentToOutputWeightsInfo, 2, (numUnits * outputSize), <span class="stringliteral">&quot; RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;    <span class="comment">// Validate data types for MANDATORY weights tensors (all should match each other)</span></div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;    ValidateDataTypes(inputToForgetWeightsInfo, weightsSupportedTypes, descriptorName);</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160;    ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, inputToCellWeightsInfo, descriptorName,</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;                                 <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;inputToCellWeights&quot;</span>);</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;    ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, inputToOutputWeightsInfo, descriptorName,</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;                                 <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;inputToOutputWeights&quot;</span>);</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160;    ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, recurrentToForgetWeightsInfo, descriptorName,</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;                                 <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToForgeteights&quot;</span>);</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;    ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, recurrentToCellWeightsInfo, descriptorName,</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;                                 <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;    ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, recurrentToOutputWeightsInfo, descriptorName,</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;                                 <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToOutputWeights&quot;</span>);</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;    <span class="comment">// Validate number of dimensions and number of elements for MANDATORY bias tensors</span></div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;    ValidatePointer(m_ForgetGateBias, descriptorName, <span class="stringliteral">&quot;ForgetGateBias&quot;</span>);</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;    <span class="keyword">auto</span> forgetGateBiasInfo = m_ForgetGateBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;    ValidateTensorNumDimNumElem(forgetGateBiasInfo, 1, numUnits, <span class="stringliteral">&quot; ForgetGateBias&quot;</span>);</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;    ValidatePointer(m_CellBias, descriptorName, <span class="stringliteral">&quot;CellBias&quot;</span>);</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;    <span class="keyword">auto</span> cellBiasInfo = m_CellBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;    ValidateTensorNumDimNumElem(cellBiasInfo, 1, numUnits, <span class="stringliteral">&quot; CellBias&quot;</span>);</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;    ValidatePointer(m_OutputGateBias, descriptorName, <span class="stringliteral">&quot;OutputGateBias&quot;</span>);</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;    <span class="keyword">auto</span> outputGateBiasInfo = m_OutputGateBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;    ValidateTensorNumDimNumElem(outputGateBiasInfo, 1, numUnits, <span class="stringliteral">&quot; OutputGateBias&quot;</span>);</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;    <span class="comment">// Validate data types for MANDATORY bias tensors</span></div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160;    ValidateDataTypes(forgetGateBiasInfo, biasSupportedTypes, descriptorName);</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;    ValidateTensorDataTypesMatch(forgetGateBiasInfo, cellBiasInfo, descriptorName,</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;                                 <span class="stringliteral">&quot;forgetGateBias&quot;</span>, <span class="stringliteral">&quot;cellBias&quot;</span>);</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160;    ValidateTensorDataTypesMatch(forgetGateBiasInfo, outputGateBiasInfo, descriptorName,</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160;                                 <span class="stringliteral">&quot;forgetGateBias&quot;</span>, <span class="stringliteral">&quot;outputGateBias&quot;</span>);</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;    <span class="comment">// Validate OPTIONAL params: CIFG (inputToInputWeights, recurrentToInputWeights, inputGateBias)</span></div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> allCifgParamsPresentOrNot = ((m_InputToInputWeights &amp;&amp; m_RecurrentToInputWeights &amp;&amp; m_InputGateBias &amp;&amp;</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;                                             !m_Parameters.m_CifgEnabled) ||</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;                                            (!m_InputToInputWeights &amp;&amp; !m_RecurrentToInputWeights &amp;&amp;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;                                             !m_InputGateBias &amp;&amp; m_Parameters.m_CifgEnabled));</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">if</span> (!allCifgParamsPresentOrNot)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;                <span class="stringliteral">&quot;: InputToInputWeights, RecurrentToInputWeights and InputGateBias must either all be present &quot;</span></div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;                <span class="stringliteral">&quot;(CIFG disabled) or not be present at all (CIFG enabled). m_Parameters.m_CifgEnabled should be &quot;</span></div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;                <span class="stringliteral">&quot;set appropriately.&quot;</span>);</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;    }</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;    <span class="keywordflow">if</span> (!m_Parameters.m_CifgEnabled)</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;    {</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;        <span class="comment">// Validate number of dimensions and number of elements</span></div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;        <span class="keyword">auto</span> inputToInputWeightsInfo = m_InputToInputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;        ValidateTensorNumDimNumElem(inputToInputWeightsInfo, 2, (numUnits * inputSize), <span class="stringliteral">&quot; InputToInputWeights&quot;</span>);</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">auto</span> recurrentToInputWeightsInfo = m_RecurrentToInputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;        ValidateTensorNumDimNumElem(recurrentToInputWeightsInfo, 2, (numUnits * outputSize),</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;                                    <span class="stringliteral">&quot; RecurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;        <span class="keyword">auto</span> inputGateBiasInfo = m_InputGateBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;        ValidateTensorNumDimNumElem(inputGateBiasInfo, 1, numUnits, <span class="stringliteral">&quot; InputGateBias&quot;</span>);</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;        <span class="comment">// Validate data types</span></div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;        ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, inputToInputWeightsInfo, descriptorName,</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;                                     <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>);</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;        ValidateTensorDataTypesMatch(inputToForgetWeightsInfo, recurrentToInputWeightsInfo, descriptorName,</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160;                                     <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;        ValidateTensorDataTypesMatch(forgetGateBiasInfo, inputGateBiasInfo, descriptorName,</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;                                     <span class="stringliteral">&quot;forgetGateBias&quot;</span>, <span class="stringliteral">&quot;inputGateBias&quot;</span>);</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;    }</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="comment">// Validate OPTIONAL params: Peephole (cellToInputWeights, cellToForgetWeights, cellToOutputWeights)</span></div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;    <span class="keywordtype">bool</span> allPeepholeWeightsPresentOrNot =</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;            (((m_CellToInputWeights || m_Parameters.m_CifgEnabled) &amp;&amp; m_CellToForgetWeights</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160;              &amp;&amp; m_CellToOutputWeights &amp;&amp; m_Parameters.m_PeepholeEnabled)</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;             || (!m_CellToInputWeights &amp;&amp; !m_CellToForgetWeights</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;                 &amp;&amp; !m_CellToOutputWeights &amp;&amp; !m_Parameters.m_PeepholeEnabled));</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160;    <span class="keywordflow">if</span> (!allPeepholeWeightsPresentOrNot)</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;    {</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;                <span class="stringliteral">&quot;: CellToInputWeights, CellToForgetWeights and CellToOutputWeights should all be present (Peephole &quot;</span></div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;                <span class="stringliteral">&quot;enabled) or not be present at all (Peephole disabled). CellToInputWeights should only be present &quot;</span></div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;                <span class="stringliteral">&quot;when Peephole is enabled and CIFG is disabled. m_Parameters.m_PeepholeEnabled should be set &quot;</span></div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;                <span class="stringliteral">&quot;appropriately.&quot;</span>);</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;    }</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="keywordflow">if</span> (m_Parameters.m_PeepholeEnabled)</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;    {</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;        <span class="keyword">auto</span> cellToForgetWeightsInfo = m_CellToForgetWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160;        ValidateTensorNumDimNumElem(cellToForgetWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; cellToForgetWeights&quot;</span>);</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;        ValidateDataTypes(cellToForgetWeightsInfo, layerNormPeepholeWeightsSupportedTypes, descriptorName);</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;        <span class="keyword">auto</span> cellToOutputWeightsInfo = m_CellToOutputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;        ValidateTensorNumDimNumElem(cellToOutputWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; cellToOutputWeights&quot;</span>);</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;        ValidateTensorDataTypesMatch(cellToForgetWeightsInfo, cellToOutputWeightsInfo, descriptorName,</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;                                     <span class="stringliteral">&quot;cellToForgetWeight&quot;</span>, <span class="stringliteral">&quot;cellToOutputWeights&quot;</span>);</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;        <span class="keywordflow">if</span> (!m_Parameters.m_CifgEnabled)</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;        {</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;            <span class="keyword">auto</span> cellToInputWeightsInfo = m_CellToInputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;            ValidateTensorNumDimNumElem(cellToInputWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; cellToInputWeights&quot;</span>);</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;            ValidateTensorDataTypesMatch(cellToForgetWeightsInfo, cellToInputWeightsInfo, descriptorName,</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;                                         <span class="stringliteral">&quot;cellToForgetWeights&quot;</span>, <span class="stringliteral">&quot;cellToInputWeights&quot;</span>);</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;        }</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;    }</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160;    <span class="comment">// Validate OPTIONAL params: Layer Norm Weights</span></div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;    <span class="keywordtype">bool</span> allLayerNormWeightsPresentOrNot =</div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160;            (((m_InputLayerNormWeights || m_Parameters.m_CifgEnabled) &amp;&amp; m_ForgetLayerNormWeights</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;              &amp;&amp; m_CellLayerNormWeights &amp;&amp; m_OutputLayerNormWeights &amp;&amp; m_Parameters.m_LayerNormEnabled)</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;             || (!m_InputLayerNormWeights &amp;&amp; !m_ForgetLayerNormWeights &amp;&amp; !m_CellLayerNormWeights</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160;                 &amp;&amp; !m_OutputLayerNormWeights &amp;&amp; !m_Parameters.m_LayerNormEnabled));</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160;</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160;    <span class="keywordflow">if</span> (!allLayerNormWeightsPresentOrNot)</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160;    {</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160;                                       <span class="stringliteral">&quot;: InputLayerNormWeights, ForgetLayerNormWeights, m_OutputLayerNormWeights &quot;</span></div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;                                       <span class="stringliteral">&quot;and CellLayerNormWeights should all be present (Layer Norm enabled) or not &quot;</span></div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;                                       <span class="stringliteral">&quot;be present at all (Layer Norm disabled). InputLayerNormWeights should &quot;</span></div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;                                       <span class="stringliteral">&quot;only be present when Layer Norm is enabled and CIFG is disabled. &quot;</span></div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;                                       <span class="stringliteral">&quot;m_Parameters.m_LayerNormEnabled should be set appropriately.&quot;</span>);</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;    }</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_LayerNormEnabled)</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;    {</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;        <span class="keyword">auto</span> forgetLayerNormWeightsInfo = m_ForgetLayerNormWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160;        ValidateTensorNumDimNumElem(forgetLayerNormWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; forgetLayerNormWeights&quot;</span>);</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;        ValidateDataTypes(forgetLayerNormWeightsInfo, layerNormPeepholeWeightsSupportedTypes, descriptorName);</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160;        <span class="keyword">auto</span> cellLayerNormWeightsInfo = m_CellLayerNormWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160;        ValidateTensorNumDimNumElem(cellLayerNormWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; cellLayerNormWeights&quot;</span>);</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;        ValidateTensorDataTypesMatch(forgetLayerNormWeightsInfo, cellLayerNormWeightsInfo, descriptorName,</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160;                                     <span class="stringliteral">&quot;forgetLayerNormWeights&quot;</span>, <span class="stringliteral">&quot;cellLayerNormWeights&quot;</span>);</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">auto</span> outputLayerNormWeightsInfo = m_OutputLayerNormWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;        ValidateTensorNumDimNumElem(outputLayerNormWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; outputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;        ValidateTensorDataTypesMatch(forgetLayerNormWeightsInfo, outputLayerNormWeightsInfo, descriptorName,</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;                                     <span class="stringliteral">&quot;forgetLayerNormWeights&quot;</span>, <span class="stringliteral">&quot;outputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160;        <span class="keywordflow">if</span> (!m_Parameters.m_CifgEnabled)</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;        {</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160;            <span class="keyword">auto</span> inputLayerNormWeightsInfo = m_InputLayerNormWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;            ValidateTensorNumDimNumElem(inputLayerNormWeightsInfo, 1, numUnits, <span class="stringliteral">&quot; inputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;            ValidateTensorDataTypesMatch(forgetLayerNormWeightsInfo, inputLayerNormWeightsInfo, descriptorName,</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;                                         <span class="stringliteral">&quot;forgetLayerNormWeights&quot;</span>, <span class="stringliteral">&quot;inputLayerNormWeights&quot;</span>);</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;        }</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;    }</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;    <span class="comment">// Validate OPTIONAL params: Projection (projectionWeights, projectionBias)</span></div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;    <span class="keywordtype">bool</span> correctProjectionTensorsPresent =</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;            ((!m_ProjectionWeights &amp;&amp; !m_ProjectionBias &amp;&amp; !m_Parameters.m_ProjectionEnabled) ||</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;            (m_ProjectionWeights &amp;&amp; !m_ProjectionBias &amp;&amp; m_Parameters.m_ProjectionEnabled) ||</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160;            (m_ProjectionWeights &amp;&amp; m_ProjectionBias &amp;&amp; m_Parameters.m_ProjectionEnabled));</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;    <span class="keywordflow">if</span> (!correctProjectionTensorsPresent)</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;    {</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;                                       <span class="stringliteral">&quot;: If projection is enabled, ProjectionWeights should be present and &quot;</span></div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;                                       <span class="stringliteral">&quot;ProjectionBias is optional. If projection is disabled, neither &quot;</span></div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160;                                       <span class="stringliteral">&quot;ProjectionWeights nor ProjectionBias should be present.&quot;</span>);</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;    }</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_ProjectionEnabled)</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;    {</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;        <span class="keyword">auto</span> projectionWeightsInfo = m_ProjectionWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160;        ValidateTensorNumDimNumElem(projectionWeightsInfo, 2, (numUnits * outputSize), <span class="stringliteral">&quot;ProjectionWeights&quot;</span>);</div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;        ValidateDataTypes(projectionWeightsInfo, weightsSupportedTypes, descriptorName);</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;        <span class="keywordflow">if</span> (m_ProjectionBias)</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;        {</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;            <span class="keyword">auto</span> projectionBiasInfo = m_ProjectionBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;            ValidateTensorNumDimNumElem(projectionBiasInfo, 1, outputSize, <span class="stringliteral">&quot;ProjectionBias&quot;</span>);</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;            ValidateDataTypes(projectionBiasInfo, biasSupportedTypes, descriptorName);</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;</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;    }</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((outputInfo.GetQuantizationScale() != m_Parameters.m_HiddenStateScale) &amp;&amp;</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;              outputInfo.GetQuantizationOffset() != m_Parameters.m_HiddenStateZeroPoint) {</div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;                                       <span class="stringliteral">&quot;: If projection is disabled, output quantization info (scale, offset) &quot;</span></div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;                                       <span class="stringliteral">&quot;should match HiddenStateScale and HiddenStateZeroPoint.&quot;</span>);</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;</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160;}</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;</div><div class="line"><a name="l03202"></a><span class="lineno"><a class="line" href="structarmnn_1_1_quantized_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3202</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_quantized_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">QuantizedLstmQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;QuantizedLstmQueueDescriptor&quot;</span>};</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160;    <span class="comment">// Validate number of inputs/outputs</span></div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 3);</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 2);</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;    <span class="comment">// Input/output tensor infos</span></div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;    <span class="keyword">auto</span> inputInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;    <span class="keyword">auto</span> cellStateInInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;    <span class="keyword">auto</span> outputStateInInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[2];</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">auto</span> cellStateOutInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;    <span class="keyword">auto</span> outputStateOutInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[1];</div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160;</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160;    std::vector&lt;DataType&gt; inputOutputSupportedTypes =</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160;    {</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a></div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160;    };</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;    std::vector&lt;DataType&gt; cellStateSupportedTypes =</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160;    {</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;    };</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160;    std::vector&lt;DataType&gt; weightsSupportedTypes =</div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160;    {</div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a></div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;    };</div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;    std::vector&lt;DataType&gt; biasSupportedTypes =</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;    {</div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;    };</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;    <span class="comment">// Validate types of input/output tensors</span></div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;    ValidateDataTypes(inputInfo, inputOutputSupportedTypes, descriptorName);</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;    ValidateDataTypes(cellStateInInfo, cellStateSupportedTypes, descriptorName);</div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;    ValidateDataTypes(outputStateInInfo, inputOutputSupportedTypes, descriptorName);</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160;    ValidateDataTypes(cellStateOutInfo, cellStateSupportedTypes, descriptorName);</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;    ValidateDataTypes(outputStateOutInfo, inputOutputSupportedTypes, descriptorName);</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;    <span class="comment">// Validate matching types of input/output tensors</span></div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160;    ValidateTensorDataTypesMatch(inputInfo, outputStateInInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;outputStateIn&quot;</span>);</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160;    ValidateTensorDataTypesMatch(outputStateInInfo, outputStateOutInfo, descriptorName,</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160;                                 <span class="stringliteral">&quot;outputStateIn&quot;</span>, <span class="stringliteral">&quot;outputStateOut&quot;</span>);</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160;    ValidateTensorDataTypesMatch(cellStateInInfo, cellStateOutInfo, descriptorName, <span class="stringliteral">&quot;cellStateIn&quot;</span>, <span class="stringliteral">&quot;cellStateOut&quot;</span>);</div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160;</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160;    <span class="comment">// Validate matching quantization info for input/output tensors</span></div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160;    ValidateTensorQuantizationSpace(inputInfo, outputStateInInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;outputStateIn&quot;</span>);</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160;    ValidateTensorQuantizationSpace(inputInfo, outputStateOutInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;outputStateOut&quot;</span>);</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160;    ValidateTensorQuantizationSpace(cellStateInInfo, cellStateOutInfo, descriptorName, <span class="stringliteral">&quot;cellStateIn&quot;</span>, <span class="stringliteral">&quot;cellStateOut&quot;</span>);</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;</div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160;    <span class="comment">// Infer number of batches, input size and output size from tensor dimensions</span></div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;    <span class="keyword">const</span> uint32_t numBatches = inputInfo.GetShape()[0];</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160;    <span class="keyword">const</span> uint32_t inputSize  = inputInfo.GetShape()[1];</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;    <span class="keyword">const</span> uint32_t outputSize = cellStateInInfo.GetShape()[1];</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;</div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160;    <span class="comment">// Validate number of dimensions and number of elements for input/output tensors</span></div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;    ValidateTensorNumDimNumElem(inputInfo, 2, (numBatches * inputSize), descriptorName + <span class="stringliteral">&quot; input&quot;</span>);</div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;    ValidateTensorNumDimNumElem(cellStateInInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; cellStateIn&quot;</span>);</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;    ValidateTensorNumDimNumElem(outputStateInInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; outputStateIn&quot;</span>);</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160;    ValidateTensorNumDimNumElem(cellStateOutInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; cellStateOut&quot;</span>);</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;    ValidateTensorNumDimNumElem(outputStateOutInfo, 2, (numBatches * outputSize), descriptorName + <span class="stringliteral">&quot; outputStateOut&quot;</span>);</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;    <span class="comment">// Validate number of dimensions and number of elements for weights tensors</span></div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160;    ValidatePointer(m_InputToInputWeights, descriptorName, <span class="stringliteral">&quot;InputToInputWeights&quot;</span>);</div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;    <span class="keyword">auto</span> inputToInputWeightsInfo = m_InputToInputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;    ValidateTensorNumDimNumElem(inputToInputWeightsInfo, 2, (outputSize * inputSize), <span class="stringliteral">&quot; InputToInputWeights&quot;</span>);</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160;</div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160;    ValidatePointer(m_InputToForgetWeights, descriptorName, <span class="stringliteral">&quot;InputToForgetWeights&quot;</span>);</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;    <span class="keyword">auto</span> inputToForgetWeightsInfo = m_InputToForgetWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;    ValidateTensorNumDimNumElem(inputToForgetWeightsInfo, 2, (outputSize * inputSize), <span class="stringliteral">&quot; InputToForgetWeights&quot;</span>);</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;    ValidatePointer(m_InputToCellWeights, descriptorName, <span class="stringliteral">&quot;InputToCellWeights&quot;</span>);</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160;    <span class="keyword">auto</span> inputToCellWeightsInfo = m_InputToCellWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;    ValidateTensorNumDimNumElem(inputToCellWeightsInfo, 2, (outputSize * inputSize), <span class="stringliteral">&quot; InputToCellWeights&quot;</span>);</div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160;</div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160;    ValidatePointer(m_InputToOutputWeights, descriptorName, <span class="stringliteral">&quot;InputToOutputWeights&quot;</span>);</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160;    <span class="keyword">auto</span> inputToOutputWeightsInfo = m_InputToOutputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;    ValidateTensorNumDimNumElem(inputToOutputWeightsInfo, 2, (outputSize * inputSize), <span class="stringliteral">&quot; InputToOutputWeights&quot;</span>);</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;    ValidatePointer(m_RecurrentToInputWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160;    <span class="keyword">auto</span> recurrentToInputWeightsInfo = m_RecurrentToInputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160;    ValidateTensorNumDimNumElem(recurrentToInputWeightsInfo, 2, (outputSize * outputSize), <span class="stringliteral">&quot; RecurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;</div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160;    ValidatePointer(m_RecurrentToForgetWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToForgetWeights&quot;</span>);</div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160;    <span class="keyword">auto</span> recurrentToForgetWeightsInfo = m_RecurrentToForgetWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;    ValidateTensorNumDimNumElem(recurrentToForgetWeightsInfo, 2, (outputSize * outputSize),</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160;                                <span class="stringliteral">&quot; RecurrentToForgetWeights&quot;</span>);</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;    ValidatePointer(m_RecurrentToCellWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;    <span class="keyword">auto</span> recurrentToCellWeightsInfo = m_RecurrentToCellWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;    ValidateTensorNumDimNumElem(recurrentToCellWeightsInfo, 2, (outputSize * outputSize), <span class="stringliteral">&quot; RecurrentToCellWeights&quot;</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"> 3299</span>&#160;    ValidatePointer(m_RecurrentToOutputWeights, descriptorName, <span class="stringliteral">&quot;RecurrentToOutputWeights&quot;</span>);</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;    <span class="keyword">auto</span> recurrentToOutputWeightsInfo = m_RecurrentToOutputWeights-&gt;GetTensorInfo();</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;    ValidateTensorNumDimNumElem(recurrentToOutputWeightsInfo, 2, (outputSize * outputSize), <span class="stringliteral">&quot; RecurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160;</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;    <span class="comment">// Validate data types for weights tensors (all should match each other)</span></div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160;    ValidateDataTypes(inputToInputWeightsInfo, weightsSupportedTypes, descriptorName);</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;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToForgetWeightsInfo, descriptorName,</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>);</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToCellWeightsInfo, descriptorName,</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;inputToCellWeights&quot;</span>);</div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToOutputWeightsInfo, descriptorName,</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;inputToOutputWeights&quot;</span>);</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToInputWeightsInfo, descriptorName,</div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToForgetWeightsInfo, descriptorName,</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToForgeteights&quot;</span>);</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToCellWeightsInfo, descriptorName,</div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;    ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToOutputWeightsInfo, descriptorName,</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;                                 <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToOutputWeights&quot;</span>);</div><div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160;</div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;    <span class="comment">// Validate matching quantization info for weight tensors (all should match each other)</span></div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToForgetWeightsInfo,</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;inputToForgetWeights&quot;</span>);</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToCellWeightsInfo,</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;inputToCellWeights&quot;</span>);</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToOutputWeightsInfo,</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;inputToOutputWeights&quot;</span>);</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToInputWeightsInfo,</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToInputWeights&quot;</span>);</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToForgetWeightsInfo,</div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToForgetWeights&quot;</span>);</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToCellWeightsInfo,</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToCellWeights&quot;</span>);</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;    ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToOutputWeightsInfo,</div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160;                                    descriptorName, <span class="stringliteral">&quot;inputToInputWeights&quot;</span>, <span class="stringliteral">&quot;recurrentToOutputWeights&quot;</span>);</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160;</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;    <span class="comment">// Validate number of dimensions and number of elements in bias tensors</span></div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160;    ValidatePointer(m_InputGateBias, descriptorName, <span class="stringliteral">&quot;InputGateBias&quot;</span>);</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;    <span class="keyword">auto</span> inputGateBiasInfo = m_InputGateBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;    ValidateTensorNumDimNumElem(inputGateBiasInfo, 1, outputSize, <span class="stringliteral">&quot; InputGateBias&quot;</span>);</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;    ValidatePointer(m_ForgetGateBias, descriptorName, <span class="stringliteral">&quot;ForgetGateBias&quot;</span>);</div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160;    <span class="keyword">auto</span> forgetGateBiasInfo = m_ForgetGateBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;    ValidateTensorNumDimNumElem(forgetGateBiasInfo, 1, outputSize, <span class="stringliteral">&quot; ForgetGateBias&quot;</span>);</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"> 3348</span>&#160;    ValidatePointer(m_CellBias, descriptorName, <span class="stringliteral">&quot;CellBias&quot;</span>);</div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160;    <span class="keyword">auto</span> cellBiasInfo = m_CellBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160;    ValidateTensorNumDimNumElem(cellBiasInfo, 1, outputSize, <span class="stringliteral">&quot; CellBias&quot;</span>);</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160;</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160;    ValidatePointer(m_OutputGateBias, descriptorName, <span class="stringliteral">&quot;OutputGateBias&quot;</span>);</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;    <span class="keyword">auto</span> outputGateBiasInfo = m_OutputGateBias-&gt;GetTensorInfo();</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;    ValidateTensorNumDimNumElem(outputGateBiasInfo, 1, outputSize, <span class="stringliteral">&quot; OutputGateBias&quot;</span>);</div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160;</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;    <span class="comment">// Validate data types for bias tensors (all should match each other)</span></div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160;    ValidateDataTypes(inputGateBiasInfo, biasSupportedTypes, descriptorName);</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;    ValidateTensorDataTypesMatch(inputGateBiasInfo, forgetGateBiasInfo, descriptorName,</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;                                 <span class="stringliteral">&quot;inputGateBias&quot;</span>, <span class="stringliteral">&quot;forgetGateBias&quot;</span>);</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;    ValidateTensorDataTypesMatch(inputGateBiasInfo, cellBiasInfo, descriptorName,</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;                                 <span class="stringliteral">&quot;inputGateBias&quot;</span>, <span class="stringliteral">&quot;cellBias&quot;</span>);</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;    ValidateTensorDataTypesMatch(inputGateBiasInfo, outputGateBiasInfo, descriptorName,</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;                                 <span class="stringliteral">&quot;inputGateBias&quot;</span>, <span class="stringliteral">&quot;outputGateBias&quot;</span>);</div><div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>&#160;</div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160;    <span class="comment">// Validate bias tensor quantization info</span></div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160;    ValidateBiasTensorQuantization(inputGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);</div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160;    ValidateBiasTensorQuantization(forgetGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;    ValidateBiasTensorQuantization(cellBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);</div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;    ValidateBiasTensorQuantization(outputGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);</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;</div><div class="line"><a name="l03373"></a><span class="lineno"><a class="line" href="structarmnn_1_1_abs_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3373</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_abs_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">AbsQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;AbsQueueDescriptor&quot;</span>};</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160;</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160;</div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</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"> 3387</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;    };</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160;</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160;}</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;</div><div class="line"><a name="l03400"></a><span class="lineno"><a class="line" href="structarmnn_1_1_slice_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3400</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_slice_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">SliceQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;SliceQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160;    <span class="keywordflow">if</span> (rank &gt; 4)</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;    {</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensors with rank greater than 4 are not supported.&quot;</span>);</div><div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160;    }</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;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, rank, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160;</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160;    <span class="comment">// Check if m_Begin and m_Size have the expected length</span></div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_Begin.size() != rank)</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;    {</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;            <span class="stringliteral">&quot;: Length of begin offset descriptor must equal rank &quot;</span> + std::to_string(rank));</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;    }</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_Size.size() != rank)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName +</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160;            <span class="stringliteral">&quot;: Length of size descriptor must equal rank &quot;</span> + std::to_string(rank));</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160;    }</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160;</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160;    <span class="comment">// Check if the shape of the output tensor matches m_Size</span></div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; outputShape = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; rank; ++i)</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160;    {</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160;        <span class="keywordflow">if</span> (m_Parameters.m_Size[i] != outputShape[i])</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;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Size descriptor does not match output tensor.&quot;</span>);</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160;        }</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;    }</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160;</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;    <span class="comment">// Check if the sum of begin offset and size in a given dimension</span></div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;    <span class="comment">// does not exceed the size of corresponding input</span></div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; rank; ++i)</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="keywordflow">if</span> (m_Parameters.m_Begin[i] + m_Parameters.m_Size[i] &gt; inputShape[i])</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160;        {</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Sum of begin offset and size for dimension &quot;</span> +</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160;                std::to_string(i) + <span class="stringliteral">&quot; exceeds input size.&quot;</span>);</div><div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160;        }</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160;    }</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;</div><div class="line"><a name="l03455"></a><span class="lineno"><a class="line" href="structarmnn_1_1_depth_to_space_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3455</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_depth_to_space_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">DepthToSpaceQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;DepthToSpaceQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160;</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160;    ValidateTensorNumDimensions(inputInfo,  descriptorName, 4, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160;    ValidateTensorNumDimensions(outputInfo, descriptorName, 4, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160;    {</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a></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;</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;    ValidateDataTypes(inputInfo,  supportedTypes, descriptorName);</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160;    ValidateDataTypes(outputInfo, supportedTypes, descriptorName);</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;    ValidateTensorNumElementsMatch(inputInfo, outputInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160;</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_BlockSize == 0)</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;    {</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Block size cannot be 0.&quot;</span>);</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160;    }</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;    <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dimensionIndices(m_Parameters.m_DataLayout);</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> wIndex = dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">GetWidthIndex</a>();</div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hIndex = dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">GetHeightIndex</a>();</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cIndex = dimensionIndices.<a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a861b2621ee46e4b63379988b360b8cd9">GetChannelsIndex</a>();</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; outputShape = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160;    <span class="keywordflow">if</span> (outputShape[hIndex] % m_Parameters.m_BlockSize != 0 || outputShape[wIndex]  % m_Parameters.m_BlockSize != 0)</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;    {</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output width and height shape&quot;</span></div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160;                                       <span class="stringliteral">&quot;must be divisible by block size.&quot;</span>);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inputShape = inputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;    <span class="keywordflow">if</span> (inputShape[cIndex] % (m_Parameters.m_BlockSize * m_Parameters.m_BlockSize) != 0)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: The depth of the input tensor&quot;</span></div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160;                                       <span class="stringliteral">&quot;must be divisible by the square of block size.&quot;</span> );</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160;    }</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160;}</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"><a class="line" href="structarmnn_1_1_comparison_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3508</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_comparison_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ComparisonQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ComparisonQueueDescriptor&quot;</span>};</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</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;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;                                       descriptorName,</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>)</div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160;    {</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Boolean.&quot;</span>);</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;    }</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;</div><div class="line"><a name="l03532"></a><span class="lineno"><a class="line" href="structarmnn_1_1_elementwise_unary_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3532</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_elementwise_unary_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ElementwiseUnaryQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ElementwiseUnaryQueueDescriptor&quot;</span>};</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160;</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160;</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160;    ValidateTensorShapesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</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;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160;    {</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;    };</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;    std::vector&lt;DataType&gt; logicalSupportedTypes =</div><div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;    {</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a></div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;    };</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;</div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160;    <span class="keywordflow">if</span> (m_Parameters.m_Operation == <a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">UnaryOperation::LogicalNot</a>)</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;        ValidateDataTypes(inputTensorInfo, logicalSupportedTypes, descriptorName);</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160;    }</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160;    <span class="keywordflow">else</span></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"> 3566</span>&#160;        ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160;    }</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160;}</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"><a class="line" href="structarmnn_1_1_rank_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3573</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_rank_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">RankQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;RankQueueDescriptor&quot;</span>};</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"> 3577</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160;</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;    ValidateTensorNumDimensions(outputTensorInfo, descriptorName, 1, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;    ValidateTensorNumElements(outputTensorInfo, descriptorName, 1, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;</div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160;    {</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">DataType::QSymmS8</a>,</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;    ValidateDataTypes(outputTensorInfo, { DataType::Signed32 }, descriptorName);</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160;}</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;</div><div class="line"><a name="l03602"></a><span class="lineno"><a class="line" href="structarmnn_1_1_logical_binary_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3602</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_logical_binary_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">LogicalBinaryQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;LogicalBinaryQueueDescriptor&quot;</span>};</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;    ValidateNumInputs(workloadInfo,  descriptorName, 2);</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo0 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo1 = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[1];</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160;    ValidateBroadcastTensorShapesMatch(inputTensorInfo0,</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160;                                       inputTensorInfo1,</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160;                                       outputTensorInfo,</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160;                                       descriptorName,</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160;                                       <span class="stringliteral">&quot;input_0&quot;</span>,</div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;                                       <span class="stringliteral">&quot;input_1&quot;</span>);</div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160;</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo0.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>)</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"> 3622</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor 0 type must be Boolean.&quot;</span>);</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;    }</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo1.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>)</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;    {</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Input tensor 1 type must be Boolean.&quot;</span>);</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;</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160;    <span class="keywordflow">if</span> (outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() != <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">DataType::Boolean</a>)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descriptorName + <span class="stringliteral">&quot;: Output tensor type must be Boolean.&quot;</span>);</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160;    }</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;}</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;</div><div class="line"><a name="l03636"></a><span class="lineno"><a class="line" href="structarmnn_1_1_reduce_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf"> 3636</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="structarmnn_1_1_reduce_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">ReduceQueueDescriptor::Validate</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a>&amp; workloadInfo)<span class="keyword"> const</span></div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;    <span class="keyword">const</span> std::string descriptorName{<span class="stringliteral">&quot;ReduceQueueDescriptor&quot;</span>};</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;    ValidateNumInputs(workloadInfo,  descriptorName, 1);</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;    ValidateNumOutputs(workloadInfo, descriptorName, 1);</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;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo  = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>[0];</div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = workloadInfo.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>[0];</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160;</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160;    std::vector&lt;DataType&gt; supportedTypes =</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160;    {</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6acdb56b2d2f73c26480207524f2dbe0af">DataType::BFloat16</a>,</div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">DataType::Float16</a>,</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>,</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">DataType::QAsymmS8</a>,</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">DataType::QAsymmU8</a>,</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">DataType::QSymmS16</a>,</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">DataType::Signed32</a></div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;    };</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;    ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);</div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160;    ValidateTensorDataTypesMatch(inputTensorInfo, outputTensorInfo, descriptorName, <span class="stringliteral">&quot;input&quot;</span>, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160;}</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160;</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160;} <span class="comment">// namespace armnn</span></div><div class="ttc" id="structarmnn_1_1_permute_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_permute_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::PermuteQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01387">WorkloadData.cpp:1387</a></div></div>
<div class="ttc" id="structarmnn_1_1_division_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_division_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::DivisionQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02212">WorkloadData.cpp:2212</a></div></div>
<div class="ttc" id="structarmnn_1_1_q_lstm_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_q_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::QLstmQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02916">WorkloadData.cpp:2916</a></div></div>
<div class="ttc" id="structarmnn_1_1_merge_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_merge_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MergeQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02734">WorkloadData.cpp:2734</a></div></div>
<div class="ttc" id="_workload_data_8hpp_xhtml"><div class="ttname"><a href="_workload_data_8hpp.xhtml">WorkloadData.hpp</a></div></div>
<div class="ttc" id="_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_subtraction_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_subtraction_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SubtractionQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02246">WorkloadData.cpp:2246</a></div></div>
<div class="ttc" id="structarmnn_1_1_log_softmax_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_log_softmax_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::LogSoftmaxQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01619">WorkloadData.cpp:1619</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a22f377fc4e10dc1773a3f979061e85f1"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a22f377fc4e10dc1773a3f979061e85f1">armnn::TensorInfo::IsTypeSpaceMatch</a></div><div class="ttdeci">bool IsTypeSpaceMatch(const TensorInfo &amp;other) const</div><div class="ttdoc">Check that the types are the same and, if quantize, that the quantization parameters are the same...</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00423">Tensor.cpp:423</a></div></div>
<div class="ttc" id="structarmnn_1_1_instance_normalization_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_instance_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::InstanceNormalizationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01558">WorkloadData.cpp:1558</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a27226c864bac7454a8504f8edb15d95b">armnn::DataType::Boolean</a></div></div>
<div class="ttc" id="structarmnn_1_1_mem_sync_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_mem_sync_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MemSyncQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00596">WorkloadData.cpp:596</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a414e6f95548e6f7a01d5028b55ad3941"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a414e6f95548e6f7a01d5028b55ad3941">armnnUtils::DataLayoutIndexed::GetWidthIndex</a></div><div class="ttdeci">unsigned int GetWidthIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed.hpp:25</a></div></div>
<div class="ttc" id="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin_xhtml_af2f0a8c9eb32861711c0ce30b7986c44"><div class="ttname"><a href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">armnn::ConcatQueueDescriptor::ViewOrigin::m_Origin</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_Origin</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00128">WorkloadData.hpp:128</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_concat_queue_descriptor_1_1_view_origin_xhtml"><div class="ttname"><a href="structarmnn_1_1_concat_queue_descriptor_1_1_view_origin.xhtml">armnn::ConcatQueueDescriptor::ViewOrigin</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00122">WorkloadData.hpp:122</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt; unsigned int &gt;</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad44c007f21af2d0375e3ef9400a1b275"><div class="ttname"><a href="namespacearmnn.xhtml#ad44c007f21af2d0375e3ef9400a1b275">armnn::IsQuantizedType</a></div><div class="ttdeci">constexpr bool IsQuantizedType()</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00249">TypesUtils.hpp:249</a></div></div>
<div class="ttc" id="_deprecated_8hpp_xhtml_ab66a241a0ed3ee89c866e777b035d0ed"><div class="ttname"><a href="_deprecated_8hpp.xhtml#ab66a241a0ed3ee89c866e777b035d0ed">ARMNN_NO_DEPRECATE_WARN_BEGIN</a></div><div class="ttdeci">#define ARMNN_NO_DEPRECATE_WARN_BEGIN</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.xhtml#l00033">Deprecated.hpp:33</a></div></div>
<div class="ttc" id="structarmnn_1_1_mean_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_mean_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MeanQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02314">WorkloadData.cpp:2314</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="structarmnn_1_1_abs_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_abs_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::AbsQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03373">WorkloadData.cpp:3373</a></div></div>
<div class="ttc" id="structarmnn_1_1_normalization_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::NormalizationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01083">WorkloadData.cpp:1083</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_transpose_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::TransposeQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02887">WorkloadData.cpp:2887</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_depth_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SpaceToDepthQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01769">WorkloadData.cpp:1769</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_ab85cd8cc10c96a7c99c14042c251fc48"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#ab85cd8cc10c96a7c99c14042c251fc48">armnn::TensorInfo::HasPerAxisQuantization</a></div><div class="ttdeci">bool HasPerAxisQuantization() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00437">Tensor.cpp:437</a></div></div>
<div class="ttc" id="structarmnn_1_1_minimum_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_minimum_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MinimumQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02490">WorkloadData.cpp:2490</a></div></div>
<div class="ttc" id="structarmnn_1_1_floor_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_floor_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::FloorQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01822">WorkloadData.cpp:1822</a></div></div>
<div class="ttc" id="structarmnn_1_1_gather_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_gather_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::GatherQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02606">WorkloadData.cpp:2606</a></div></div>
<div class="ttc" id="structarmnn_1_1_fake_quantization_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_fake_quantization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::FakeQuantizationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01537">WorkloadData.cpp:1537</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SpaceToBatchNdQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01702">WorkloadData.cpp:1702</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_normalization_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::BatchNormalizationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01185">WorkloadData.cpp:1185</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::DetectionPostProcessQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02641">WorkloadData.cpp:2641</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b8fc85ce966c035d789cf22db5088a1"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b8fc85ce966c035d789cf22db5088a1">armnn::TensorInfo::GetQuantizationDim</a></div><div class="ttdeci">Optional&lt; unsigned int &gt; GetQuantizationDim() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00485">Tensor.cpp:485</a></div></div>
<div class="ttc" id="structarmnn_1_1_maximum_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_maximum_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MaximumQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02280">WorkloadData.cpp:2280</a></div></div>
<div class="ttc" id="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin_xhtml"><div class="ttname"><a href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml">armnn::SplitterQueueDescriptor::ViewOrigin</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00103">WorkloadData.hpp:103</a></div></div>
<div class="ttc" id="structarmnn_1_1_equal_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_equal_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::EqualQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02532">WorkloadData.cpp:2532</a></div></div>
<div class="ttc" id="structarmnn_1_1_logical_binary_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_logical_binary_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::LogicalBinaryQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03602">WorkloadData.cpp:3602</a></div></div>
<div class="ttc" id="structarmnn_1_1_mem_import_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_mem_import_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MemImportQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00540">WorkloadData.cpp:540</a></div></div>
<div class="ttc" id="_neon_end_to_end_tests_8cpp_xhtml_a358cb7cd3c0647b25be049fd734b8c22"><div class="ttname"><a href="_neon_end_to_end_tests_8cpp.xhtml#a358cb7cd3c0647b25be049fd734b8c22">anchorsInfo</a></div><div class="ttdeci">armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32)</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_ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_xhtml_a765d2cee4ccce5b9467e0c2b6d25b84a"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.xhtml#a765d2cee4ccce5b9467e0c2b6d25b84a">armnn::QueueDescriptor::ValidateInputsOutputs</a></div><div class="ttdeci">void ValidateInputsOutputs(const std::string &amp;descName, unsigned int numExpectedIn, unsigned int numExpectedOut) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00460">WorkloadData.cpp:460</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_strided_slice_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::StridedSliceQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02433">WorkloadData.cpp:2433</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a490ec6b59006d1fe1ec2ea30e69fb97c"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">armnn::PermutationVector::GetSize</a></div><div class="ttdeci">SizeType GetSize() const</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00241">Types.hpp:241</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_reference_switch_xhtml_a77c7d528ac063d870b8c8426ec81c1c3"><div class="ttname"><a href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">armnn::OptionalReferenceSwitch::value</a></div><div class="ttdeci">const T &amp; value() const</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00146">Optional.hpp:146</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8bc11f1fa23ef42532f9fdd04d355270"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8bc11f1fa23ef42532f9fdd04d355270">armnn::TensorInfo::GetQuantizationScales</a></div><div class="ttdeci">std::vector&lt; float &gt; GetQuantizationScales() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00442">Tensor.cpp:442</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_af672d1c9e2a120a18926cb645981fbb7"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#af672d1c9e2a120a18926cb645981fbb7">armnn::TensorInfo::HasMultipleQuantizationScales</a></div><div class="ttdeci">bool HasMultipleQuantizationScales() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00197">Tensor.hpp:197</a></div></div>
<div class="ttc" id="structarmnn_1_1_debug_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_debug_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::DebugQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02524">WorkloadData.cpp:2524</a></div></div>
<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml_a61c00316c443adc233c24e85c6c5b740"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml#a61c00316c443adc233c24e85c6c5b740">armnnUtils::DataLayoutIndexed::GetHeightIndex</a></div><div class="ttdeci">unsigned int GetHeightIndex() const</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed.hpp:24</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8a2a25ebd8c909241e3f7818389b804ecc">armnn::UnaryOperation::LogicalNot</a></div></div>
<div class="ttc" id="structarmnn_1_1_lstm_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::LstmQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01848">WorkloadData.cpp:1848</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="structarmnn_1_1_splitter_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_splitter_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SplitterQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00734">WorkloadData.cpp:734</a></div></div>
<div class="ttc" id="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_convert_fp16_to_fp32_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ConvertFp16ToFp32QueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02189">WorkloadData.cpp:2189</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a81b5ff8545adad19a1c9d4ca076d552c"><div class="ttname"><a href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a></div><div class="ttdeci">constexpr const char * GetDataTypeName(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00180">TypesUtils.hpp:180</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad91bc7bfe29186f5d78c28386c6c5309"><div class="ttname"><a href="namespacearmnn.xhtml#ad91bc7bfe29186f5d78c28386c6c5309">armnn::IsQuantized8BitType</a></div><div class="ttdeci">constexpr bool IsQuantized8BitType(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00254">TypesUtils.hpp:254</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_activation_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ActivationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00618">WorkloadData.cpp:618</a></div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml_ac97905bfa0daab357b91df1347600309"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">armnn::WorkloadInfo::m_InputTensorInfos</a></div><div class="ttdeci">std::vector&lt; TensorInfo &gt; m_InputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo.hpp:18</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::TransposeConvolution2dQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02835">WorkloadData.cpp:2835</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="_deprecated_8hpp_xhtml_ad762b11b48e5c1d1c1743f529485728a"><div class="ttname"><a href="_deprecated_8hpp.xhtml#ad762b11b48e5c1d1c1743f529485728a">ARMNN_NO_DEPRECATE_WARN_END</a></div><div class="ttdeci">#define ARMNN_NO_DEPRECATE_WARN_END</div><div class="ttdef"><b>Definition:</b> <a href="_deprecated_8hpp_source.xhtml#l00034">Deprecated.hpp:34</a></div></div>
<div class="ttc" id="structarmnn_1_1_slice_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_slice_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SliceQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03400">WorkloadData.cpp:3400</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="structarmnn_1_1_multiplication_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_multiplication_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MultiplicationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01148">WorkloadData.cpp:1148</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="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="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00194">Tensor.hpp:194</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="classarmnn_1_1_optional_base_xhtml_a86b749ce2c4bc627fa8a1fcfaf0e314f"><div class="ttname"><a href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">armnn::OptionalBase::has_value</a></div><div class="ttdeci">bool has_value() const noexcept</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00053">Optional.hpp:53</a></div></div>
<div class="ttc" id="structarmnn_1_1_convert_bf16_to_fp32_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_convert_bf16_to_fp32_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ConvertBf16ToFp32QueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02120">WorkloadData.cpp:2120</a></div></div>
<div class="ttc" id="structarmnn_1_1_rsqrt_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_rsqrt_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::RsqrtQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02580">WorkloadData.cpp:2580</a></div></div>
<div class="ttc" id="structarmnn_1_1_map_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_map_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MapQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00468">WorkloadData.cpp:468</a></div></div>
<div class="ttc" id="namespacearmnn_utils_xhtml_ac93cb1365b4bcb67df2a3164606096c5"><div class="ttname"><a href="namespacearmnn_utils.xhtml#ac93cb1365b4bcb67df2a3164606096c5">armnnUtils::GetUnsignedAxis</a></div><div class="ttdeci">unsigned int GetUnsignedAxis(const unsigned int inputDimension, const int axis)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_utils_8cpp_source.xhtml#l00127">TensorUtils.cpp:127</a></div></div>
<div class="ttc" id="structarmnn_1_1_l2_normalization_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_l2_normalization_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::L2NormalizationQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01587">WorkloadData.cpp:1587</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::BatchToSpaceNdQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02409">WorkloadData.cpp:2409</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a26e6ed77470c6f2f830ecf874e6c0d55">armnn::DataType::Float16</a></div></div>
<div class="ttc" id="structarmnn_1_1_unmap_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_unmap_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::UnmapQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00486">WorkloadData.cpp:486</a></div></div>
<div class="ttc" id="structarmnn_1_1_addition_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_addition_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::AdditionQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01111">WorkloadData.cpp:1111</a></div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml_a67b178f8a836bc1e52b8de109760adfd"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">armnn::WorkloadInfo::m_OutputTensorInfos</a></div><div class="ttdeci">std::vector&lt; TensorInfo &gt; m_OutputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo.hpp:19</a></div></div>
<div class="ttc" id="structarmnn_1_1_mem_copy_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::MemCopyQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00504">WorkloadData.cpp:504</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::Convolution2dQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01231">WorkloadData.cpp:1231</a></div></div>
<div class="ttc" id="structarmnn_1_1_elementwise_unary_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_elementwise_unary_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ElementwiseUnaryQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03532">WorkloadData.cpp:3532</a></div></div>
<div class="ttc" id="structarmnn_1_1_convert_fp32_to_bf16_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_convert_fp32_to_bf16_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ConvertFp32ToBf16QueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02143">WorkloadData.cpp:2143</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="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
<div class="ttc" id="structarmnn_1_1_dequantize_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_dequantize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::DequantizeQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02709">WorkloadData.cpp:2709</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_stack_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::StackQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00902">WorkloadData.cpp:902</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_quantize_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_quantize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::QuantizeQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02380">WorkloadData.cpp:2380</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="structarmnn_1_1_comparison_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_comparison_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ComparisonQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03508">WorkloadData.cpp:3508</a></div></div>
<div class="ttc" id="_cpu_tensor_handle_8hpp_xhtml"><div class="ttname"><a href="_cpu_tensor_handle_8hpp.xhtml">CpuTensorHandle.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_constant_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_constant_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ConstantQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01642">WorkloadData.cpp:1642</a></div></div>
<div class="ttc" id="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_convert_fp32_to_fp16_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ConvertFp32ToFp16QueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02166">WorkloadData.cpp:2166</a></div></div>
<div class="ttc" id="structarmnn_1_1_rank_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_rank_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::RankQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03573">WorkloadData.cpp:3573</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::DepthwiseConvolution2dQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01305">WorkloadData.cpp:1305</a></div></div>
<div class="ttc" id="structarmnn_1_1_pad_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_pad_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::PadQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02358">WorkloadData.cpp:2358</a></div></div>
<div class="ttc" id="structarmnn_1_1_quantized_lstm_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_quantized_lstm_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::QuantizedLstmQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03202">WorkloadData.cpp:3202</a></div></div>
<div class="ttc" id="structarmnn_1_1_pre_compiled_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_pre_compiled_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::PreCompiledQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02793">WorkloadData.cpp:2793</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_reduce_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_reduce_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ReduceQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03636">WorkloadData.cpp:3636</a></div></div>
<div class="ttc" id="structarmnn_1_1_concat_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_concat_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ConcatQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00806">WorkloadData.cpp:806</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_xhtml_a6abd491bb99ffe88bd472c1ae5a1ed1a"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">armnn::QueueDescriptor::m_Outputs</a></div><div class="ttdeci">std::vector&lt; ITensorHandle * &gt; m_Outputs</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00031">WorkloadData.hpp:31</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_pooling2d_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::Pooling2dQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01416">WorkloadData.cpp:1416</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="structarmnn_1_1_reshape_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_reshape_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ReshapeQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01673">WorkloadData.cpp:1673</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
<div class="ttc" id="structarmnn_1_1_fill_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_fill_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::FillQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00998">WorkloadData.cpp:998</a></div></div>
<div class="ttc" id="structarmnn_1_1_switch_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_switch_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SwitchQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02752">WorkloadData.cpp:2752</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_fully_connected_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::FullyConnectedQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01021">WorkloadData.cpp:1021</a></div></div>
<div class="ttc" id="structarmnn_1_1_greater_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_greater_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::GreaterQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02556">WorkloadData.cpp:2556</a></div></div>
<div class="ttc" id="_neon_end_to_end_tests_8cpp_xhtml_a64c1dd1b6dd60be9f4a16db9c8f427a5"><div class="ttname"><a href="_neon_end_to_end_tests_8cpp.xhtml#a64c1dd1b6dd60be9f4a16db9c8f427a5">scoresInfo</a></div><div class="ttdeci">armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32)</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_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</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="structarmnn_1_1_arg_min_max_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_arg_min_max_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ArgMinMaxQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00643">WorkloadData.cpp:643</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_xhtml_a4b50e46a6810018f3edecfb68b2a76b3"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">armnn::QueueDescriptor::m_Inputs</a></div><div class="ttdeci">std::vector&lt; ITensorHandle * &gt; m_Inputs</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00030">WorkloadData.hpp:30</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="structarmnn_1_1_prelu_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_prelu_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::PreluQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l02798">WorkloadData.cpp:2798</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_bilinear_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_resize_bilinear_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ResizeBilinearQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01443">WorkloadData.cpp:1443</a></div></div>
<div class="ttc" id="structarmnn_1_1_depth_to_space_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_depth_to_space_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::DepthToSpaceQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l03455">WorkloadData.cpp:3455</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</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="classarmnn_1_1_tensor_info_xhtml_a7c00efeb540198b33b8558c76e5cc2dd"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a7c00efeb540198b33b8558c76e5cc2dd">armnn::TensorInfo::IsQuantized</a></div><div class="ttdeci">bool IsQuantized() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00495">Tensor.cpp:495</a></div></div>
<div class="ttc" id="structarmnn_1_1_softmax_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_softmax_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::SoftmaxQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l00709">WorkloadData.cpp:709</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorInfo::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00192">Tensor.hpp:192</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_queue_descriptor_xhtml_a041e495449e22774a34d92b0904c10bf"><div class="ttname"><a href="structarmnn_1_1_resize_queue_descriptor.xhtml#a041e495449e22774a34d92b0904c10bf">armnn::ResizeQueueDescriptor::Validate</a></div><div class="ttdeci">void Validate(const WorkloadInfo &amp;workloadInfo) const</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8cpp_source.xhtml#l01490">WorkloadData.cpp:1490</a></div></div>
<div class="ttc" id="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin_xhtml_af2f0a8c9eb32861711c0ce30b7986c44"><div class="ttname"><a href="structarmnn_1_1_splitter_queue_descriptor_1_1_view_origin.xhtml#af2f0a8c9eb32861711c0ce30b7986c44">armnn::SplitterQueueDescriptor::ViewOrigin::m_Origin</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_Origin</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00109">WorkloadData.hpp:109</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="_workload_data_8cpp.xhtml">WorkloadData.cpp</a></li>
    <li class="footer">Generated on Fri Mar 19 2021 15:26:02 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>