aboutsummaryrefslogtreecommitdiff
path: root/22.08/_network_execution_utils_8hpp_source.xhtml
blob: eba0f0372ea63fadfa4ca7c92c65707993089a3e (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
<!-- 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">22.08</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 © 2022 Arm Ltd and Contributors. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_logging_8hpp.xhtml">armnn/Logging.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_string_utils_8hpp.xhtml">armnn/utility/StringUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_numeric_cast_8hpp.xhtml">armnn/utility/NumericCast.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_backend_registry_8hpp.xhtml">armnn/BackendRegistry.hpp</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * Given a measured duration and a threshold time tell the user whether we succeeded or not.</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * @param duration the measured inference duration.</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * @param thresholdTime the threshold time in milliseconds.</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * @return false if the measured time exceeded the threshold.</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#ab9be7e320a1879b362298cb198250dae">CheckInferenceTimeThreshold</a>(<span class="keyword">const</span> std::chrono::duration&lt;double, std::milli&gt;&amp; duration,</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;                                 <span class="keyword">const</span> <span class="keywordtype">double</span>&amp; thresholdTime);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#ae38d48d9fea38c5133e1f86f6144cc64">   28</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#ae38d48d9fea38c5133e1f86f6144cc64">CheckRequestedBackendsAreValid</a>(<span class="keyword">const</span> std::vector&lt;armnn::BackendId&gt;&amp; backendIds,</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;                                           <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;std::string&amp;&gt;</a> invalidBackendIds = <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>())</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keywordflow">if</span> (backendIds.empty())</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    {</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</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;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">armnn::BackendIdSet</a> validBackendIds = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a>().<a class="code" href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">GetBackendIds</a>();</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keywordtype">bool</span> allValid = <span class="keyword">true</span>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; backendId : backendIds)</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    {</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        <span class="keywordflow">if</span> (std::find(validBackendIds.begin(), validBackendIds.end(), backendId) == validBackendIds.end())</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        {</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;            allValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;            <span class="keywordflow">if</span> (invalidBackendIds)</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;            {</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;                <span class="keywordflow">if</span> (!invalidBackendIds.value().empty())</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;                    invalidBackendIds.value() += <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                }</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                invalidBackendIds.value() += backendId;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;            }</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    }</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">return</span> allValid;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;std::vector&lt;unsigned int&gt; <a class="code" href="_network_execution_utils_8hpp.xhtml#a7dfb0158a3b76d682b4fcfe434ad2d7a">ParseArray</a>(std::istream&amp; stream);</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">/// Splits a given string at every accurance of delimiter into a vector of string</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment"></span>std::vector&lt;std::string&gt; <a class="code" href="_network_execution_utils_8hpp.xhtml#a1842dfaf4b24f36146a0cf6731ed75b7">ParseStringList</a>(<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="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">/// Dequantize an array of a given type</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">/// @param array Type erased array to dequantize</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">/// @param numElements Elements in the array</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment">/// @param array Type erased array to dequantize</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#af631e88159085fbd9808b9d9165c58aa">   67</a></span>&#160;std::vector&lt;float&gt; <a class="code" href="_network_execution_utils_8hpp.xhtml#af631e88159085fbd9808b9d9165c58aa">DequantizeArray</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* array, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements, <span class="keywordtype">float</span> scale, int32_t offset)</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="keyword">const</span> T* quantizedArray = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(array);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    std::vector&lt;float&gt; dequantizedVector;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    dequantizedVector.reserve(numElements);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numElements; ++i)</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    {</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="keywordtype">float</span> f = <a class="code" href="namespacearmnn.xhtml#a855293b1be0581fb61ef6a1c5b027d0f">armnn::Dequantize</a>(*(quantizedArray + i), scale, offset);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        dequantizedVector.push_back(f);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    }</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">return</span> dequantizedVector;</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;<span class="keywordtype">void</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#a0d853d3a7b138f39cc775c26e2c0821a">LogAndThrow</a>(std::string eMsg);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment"> * Verifies if the given string is a valid path. Reports invalid paths to std::err.</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="comment"> * @param file string - A string containing the path to check</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="comment"> * @param expectFile bool - If true, checks for a regular file.</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="comment"> * @return bool - True if given string is a valid path., false otherwise.</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment"> * */</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#a6506f23e2f4153a68c87ea03ae423b12">ValidatePath</a>(<span class="keyword">const</span> std::string&amp; file, <span class="keyword">const</span> <span class="keywordtype">bool</span> expectFile);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment"> * Verifies if a given vector of strings are valid paths. Reports invalid paths to std::err.</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment"> * @param fileVec vector of string - A vector of string containing the paths to check</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment"> * @param expectFile bool - If true, checks for a regular file.</span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment"> * @return bool - True if all given strings are valid paths., false otherwise.</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment"> * */</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#aa8ad60308ed132ba939a09d48a97ac30">ValidatePaths</a>(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; fileVec, <span class="keyword">const</span> <span class="keywordtype">bool</span> expectFile);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment">/// Returns a function of read the given type as a string</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="comment"></span>template &lt;typename Integer, typename std::enable_if_t&lt;std::is_integral&lt;Integer&gt;::value&gt;* = <span class="keyword">nullptr</span>&gt;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#ae7387e7368207af65b6dd950f46d5de2">  100</a></span>&#160;std::function&lt;Integer(const std::string&amp;)&gt; <a class="code" href="_network_execution_utils_8hpp.xhtml#ae7387e7368207af65b6dd950f46d5de2">GetParseElementFunc</a>()</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">return</span> [](<span class="keyword">const</span> std::string&amp; s) { <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;Integer&gt;(std::stoi(s)); };</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;template &lt;typename Float, std::enable_if_t&lt;std::is_floating_point&lt;Float&gt;::value&gt;* = <span class="keyword">nullptr</span>&gt;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#ac06a5d37e1a27a4660f718b6e6b551ef">  106</a></span>&#160;std::function&lt;Float(const std::string&amp;)&gt; <a class="code" href="_network_execution_utils_8hpp.xhtml#ae7387e7368207af65b6dd950f46d5de2">GetParseElementFunc</a>()</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;    <span class="keywordflow">return</span> [](<span class="keyword">const</span> std::string&amp; s) { <span class="keywordflow">return</span> std::stof(s); };</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#a2470a40f9c37aa8f8064dad68240d8bc">  112</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#a2470a40f9c37aa8f8064dad68240d8bc">PopulateTensorWithData</a>(T* tensor,</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;                            <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements,</div><div class="line"><a name="l00114"></a><span class="lineno">  114</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="l00115"></a><span class="lineno">  115</span>&#160;                            <span class="keyword">const</span> std::string&amp; inputName)</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;    <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="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    std::ifstream inputTensorFile;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">if</span> (!readFromFile)</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    {</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        std::fill(tensor, tensor + numElements, 0);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    }</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">else</span></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;        inputTensorFile = std::ifstream(dataFile.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>());</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    }</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keyword">auto</span> parseElementFunc = GetParseElementFunc&lt;T&gt;();</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    std::string line;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = 0;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">while</span> (std::getline(inputTensorFile, line))</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;        std::vector&lt;std::string&gt; tokens = <a class="code" href="namespacearmnn_1_1string_utils.xhtml#a25545ea8edf6a26c00077b01294beac5">armnn::stringUtils::StringTokenizer</a>(line, <span class="stringliteral">&quot;\t ,:&quot;</span>);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string&amp; token : tokens)</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">if</span> (!token.empty()) <span class="comment">// See https://stackoverflow.com/questions/10437406/</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;            {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;                <span class="keywordflow">try</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;                {</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;                    <span class="keywordflow">if</span> (index == numElements)</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;                        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(error) &lt;&lt; <span class="stringliteral">&quot;Number of elements: &quot;</span> &lt;&lt; (index +1) &lt;&lt; <span class="stringliteral">&quot; in file \&quot;&quot;</span> &lt;&lt; dataFile.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>()</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;                                         &lt;&lt; <span class="stringliteral">&quot;\&quot; does not match number of elements: &quot;</span> &lt;&lt; numElements</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                                         &lt;&lt; <span class="stringliteral">&quot; for input \&quot;&quot;</span> &lt;&lt; inputName &lt;&lt; <span class="stringliteral">&quot;\&quot;.&quot;</span>;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                    }</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                    *(tensor + index) = parseElementFunc(token);</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;                    index++;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                }</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp;)</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;                    <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="l00154"></a><span class="lineno">  154</span>&#160;                }</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            }</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    }</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">if</span> (index != numElements)</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    {</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(error) &lt;&lt; <span class="stringliteral">&quot;Number of elements: &quot;</span> &lt;&lt; (index +1) &lt;&lt; <span class="stringliteral">&quot; in file \&quot;&quot;</span> &lt;&lt; inputName</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;                         &lt;&lt; <span class="stringliteral">&quot;\&quot; does not match number of elements: &quot;</span> &lt;&lt; numElements</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;                         &lt;&lt; <span class="stringliteral">&quot; for input \&quot;&quot;</span> &lt;&lt; inputName &lt;&lt; <span class="stringliteral">&quot;\&quot;.&quot;</span>;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    }</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;}</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#a213478ad343eb9bc37ce0e4335af0b46">  168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#a213478ad343eb9bc37ce0e4335af0b46">WriteToFile</a>(<span class="keyword">const</span> std::string&amp; outputTensorFileName,</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;                 <span class="keyword">const</span> std::string&amp; outputName,</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;                 <span class="keyword">const</span> T* <span class="keyword">const</span> array,</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements)</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;    std::ofstream outputTensorFile;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    outputTensorFile.open(outputTensorFileName, std::ofstream::out | std::ofstream::trunc);</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="keywordflow">if</span> (outputTensorFile.is_open())</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    {</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        outputTensorFile &lt;&lt; outputName &lt;&lt; <span class="stringliteral">&quot;: &quot;</span>;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        std::copy(array, array + numElements, std::ostream_iterator&lt;T&gt;(outputTensorFile, <span class="stringliteral">&quot; &quot;</span>));</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="keywordflow">else</span></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;        <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; outputTensorFileName &lt;&lt; <span class="stringliteral">&quot; could not be opened!&quot;</span>;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    }</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    outputTensorFile.close();</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;}</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"><a class="line" href="struct_output_write_info.xhtml">  187</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_output_write_info.xhtml">OutputWriteInfo</a></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"><a class="line" href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">  189</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;std::string&gt;</a>&amp; <a class="code" href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">m_OutputTensorFile</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="struct_output_write_info.xhtml#a72d90fe66b20ea70815172f72038e0b0">  190</a></span>&#160;    <span class="keyword">const</span> std::string&amp; <a class="code" href="struct_output_write_info.xhtml#a72d90fe66b20ea70815172f72038e0b0">m_OutputName</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">  191</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>&amp; <a class="code" href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">m_Tensor</a>;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="struct_output_write_info.xhtml#a7a70f97621880de6a38f21d9c417e31c">  192</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="struct_output_write_info.xhtml#a7a70f97621880de6a38f21d9c417e31c">m_PrintTensor</a>;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;};</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#ac3b52c24ee2422d5d7557a8ff86fece7">  196</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#ac3b52c24ee2422d5d7557a8ff86fece7">PrintTensor</a>(<a class="code" href="struct_output_write_info.xhtml">OutputWriteInfo</a>&amp; info, <span class="keyword">const</span> <span class="keywordtype">char</span>* formatString)</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;{</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keyword">const</span> T* array = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(info.<a class="code" href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">m_Tensor</a>.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#aa81f67ac64f0c249e26499600c45d996">GetMemoryArea</a>());</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <span class="keywordflow">if</span> (info.<a class="code" href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">m_OutputTensorFile</a>.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>())</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    {</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <a class="code" href="_network_execution_utils_8hpp.xhtml#a213478ad343eb9bc37ce0e4335af0b46">WriteToFile</a>(info.<a class="code" href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">m_OutputTensorFile</a>.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>(),</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                    info.<a class="code" href="struct_output_write_info.xhtml#a72d90fe66b20ea70815172f72038e0b0">m_OutputName</a>,</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;                    array,</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;                    info.<a class="code" href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">m_Tensor</a>.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    }</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">if</span> (info.<a class="code" href="struct_output_write_info.xhtml#a7a70f97621880de6a38f21d9c417e31c">m_PrintTensor</a>)</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    {</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; info.<a class="code" href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">m_Tensor</a>.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>(); i++)</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;            printf(formatString, array[i]);</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;    }</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;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#abbced3704108173ec157ed4ce562c439">  218</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#abbced3704108173ec157ed4ce562c439">PrintQuantizedTensor</a>(<a class="code" href="struct_output_write_info.xhtml">OutputWriteInfo</a>&amp; info)</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;    std::vector&lt;float&gt; dequantizedValues;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keyword">auto</span> tensor = info.<a class="code" href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">m_Tensor</a>;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    dequantizedValues = DequantizeArray&lt;T&gt;(tensor.GetMemoryArea(),</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;                                           tensor.GetNumElements(),</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;                                           tensor.GetInfo().GetQuantizationScale(),</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;                                           tensor.GetInfo().GetQuantizationOffset());</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <span class="keywordflow">if</span> (info.<a class="code" href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">m_OutputTensorFile</a>.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>())</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    {</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        <a class="code" href="_network_execution_utils_8hpp.xhtml#a213478ad343eb9bc37ce0e4335af0b46">WriteToFile</a>(info.<a class="code" href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">m_OutputTensorFile</a>.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>(),</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;                    info.<a class="code" href="struct_output_write_info.xhtml#a72d90fe66b20ea70815172f72038e0b0">m_OutputName</a>,</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;                    dequantizedValues.data(),</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                    tensor.GetNumElements());</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;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    <span class="keywordflow">if</span> (info.<a class="code" href="struct_output_write_info.xhtml#a7a70f97621880de6a38f21d9c417e31c">m_PrintTensor</a>)</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    {</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        std::for_each(dequantizedValues.begin(), dequantizedValues.end(), [&amp;](<span class="keywordtype">float</span> value)</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        {</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            printf(<span class="stringliteral">&quot;%f &quot;</span>, value);</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;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</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="l00245"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#a20b7a9d32847d623fb19516762317d0d">  245</a></span>&#160;std::vector&lt;T&gt; <a class="code" href="_network_execution_utils_8hpp.xhtml#a20b7a9d32847d623fb19516762317d0d">ParseArrayImpl</a>(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="l00246"></a><span class="lineno">  246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    std::vector&lt;T&gt; result;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="comment">// Processes line-by-line.</span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    std::string line;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keywordflow">while</span> (std::getline(stream, line))</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;        std::vector&lt;std::string&gt; tokens = <a class="code" href="namespacearmnn_1_1string_utils.xhtml#a25545ea8edf6a26c00077b01294beac5">armnn::stringUtils::StringTokenizer</a>(line, chars);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string&amp; token : tokens)</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        {</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            <span class="keywordflow">if</span> (!token.empty()) <span class="comment">// See https://stackoverflow.com/questions/10437406/</span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;            {</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;                <span class="keywordflow">try</span></div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;                {</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;                    result.push_back(parseElementFunc(token));</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;                <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp;)</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;                    <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="l00264"></a><span class="lineno">  264</span>&#160;                }</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;            }</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    }</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;}</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="comment">/// Compute the root-mean-square error (RMSE)</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="comment">/// @param expected</span></div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="comment">/// @param actual</span></div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="comment">/// @param size size of the tensor</span></div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;<span class="comment">/// @return float the RMSE</span></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="_network_execution_utils_8hpp.xhtml#a844daa1e7f888b0242cca4d7da51d256">  278</a></span>&#160;<span class="keywordtype">float</span> <a class="code" href="_network_execution_utils_8hpp.xhtml#a844daa1e7f888b0242cca4d7da51d256">ComputeRMSE</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* expected, <span class="keyword">const</span> <span class="keywordtype">void</span>* actual, <span class="keyword">const</span> <span class="keywordtype">size_t</span> size)</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;    <span class="keyword">auto</span> typedExpected = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(expected);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keyword">auto</span> typedActual = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(actual);</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;    T errorSum = 0;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; size; i++)</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    {</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <span class="keywordflow">if</span> (std::abs(typedExpected[i] - typedActual[i]) != 0)</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        {</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;            std::cout &lt;&lt; <span class="stringliteral">&quot;&quot;</span>;</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;        errorSum += std::pow(std::abs(typedExpected[i] - typedActual[i]), 2);</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;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    <span class="keywordtype">float</span> rmse = std::sqrt(armnn::numeric_cast&lt;float&gt;(errorSum) / armnn::numeric_cast&lt;float&gt;(size / <span class="keyword">sizeof</span>(T)));</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="keywordflow">return</span> rmse;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;}</div><div class="ttc" id="namespacearmnn_1_1string_utils_xhtml_a25545ea8edf6a26c00077b01294beac5"><div class="ttname"><a href="namespacearmnn_1_1string_utils.xhtml#a25545ea8edf6a26c00077b01294beac5">armnn::stringUtils::StringTokenizer</a></div><div class="ttdeci">std::vector&lt; std::string &gt; StringTokenizer(const std::string &amp;str, const char *delimiters, bool tokenCompression=true)</div><div class="ttdoc">Function to take a string and a list of delimiters and split the string into tokens based on those de...</div><div class="ttdef"><b>Definition:</b> <a href="_string_utils_8hpp_source.xhtml#l00023">StringUtils.hpp:23</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#l00046">TypesUtils.cpp:46</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_a570cb1835ec73000a7954ba75257904f"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#a570cb1835ec73000a7954ba75257904f">armnn::BackendRegistry::GetBackendIds</a></div><div class="ttdeci">BackendIdSet GetBackendIds() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00075">BackendRegistry.cpp:75</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="namespacearmnn_xhtml_a1854d9cda81304325664363c1fd0fb27"><div class="ttname"><a href="namespacearmnn.xhtml#a1854d9cda81304325664363c1fd0fb27">armnn::BackendIdSet</a></div><div class="ttdeci">std::unordered_set&lt; BackendId &gt; BackendIdSet</div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00193">BackendId.hpp:193</a></div></div>
<div class="ttc" id="struct_output_write_info_xhtml_a7a70f97621880de6a38f21d9c417e31c"><div class="ttname"><a href="struct_output_write_info.xhtml#a7a70f97621880de6a38f21d9c417e31c">OutputWriteInfo::m_PrintTensor</a></div><div class="ttdeci">const bool m_PrintTensor</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00192">NetworkExecutionUtils.hpp:192</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a6506f23e2f4153a68c87ea03ae423b12"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a6506f23e2f4153a68c87ea03ae423b12">ValidatePath</a></div><div class="ttdeci">bool ValidatePath(const std::string &amp;file, const bool expectFile)</div><div class="ttdoc">Verifies if the given string is a valid path. </div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8cpp_source.xhtml#l00040">NetworkExecutionUtils.cpp:40</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_ac3b52c24ee2422d5d7557a8ff86fece7"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#ac3b52c24ee2422d5d7557a8ff86fece7">PrintTensor</a></div><div class="ttdeci">void PrintTensor(OutputWriteInfo &amp;info, const char *formatString)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00196">NetworkExecutionUtils.hpp:196</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#l00205">Logging.hpp:205</a></div></div>
<div class="ttc" id="classarmnn_1_1_base_tensor_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_base_tensor.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::BaseTensor::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00303">Tensor.hpp:303</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#l00015">BackendRegistry.cpp:15</a></div></div>
<div class="ttc" id="classarmnn_1_1_base_tensor_xhtml_aa81f67ac64f0c249e26499600c45d996"><div class="ttname"><a href="classarmnn_1_1_base_tensor.xhtml#aa81f67ac64f0c249e26499600c45d996">armnn::BaseTensor::GetMemoryArea</a></div><div class="ttdeci">MemoryType GetMemoryArea() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00305">Tensor.hpp:305</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a7dfb0158a3b76d682b4fcfe434ad2d7a"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a7dfb0158a3b76d682b4fcfe434ad2d7a">ParseArray</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; ParseArray(std::istream &amp;stream)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8cpp_source.xhtml#l00055">NetworkExecutionUtils.cpp:55</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a2470a40f9c37aa8f8064dad68240d8bc"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a2470a40f9c37aa8f8064dad68240d8bc">PopulateTensorWithData</a></div><div class="ttdeci">void PopulateTensorWithData(T *tensor, const unsigned int numElements, const armnn::Optional&lt; std::string &gt; &amp;dataFile, const std::string &amp;inputName)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00112">NetworkExecutionUtils.hpp:112</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_reference_switch_xhtml_a77c7d528ac063d870b8c8426ec81c1c3"><div class="ttname"><a href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">armnn::OptionalReferenceSwitch::value</a></div><div class="ttdeci">const T &amp; value() const</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00146">Optional.hpp:146</a></div></div>
<div class="ttc" id="_backend_registry_8hpp_xhtml"><div class="ttname"><a href="_backend_registry_8hpp.xhtml">BackendRegistry.hpp</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a1842dfaf4b24f36146a0cf6731ed75b7"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a1842dfaf4b24f36146a0cf6731ed75b7">ParseStringList</a></div><div class="ttdeci">std::vector&lt; std::string &gt; ParseStringList(const std::string &amp;inputString, const char *delimiter)</div><div class="ttdoc">Splits a given string at every accurance of delimiter into a vector of string. </div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8cpp_source.xhtml#l00010">NetworkExecutionUtils.cpp:10</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_af631e88159085fbd9808b9d9165c58aa"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#af631e88159085fbd9808b9d9165c58aa">DequantizeArray</a></div><div class="ttdeci">std::vector&lt; float &gt; DequantizeArray(const void *array, unsigned int numElements, float scale, int32_t offset)</div><div class="ttdoc">Dequantize an array of a given type. </div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00067">NetworkExecutionUtils.hpp:67</a></div></div>
<div class="ttc" id="struct_output_write_info_xhtml_a72d90fe66b20ea70815172f72038e0b0"><div class="ttname"><a href="struct_output_write_info.xhtml#a72d90fe66b20ea70815172f72038e0b0">OutputWriteInfo::m_OutputName</a></div><div class="ttdeci">const std::string &amp; m_OutputName</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00190">NetworkExecutionUtils.hpp:190</a></div></div>
<div class="ttc" id="_numeric_cast_8hpp_xhtml"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml">NumericCast.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00319">Tensor.hpp:319</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_ae7387e7368207af65b6dd950f46d5de2"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#ae7387e7368207af65b6dd950f46d5de2">GetParseElementFunc</a></div><div class="ttdeci">std::function&lt; Integer(const std::string &amp;)&gt; GetParseElementFunc()</div><div class="ttdoc">Returns a function of read the given type as a string. </div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00100">NetworkExecutionUtils.hpp:100</a></div></div>
<div class="ttc" id="struct_output_write_info_xhtml"><div class="ttname"><a href="struct_output_write_info.xhtml">OutputWriteInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00187">NetworkExecutionUtils.hpp:187</a></div></div>
<div class="ttc" id="struct_output_write_info_xhtml_ae998d3167f9ba93cfdbe11a49e3f60d9"><div class="ttname"><a href="struct_output_write_info.xhtml#ae998d3167f9ba93cfdbe11a49e3f60d9">OutputWriteInfo::m_Tensor</a></div><div class="ttdeci">const armnn::Tensor &amp; m_Tensor</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00191">NetworkExecutionUtils.hpp:191</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="_network_execution_utils_8hpp_xhtml_ae38d48d9fea38c5133e1f86f6144cc64"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#ae38d48d9fea38c5133e1f86f6144cc64">CheckRequestedBackendsAreValid</a></div><div class="ttdeci">bool CheckRequestedBackendsAreValid(const std::vector&lt; armnn::BackendId &gt; &amp;backendIds, armnn::Optional&lt; std::string &amp;&gt; invalidBackendIds=armnn::EmptyOptional())</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00028">NetworkExecutionUtils.hpp:28</a></div></div>
<div class="ttc" id="struct_output_write_info_xhtml_a7e36128f3c26d7dc1bc5bf0e5abeb790"><div class="ttname"><a href="struct_output_write_info.xhtml#a7e36128f3c26d7dc1bc5bf0e5abeb790">OutputWriteInfo::m_OutputTensorFile</a></div><div class="ttdeci">const armnn::Optional&lt; std::string &gt; &amp; m_OutputTensorFile</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00189">NetworkExecutionUtils.hpp:189</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a844daa1e7f888b0242cca4d7da51d256"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a844daa1e7f888b0242cca4d7da51d256">ComputeRMSE</a></div><div class="ttdeci">float ComputeRMSE(const void *expected, const void *actual, const size_t size)</div><div class="ttdoc">Compute the root-mean-square error (RMSE) </div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00278">NetworkExecutionUtils.hpp:278</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml"><div class="ttname"><a href="_logging_8hpp.xhtml">Logging.hpp</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a213478ad343eb9bc37ce0e4335af0b46"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a213478ad343eb9bc37ce0e4335af0b46">WriteToFile</a></div><div class="ttdeci">void WriteToFile(const std::string &amp;outputTensorFileName, const std::string &amp;outputName, const T *const array, const unsigned int numElements)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00168">NetworkExecutionUtils.hpp:168</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_ab9be7e320a1879b362298cb198250dae"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#ab9be7e320a1879b362298cb198250dae">CheckInferenceTimeThreshold</a></div><div class="ttdeci">bool CheckInferenceTimeThreshold(const std::chrono::duration&lt; double, std::milli &gt; &amp;duration, const double &amp;thresholdTime)</div><div class="ttdoc">Given a measured duration and a threshold time tell the user whether we succeeded or not...</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8cpp_source.xhtml#l00017">NetworkExecutionUtils.cpp:17</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_a20b7a9d32847d623fb19516762317d0d"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a20b7a9d32847d623fb19516762317d0d">ParseArrayImpl</a></div><div class="ttdeci">std::vector&lt; T &gt; ParseArrayImpl(std::istream &amp;stream, TParseElementFunc parseElementFunc, const char *chars=&quot;\,:&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00245">NetworkExecutionUtils.hpp:245</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_aa8ad60308ed132ba939a09d48a97ac30"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#aa8ad60308ed132ba939a09d48a97ac30">ValidatePaths</a></div><div class="ttdeci">bool ValidatePaths(const std::vector&lt; std::string &gt; &amp;fileVec, const bool expectFile)</div><div class="ttdoc">Verifies if a given vector of strings are valid paths. </div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8cpp_source.xhtml#l00062">NetworkExecutionUtils.cpp:62</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="_network_execution_utils_8hpp_xhtml_a0d853d3a7b138f39cc775c26e2c0821a"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#a0d853d3a7b138f39cc775c26e2c0821a">LogAndThrow</a></div><div class="ttdeci">void LogAndThrow(std::string eMsg)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8cpp_source.xhtml#l00075">NetworkExecutionUtils.cpp:75</a></div></div>
<div class="ttc" id="_network_execution_utils_8hpp_xhtml_abbced3704108173ec157ed4ce562c439"><div class="ttname"><a href="_network_execution_utils_8hpp.xhtml#abbced3704108173ec157ed4ce562c439">PrintQuantizedTensor</a></div><div class="ttdeci">void PrintQuantizedTensor(OutputWriteInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_network_execution_utils_8hpp_source.xhtml#l00218">NetworkExecutionUtils.hpp:218</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="_string_utils_8hpp_xhtml"><div class="ttname"><a href="_string_utils_8hpp.xhtml">StringUtils.hpp</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 Aug 19 2022 14:38:31 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>