aboutsummaryrefslogtreecommitdiff
path: root/Documentation/_network_execution_utils_8hpp_source.xhtml
blob: 3bd5cfe7a0e0b1177e4227b02319a0598425228a (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
<!-- 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: tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">20.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('_network_execution_utils_8hpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

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

<div class="header">
  <div class="headertitle">
<div class="title">NetworkExecutionUtils.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_network_execution_utils_8hpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_arm_n_n_8hpp.xhtml">armnn/ArmNN.hpp</a>&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_types_utils_8hpp.xhtml">armnn/TypesUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#if defined(ARMNN_SERIALIZER)</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_deserializer_8hpp.xhtml">armnnDeserializer/IDeserializer.hpp</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#if defined(ARMNN_CAFFE_PARSER)</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_caffe_parser_8hpp.xhtml">armnnCaffeParser/ICaffeParser.hpp</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#if defined(ARMNN_TF_PARSER)</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_tf_parser_8hpp.xhtml">armnnTfParser/ITfParser.hpp</a>&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#if defined(ARMNN_TF_LITE_PARSER)</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_tf_lite_parser_8hpp.xhtml">armnnTfLiteParser/ITfLiteParser.hpp</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#if defined(ARMNN_ONNX_PARSER)</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_onnx_parser_8hpp.xhtml">armnnOnnxParser/IOnnxParser.hpp</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_csv_reader_8hpp.xhtml">CsvReader.hpp</a>&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;../InferenceTest.hpp&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_profiling_8hpp.xhtml">Profiling.hpp</a>&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_resolve_type_8hpp.xhtml">ResolveType.hpp</a>&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;boost/algorithm/string/trim.hpp&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;boost/algorithm/string/split.hpp&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;boost/algorithm/string/classification.hpp&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;boost/program_options.hpp&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &lt;boost/variant.hpp&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;future&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">namespace</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">// Configure boost::program_options for command-line parsing and validation.</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="keyword">namespace </span>po = boost::program_options;</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">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> TParseElementFunc&gt;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;std::vector&lt;T&gt; ParseArrayImpl(std::istream&amp; stream, TParseElementFunc parseElementFunc, <span class="keyword">const</span> <span class="keywordtype">char</span> * chars = <span class="stringliteral">&quot;\t ,:&quot;</span>)</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;    std::vector&lt;T&gt; result;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">// Processes line-by-line.</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    std::string line;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">while</span> (std::getline(stream, line))</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::vector&lt;std::string&gt; tokens;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keywordflow">try</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        {</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;            <span class="comment">// Coverity fix: boost::split() may throw an exception of type boost::bad_function_call.</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;            boost::split(tokens, line, boost::algorithm::is_any_of(chars), boost::token_compress_on);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        }</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</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;            <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(error) &lt;&lt; <span class="stringliteral">&quot;An error occurred when splitting tokens: &quot;</span> &lt;&lt; e.what();</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        }</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string&amp; token : tokens)</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        {</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;            <span class="keywordflow">if</span> (!token.empty()) <span class="comment">// See https://stackoverflow.com/questions/10437406/</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;            {</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;                <span class="keywordflow">try</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;                {</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;                    result.push_back(parseElementFunc(token));</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;                }</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp;)</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;                {</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;                    <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(error) &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span> &lt;&lt; token &lt;&lt; <span class="stringliteral">&quot;&#39; is not a valid number. It has been ignored.&quot;</span>;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;                }</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;        }</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    }</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="keywordtype">bool</span> CheckOption(<span class="keyword">const</span> po::variables_map&amp; vm,</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                 <span class="keyword">const</span> <span class="keywordtype">char</span>* option)</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;{</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="comment">// Check that the given option is valid.</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">if</span> (option == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    {</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</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;    <span class="comment">// Check whether &#39;option&#39; is provided.</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordflow">return</span> vm.find(option) != vm.end();</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;}</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="keywordtype">void</span> CheckOptionDependency(<span class="keyword">const</span> po::variables_map&amp; vm,</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;                           <span class="keyword">const</span> <span class="keywordtype">char</span>* option,</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;                           <span class="keyword">const</span> <span class="keywordtype">char</span>* required)</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;{</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="comment">// Check that the given options are valid.</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keywordflow">if</span> (option == <span class="keyword">nullptr</span> || required == <span class="keyword">nullptr</span>)</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;        <span class="keywordflow">throw</span> po::error(<span class="stringliteral">&quot;Invalid option to check dependency for&quot;</span>);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    }</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="comment">// Check that if &#39;option&#39; is provided, &#39;required&#39; is also provided.</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordflow">if</span> (CheckOption(vm, option) &amp;&amp; !vm[option].defaulted())</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    {</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <span class="keywordflow">if</span> (CheckOption(vm, required) == 0 || vm[required].defaulted())</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        {</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;            <span class="keywordflow">throw</span> po::error(std::string(<span class="stringliteral">&quot;Option &#39;&quot;</span>) + option + <span class="stringliteral">&quot;&#39; requires option &#39;&quot;</span> + required + <span class="stringliteral">&quot;&#39;.&quot;</span>);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        }</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    }</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;}</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="keywordtype">void</span> CheckOptionDependencies(<span class="keyword">const</span> po::variables_map&amp; vm)</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;    CheckOptionDependency(vm, <span class="stringliteral">&quot;model-path&quot;</span>, <span class="stringliteral">&quot;model-format&quot;</span>);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    CheckOptionDependency(vm, <span class="stringliteral">&quot;model-path&quot;</span>, <span class="stringliteral">&quot;input-name&quot;</span>);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    CheckOptionDependency(vm, <span class="stringliteral">&quot;model-path&quot;</span>, <span class="stringliteral">&quot;output-name&quot;</span>);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    CheckOptionDependency(vm, <span class="stringliteral">&quot;input-tensor-shape&quot;</span>, <span class="stringliteral">&quot;model-path&quot;</span>);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;}</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="keyword">template</span>&lt;armnn::DataType NonQuantizedType&gt;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="keyword">auto</span> ParseDataArray(std::istream &amp; stream);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType QuantizedType&gt;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="keyword">auto</span> ParseDataArray(std::istream&amp; stream,</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">float</span>&amp; quantizationScale,</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;                    <span class="keyword">const</span> int32_t&amp; quantizationOffset);</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="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="keyword">auto</span> ParseDataArray&lt;armnn::DataType::Float32&gt;(std::istream &amp; stream)</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;{</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="keywordflow">return</span> ParseArrayImpl&lt;float&gt;(stream, [](<span class="keyword">const</span> std::string&amp; s) { <span class="keywordflow">return</span> std::stof(s); });</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;}</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="keyword">auto</span> ParseDataArray&lt;armnn::DataType::Signed32&gt;(std::istream &amp; stream)</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;{</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">return</span> ParseArrayImpl&lt;int&gt;(stream, [](<span class="keyword">const</span> std::string &amp; s) { <span class="keywordflow">return</span> std::stoi(s); });</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;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="keyword">auto</span> ParseDataArray&lt;armnn::DataType::QAsymmU8&gt;(std::istream&amp; stream)</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">return</span> ParseArrayImpl&lt;uint8_t&gt;(stream,</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                                   [](<span class="keyword">const</span> std::string&amp; s) { <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;uint8_t&gt;(std::stoi(s)); });</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;}</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="keyword">auto</span> ParseDataArray&lt;armnn::DataType::QAsymmU8&gt;(std::istream&amp; stream,</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                                                      <span class="keyword">const</span> <span class="keywordtype">float</span>&amp; quantizationScale,</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;                                                      <span class="keyword">const</span> int32_t&amp; quantizationOffset)</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;    <span class="keywordflow">return</span> ParseArrayImpl&lt;uint8_t&gt;(stream,</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;                                   [&amp;quantizationScale, &amp;quantizationOffset](<span class="keyword">const</span> std::string &amp; s)</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;                                   {</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;                                       <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;uint8_t&gt;(</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;                                           armnn::Quantize&lt;uint8_t&gt;(std::stof(s),</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                                                                     quantizationScale,</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;                                                                     quantizationOffset));</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;}</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;std::vector&lt;unsigned int&gt; ParseArray(std::istream&amp; stream)</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="keywordflow">return</span> ParseArrayImpl&lt;unsigned int&gt;(stream,</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        [](<span class="keyword">const</span> std::string&amp; s) { <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(std::stoi(s)); });</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;std::vector&lt;std::string&gt; ParseStringList(<span class="keyword">const</span> std::string &amp; inputString, <span class="keyword">const</span> <span class="keywordtype">char</span> * delimiter)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;{</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    std::stringstream stream(inputString);</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">return</span> ParseArrayImpl&lt;std::string&gt;(stream, [](<span class="keyword">const</span> std::string&amp; s) { <span class="keywordflow">return</span> boost::trim_copy(s); }, delimiter);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;}</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="keywordtype">void</span> RemoveDuplicateDevices(std::vector&lt;armnn::BackendId&gt;&amp; computeDevices)</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;{</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="comment">// Mark the duplicate devices as &#39;Undefined&#39;.</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = computeDevices.begin(); i != computeDevices.end(); ++i)</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    {</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> j = std::next(i); j != computeDevices.end(); ++j)</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> (*j == *i)</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;                *j = <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a>;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;            }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        }</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="comment">// Remove &#39;Undefined&#39; devices.</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    computeDevices.erase(std::remove(computeDevices.begin(), computeDevices.end(), <a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a>),</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                         computeDevices.end());</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;}</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;<span class="keyword">struct </span>TensorPrinter : <span class="keyword">public</span> boost::static_visitor&lt;&gt;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;{</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    TensorPrinter(<span class="keyword">const</span> std::string&amp; binding,</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;                  <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; info,</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                  <span class="keyword">const</span> std::string&amp; outputTensorFile,</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;                  <span class="keywordtype">bool</span> dequantizeOutput)</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        : m_OutputBinding(binding)</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        , m_Scale(info.GetQuantizationScale())</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        , m_Offset(info.GetQuantizationOffset())</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        , m_OutputTensorFile(outputTensorFile)</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        , m_DequantizeOutput(dequantizeOutput)</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    {}</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="keywordtype">void</span> operator()(<span class="keyword">const</span> std::vector&lt;float&gt;&amp; values)</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    {</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        ForEachValue(values, [](<span class="keywordtype">float</span> value)</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;            {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                printf(<span class="stringliteral">&quot;%f &quot;</span>, value);</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;        WriteToFile(values);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    }</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; values)</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    {</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        <span class="keywordflow">if</span>(m_DequantizeOutput)</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;            <span class="keyword">auto</span>&amp; scale = m_Scale;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;            <span class="keyword">auto</span>&amp; offset = m_Offset;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;            std::vector&lt;float&gt; dequantizedValues;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;            ForEachValue(values, [&amp;scale, &amp;offset, &amp;dequantizedValues](uint8_t value)</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;            {</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;                <span class="keyword">auto</span> dequantizedValue = <a class="code" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a>(value, scale, offset);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;                printf(<span class="stringliteral">&quot;%f &quot;</span>, dequantizedValue);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                dequantizedValues.push_back(dequantizedValue);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;            });</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;            WriteToFile(dequantizedValues);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        }</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        {</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;            <span class="keyword">const</span> std::vector&lt;int&gt; intValues(values.begin(), values.end());</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            operator()(intValues);</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;    }</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; values)</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    {</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        ForEachValue(values, [](<span class="keywordtype">int</span> value)</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;                printf(<span class="stringliteral">&quot;%d &quot;</span>, value);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            });</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        WriteToFile(values);</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    }</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Delegate&gt;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordtype">void</span> ForEachValue(<span class="keyword">const</span> Container&amp; c, Delegate delegate)</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;        std::cout &lt;&lt; m_OutputBinding &lt;&lt; <span class="stringliteral">&quot;: &quot;</span>;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; value : c)</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        {</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;            delegate(value);</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;        printf(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    }</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keywordtype">void</span> WriteToFile(<span class="keyword">const</span> std::vector&lt;T&gt;&amp; values)</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    {</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">if</span> (!m_OutputTensorFile.empty())</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        {</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;            std::ofstream outputTensorFile;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;            outputTensorFile.open(m_OutputTensorFile, std::ofstream::out | std::ofstream::trunc);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;            <span class="keywordflow">if</span> (outputTensorFile.is_open())</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;                outputTensorFile &lt;&lt; m_OutputBinding &lt;&lt; <span class="stringliteral">&quot;: &quot;</span>;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;                std::copy(values.begin(), values.end(), std::ostream_iterator&lt;T&gt;(outputTensorFile, <span class="stringliteral">&quot; &quot;</span>));</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;            }</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;            {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;                <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Output Tensor File: &quot;</span> &lt;&lt; m_OutputTensorFile &lt;&lt; <span class="stringliteral">&quot; could not be opened!&quot;</span>;</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;            outputTensorFile.close();</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;    }</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    std::string m_OutputBinding;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    <span class="keywordtype">float</span> m_Scale=0.0f;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordtype">int</span> m_Offset=0;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    std::string m_OutputTensorFile;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <span class="keywordtype">bool</span> m_DequantizeOutput = <span class="keyword">false</span>;</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;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="keyword">template</span>&lt;armnn::DataType ArmnnType, <span class="keyword">typename</span> T = armnn::ResolveType&lt;ArmnnType&gt;&gt;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;std::vector&lt;T&gt; GenerateDummyTensorData(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements)</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;{</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keywordflow">return</span> std::vector&lt;T&gt;(numElements, <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(0));</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;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="keyword">using</span> <a class="code" href="_model_accuracy_checker_test_8cpp.xhtml#a9eb69ebdaf4ceb8014e7c8a540266100">TContainer</a>         = boost::variant&lt;std::vector&lt;float&gt;, std::vector&lt;int&gt;, std::vector&lt;unsigned char&gt;&gt;;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="keyword">using</span> <a class="code" href="namespace_inference_model_internal.xhtml#a6e713a319588c57fc854bc478f5ee13a">QuantizationParams</a> = std::pair&lt;float, int32_t&gt;;</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="keywordtype">void</span> PopulateTensorWithData(<a class="code" href="_model_accuracy_checker_test_8cpp.xhtml#a9eb69ebdaf4ceb8014e7c8a540266100">TContainer</a>&amp; tensorData,</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;                            <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements,</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;                            <span class="keyword">const</span> std::string&amp; dataTypeStr,</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;                            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;QuantizationParams&gt;</a>&amp; qParams,</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;                            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;std::string&gt;</a>&amp; dataFile)</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;    <span class="keyword">const</span> <span class="keywordtype">bool</span> readFromFile = dataFile.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>() &amp;&amp; !dataFile.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().empty();</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> quantizeData = qParams.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>();</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    std::ifstream inputTensorFile;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <span class="keywordflow">if</span> (readFromFile)</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    {</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        inputTensorFile = std::ifstream(dataFile.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>());</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    }</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keywordflow">if</span> (dataTypeStr.compare(<span class="stringliteral">&quot;float&quot;</span>) == 0)</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="keywordflow">if</span> (quantizeData)</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        {</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">float</span> qScale  = qParams.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().first;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">int</span>   qOffset = qParams.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().second;</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;            tensorData = readFromFile ?</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;                ParseDataArray&lt;armnn::DataType::QAsymmU8&gt;(inputTensorFile, qScale, qOffset) :</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;                GenerateDummyTensorData&lt;armnn::DataType::QAsymmU8&gt;(numElements);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        }</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;        <span class="keywordflow">else</span></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;            tensorData = readFromFile ?</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;                ParseDataArray&lt;armnn::DataType::Float32&gt;(inputTensorFile) :</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;                GenerateDummyTensorData&lt;armnn::DataType::Float32&gt;(numElements);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        }</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    }</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataTypeStr.compare(<span class="stringliteral">&quot;int&quot;</span>) == 0)</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    {</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        tensorData = readFromFile ?</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;            ParseDataArray&lt;armnn::DataType::Signed32&gt;(inputTensorFile) :</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;            GenerateDummyTensorData&lt;armnn::DataType::Signed32&gt;(numElements);</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    }</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dataTypeStr.compare(<span class="stringliteral">&quot;qasymm8&quot;</span>) == 0)</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;         tensorData = readFromFile ?</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;            ParseDataArray&lt;armnn::DataType::QAsymmU8&gt;(inputTensorFile) :</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;            GenerateDummyTensorData&lt;armnn::DataType::QAsymmU8&gt;(numElements);</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    }</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    {</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        std::string errorMessage = <span class="stringliteral">&quot;Unsupported tensor data type &quot;</span> + dataTypeStr;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; errorMessage;</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;        inputTensorFile.close();</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(errorMessage);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    }</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    inputTensorFile.close();</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="comment">// anonymous namespace</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#ad7abdfb6c0cc99eb356c1eefdc6ff696">  361</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#ad7abdfb6c0cc99eb356c1eefdc6ff696">generateTensorData</a> = <span class="keyword">true</span>;</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"><a class="line" href="struct_execute_network_params.xhtml">  363</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_execute_network_params.xhtml">ExecuteNetworkParams</a></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;{</div><div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a29ca0d7f3ce1cb59535aa4d09f7d1b37">  365</a></span>&#160;    <span class="keyword">using</span> <a class="code" href="struct_execute_network_params.xhtml#a29ca0d7f3ce1cb59535aa4d09f7d1b37">TensorShapePtr</a> = std::unique_ptr&lt;armnn::TensorShape&gt;;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;</div><div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a44c7d128c41b2717fe425cf6fdc32936">  367</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>*                   <a class="code" href="struct_execute_network_params.xhtml#a44c7d128c41b2717fe425cf6fdc32936">m_ModelPath</a>;</div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">  368</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">m_IsModelBinary</a>;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">  369</a></span>&#160;    std::vector&lt;armnn::BackendId&gt; <a class="code" href="struct_execute_network_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">m_ComputeDevices</a>;</div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">  370</a></span>&#160;    std::string                   <a class="code" href="struct_execute_network_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a>;</div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a155de45be27135e4c9b6b7df277d0b8f">  371</a></span>&#160;    std::vector&lt;string&gt;           <a class="code" href="struct_execute_network_params.xhtml#a155de45be27135e4c9b6b7df277d0b8f">m_InputNames</a>;</div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">  372</a></span>&#160;    std::vector&lt;TensorShapePtr&gt;   <a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>;</div><div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a924e9ee22f0bf39f05e0c1b45e5c637b">  373</a></span>&#160;    std::vector&lt;string&gt;           <a class="code" href="struct_execute_network_params.xhtml#a924e9ee22f0bf39f05e0c1b45e5c637b">m_InputTensorDataFilePaths</a>;</div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a08c2e205fcf14f0caa44388f8314e7b5">  374</a></span>&#160;    std::vector&lt;string&gt;           <a class="code" href="struct_execute_network_params.xhtml#a08c2e205fcf14f0caa44388f8314e7b5">m_InputTypes</a>;</div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a077f6963fc555d9d42f98cf9ed3e7e03">  375</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a077f6963fc555d9d42f98cf9ed3e7e03">m_QuantizeInput</a>;</div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">  376</a></span>&#160;    std::vector&lt;string&gt;           <a class="code" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">m_OutputTypes</a>;</div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a1a08c6c34dd3ce290b4bc62a715bb810">  377</a></span>&#160;    std::vector&lt;string&gt;           <a class="code" href="struct_execute_network_params.xhtml#a1a08c6c34dd3ce290b4bc62a715bb810">m_OutputNames</a>;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a64c0a99d553c42d215c4b2f1a2f1c7d4">  378</a></span>&#160;    std::vector&lt;string&gt;           <a class="code" href="struct_execute_network_params.xhtml#a64c0a99d553c42d215c4b2f1a2f1c7d4">m_OutputTensorFiles</a>;</div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a85929a48c5e7b16af8f5bc637e45a37f">  379</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a85929a48c5e7b16af8f5bc637e45a37f">m_DequantizeOutput</a>;</div><div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">  380</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a513151623e8d448951a0b94ad1946fbe">  381</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a513151623e8d448951a0b94ad1946fbe">m_EnableFp16TurboMode</a>;</div><div class="line"><a name="l00382"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">  382</a></span>&#160;    <span class="keywordtype">double</span>                        <a class="code" href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">m_ThresholdTime</a>;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a5acc5b4076604db15ee13ee19fa623c4">  383</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a5acc5b4076604db15ee13ee19fa623c4">m_PrintIntermediate</a>;</div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a2d4582aa74998c397bd064ae73745b62">  384</a></span>&#160;    <span class="keywordtype">size_t</span>                        <a class="code" href="struct_execute_network_params.xhtml#a2d4582aa74998c397bd064ae73745b62">m_SubgraphId</a>;</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a7efc68309e76bfefbfa16fe94501b060">  385</a></span>&#160;    <span class="keywordtype">bool</span>                          m_EnableLayerDetails = <span class="keyword">false</span>;</div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">  386</a></span>&#160;    <span class="keywordtype">bool</span>                          <a class="code" href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">m_GenerateTensorData</a>;</div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="struct_execute_network_params.xhtml#a5c7f0c083da98e7b6e9ba79d2fcd985d">  387</a></span>&#160;    <span class="keywordtype">bool</span>                          m_ParseUnsupported = <span class="keyword">false</span>;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;};</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> TParser, <span class="keyword">typename</span> TDataType&gt;</div><div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#afc1c3398fd2de1051edf23a171cfa01b">  391</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#afc1c3398fd2de1051edf23a171cfa01b">MainImpl</a>(<span class="keyword">const</span> <a class="code" href="struct_execute_network_params.xhtml">ExecuteNetworkParams</a>&amp; params,</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;             <span class="keyword">const</span> std::shared_ptr&lt;armnn::IRuntime&gt;&amp; runtime = <span class="keyword">nullptr</span>)</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;    <span class="keyword">using</span> <a class="code" href="_model_accuracy_checker_test_8cpp.xhtml#a9eb69ebdaf4ceb8014e7c8a540266100">TContainer</a> = boost::variant&lt;std::vector&lt;float&gt;, std::vector&lt;int&gt;, std::vector&lt;unsigned char&gt;&gt;;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    std::vector&lt;TContainer&gt; inputDataContainers;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    {</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;        <span class="comment">// Creates an InferenceModel, which will parse the model and load it into an IRuntime.</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        <span class="keyword">typename</span> <a class="code" href="struct_inference_model_internal_1_1_params.xhtml">InferenceModel&lt;TParser, TDataType&gt;::Params</a> inferenceModelParams;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a4fa312cf0d60fbd3988a7c76ab8e2980">m_ModelPath</a>                      = params.<a class="code" href="struct_execute_network_params.xhtml#a44c7d128c41b2717fe425cf6fdc32936">m_ModelPath</a>;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">m_IsModelBinary</a>                  = params.<a class="code" href="struct_execute_network_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">m_IsModelBinary</a>;</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">m_ComputeDevices</a>                 = params.<a class="code" href="struct_execute_network_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">m_ComputeDevices</a>;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a>            = params.<a class="code" href="struct_execute_network_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a>;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#acde2af8cbbd224a9f94e509ca538a775">m_PrintIntermediateLayers</a>        = params.<a class="code" href="struct_execute_network_params.xhtml#a5acc5b4076604db15ee13ee19fa623c4">m_PrintIntermediate</a>;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#aaae50a6c0f73e4c210c2e4331c439482">m_VisualizePostOptimizationModel</a> = params.<a class="code" href="struct_execute_network_params.xhtml#a7efc68309e76bfefbfa16fe94501b060">m_EnableLayerDetails</a>;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a5c7f0c083da98e7b6e9ba79d2fcd985d">m_ParseUnsupported</a>               = params.<a class="code" href="struct_execute_network_params.xhtml#a5c7f0c083da98e7b6e9ba79d2fcd985d">m_ParseUnsupported</a>;</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">for</span>(<span class="keyword">const</span> std::string&amp; inputName: params.<a class="code" href="struct_execute_network_params.xhtml#a155de45be27135e4c9b6b7df277d0b8f">m_InputNames</a>)</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        {</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;            inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#aad2ac35d4cb83ee4da9fad5fbcb907e0">m_InputBindings</a>.push_back(inputName);</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;        <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; params.<a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>.size(); ++i)</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;        {</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;            inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#ad69aa6b4967ce55ee4a915c52c71bf2e">m_InputShapes</a>.push_back(*params.<a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>[i]);</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        }</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        <span class="keywordflow">for</span>(<span class="keyword">const</span> std::string&amp; outputName: params.<a class="code" href="struct_execute_network_params.xhtml#a1a08c6c34dd3ce290b4bc62a715bb810">m_OutputNames</a>)</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;            inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#abeacb4ed1ca9256ee0e8aea73185a0cc">m_OutputBindings</a>.push_back(outputName);</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;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a2d4582aa74998c397bd064ae73745b62">m_SubgraphId</a>          = params.<a class="code" href="struct_execute_network_params.xhtml#a2d4582aa74998c397bd064ae73745b62">m_SubgraphId</a>;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a513151623e8d448951a0b94ad1946fbe">m_EnableFp16TurboMode</a> = params.<a class="code" href="struct_execute_network_params.xhtml#a513151623e8d448951a0b94ad1946fbe">m_EnableFp16TurboMode</a>;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        <a class="code" href="class_inference_model.xhtml">InferenceModel&lt;TParser, TDataType&gt;</a> model(inferenceModelParams,</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;                                                 params.<a class="code" href="struct_execute_network_params.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>,</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;                                                 params.<a class="code" href="struct_execute_network_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a>,</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                                                 runtime);</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> numInputs = inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#aad2ac35d4cb83ee4da9fad5fbcb907e0">m_InputBindings</a>.size();</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numInputs; ++i)</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        {</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;            <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;QuantizationParams&gt;</a> qParams = params.<a class="code" href="struct_execute_network_params.xhtml#a077f6963fc555d9d42f98cf9ed3e7e03">m_QuantizeInput</a> ?</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;                armnn::MakeOptional&lt;QuantizationParams&gt;(model.<a class="code" href="class_inference_model.xhtml#a066580d185559e2efdcb6cedd1709b9c">GetInputQuantizationParams</a>()) :</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;                <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>();</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;            <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;std::string&gt;</a> dataFile = params.<a class="code" href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">m_GenerateTensorData</a> ?</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>() :</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;                armnn::MakeOptional&lt;std::string&gt;(params.<a class="code" href="struct_execute_network_params.xhtml#a924e9ee22f0bf39f05e0c1b45e5c637b">m_InputTensorDataFilePaths</a>[i]);</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements = model.<a class="code" href="class_inference_model.xhtml#a679e4b22a845c8d7f58f6ca6a5df625f">GetInputSize</a>(i);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;            <span class="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>.size() &gt; i &amp;&amp; params.<a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>[i])</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;            {</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                <span class="comment">// If the user has provided a tensor shape for the current input,</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                <span class="comment">// override numElements</span></div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;                numElements = params.<a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>[i]-&gt;GetNumElements();</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;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;            <a class="code" href="_model_accuracy_checker_test_8cpp.xhtml#a9eb69ebdaf4ceb8014e7c8a540266100">TContainer</a> tensorData;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;            PopulateTensorWithData(tensorData,</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;                                   numElements,</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;                                   params.<a class="code" href="struct_execute_network_params.xhtml#a08c2e205fcf14f0caa44388f8314e7b5">m_InputTypes</a>[i],</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;                                   qParams,</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;                                   dataFile);</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;            inputDataContainers.push_back(tensorData);</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        }</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> numOutputs = inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#abeacb4ed1ca9256ee0e8aea73185a0cc">m_OutputBindings</a>.size();</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        std::vector&lt;TContainer&gt; outputDataContainers;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numOutputs; ++i)</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="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">m_OutputTypes</a>[i].compare(<span class="stringliteral">&quot;float&quot;</span>) == 0)</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;            {</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;                outputDataContainers.push_back(std::vector&lt;float&gt;(model.<a class="code" href="class_inference_model.xhtml#a8282dddf88e0deb3c414235e20a6cb2c">GetOutputSize</a>(i)));</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;            }</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">m_OutputTypes</a>[i].compare(<span class="stringliteral">&quot;int&quot;</span>) == 0)</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;            {</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;                outputDataContainers.push_back(std::vector&lt;int&gt;(model.<a class="code" href="class_inference_model.xhtml#a8282dddf88e0deb3c414235e20a6cb2c">GetOutputSize</a>(i)));</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">else</span> <span class="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">m_OutputTypes</a>[i].compare(<span class="stringliteral">&quot;qasymm8&quot;</span>) == 0)</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;                outputDataContainers.push_back(std::vector&lt;uint8_t&gt;(model.<a class="code" href="class_inference_model.xhtml#a8282dddf88e0deb3c414235e20a6cb2c">GetOutputSize</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">else</span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;            {</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;                <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Unsupported tensor data type \&quot;&quot;</span> &lt;&lt; params.<a class="code" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">m_OutputTypes</a>[i] &lt;&lt; <span class="stringliteral">&quot;\&quot;. &quot;</span>;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;                <span class="keywordflow">return</span> EXIT_FAILURE;</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;</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;        <span class="comment">// model.Run returns the inference time elapsed in EnqueueWorkload (in milliseconds)</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;        <span class="keyword">auto</span> inference_duration = model.<a class="code" href="class_inference_model.xhtml#a7af4f6c4d5f8720a6ea093a825722227">Run</a>(inputDataContainers, outputDataContainers);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        <span class="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">m_GenerateTensorData</a>)</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        {</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;            <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;The input data was generated, note that the output will not be useful&quot;</span>;</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;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        <span class="comment">// Print output tensors</span></div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span>&amp; infosOut = model.<a class="code" href="class_inference_model.xhtml#ac0b73049e00e7013f5cc6ae7fcaedcd4">GetOutputBindingInfos</a>();</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; numOutputs; i++)</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;        {</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; infoOut = infosOut[i].second;</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;            <span class="keyword">auto</span> outputTensorFile = params.<a class="code" href="struct_execute_network_params.xhtml#a64c0a99d553c42d215c4b2f1a2f1c7d4">m_OutputTensorFiles</a>.empty() ? <span class="stringliteral">&quot;&quot;</span> : params.<a class="code" href="struct_execute_network_params.xhtml#a64c0a99d553c42d215c4b2f1a2f1c7d4">m_OutputTensorFiles</a>[i];</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;            TensorPrinter printer(inferenceModelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#abeacb4ed1ca9256ee0e8aea73185a0cc">m_OutputBindings</a>[i],</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;                                  infoOut,</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;                                  outputTensorFile,</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;                                  params.<a class="code" href="struct_execute_network_params.xhtml#a85929a48c5e7b16af8f5bc637e45a37f">m_DequantizeOutput</a>);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;            boost::apply_visitor(printer, outputDataContainers[i]);</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;        }</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;\nInference time: &quot;</span> &lt;&lt; std::setprecision(2)</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;                                &lt;&lt; std::fixed &lt;&lt; inference_duration.count() &lt;&lt; <span class="stringliteral">&quot; ms&quot;</span>;</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="comment">// If thresholdTime == 0.0 (default), then it hasn&#39;t been supplied at command line</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;        <span class="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">m_ThresholdTime</a> != 0.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;            <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Threshold time: &quot;</span> &lt;&lt; std::setprecision(2)</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;                                    &lt;&lt; std::fixed &lt;&lt; params.<a class="code" href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">m_ThresholdTime</a> &lt;&lt; <span class="stringliteral">&quot; ms&quot;</span>;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;            <span class="keyword">auto</span> thresholdMinusInference = params.<a class="code" href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">m_ThresholdTime</a> - inference_duration.count();</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;            <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Threshold time - Inference time: &quot;</span> &lt;&lt; std::setprecision(2)</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;                                    &lt;&lt; std::fixed &lt;&lt; thresholdMinusInference &lt;&lt; <span class="stringliteral">&quot; ms&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;            <span class="keywordflow">if</span> (thresholdMinusInference &lt; 0)</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;            {</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;                std::string errorMessage = <span class="stringliteral">&quot;Elapsed inference time is greater than provided threshold time.&quot;</span>;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;                <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; errorMessage;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;            }</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;        }</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    }</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <span class="keywordflow">catch</span> (<a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a> <span class="keyword">const</span>&amp; e)</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    {</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Armnn Error: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    }</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="keywordflow">return</span> EXIT_SUCCESS;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;}</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;<span class="comment">// This will run a test</span></div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#ab182729acbd2161a0358d85906d30703">  537</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#ab182729acbd2161a0358d85906d30703">RunTest</a>(<span class="keyword">const</span> std::string&amp; format,</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;            <span class="keyword">const</span> std::string&amp; inputTensorShapesStr,</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;            <span class="keyword">const</span> vector&lt;armnn::BackendId&gt;&amp; computeDevices,</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;            <span class="keyword">const</span> std::string&amp; dynamicBackendsPath,</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;            <span class="keyword">const</span> std::string&amp; path,</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;            <span class="keyword">const</span> std::string&amp; inputNames,</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;            <span class="keyword">const</span> std::string&amp; inputTensorDataFilePaths,</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;            <span class="keyword">const</span> std::string&amp; inputTypes,</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;            <span class="keywordtype">bool</span> quantizeInput,</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;            <span class="keyword">const</span> std::string&amp; outputTypes,</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;            <span class="keyword">const</span> std::string&amp; outputNames,</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;            <span class="keyword">const</span> std::string&amp; outputTensorFiles,</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;            <span class="keywordtype">bool</span> dequantizeOuput,</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;            <span class="keywordtype">bool</span> enableProfiling,</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;            <span class="keywordtype">bool</span> enableFp16TurboMode,</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">double</span>&amp; thresholdTime,</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;            <span class="keywordtype">bool</span> printIntermediate,</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;            <span class="keywordtype">bool</span> enableLayerDetails = <span class="keyword">false</span>,</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;            <span class="keywordtype">bool</span> parseUnsupported = <span class="keyword">false</span>,</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;            <span class="keyword">const</span> std::shared_ptr&lt;armnn::IRuntime&gt;&amp; runtime = <span class="keyword">nullptr</span>)</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;    std::string modelFormat = boost::trim_copy(format);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    std::string modelPath = boost::trim_copy(path);</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    std::vector&lt;std::string&gt; inputNamesVector = ParseStringList(inputNames, <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    std::vector&lt;std::string&gt; inputTensorShapesVector = ParseStringList(inputTensorShapesStr, <span class="stringliteral">&quot;:&quot;</span>);</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    std::vector&lt;std::string&gt; inputTensorDataFilePathsVector = ParseStringList(</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;        inputTensorDataFilePaths, <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    std::vector&lt;std::string&gt; outputNamesVector = ParseStringList(outputNames, <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    std::vector&lt;std::string&gt; inputTypesVector = ParseStringList(inputTypes, <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    std::vector&lt;std::string&gt; outputTypesVector = ParseStringList(outputTypes, <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    std::vector&lt;std::string&gt; outputTensorFilesVector = ParseStringList(outputTensorFiles, <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="comment">// Parse model binary flag from the model-format string we got from the command-line</span></div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keywordtype">bool</span> isModelBinary;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="keywordflow">if</span> (modelFormat.find(<span class="stringliteral">&quot;bin&quot;</span>) != std::string::npos)</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;        isModelBinary = <span class="keyword">true</span>;</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">else</span> <span class="keywordflow">if</span> (modelFormat.find(<span class="stringliteral">&quot;txt&quot;</span>) != std::string::npos || modelFormat.find(<span class="stringliteral">&quot;text&quot;</span>) != std::string::npos)</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    {</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;        isModelBinary = <span class="keyword">false</span>;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    }</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    {</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Unknown model format: &#39;&quot;</span> &lt;&lt; modelFormat &lt;&lt; <span class="stringliteral">&quot;&#39;. Please include &#39;binary&#39; or &#39;text&#39;&quot;</span>;</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</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;</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    <span class="keywordflow">if</span> ((inputTensorShapesVector.size() != 0) &amp;&amp; (inputTensorShapesVector.size() != inputNamesVector.size()))</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;input-name and input-tensor-shape must have the same amount of elements.&quot;</span>;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    }</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;    <span class="keywordflow">if</span> ((inputTensorDataFilePathsVector.size() != 0) &amp;&amp;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        (inputTensorDataFilePathsVector.size() != inputNamesVector.size()))</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;input-name and input-tensor-data must have the same amount of elements.&quot;</span>;</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    }</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    <span class="keywordflow">if</span> ((outputTensorFilesVector.size() != 0) &amp;&amp;</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;        (outputTensorFilesVector.size() != outputNamesVector.size()))</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    {</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;output-name and write-outputs-to-file must have the same amount of elements.&quot;</span>;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</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> (inputTypesVector.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="comment">//Defaults the value of all inputs to &quot;float&quot;</span></div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;        inputTypesVector.assign(inputNamesVector.size(), <span class="stringliteral">&quot;float&quot;</span>);</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">else</span> <span class="keywordflow">if</span> ((inputTypesVector.size() != 0) &amp;&amp; (inputTypesVector.size() != inputNamesVector.size()))</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;input-name and input-type must have the same amount of elements.&quot;</span>;</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</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="keywordflow">if</span> (outputTypesVector.size() == 0)</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    {</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <span class="comment">//Defaults the value of all outputs to &quot;float&quot;</span></div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;        outputTypesVector.assign(outputNamesVector.size(), <span class="stringliteral">&quot;float&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;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((outputTypesVector.size() != 0) &amp;&amp; (outputTypesVector.size() != outputNamesVector.size()))</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    {</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;output-name and output-type must have the same amount of elements.&quot;</span>;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    }</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;    <span class="comment">// Parse input tensor shape from the string we got from the command-line.</span></div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    std::vector&lt;std::unique_ptr&lt;armnn::TensorShape&gt;&gt; inputTensorShapes;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    <span class="keywordflow">if</span> (!inputTensorShapesVector.empty())</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    {</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        inputTensorShapes.reserve(inputTensorShapesVector.size());</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        <span class="keywordflow">for</span>(<span class="keyword">const</span> std::string&amp; shape : inputTensorShapesVector)</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;            std::stringstream ss(shape);</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;            std::vector&lt;unsigned int&gt; dims = ParseArray(ss);</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;            <span class="keywordflow">try</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;                <span class="comment">// Coverity fix: An exception of type armnn::InvalidArgumentException is thrown and never caught.</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;                inputTensorShapes.push_back(std::make_unique&lt;armnn::TensorShape&gt;(dims.size(), dims.data()));</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;            }</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;            <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>&amp; e)</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;                <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Cannot create tensor shape: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;                <span class="keywordflow">return</span> EXIT_FAILURE;</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;        }</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    }</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    <span class="comment">// Check that threshold time is not less than zero</span></div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <span class="keywordflow">if</span> (thresholdTime &lt; 0)</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Threshold time supplied as a command line argument is less than zero.&quot;</span>;</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</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;</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    <a class="code" href="struct_execute_network_params.xhtml">ExecuteNetworkParams</a> params;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a44c7d128c41b2717fe425cf6fdc32936">m_ModelPath</a>                = modelPath.c_str();</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">m_IsModelBinary</a>            = isModelBinary;</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">m_ComputeDevices</a>           = computeDevices;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">m_DynamicBackendsPath</a>      = dynamicBackendsPath;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a155de45be27135e4c9b6b7df277d0b8f">m_InputNames</a>               = inputNamesVector;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">m_InputTensorShapes</a>        = std::move(inputTensorShapes);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a924e9ee22f0bf39f05e0c1b45e5c637b">m_InputTensorDataFilePaths</a> = inputTensorDataFilePathsVector;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a08c2e205fcf14f0caa44388f8314e7b5">m_InputTypes</a>               = inputTypesVector;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a077f6963fc555d9d42f98cf9ed3e7e03">m_QuantizeInput</a>            = quantizeInput;</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">m_OutputTypes</a>              = outputTypesVector;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a1a08c6c34dd3ce290b4bc62a715bb810">m_OutputNames</a>              = outputNamesVector;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a64c0a99d553c42d215c4b2f1a2f1c7d4">m_OutputTensorFiles</a>        = outputTensorFilesVector;</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a85929a48c5e7b16af8f5bc637e45a37f">m_DequantizeOutput</a>         = dequantizeOuput;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = enableProfiling;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a513151623e8d448951a0b94ad1946fbe">m_EnableFp16TurboMode</a>      = enableFp16TurboMode;</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">m_ThresholdTime</a>            = thresholdTime;</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a5acc5b4076604db15ee13ee19fa623c4">m_PrintIntermediate</a>        = printIntermediate;</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a2d4582aa74998c397bd064ae73745b62">m_SubgraphId</a>               = subgraphId;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a7efc68309e76bfefbfa16fe94501b060">m_EnableLayerDetails</a>       = enableLayerDetails;</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">m_GenerateTensorData</a>       = inputTensorDataFilePathsVector.empty();</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    params.<a class="code" href="struct_execute_network_params.xhtml#a5c7f0c083da98e7b6e9ba79d2fcd985d">m_ParseUnsupported</a>         = parseUnsupported;</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <span class="comment">// Warn if ExecuteNetwork will generate dummy input data</span></div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    <span class="keywordflow">if</span> (params.<a class="code" href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">m_GenerateTensorData</a>)</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;No input files provided, input tensors will be filled with 0s.&quot;</span>;</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="comment">// Forward to implementation based on the parser type</span></div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keywordflow">if</span> (modelFormat.find(<span class="stringliteral">&quot;armnn&quot;</span>) != std::string::npos)</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    {</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;<span class="preprocessor">#if defined(ARMNN_SERIALIZER)</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <span class="keywordflow">return</span> MainImpl&lt;armnnDeserializer::IDeserializer, float&gt;(params, runtime);</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Not built with serialization support.&quot;</span>;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;<span class="preprocessor">#endif</span></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">else</span> <span class="keywordflow">if</span> (modelFormat.find(<span class="stringliteral">&quot;caffe&quot;</span>) != std::string::npos)</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="preprocessor">#if defined(ARMNN_CAFFE_PARSER)</span></div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;        <span class="keywordflow">return</span> MainImpl&lt;armnnCaffeParser::ICaffeParser, float&gt;(params, runtime);</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Not built with Caffe parser support.&quot;</span>;</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;<span class="preprocessor">#endif</span></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;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (modelFormat.find(<span class="stringliteral">&quot;onnx&quot;</span>) != std::string::npos)</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;{</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="preprocessor">#if defined(ARMNN_ONNX_PARSER)</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    <span class="keywordflow">return</span> MainImpl&lt;armnnOnnxParser::IOnnxParser, float&gt;(params, runtime);</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Not built with Onnx parser support.&quot;</span>;</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    }</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (modelFormat.find(<span class="stringliteral">&quot;tensorflow&quot;</span>) != std::string::npos)</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    {</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="preprocessor">#if defined(ARMNN_TF_PARSER)</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;        <span class="keywordflow">return</span> MainImpl&lt;armnnTfParser::ITfParser, float&gt;(params, runtime);</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Not built with Tensorflow parser support.&quot;</span>;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    }</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(modelFormat.find(<span class="stringliteral">&quot;tflite&quot;</span>) != std::string::npos)</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;<span class="preprocessor">#if defined(ARMNN_TF_LITE_PARSER)</span></div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;        <span class="keywordflow">if</span> (! isModelBinary)</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;        {</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;            <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Unknown model format: &#39;&quot;</span> &lt;&lt; modelFormat &lt;&lt; <span class="stringliteral">&quot;&#39;. Only &#39;binary&#39; format supported \</span></div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;<span class="stringliteral">              for tflite files&quot;</span>;</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;            <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;        }</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;        <span class="keywordflow">return</span> MainImpl&lt;armnnTfLiteParser::ITfLiteParser, float&gt;(params, runtime);</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Unknown model format: &#39;&quot;</span> &lt;&lt; modelFormat &lt;&lt;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;            <span class="stringliteral">&quot;&#39;. Please include &#39;caffe&#39;, &#39;tensorflow&#39;, &#39;tflite&#39; or &#39;onnx&#39;&quot;</span>;</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    }</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    {</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Unknown model format: &#39;&quot;</span> &lt;&lt; modelFormat &lt;&lt;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;                                 <span class="stringliteral">&quot;&#39;. Please include &#39;caffe&#39;, &#39;tensorflow&#39;, &#39;tflite&#39; or &#39;onnx&#39;&quot;</span>;</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    }</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;}</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#a31556a7bc4fe615f51dd68af510a9947">  750</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#a31556a7bc4fe615f51dd68af510a9947">RunCsvTest</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_utils_1_1_csv_row.xhtml">armnnUtils::CsvRow</a> &amp;csvRow, <span class="keyword">const</span> std::shared_ptr&lt;armnn::IRuntime&gt;&amp; runtime,</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;               <span class="keyword">const</span> <span class="keywordtype">bool</span> enableProfiling, <span class="keyword">const</span> <span class="keywordtype">bool</span> enableFp16TurboMode, <span class="keyword">const</span> <span class="keywordtype">double</span>&amp; thresholdTime,</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;               <span class="keyword">const</span> <span class="keywordtype">bool</span> printIntermediate, <span class="keywordtype">bool</span> enableLayerDetails = <span class="keyword">false</span>, <span class="keywordtype">bool</span> parseUnuspported = <span class="keyword">false</span>)</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;{</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(runtime);</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    std::string modelFormat;</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    std::string modelPath;</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    std::string inputNames;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    std::string inputTensorShapes;</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    std::string inputTensorDataFilePaths;</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    std::string outputNames;</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    std::string inputTypes;</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    std::string outputTypes;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    std::string dynamicBackendsPath;</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    std::string outputTensorFiles;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <span class="keywordtype">size_t</span> subgraphId = 0;</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="keyword">const</span> std::string backendsMessage = std::string(<span class="stringliteral">&quot;The preferred order of devices to run layers on by default. &quot;</span>)</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;                                      + std::string(<span class="stringliteral">&quot;Possible choices: &quot;</span>)</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;                                      + <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>().<a class="code" href="classarmnn_1_1_backend_registry.xhtml#ae1de2f7ca1db17f45f97155e239b8b45">GetBackendIdsAsString</a>();</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    po::options_description desc(<span class="stringliteral">&quot;Options&quot;</span>);</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    {</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;        desc.add_options()</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        (<span class="stringliteral">&quot;model-format,f&quot;</span>, po::value(&amp;modelFormat),</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;         <span class="stringliteral">&quot;armnn-binary, caffe-binary, caffe-text, tflite-binary, onnx-binary, onnx-text, tensorflow-binary or &quot;</span></div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;         <span class="stringliteral">&quot;tensorflow-text.&quot;</span>)</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        (<span class="stringliteral">&quot;model-path,m&quot;</span>, po::value(&amp;modelPath), <span class="stringliteral">&quot;Path to model file, e.g. .armnn, .caffemodel, .prototxt, &quot;</span></div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;         <span class="stringliteral">&quot;.tflite, .onnx&quot;</span>)</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;        (<span class="stringliteral">&quot;compute,c&quot;</span>, po::value&lt;std::vector&lt;armnn::BackendId&gt;&gt;()-&gt;multitoken(),</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;         backendsMessage.c_str())</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;        (<span class="stringliteral">&quot;dynamic-backends-path,b&quot;</span>, po::value(&amp;dynamicBackendsPath),</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;         <span class="stringliteral">&quot;Path where to load any available dynamic backend from. &quot;</span></div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;         <span class="stringliteral">&quot;If left empty (the default), dynamic backends will not be used.&quot;</span>)</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;        (<span class="stringliteral">&quot;input-name,i&quot;</span>, po::value(&amp;inputNames), <span class="stringliteral">&quot;Identifier of the input tensors in the network separated by comma.&quot;</span>)</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;        (<span class="stringliteral">&quot;subgraph-number,n&quot;</span>, po::value&lt;size_t&gt;(&amp;subgraphId)-&gt;default_value(0), <span class="stringliteral">&quot;Id of the subgraph to be &quot;</span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;         <span class="stringliteral">&quot;executed. Defaults to 0.&quot;</span>)</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        (<span class="stringliteral">&quot;input-tensor-shape,s&quot;</span>, po::value(&amp;inputTensorShapes),</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;         <span class="stringliteral">&quot;The shape of the input tensors in the network as a flat array of integers separated by comma. &quot;</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;         <span class="stringliteral">&quot;Several shapes can be passed separating them by semicolon. &quot;</span></div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;         <span class="stringliteral">&quot;This parameter is optional, depending on the network.&quot;</span>)</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;        (<span class="stringliteral">&quot;input-tensor-data,d&quot;</span>, po::value(&amp;inputTensorDataFilePaths)-&gt;default_value(<span class="stringliteral">&quot;&quot;</span>),</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;         <span class="stringliteral">&quot;Path to files containing the input data as a flat array separated by whitespace. &quot;</span></div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;         <span class="stringliteral">&quot;Several paths can be passed separating them by comma. If not specified, the network will be run with dummy &quot;</span></div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;         <span class="stringliteral">&quot;data (useful for profiling).&quot;</span>)</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;        (<span class="stringliteral">&quot;input-type,y&quot;</span>,po::value(&amp;inputTypes), <span class="stringliteral">&quot;The type of the input tensors in the network separated by comma. &quot;</span></div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;         <span class="stringliteral">&quot;If unset, defaults to \&quot;float\&quot; for all defined inputs. &quot;</span></div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;         <span class="stringliteral">&quot;Accepted values (float, int or qasymm8).&quot;</span>)</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;        (<span class="stringliteral">&quot;quantize-input,q&quot;</span>,po::bool_switch()-&gt;default_value(<span class="keyword">false</span>),</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;         <span class="stringliteral">&quot;If this option is enabled, all float inputs will be quantized to qasymm8. &quot;</span></div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;         <span class="stringliteral">&quot;If unset, default to not quantized. &quot;</span></div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;         <span class="stringliteral">&quot;Accepted values (true or false)&quot;</span>)</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;        (<span class="stringliteral">&quot;output-type,z&quot;</span>,po::value(&amp;outputTypes), <span class="stringliteral">&quot;The type of the output tensors in the network separated by comma. &quot;</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;         <span class="stringliteral">&quot;If unset, defaults to \&quot;float\&quot; for all defined outputs. &quot;</span></div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;         <span class="stringliteral">&quot;Accepted values (float, int or qasymm8).&quot;</span>)</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;        (<span class="stringliteral">&quot;output-name,o&quot;</span>, po::value(&amp;outputNames),</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;         <span class="stringliteral">&quot;Identifier of the output tensors in the network separated by comma.&quot;</span>)</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;        (<span class="stringliteral">&quot;dequantize-output,l&quot;</span>,po::bool_switch()-&gt;default_value(<span class="keyword">false</span>),</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;         <span class="stringliteral">&quot;If this option is enabled, all quantized outputs will be dequantized to float. &quot;</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;         <span class="stringliteral">&quot;If unset, default to not get dequantized. &quot;</span></div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;         <span class="stringliteral">&quot;Accepted values (true or false)&quot;</span>)</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;        (<span class="stringliteral">&quot;write-outputs-to-file,w&quot;</span>, po::value(&amp;outputTensorFiles),</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;         <span class="stringliteral">&quot;Comma-separated list of output file paths keyed with the binding-id of the output slot. &quot;</span></div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;         <span class="stringliteral">&quot;If left empty (the default), the output tensors will not be written to a file.&quot;</span>);</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    }</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    {</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;        <span class="comment">// Coverity points out that default_value(...) can throw a bad_lexical_cast,</span></div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;        <span class="comment">// and that desc.add_options() can throw boost::io::too_few_args.</span></div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;        <span class="comment">// They really won&#39;t in any of these cases.</span></div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        BOOST_ASSERT_MSG(<span class="keyword">false</span>, <span class="stringliteral">&quot;Caught unexpected exception&quot;</span>);</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;Fatal internal error: &quot;</span> &lt;&lt; e.what();</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    }</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    std::vector&lt;const char*&gt; clOptions;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    clOptions.reserve(csvRow.<a class="code" href="structarmnn_utils_1_1_csv_row.xhtml#af80d24ad6806a497ec21dc835c28b7ce">values</a>.size());</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string&amp; value : csvRow.<a class="code" href="structarmnn_utils_1_1_csv_row.xhtml#af80d24ad6806a497ec21dc835c28b7ce">values</a>)</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;    {</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;        clOptions.push_back(value.c_str());</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    }</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;    po::variables_map vm;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    <span class="keywordflow">try</span></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;        po::store(po::parse_command_line(static_cast&lt;int&gt;(clOptions.size()), clOptions.data(), desc), vm);</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;        po::notify(vm);</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;        CheckOptionDependencies(vm);</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    }</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> po::error&amp; e)</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    {</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;        std::cerr &lt;&lt; e.what() &lt;&lt; std::endl &lt;&lt; std::endl;</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;        std::cerr &lt;&lt; desc &lt;&lt; std::endl;</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</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">// Get the value of the switch arguments.</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    <span class="keywordtype">bool</span> quantizeInput = vm[<span class="stringliteral">&quot;quantize-input&quot;</span>].as&lt;<span class="keywordtype">bool</span>&gt;();</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="keywordtype">bool</span> dequantizeOutput = vm[<span class="stringliteral">&quot;dequantize-output&quot;</span>].as&lt;<span class="keywordtype">bool</span>&gt;();</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">// Get the preferred order of compute devices.</span></div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    std::vector&lt;armnn::BackendId&gt; computeDevices = vm[<span class="stringliteral">&quot;compute&quot;</span>].as&lt;std::vector&lt;armnn::BackendId&gt;&gt;();</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    <span class="comment">// Remove duplicates from the list of compute devices.</span></div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    RemoveDuplicateDevices(computeDevices);</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;    <span class="comment">// Check that the specified compute devices are valid.</span></div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    std::string invalidBackends;</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;    <span class="keywordflow">if</span> (!CheckRequestedBackendsAreValid(computeDevices, <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;std::string&amp;&gt;</a>(invalidBackends)))</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    {</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(fatal) &lt;&lt; <span class="stringliteral">&quot;The list of preferred devices contains invalid backend IDs: &quot;</span></div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;                                 &lt;&lt; invalidBackends;</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;        <span class="keywordflow">return</span> EXIT_FAILURE;</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    }</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">return</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#ab182729acbd2161a0358d85906d30703">RunTest</a>(modelFormat, inputTensorShapes, computeDevices, dynamicBackendsPath, modelPath, inputNames,</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                   inputTensorDataFilePaths, inputTypes, quantizeInput, outputTypes, outputNames, outputTensorFiles,</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;                   dequantizeOutput, enableProfiling, enableFp16TurboMode, thresholdTime, printIntermediate, subgraphId,</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;                   enableLayerDetails, parseUnuspported);</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;}</div><div class="ttc" id="struct_execute_network_params_xhtml_a85929a48c5e7b16af8f5bc637e45a37f"><div class="ttname"><a href="struct_execute_network_params.xhtml#a85929a48c5e7b16af8f5bc637e45a37f">ExecuteNetworkParams::m_DequantizeOutput</a></div><div class="ttdeci">bool m_DequantizeOutput</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00379">NetworkExecutionUtils.hpp:379</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a71c32d9b0334a1561bb6d2db677755d6"><div class="ttname"><a href="struct_execute_network_params.xhtml#a71c32d9b0334a1561bb6d2db677755d6">ExecuteNetworkParams::m_OutputTypes</a></div><div class="ttdeci">std::vector&lt; string &gt; m_OutputTypes</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00376">NetworkExecutionUtils.hpp:376</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a855293b1be0581fb61ef6a1c5b027d0f"><div class="ttname"><a href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a></div><div class="ttdeci">float Dequantize(QuantizedType value, float scale, int32_t offset)</div><div class="ttdoc">Dequantize an 8-bit data type into a floating point data type. </div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8cpp_source.xhtml#l00047">TypesUtils.cpp:47</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a64c0a99d553c42d215c4b2f1a2f1c7d4"><div class="ttname"><a href="struct_execute_network_params.xhtml#a64c0a99d553c42d215c4b2f1a2f1c7d4">ExecuteNetworkParams::m_OutputTensorFiles</a></div><div class="ttdeci">std::vector&lt; string &gt; m_OutputTensorFiles</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00378">NetworkExecutionUtils.hpp:378</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a29ca0d7f3ce1cb59535aa4d09f7d1b37"><div class="ttname"><a href="struct_execute_network_params.xhtml#a29ca0d7f3ce1cb59535aa4d09f7d1b37">ExecuteNetworkParams::TensorShapePtr</a></div><div class="ttdeci">std::unique_ptr&lt; armnn::TensorShape &gt; TensorShapePtr</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00365">NetworkExecutionUtils.hpp:365</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional</a></div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00270">Optional.hpp:270</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_ab182729acbd2161a0358d85906d30703"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#ab182729acbd2161a0358d85906d30703">RunTest</a></div><div class="ttdeci">int RunTest(const std::string &amp;format, const std::string &amp;inputTensorShapesStr, const vector&lt; armnn::BackendId &gt; &amp;computeDevices, const std::string &amp;dynamicBackendsPath, const std::string &amp;path, const std::string &amp;inputNames, const std::string &amp;inputTensorDataFilePaths, const std::string &amp;inputTypes, bool quantizeInput, const std::string &amp;outputTypes, const std::string &amp;outputNames, const std::string &amp;outputTensorFiles, bool dequantizeOuput, bool enableProfiling, bool enableFp16TurboMode, const double &amp;thresholdTime, bool printIntermediate, const size_t subgraphId, bool enableLayerDetails=false, bool parseUnsupported=false, const std::shared_ptr&lt; armnn::IRuntime &gt; &amp;runtime=nullptr)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00537">NetworkExecutionUtils.hpp:537</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a091cda9098c6f03f91f477a22327892d"><div class="ttname"><a href="struct_execute_network_params.xhtml#a091cda9098c6f03f91f477a22327892d">ExecuteNetworkParams::m_InputTensorShapes</a></div><div class="ttdeci">std::vector&lt; TensorShapePtr &gt; m_InputTensorShapes</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00372">NetworkExecutionUtils.hpp:372</a></div></div>
<div class="ttc" id="class_inference_model_xhtml_a066580d185559e2efdcb6cedd1709b9c"><div class="ttname"><a href="class_inference_model.xhtml#a066580d185559e2efdcb6cedd1709b9c">InferenceModel::GetInputQuantizationParams</a></div><div class="ttdeci">QuantizationParams GetInputQuantizationParams(unsigned int inputIndex=0u) const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00543">InferenceModel.hpp:543</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#l00053">Tensor.hpp:53</a></div></div>
<div class="ttc" id="class_inference_model_xhtml_ac0b73049e00e7013f5cc6ae7fcaedcd4"><div class="ttname"><a href="class_inference_model.xhtml#ac0b73049e00e7013f5cc6ae7fcaedcd4">InferenceModel::GetOutputBindingInfos</a></div><div class="ttdeci">const std::vector&lt; armnn::BindingPointInfo &gt; &amp; GetOutputBindingInfos() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00531">InferenceModel.hpp:531</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a513151623e8d448951a0b94ad1946fbe"><div class="ttname"><a href="struct_execute_network_params.xhtml#a513151623e8d448951a0b94ad1946fbe">ExecuteNetworkParams::m_EnableFp16TurboMode</a></div><div class="ttdeci">bool m_EnableFp16TurboMode</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00381">NetworkExecutionUtils.hpp:381</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_ae43cf4b5df0068ee6a9151c98947248b"><div class="ttname"><a href="struct_execute_network_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">ExecuteNetworkParams::m_DynamicBackendsPath</a></div><div class="ttdeci">std::string m_DynamicBackendsPath</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00370">NetworkExecutionUtils.hpp:370</a></div></div>
<div class="ttc" id="structarmnn_utils_1_1_csv_row_xhtml_af80d24ad6806a497ec21dc835c28b7ce"><div class="ttname"><a href="structarmnn_utils_1_1_csv_row.xhtml#af80d24ad6806a497ec21dc835c28b7ce">armnnUtils::CsvRow::values</a></div><div class="ttdeci">std::vector&lt; std::string &gt; values</div><div class="ttdef"><b>Definition:</b> <a href="_csv_reader_8hpp_source.xhtml#l00015">CsvReader.hpp:15</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a31556a7bc4fe615f51dd68af510a9947"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a31556a7bc4fe615f51dd68af510a9947">RunCsvTest</a></div><div class="ttdeci">int RunCsvTest(const armnnUtils::CsvRow &amp;csvRow, const std::shared_ptr&lt; armnn::IRuntime &gt; &amp;runtime, const bool enableProfiling, const bool enableFp16TurboMode, const double &amp;thresholdTime, const bool printIntermediate, bool enableLayerDetails=false, bool parseUnuspported=false)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00750">NetworkExecutionUtils.hpp:750</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_ae43cf4b5df0068ee6a9151c98947248b"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#ae43cf4b5df0068ee6a9151c98947248b">InferenceModelInternal::Params::m_DynamicBackendsPath</a></div><div class="ttdeci">std::string m_DynamicBackendsPath</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00089">InferenceModel.hpp:89</a></div></div>
<div class="ttc" id="class_inference_model_xhtml"><div class="ttname"><a href="class_inference_model.xhtml">InferenceModel</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00316">InferenceModel.hpp:316</a></div></div>
<div class="ttc" id="classarmnn_1_1_exception_xhtml_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.xhtml#l00032">Exceptions.cpp:32</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00163">Logging.hpp:163</a></div></div>
<div class="ttc" id="_i_tf_parser_8hpp_xhtml"><div class="ttname"><a href="_i_tf_parser_8hpp.xhtml">ITfParser.hpp</a></div></div>
<div class="ttc" id="_arm_n_n_8hpp_xhtml"><div class="ttname"><a href="_arm_n_n_8hpp.xhtml">ArmNN.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
<div class="ttc" id="_resolve_type_8hpp_xhtml"><div class="ttname"><a href="_resolve_type_8hpp.xhtml">ResolveType.hpp</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a513151623e8d448951a0b94ad1946fbe"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a513151623e8d448951a0b94ad1946fbe">InferenceModelInternal::Params::m_EnableFp16TurboMode</a></div><div class="ttdeci">bool m_EnableFp16TurboMode</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00093">InferenceModel.hpp:93</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a5acc5b4076604db15ee13ee19fa623c4"><div class="ttname"><a href="struct_execute_network_params.xhtml#a5acc5b4076604db15ee13ee19fa623c4">ExecuteNetworkParams::m_PrintIntermediate</a></div><div class="ttdeci">bool m_PrintIntermediate</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00383">NetworkExecutionUtils.hpp:383</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a5c7f0c083da98e7b6e9ba79d2fcd985d"><div class="ttname"><a href="struct_execute_network_params.xhtml#a5c7f0c083da98e7b6e9ba79d2fcd985d">ExecuteNetworkParams::m_ParseUnsupported</a></div><div class="ttdeci">bool m_ParseUnsupported</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00387">NetworkExecutionUtils.hpp:387</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_ae1de2f7ca1db17f45f97155e239b8b45"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#ae1de2f7ca1db17f45f97155e239b8b45">armnn::BackendRegistry::GetBackendIdsAsString</a></div><div class="ttdeci">std::string GetBackendIdsAsString() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00076">BackendRegistry.cpp:76</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&lt; std::is_reference&lt; T &gt;::value, T &gt;::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="struct_inference_model_internal_1_1_params_xhtml_aaae50a6c0f73e4c210c2e4331c439482"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#aaae50a6c0f73e4c210c2e4331c439482">InferenceModelInternal::Params::m_VisualizePostOptimizationModel</a></div><div class="ttdeci">bool m_VisualizePostOptimizationModel</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00092">InferenceModel.hpp:92</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a2d4582aa74998c397bd064ae73745b62"><div class="ttname"><a href="struct_execute_network_params.xhtml#a2d4582aa74998c397bd064ae73745b62">ExecuteNetworkParams::m_SubgraphId</a></div><div class="ttdeci">size_t m_SubgraphId</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00384">NetworkExecutionUtils.hpp:384</a></div></div>
<div class="ttc" id="class_inference_model_xhtml_a8282dddf88e0deb3c414235e20a6cb2c"><div class="ttname"><a href="class_inference_model.xhtml#a8282dddf88e0deb3c414235e20a6cb2c">InferenceModel::GetOutputSize</a></div><div class="ttdeci">unsigned int GetOutputSize(unsigned int outputIndex=0u) const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00455">InferenceModel.hpp:455</a></div></div>
<div class="ttc" id="_model_accuracy_checker_test_8cpp_xhtml_a9eb69ebdaf4ceb8014e7c8a540266100"><div class="ttname"><a href="_model_accuracy_checker_test_8cpp.xhtml#a9eb69ebdaf4ceb8014e7c8a540266100">TContainer</a></div><div class="ttdeci">boost::variant&lt; std::vector&lt; float &gt;, std::vector&lt; int &gt;, std::vector&lt; unsigned char &gt; &gt; TContainer</div><div class="ttdef"><b>Definition:</b> <a href="_model_accuracy_checker_test_8cpp_source.xhtml#l00059">ModelAccuracyCheckerTest.cpp:59</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_aad2ac35d4cb83ee4da9fad5fbcb907e0"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#aad2ac35d4cb83ee4da9fad5fbcb907e0">InferenceModelInternal::Params::m_InputBindings</a></div><div class="ttdeci">std::vector&lt; std::string &gt; m_InputBindings</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00085">InferenceModel.hpp:85</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a2d54e6252c1c9a0e29f7706ba03b2b74"><div class="ttname"><a href="struct_execute_network_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">ExecuteNetworkParams::m_ComputeDevices</a></div><div class="ttdeci">std::vector&lt; armnn::BackendId &gt; m_ComputeDevices</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00369">NetworkExecutionUtils.hpp:369</a></div></div>
<div class="ttc" id="_i_tf_lite_parser_8hpp_xhtml"><div class="ttname"><a href="_i_tf_lite_parser_8hpp.xhtml">ITfLiteParser.hpp</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a155de45be27135e4c9b6b7df277d0b8f"><div class="ttname"><a href="struct_execute_network_params.xhtml#a155de45be27135e4c9b6b7df277d0b8f">ExecuteNetworkParams::m_InputNames</a></div><div class="ttdeci">std::vector&lt; string &gt; m_InputNames</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00371">NetworkExecutionUtils.hpp:371</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a6bf2f586c403977d31c7d32d371918cf"><div class="ttname"><a href="struct_execute_network_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">ExecuteNetworkParams::m_IsModelBinary</a></div><div class="ttdeci">bool m_IsModelBinary</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00368">NetworkExecutionUtils.hpp:368</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_ad69aa6b4967ce55ee4a915c52c71bf2e"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#ad69aa6b4967ce55ee4a915c52c71bf2e">InferenceModelInternal::Params::m_InputShapes</a></div><div class="ttdeci">std::vector&lt; armnn::TensorShape &gt; m_InputShapes</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00086">InferenceModel.hpp:86</a></div></div>
<div class="ttc" id="_types_utils_8hpp_xhtml"><div class="ttname"><a href="_types_utils_8hpp.xhtml">TypesUtils.hpp</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a99c7360a4d4b248b3f10607bc5d2fe7b"><div class="ttname"><a href="struct_execute_network_params.xhtml#a99c7360a4d4b248b3f10607bc5d2fe7b">ExecuteNetworkParams::m_GenerateTensorData</a></div><div class="ttdeci">bool m_GenerateTensorData</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00386">NetworkExecutionUtils.hpp:386</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml"><div class="ttname"><a href="struct_execute_network_params.xhtml">ExecuteNetworkParams</a></div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00363">NetworkExecutionUtils.hpp:363</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_abeacb4ed1ca9256ee0e8aea73185a0cc"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#abeacb4ed1ca9256ee0e8aea73185a0cc">InferenceModelInternal::Params::m_OutputBindings</a></div><div class="ttdeci">std::vector&lt; std::string &gt; m_OutputBindings</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00087">InferenceModel.hpp:87</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a2d54e6252c1c9a0e29f7706ba03b2b74"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a2d54e6252c1c9a0e29f7706ba03b2b74">InferenceModelInternal::Params::m_ComputeDevices</a></div><div class="ttdeci">std::vector&lt; armnn::BackendId &gt; m_ComputeDevices</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00088">InferenceModel.hpp:88</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="struct_execute_network_params_xhtml_a318999172ae5197f56326b12d29104b7"><div class="ttname"><a href="struct_execute_network_params.xhtml#a318999172ae5197f56326b12d29104b7">ExecuteNetworkParams::m_ThresholdTime</a></div><div class="ttdeci">double m_ThresholdTime</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00382">NetworkExecutionUtils.hpp:382</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_ad7abdfb6c0cc99eb356c1eefdc6ff696"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#ad7abdfb6c0cc99eb356c1eefdc6ff696">generateTensorData</a></div><div class="ttdeci">bool generateTensorData</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00361">NetworkExecutionUtils.hpp:361</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a44c7d128c41b2717fe425cf6fdc32936"><div class="ttname"><a href="struct_execute_network_params.xhtml#a44c7d128c41b2717fe425cf6fdc32936">ExecuteNetworkParams::m_ModelPath</a></div><div class="ttdeci">const char * m_ModelPath</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00367">NetworkExecutionUtils.hpp:367</a></div></div>
<div class="ttc" id="structarmnn_utils_1_1_csv_row_xhtml"><div class="ttname"><a href="structarmnn_utils_1_1_csv_row.xhtml">armnnUtils::CsvRow</a></div><div class="ttdef"><b>Definition:</b> <a href="_csv_reader_8hpp_source.xhtml#l00013">CsvReader.hpp:13</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a1a08c6c34dd3ce290b4bc62a715bb810"><div class="ttname"><a href="struct_execute_network_params.xhtml#a1a08c6c34dd3ce290b4bc62a715bb810">ExecuteNetworkParams::m_OutputNames</a></div><div class="ttdeci">std::vector&lt; string &gt; m_OutputNames</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00377">NetworkExecutionUtils.hpp:377</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a37fa39012e90d568df7f774cd6d1e956"><div class="ttname"><a href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">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#l00033">NumericCast.hpp:33</a></div></div>
<div class="ttc" id="namespace_inference_model_internal_xhtml_a6e713a319588c57fc854bc478f5ee13a"><div class="ttname"><a href="namespace_inference_model_internal.xhtml#a6e713a319588c57fc854bc478f5ee13a">InferenceModelInternal::QuantizationParams</a></div><div class="ttdeci">std::pair&lt; float, int32_t &gt; QuantizationParams</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00080">InferenceModel.hpp:80</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a5c7f0c083da98e7b6e9ba79d2fcd985d"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a5c7f0c083da98e7b6e9ba79d2fcd985d">InferenceModelInternal::Params::m_ParseUnsupported</a></div><div class="ttdeci">bool m_ParseUnsupported</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00095">InferenceModel.hpp:95</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="_i_onnx_parser_8hpp_xhtml"><div class="ttname"><a href="_i_onnx_parser_8hpp.xhtml">IOnnxParser.hpp</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a924e9ee22f0bf39f05e0c1b45e5c637b"><div class="ttname"><a href="struct_execute_network_params.xhtml#a924e9ee22f0bf39f05e0c1b45e5c637b">ExecuteNetworkParams::m_InputTensorDataFilePaths</a></div><div class="ttdeci">std::vector&lt; string &gt; m_InputTensorDataFilePaths</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00373">NetworkExecutionUtils.hpp:373</a></div></div>
<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_acde2af8cbbd224a9f94e509ca538a775"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#acde2af8cbbd224a9f94e509ca538a775">InferenceModelInternal::Params::m_PrintIntermediateLayers</a></div><div class="ttdeci">bool m_PrintIntermediateLayers</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00094">InferenceModel.hpp:94</a></div></div>
<div class="ttc" id="_i_deserializer_8hpp_xhtml"><div class="ttname"><a href="_i_deserializer_8hpp.xhtml">IDeserializer.hpp</a></div></div>
<div class="ttc" id="class_inference_model_xhtml_a7af4f6c4d5f8720a6ea093a825722227"><div class="ttname"><a href="class_inference_model.xhtml#a7af4f6c4d5f8720a6ea093a825722227">InferenceModel::Run</a></div><div class="ttdeci">std::chrono::duration&lt; double, std::milli &gt; Run(const std::vector&lt; TContainer &gt; &amp;inputContainers, std::vector&lt; TContainer &gt; &amp;outputContainers)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00461">InferenceModel.hpp:461</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a7efc68309e76bfefbfa16fe94501b060"><div class="ttname"><a href="struct_execute_network_params.xhtml#a7efc68309e76bfefbfa16fe94501b060">ExecuteNetworkParams::m_EnableLayerDetails</a></div><div class="ttdeci">bool m_EnableLayerDetails</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00385">NetworkExecutionUtils.hpp:385</a></div></div>
<div class="ttc" id="classarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a08c2e205fcf14f0caa44388f8314e7b5"><div class="ttname"><a href="struct_execute_network_params.xhtml#a08c2e205fcf14f0caa44388f8314e7b5">ExecuteNetworkParams::m_InputTypes</a></div><div class="ttdeci">std::vector&lt; string &gt; m_InputTypes</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00374">NetworkExecutionUtils.hpp:374</a></div></div>
<div class="ttc" id="class_inference_model_xhtml_a679e4b22a845c8d7f58f6ca6a5df625f"><div class="ttname"><a href="class_inference_model.xhtml#a679e4b22a845c8d7f58f6ca6a5df625f">InferenceModel::GetInputSize</a></div><div class="ttdeci">unsigned int GetInputSize(unsigned int inputIndex=0u) const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00449">InferenceModel.hpp:449</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a4fa312cf0d60fbd3988a7c76ab8e2980"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a4fa312cf0d60fbd3988a7c76ab8e2980">InferenceModelInternal::Params::m_ModelPath</a></div><div class="ttdeci">std::string m_ModelPath</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00084">InferenceModel.hpp:84</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a6bf2f586c403977d31c7d32d371918cf"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a6bf2f586c403977d31c7d32d371918cf">InferenceModelInternal::Params::m_IsModelBinary</a></div><div class="ttdeci">bool m_IsModelBinary</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00091">InferenceModel.hpp:91</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a2d4582aa74998c397bd064ae73745b62"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a2d4582aa74998c397bd064ae73745b62">InferenceModelInternal::Params::m_SubgraphId</a></div><div class="ttdeci">size_t m_SubgraphId</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00090">InferenceModel.hpp:90</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_afc1c3398fd2de1051edf23a171cfa01b"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#afc1c3398fd2de1051edf23a171cfa01b">MainImpl</a></div><div class="ttdeci">int MainImpl(const ExecuteNetworkParams &amp;params, const std::shared_ptr&lt; armnn::IRuntime &gt; &amp;runtime=nullptr)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00391">NetworkExecutionUtils.hpp:391</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a077f6963fc555d9d42f98cf9ed3e7e03"><div class="ttname"><a href="struct_execute_network_params.xhtml#a077f6963fc555d9d42f98cf9ed3e7e03">ExecuteNetworkParams::m_QuantizeInput</a></div><div class="ttdeci">bool m_QuantizeInput</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00375">NetworkExecutionUtils.hpp:375</a></div></div>
<div class="ttc" id="_csv_reader_8hpp_xhtml"><div class="ttname"><a href="_csv_reader_8hpp.xhtml">CsvReader.hpp</a></div></div>
<div class="ttc" id="_profiling_8hpp_xhtml"><div class="ttname"><a href="_profiling_8hpp.xhtml">Profiling.hpp</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml">InferenceModelInternal::Params</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00082">InferenceModel.hpp:82</a></div></div>
<div class="ttc" id="_i_caffe_parser_8hpp_xhtml"><div class="ttname"><a href="_i_caffe_parser_8hpp.xhtml">ICaffeParser.hpp</a></div></div>
<div class="ttc" id="struct_execute_network_params_xhtml_a26d42007440bb01a1a6d0ab3b5a657ee"><div class="ttname"><a href="struct_execute_network_params.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">ExecuteNetworkParams::m_EnableProfiling</a></div><div class="ttdeci">bool m_EnableProfiling</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00380">NetworkExecutionUtils.hpp:380</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_59425e443f801f1f2fd8bbe4959a3ccf.xhtml">tests</a></li><li class="navelem"><a class="el" href="dir_bee5dd02b9a5e046b34f7fb0b8e9850a.xhtml">NetworkExecutionUtils</a></li><li class="navelem"><a class="el" href="_network_execution_utils_8hpp.xhtml">NetworkExecutionUtils.hpp</a></li>
    <li class="footer">Generated on Fri Mar 13 2020 16:09:13 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>