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

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

<div class="header">
  <div class="headertitle">
<div class="title">ArmnnPreparedModel.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_armnn_prepared_model_8cpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 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"><a class="line" href="_armnn_prepared_model_8cpp.xhtml#a7ce0df38eb467e59f209470c8f5ac4e6">    6</a></span>&#160;<span class="preprocessor">#define LOG_TAG &quot;arm-armnn-sl&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_armnn_prepared_model_8hpp.xhtml">ArmnnPreparedModel.hpp</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_canonical_utils_8hpp.xhtml">CanonicalUtils.hpp</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;DefaultExecution.h&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;LegacyUtils.h&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;nnapi/IBurst.h&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;nnapi/IPreparedModel.h&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;nnapi/Result.h&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;nnapi/SharedMemory.h&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;nnapi/TypeUtils.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;nnapi/Types.h&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;nnapi/Validation.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceandroid.xhtml">android</a>;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceandroid_1_1nn.xhtml">android::nn</a>;</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="keyword">static</span> <span class="keyword">const</span> Timing g_NoTiming = {};</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="keyword">namespace </span>{</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn__driver.xhtml">armnn_driver</a>;</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="keywordtype">unsigned</span> <span class="keywordtype">long</span> MicrosecondsDuration(android::nn::TimePoint endPoint, android::nn::TimePoint startPoint)</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">long</span><span class="keyword">&gt;</span>(std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;                                      endPoint - startPoint).count());</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;}</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="keywordtype">bool</span> ValidateRequestArgument(<span class="keyword">const</span> Request::Argument&amp; requestArg, <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo)</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;    <span class="keywordflow">if</span> (requestArg.dimensions.size() != 0)</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="keywordflow">if</span> (requestArg.dimensions.size() != tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        {</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;            VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;Mismatched dimensions (request argument: &quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;                         &lt;&lt; requestArg.dimensions.size() &lt;&lt; <span class="stringliteral">&quot; expected: &quot;</span> &lt;&lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</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;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> d = 0; d &lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++d)</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">if</span> (requestArg.dimensions[d] != 0 &amp;&amp; requestArg.dimensions[d] != tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[d])</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;                VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;Mismatched dimensions &quot;</span> &lt;&lt; d</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;                             &lt;&lt; <span class="stringliteral">&quot; (request argument: &quot;</span> &lt;&lt; requestArg.dimensions[d]</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;                             &lt;&lt; <span class="stringliteral">&quot; expected: &quot;</span> &lt;&lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[d];</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;            }</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        }</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    }</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;}</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a> GetTensorForRequestArgument(<span class="keyword">const</span> Request::Argument&amp; requestArg,</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;                                          <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;                                          <span class="keyword">const</span> std::vector&lt;::android::nn::RunTimePoolInfo&gt;&amp; requestPools)</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">if</span> (!ValidateRequestArgument(requestArg, tensorInfo))</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;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>();</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;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keywordflow">if</span> (requestArg.lifetime == Request::Argument::LifeTime::POINTER)</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    {</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>(tensorInfo, <a class="code" href="namespacearmnn__driver.xhtml#a915f2652854e417e26afc297f12e107c">GetMemoryFromPointer</a>(requestArg));</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    }</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (requestArg.lifetime == Request::Argument::LifeTime::POOL)</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;        <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>(tensorInfo, <a class="code" href="namespacearmnn__driver.xhtml#a96666c2945d7fe8c34aee30a449287d5">GetMemoryFromPool</a>(requestArg.location, requestPools));</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a>();</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;}</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="keyword">inline</span> std::string BuildTensorName(<span class="keyword">const</span> <span class="keywordtype">char</span>* tensorNamePrefix, std::size_t index)</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="keywordflow">return</span> tensorNamePrefix + std::to_string(index);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;}</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="keywordtype">bool</span> IsPointerTypeMemory(<span class="keyword">const</span> Request&amp; request)</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;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; input : request.inputs)</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    {</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        <span class="keywordflow">if</span> (input.lifetime != Request::Argument::LifeTime::POINTER)</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;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        }</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    }</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; output: request.outputs)</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;        <span class="keywordflow">if</span> (output.lifetime != Request::Argument::LifeTime::POINTER)</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">return</span> <span class="keyword">false</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;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;} <span class="comment">// anonymous namespace</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceandroid_1_1nn.xhtml">android::nn</a>;</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">namespace </span><a class="code" href="namespacearmnn__driver.xhtml">armnn_driver</a></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;{</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="keywordtype">void</span> ArmnnPreparedModel::Init()</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;    <span class="comment">// Enable profiling if required.</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    m_Runtime-&gt;GetProfiler(m_NetworkId)-&gt;EnableProfiling(m_GpuProfilingEnabled);</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;</div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a4905d77691ee9a2e9705e90557f64c2b">  126</a></span>&#160;ArmnnPreparedModel::ArmnnPreparedModel(<a class="code" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">armnn::NetworkId</a> networkId,</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;                                       <a class="code" href="classarmnn_1_1_i_runtime.xhtml">armnn::IRuntime</a>* runtime,</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                                       <span class="keyword">const</span> <a class="code" href="namespacearmnn__driver.xhtml#a923b39ec5f83672f50289cbaf5de6798">Model</a>&amp; model,</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;                                       <span class="keyword">const</span> std::string&amp; requestInputsAndOutputsDumpDir,</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;                                       <span class="keyword">const</span> <span class="keywordtype">bool</span> gpuProfilingEnabled,</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;                                       Priority priority)</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    : m_NetworkId(networkId)</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    , m_Runtime(runtime)</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    , m_Model(model)</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    , m_RequestInputsAndOutputsDumpDir(requestInputsAndOutputsDumpDir)</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    , m_GpuProfilingEnabled(gpuProfilingEnabled)</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    , m_ModelPriority(priority)</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    , m_PrepareFromCache(false)</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;    Init();</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;}</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a5b6d4da9a2af5b8c583f0e646e5798c5">  143</a></span>&#160;<a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a4905d77691ee9a2e9705e90557f64c2b">ArmnnPreparedModel::ArmnnPreparedModel</a>(<a class="code" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">armnn::NetworkId</a> networkId,</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;                                       <a class="code" href="classarmnn_1_1_i_runtime.xhtml">armnn::IRuntime</a>* runtime,</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;                                       <span class="keyword">const</span> std::string&amp; requestInputsAndOutputsDumpDir,</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                                       <span class="keyword">const</span> <span class="keywordtype">bool</span> gpuProfilingEnabled,</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                                       Priority priority,</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                                       <span class="keyword">const</span> <span class="keywordtype">bool</span> prepareModelFromCache)</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    : m_NetworkId(networkId)</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    , m_Runtime(runtime)</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    , m_RequestInputsAndOutputsDumpDir(requestInputsAndOutputsDumpDir)</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    , m_GpuProfilingEnabled(gpuProfilingEnabled)</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    , m_ModelPriority(priority)</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    , m_PrepareFromCache(prepareModelFromCache)</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;    Init();</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;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<a class="code" href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">ErrorStatus</a> ArmnnPreparedModel::PrepareMemoryForInputs(</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a>&amp; inputs,</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <span class="keyword">const</span> Request&amp; request,</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::RunTimePoolInfo&gt;&amp; memPools)<span class="keyword"> const</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    inputs.reserve(request.inputs.size());</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; request.inputs.size(); i++)</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;        <span class="keyword">const</span> <span class="keyword">auto</span>&amp; inputArg = request.inputs[i];</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;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#a25f528b76d8116e08cddc7d4a8661ee1">GetInputTensorInfo</a>(m_NetworkId, i);</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="comment">// inputs (of type InputTensors) is composed of a vector of ConstTensors.</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        <span class="comment">// Therefore, set all TensorInfo isConstant parameters of input Tensors to true.</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8ffca1e21bdfa7f945617acd606aac91">SetConstant</a>();</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a> inputTensor = GetTensorForRequestArgument(inputArg, inputTensorInfo, memPools);</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        <span class="keywordflow">if</span> (inputTensor.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#aa81f67ac64f0c249e26499600c45d996">GetMemoryArea</a>() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        {</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;            VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;Cannot execute request. Error converting request input &quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;to tensor.&quot;</span>;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;            <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        }</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        inputs.emplace_back(i, inputTensor);</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    }</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="keywordflow">return</span> ErrorStatus::NONE;</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">  187</span>&#160;<a class="code" href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">ErrorStatus</a> ArmnnPreparedModel::PrepareMemoryForOutputs(</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a>&amp; outputs,</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    std::vector&lt;OutputShape&gt; &amp;outputShapes,</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keyword">const</span> Request&amp; request,</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::RunTimePoolInfo&gt;&amp; memPools)<span class="keyword"> const</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    outputs.reserve(request.outputs.size());</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; request.outputs.size(); i++)</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    {</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        <span class="keyword">auto</span>&amp; outputArg = request.outputs[i];</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;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#a5dccecd36bb6eda573be616face68035">GetOutputTensorInfo</a>(m_NetworkId, i);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a> outputTensor = GetTensorForRequestArgument(outputArg, outputTensorInfo, memPools);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <span class="keywordflow">if</span> (outputTensor.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#aa81f67ac64f0c249e26499600c45d996">GetMemoryArea</a>() == <span class="keyword">nullptr</span>)</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;            VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;Cannot execute request. Error converting request output &quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;to tensor.&quot;</span>;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        }</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> outputSize = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>();</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = 0;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        std::for_each(outputArg.dimensions.begin(), outputArg.dimensions.end(), [&amp;](<span class="keyword">auto</span> dim)</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;            <span class="keywordflow">if</span> (dim != 0)</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;            {</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[count] = dim;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;            }</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;            <span class="keywordflow">else</span></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;                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[count] = outputArg.dimensions.size();</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;            }</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;            count++;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        });</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        outputs.emplace_back(i, outputTensor);</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        outputShapes[i] = <a class="code" href="namespacearmnn__driver.xhtml#a93d7282d7b5701a723304d87fcdc3a43">ComputeShape</a>(outputTensorInfo);</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <span class="keywordflow">if</span> (outputArg.location.length &lt; outputSize)</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        {</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;            VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::Execute failed outputArg.location.length &quot;</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;                  &lt;&lt; std::to_string(outputArg.location.length).c_str()</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;                  &lt;&lt; <span class="stringliteral">&quot; &lt; outputSize &quot;</span> &lt;&lt; std::to_string(outputSize).c_str();</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;            outputShapes[i].isSufficient = <span class="keyword">false</span>;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;            <span class="keywordflow">return</span> ErrorStatus::OUTPUT_INSUFFICIENT_SIZE;</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="comment">//TODO: Need to check for Request::Argument::LifeTime::POINTER</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <span class="keywordflow">if</span> (outputArg.lifetime == Request::Argument::LifeTime::POOL)</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="keywordtype">size_t</span> bufferSize = memPools.at(outputArg.location.poolIndex).getSize();</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;            <span class="keywordflow">if</span> (bufferSize &lt; outputSize)</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;                VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::Execute failed bufferSize &quot;</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;                             &lt;&lt; std::to_string(outputArg.location.length).c_str()</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;                             &lt;&lt; <span class="stringliteral">&quot; &lt; outputSize &quot;</span> &lt;&lt; std::to_string(outputSize).c_str();</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;                outputShapes[i].isSufficient = <span class="keyword">false</span>;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;                <span class="keywordflow">return</span> ErrorStatus::OUTPUT_INSUFFICIENT_SIZE;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;            }</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        }</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    }</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    <span class="keywordflow">return</span> ErrorStatus::NONE;</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;<a class="code" href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">ErrorStatus</a> ArmnnPreparedModel::PrepareMemoryForIO(<a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a>&amp; inputs,</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;                                                   <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a>&amp; outputs,</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;                                                   std::vector&lt;android::nn::RunTimePoolInfo&gt;&amp; memPools,</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;                                                   <span class="keyword">const</span> Request&amp; request,</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;                                                   <span class="keyword">const</span> <span class="keywordtype">bool</span> pointerMemory)<span class="keyword"> const</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="comment">//Check memory pools are not empty</span></div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="comment">// add the inputs and outputs with their data</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    {</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        <span class="keywordflow">if</span> (!pointerMemory &amp;&amp; !setRunTimePoolInfosFromMemoryPools(&amp;memPools, request.pools))</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="keywordflow">return</span> ErrorStatus::INVALID_ARGUMENT;</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;        <span class="keywordflow">if</span> (PrepareMemoryForInputs(inputs, request, memPools) != ErrorStatus::NONE)</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;            VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;Failed when preparing memory for Inputs&quot;</span>;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;            <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        }</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        std::vector&lt;OutputShape&gt; outputShapes(request.outputs.size());</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <span class="keyword">auto</span> errorStatus = PrepareMemoryForOutputs(outputs, outputShapes, request, memPools);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        <span class="keywordflow">if</span> (errorStatus != ErrorStatus::NONE)</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;            <span class="keywordflow">return</span> errorStatus;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        }</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    }</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keywordflow">catch</span> (<a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>&amp; e)</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;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;armnn::Exception caught while preparing for EnqueueWorkload: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;        <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    }</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">catch</span> (std::exception&amp; e)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    {</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;std::exception caught while preparing for EnqueueWorkload: &quot;</span> &lt;&lt; e.what();</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</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;    <span class="keywordflow">return</span> ErrorStatus::NONE;</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;</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a67e5c38788f9b0152baee24e8f57bc2b">  295</a></span>&#160;ExecutionResult&lt;std::pair&lt;std::vector&lt;OutputShape&gt;, Timing&gt;&gt; <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a67e5c38788f9b0152baee24e8f57bc2b">ArmnnPreparedModel::execute</a>(</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="keyword">const</span> Request&amp; request,</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    MeasureTiming measureTiming,</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    <span class="keyword">const</span> OptionalTimePoint&amp; deadline,</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    <span class="keyword">const</span> OptionalDuration&amp;,</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::TokenValuePair&gt;&amp; hints,</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::ExtensionNameAndPrefix&gt;&amp; extensionNameToPrefix)<span class="keyword"> const</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;CanonicalDriver::PreparedModel::execute()&quot;</span>;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml">CanonicalExecutionContext</a> ctx;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <span class="keywordflow">if</span> (measureTiming == MeasureTiming::YES)</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;        ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">measureTimings</a> = measureTiming;</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;        ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ab6f19cc463ef7a388af5de182a393ed2">driverStart</a> =  Clock::now();</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;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <span class="keywordflow">if</span> (!m_PrepareFromCache)</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;        <span class="keyword">const</span> <span class="keyword">auto</span> modelRequest = validateRequestForModel(request, m_Model);</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keywordflow">if</span> (!modelRequest.ok())</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">return</span> NN_ERROR(ErrorStatus::INVALID_ARGUMENT) &lt;&lt; modelRequest.error();</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;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::execute(): &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn__driver.xhtml#a31b494d1b36f5ed7fc7556a0fbc2c17c">GetModelSummary</a>(m_Model).c_str();</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="keywordflow">if</span> (hasDeadlinePassed(deadline))</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    {</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::MISSED_DEADLINE_PERSISTENT);</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    }</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="comment">// map the memory pool into shared pointers</span></div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    <span class="comment">// use a shared memory pools vector on the heap, as it is passed to the request thread</span></div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    <span class="keyword">auto</span> memPools = std::make_shared&lt;std::vector&lt;android::nn::RunTimePoolInfo&gt;&gt;();</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="comment">// allocate the tensors on the heap, as they are passed to the request thread</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    <span class="keyword">auto</span> inputTensors = std::make_shared&lt;armnn::InputTensors&gt;();</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="keyword">auto</span> outputTensors = std::make_shared&lt;armnn::OutputTensors&gt;();</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;    <span class="keyword">auto</span> isPointerTypeMemory = IsPointerTypeMemory(request);</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <a class="code" href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">ErrorStatus</a> theErrorStatus = PrepareMemoryForIO(*inputTensors,</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;                                                    *outputTensors,</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;                                                    *memPools,</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;                                                    request,</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;                                                    isPointerTypeMemory);</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">switch</span>(theErrorStatus)</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;        <span class="keywordflow">case</span> ErrorStatus::OUTPUT_INSUFFICIENT_SIZE:</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;            <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::OUTPUT_INSUFFICIENT_SIZE);</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;        <span class="keywordflow">case</span> ErrorStatus::GENERAL_FAILURE:</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;            <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::GENERAL_FAILURE);</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;        <span class="keywordflow">case</span> ErrorStatus::INVALID_ARGUMENT:</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;            <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::INVALID_ARGUMENT);</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        {}</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;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    std::vector&lt;OutputShape&gt; outputShapes(outputTensors-&gt;size());</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputTensors-&gt;size(); i++)</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;        std::pair&lt;int, armnn::Tensor&gt; outputTensorPair = (*outputTensors)[i];</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a> outputTensor = outputTensorPair.second;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = outputTensor.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#a8aeddebdcf02e1832b22203c08a6b678">GetInfo</a>();</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        outputShapes[i] = <a class="code" href="namespacearmnn__driver.xhtml#a93d7282d7b5701a723304d87fcdc3a43">ComputeShape</a>(outputTensorInfo);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    }</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    Timing theTiming;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::execute(...) before ExecuteGraph&quot;</span>;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <span class="keyword">auto</span> errorStatus = <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#af62ba010a5b9f3187cfeb50db1dcad0a">ExecuteGraph</a>(memPools, *inputTensors, *outputTensors, ctx, isPointerTypeMemory);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="keywordflow">if</span> (errorStatus != ErrorStatus::NONE)</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    {</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;        <span class="keywordflow">return</span> NN_ERROR(errorStatus) &lt;&lt; <span class="stringliteral">&quot;execute() failed&quot;</span>;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    }</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::execute(...) after ExecuteGraph&quot;</span>;</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <span class="keywordflow">return</span> std::make_pair(outputShapes, theTiming);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;}</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#af62ba010a5b9f3187cfeb50db1dcad0a">  375</a></span>&#160;<a class="code" href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">ErrorStatus</a> <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#af62ba010a5b9f3187cfeb50db1dcad0a">ArmnnPreparedModel::ExecuteGraph</a>(</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    std::shared_ptr&lt;std::vector&lt;android::nn::RunTimePoolInfo&gt;&gt;&amp; pMemPools,</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a>&amp; inputTensors,</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a>&amp; outputTensors,</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    <a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml">CanonicalExecutionContext</a> ctx,</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> pointerMemory)<span class="keyword"> const</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::ExecuteGraph(...)&quot;</span>;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    DumpTensorsIfRequired(<span class="stringliteral">&quot;Input&quot;</span>, inputTensors);</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    std::vector&lt;armnn::ImportedInputId&gt; importedInputIds;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    std::vector&lt;armnn::ImportedOutputId&gt; importedOutputIds;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="keywordflow">try</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;        <span class="keywordflow">if</span> (ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">measureTimings</a> == MeasureTiming::YES)</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;        {</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;            ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a6da5957063ca094917c6e5bfeac65898">deviceStart</a> =  Clock::now();</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        }</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a> status;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::ExecuteGraph m_AsyncModelExecutionEnabled false&quot;</span>;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        importedInputIds = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#ac2cb56a0d7ee6fb53e9f97e624973c19">ImportInputs</a>(m_NetworkId, inputTensors, <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</a>);</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        <span class="keywordflow">if</span> (!importedInputIds.empty())</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="comment">// Some or all of the input tensors been imported. We need to remove the ones that could from</span></div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;            <span class="comment">// inputTensors.</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;            <span class="keywordflow">for</span> (<a class="code" href="namespacearmnn.xhtml#a1c5ec805688cb558465a82a8d9f56a90">armnn::ImportedInputId</a>&amp; importedId : importedInputIds)</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;            {</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;                inputTensors.erase(</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;                        std::remove_if(</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                                inputTensors.begin(), inputTensors.end(),</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                                [&amp;importedId](std::pair&lt;armnn::LayerBindingId, class armnn::ConstTensor&gt;&amp; element) {</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;                                    <span class="keywordflow">return</span> (element.first == static_cast&lt;int&gt;(importedId));</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;                                }),</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;                        inputTensors.end());</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;        }</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        importedOutputIds = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#a7db39b06bc7f50287f54320d26df4373">ImportOutputs</a>(m_NetworkId, outputTensors, <a class="code" href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</a>);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        <span class="keywordflow">if</span> (!importedOutputIds.empty())</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;            <span class="comment">// Some or all of the output tensors could not be imported. We need to remove the ones that could</span></div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;            <span class="comment">// from outputTensors.</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;            <span class="keywordflow">for</span> (<a class="code" href="namespacearmnn.xhtml#a1c5ec805688cb558465a82a8d9f56a90">armnn::ImportedInputId</a>&amp; importedId : importedOutputIds)</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;            {</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                outputTensors.erase(</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                        std::remove_if(</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;                                outputTensors.begin(), outputTensors.end(),</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                                [&amp;importedId](std::pair&lt;armnn::LayerBindingId, class armnn::Tensor&gt;&amp; element) {</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;                                    <span class="keywordflow">return</span> (element.first == static_cast&lt;int&gt;(importedId));</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;                        outputTensors.end());</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;            }</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        }</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        status = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#aca51209383683ab8dbe801bbfddfe0c0">EnqueueWorkload</a>(m_NetworkId,</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;                                            inputTensors,</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;                                            outputTensors,</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;                                            importedInputIds,</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                                            importedOutputIds);</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="keywordflow">if</span> (ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">measureTimings</a> == MeasureTiming::YES)</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        {</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;            ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ac4711bb6ab33a33529c62c2c6842a831">deviceEnd</a> =  Clock::now();</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        }</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        <span class="keywordflow">if</span> (status != <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a>)</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        {</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;            VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel:ExecuteGraph EnqueueWorkload failed&quot;</span>;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;            <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        }</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    }</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    <span class="keywordflow">catch</span> (<a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>&amp; e)</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    {</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;armnn:Exception caught from EnqueueWorkload: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    }</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keywordflow">catch</span> (std::exception&amp; e)</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    {</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;std::exception caught from EnqueueWorkload: &quot;</span> &lt;&lt; e.what();</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;        <span class="keywordflow">return</span> ErrorStatus::GENERAL_FAILURE;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    }</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    <span class="keywordflow">if</span> (!pointerMemory &amp;&amp; (!importedInputIds.empty() || !importedOutputIds.empty()))</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    {</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        <a class="code" href="namespacearmnn__driver.xhtml#a7c1c80ee0f432b6b621c40571410195a">CommitPools</a>(*pMemPools);</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    }</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    DumpTensorsIfRequired(<span class="stringliteral">&quot;Output&quot;</span>, outputTensors);</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    <span class="keywordflow">if</span> (ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">measureTimings</a> == MeasureTiming::YES)</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;        ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a45f03338910173fc12dd2ac19521a742">driverEnd</a> =  Clock::now();</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        Timing timing;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        timing.timeOnDevice = ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ac4711bb6ab33a33529c62c2c6842a831">deviceEnd</a> - ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a6da5957063ca094917c6e5bfeac65898">deviceStart</a>;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        timing.timeInDriver = ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a45f03338910173fc12dd2ac19521a742">driverEnd</a> - ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ab6f19cc463ef7a388af5de182a393ed2">driverStart</a>;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::execute timing - Device = &quot;</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;                     &lt;&lt; timing.timeOnDevice &lt;&lt; <span class="stringliteral">&quot;Driver = &quot;</span> &lt;&lt;  timing.timeInDriver;</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;    <span class="keywordflow">return</span> ErrorStatus::NONE;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;}</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ac88833eb361390437abc2a81ab43d04a">  472</a></span>&#160;Priority <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ac88833eb361390437abc2a81ab43d04a">ArmnnPreparedModel::GetModelPriority</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keywordflow">return</span> m_ModelPriority;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;}</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a8d70cd869c7c1eda1c5891ba7e015661">  478</a></span>&#160;GeneralResult&lt;std::pair&lt;SyncFence, ExecuteFencedInfoCallback&gt;&gt; <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a8d70cd869c7c1eda1c5891ba7e015661">ArmnnPreparedModel::executeFenced</a>(</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <span class="keyword">const</span> Request&amp; request,</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <span class="keyword">const</span> std::vector&lt;SyncFence&gt;&amp; waitFor,</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    MeasureTiming measureTiming,</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="keyword">const</span> OptionalTimePoint&amp; deadline,</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="keyword">const</span> OptionalDuration&amp;,</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    <span class="keyword">const</span> OptionalDuration&amp;,</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::TokenValuePair&gt;&amp; hints,</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::ExtensionNameAndPrefix&gt;&amp; extensionNameToPrefix)<span class="keyword"> const</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::executeFenced()&quot;</span>;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="keywordflow">if</span> (!m_PrepareFromCache) {</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> modelRequest = validateRequestForModel(request, m_Model);</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        <span class="keywordflow">if</span> (!modelRequest.ok())</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="keywordflow">return</span> NN_ERROR(ErrorStatus::INVALID_ARGUMENT) &lt;&lt; modelRequest.error();</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        }</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::executeFenced(): &quot;</span> &lt;&lt; <a class="code" href="namespacearmnn__driver.xhtml#a31b494d1b36f5ed7fc7556a0fbc2c17c">GetModelSummary</a>(m_Model).c_str();</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="keywordflow">if</span> (hasDeadlinePassed(deadline))</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    {</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::MISSED_DEADLINE_PERSISTENT);</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    }</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml">CanonicalExecutionContext</a> ctx;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    <span class="keywordflow">if</span> (measureTiming == MeasureTiming::YES)</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    {</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;        ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">measureTimings</a> = measureTiming;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ab6f19cc463ef7a388af5de182a393ed2">driverStart</a> =  Clock::now();</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    }</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="comment">// Wait for the dependent events to signal</span></div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; syncFence : waitFor)</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    {</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;        <span class="keywordflow">if</span> (!syncFence.getSharedHandle())</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;        {</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;            <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::INVALID_ARGUMENT);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;        }</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;        <span class="keywordflow">if</span> (syncFence.syncWait({}) != SyncFence::FenceState::SIGNALED)</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        {</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;            <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::GENERAL_FAILURE) &lt;&lt; <span class="stringliteral">&quot;syncWait failed&quot;</span>;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;        }</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;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    android::nn::TimePoint fenceExecutionStart;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keywordflow">if</span> (measureTiming == MeasureTiming::YES)</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;        fenceExecutionStart = Clock::now();</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    }</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    <span class="comment">// map the memory pool into shared pointers</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="comment">// use a shared memory pools vector on the heap, as it is passed to the request thread</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="keyword">auto</span> memPools = std::make_shared&lt;std::vector&lt;android::nn::RunTimePoolInfo&gt;&gt;();</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="comment">// allocate the tensors on the heap, as they are passed to the request thread</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    <span class="keyword">auto</span> inputTensors = std::make_shared&lt;armnn::InputTensors&gt;();</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="keyword">auto</span> outputTensors = std::make_shared&lt;armnn::OutputTensors&gt;();</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <span class="keyword">auto</span> isPointerTypeMemory = IsPointerTypeMemory(request);</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <a class="code" href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">ErrorStatus</a> theErrorStatus = PrepareMemoryForIO(*inputTensors,</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;                                                    *outputTensors,</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;                                                    *memPools,</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;                                                    request,</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;                                                    isPointerTypeMemory);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="keywordflow">if</span> (theErrorStatus != ErrorStatus::NONE)</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    {</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;        <span class="keywordflow">return</span> NN_ERROR(ErrorStatus::INVALID_ARGUMENT) &lt;&lt; <span class="stringliteral">&quot;executeFenced() failed&quot;</span>;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    }</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    Timing timingSinceLaunch = {};</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    Timing timingAfterFence  = {};</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <span class="keywordflow">if</span> (measureTiming == MeasureTiming::YES)</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    {</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;        timingAfterFence.timeOnDevice = ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ac4711bb6ab33a33529c62c2c6842a831">deviceEnd</a> - ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a6da5957063ca094917c6e5bfeac65898">deviceStart</a>;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;        timingAfterFence.timeInDriver = ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a45f03338910173fc12dd2ac19521a742">driverEnd</a> - fenceExecutionStart;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;executeFenced timingSinceLaunch = &quot;</span> &lt;&lt; timingAfterFence.timeOnDevice;</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;        VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;executeFenced timingAfterFence = &quot;</span> &lt;&lt; timingAfterFence.timeInDriver;</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    }</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnCanonicalPreparedModel::executeFenced(...) before ExecuteGraph&quot;</span>;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    <span class="keyword">auto</span> errorStatus = <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#af62ba010a5b9f3187cfeb50db1dcad0a">ExecuteGraph</a>(memPools, *inputTensors, *outputTensors, ctx, isPointerTypeMemory);</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnCanonicalPreparedModel::executeFenced(...) after ExecuteGraph&quot;</span>;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    ExecuteFencedInfoCallback armnnFencedExecutionCallback =</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;            [timingSinceLaunch, timingAfterFence, errorStatus]() {</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;                GeneralResult&lt;std::pair&lt;Timing, Timing&gt;&gt; result;</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;                <span class="keywordflow">switch</span>(errorStatus)</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="keywordflow">case</span> ErrorStatus::OUTPUT_INSUFFICIENT_SIZE:</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;                        result.error().code = (ErrorStatus::OUTPUT_INSUFFICIENT_SIZE);</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;                    <span class="keywordflow">case</span> ErrorStatus::GENERAL_FAILURE:</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;                        result.error().code = (ErrorStatus::GENERAL_FAILURE);</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;                    <span class="keywordflow">case</span> ErrorStatus::INVALID_ARGUMENT:</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;                        result.error().code = (ErrorStatus::INVALID_ARGUMENT);</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;                    <span class="keywordflow">default</span>:</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;                        result.value() = std::make_pair(timingSinceLaunch, timingAfterFence);</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;                    }</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;                }</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;                <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;            };</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    <span class="keywordflow">return</span> std::make_pair(SyncFence::createAsSignaled(), std::move(armnnFencedExecutionCallback ));</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"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ab108fedcef5c0d766444eb2def3b7bad">  586</a></span>&#160;GeneralResult&lt;SharedExecution&gt; <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ab108fedcef5c0d766444eb2def3b7bad">ArmnnPreparedModel::createReusableExecution</a>(</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keyword">const</span> Request&amp; request,</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    MeasureTiming measureTiming,</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keyword">const</span> OptionalDuration&amp; loopTimeoutDuration,</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::TokenValuePair&gt;&amp; hints,</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    <span class="keyword">const</span> std::vector&lt;android::nn::ExtensionNameAndPrefix&gt;&amp; extensionNameToPrefix)<span class="keyword"> const</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::createReusableExecution()&quot;</span>;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <span class="keywordflow">return</span> std::make_shared&lt;DefaultExecution&gt;(shared_from_this(),</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;                                              request,</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;                                              measureTiming,</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;                                              loopTimeoutDuration);</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;</div><div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a6d898cab83b5bb67f5b8f6a766ea245b">  600</a></span>&#160;GeneralResult&lt;SharedBurst&gt; <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a6d898cab83b5bb67f5b8f6a766ea245b">ArmnnPreparedModel::configureExecutionBurst</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="comment">// TODO: Implement BURST</span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</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"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a0481f4c1ca5608339a5688daf256a4e4">  606</a></span>&#160;std::any <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a0481f4c1ca5608339a5688daf256a4e4">ArmnnPreparedModel::getUnderlyingResource</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="keywordflow">return</span> &amp;m_Model;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;}</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> TensorBindingCollection&gt;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="keywordtype">void</span> ArmnnPreparedModel::DumpTensorsIfRequired(<span class="keywordtype">char</span> <span class="keyword">const</span>* tensorNamePrefix,</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;                                               <span class="keyword">const</span> TensorBindingCollection&amp; tensorBindings)<span class="keyword"> const</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="keywordflow">if</span> (!m_RequestInputsAndOutputsDumpDir.empty())</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    {</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;        <span class="keyword">const</span> std::string requestName = std::to_string(m_NetworkId) + <span class="stringliteral">&quot;.dump&quot;</span>;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;        <span class="keywordflow">for</span> (std::size_t i = 0u; i &lt; tensorBindings.size(); ++i)</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        {</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;            <a class="code" href="namespacearmnn__driver.xhtml#aa25bddb175983b2d3e0965440323d789">DumpTensor</a>(m_RequestInputsAndOutputsDumpDir,</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;                       requestName,</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;                       BuildTensorName(tensorNamePrefix, i),</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;                       tensorBindings[i].second);</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        }</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    }</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"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ac8ea5639172e7326168e2b73ed07e47e">  628</a></span>&#160;<a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ac8ea5639172e7326168e2b73ed07e47e">ArmnnPreparedModel::~ArmnnPreparedModel</a>()</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;{</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    VLOG(DRIVER) &lt;&lt; <span class="stringliteral">&quot;ArmnnPreparedModel::~ArmnnPreparedModel()&quot;</span>;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    <span class="comment">// Get a hold of the profiler used by this model.</span></div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    <span class="keywordflow">if</span> (m_GpuProfilingEnabled)</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    {</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;        <span class="keyword">auto</span> profiler = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#af87d0743d1266e264c3197a32299f4b2">GetProfiler</a>(m_NetworkId);</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        <span class="keywordflow">if</span> (profiler)</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;            <span class="comment">// Dump the profiling info to a file if required.</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;            <a class="code" href="namespacearmnn__driver.xhtml#aa313ae79f70102e3451d45d3387c2e46">DumpJsonProfilingIfRequired</a>(m_GpuProfilingEnabled,</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;                                        m_RequestInputsAndOutputsDumpDir,</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;                                        m_NetworkId,</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;                                        profiler.get());</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        }</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    }</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    <span class="comment">// Unload the network associated with this model</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#aed397991b99f485ffab9a42aece47019">UnloadNetwork</a>(m_NetworkId);</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;</div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ad84aace3d1df79ad6fa37dcd952c085f">  648</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ad84aace3d1df79ad6fa37dcd952c085f">ArmnnPreparedModel::ExecuteWithDummyInputs</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs)<span class="keyword"> const</span></div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    std::vector&lt;std::vector&lt;char&gt;&gt; storage;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a> inputTensors;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</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="l00653"></a><span class="lineno">  653</span>&#160;    {</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#a25f528b76d8116e08cddc7d4a8661ee1">GetInputTensorInfo</a>(m_NetworkId, i);</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        <span class="comment">// pInputTensors (of type InputTensors) is composed of a vector of ConstTensors.</span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        <span class="comment">// Therefore, set all TensorInfo isConstant parameters of input Tensors to true.</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8ffca1e21bdfa7f945617acd606aac91">SetConstant</a>();</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;        storage.emplace_back(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a> inputTensor(inputTensorInfo, storage.back().data());</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        inputTensors.emplace_back(i, inputTensor);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    }</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a> outputTensors;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</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="l00666"></a><span class="lineno">  666</span>&#160;    {</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = m_Runtime-&gt;<a class="code" href="classarmnn_1_1_i_runtime.xhtml#a5dccecd36bb6eda573be616face68035">GetOutputTensorInfo</a>(m_NetworkId, i);</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        storage.emplace_back(outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a> outputTensor(outputTensorInfo, storage.back().data());</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;        outputTensors.emplace_back(i, outputTensor);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    }</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    <a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml">CanonicalExecutionContext</a> ctx;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    ctx.<a class="code" href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">measureTimings</a> = MeasureTiming::NO;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    <span class="keyword">auto</span> memPools = std::make_shared&lt;std::vector&lt;::android::nn::RunTimePoolInfo&gt;&gt;();</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    <span class="keyword">auto</span> errorStatus = <a class="code" href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#af62ba010a5b9f3187cfeb50db1dcad0a">ExecuteGraph</a>(memPools,</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                                    inputTensors,</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;                                    outputTensors,</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;                                    ctx);</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keywordflow">return</span> errorStatus == ErrorStatus::NONE;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;}</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;} <span class="comment">// namespace armnn_driver</span></div><div class="ttc" id="structarmnn__driver_1_1_canonical_execution_context_xhtml_aeb7cb4ac5b343a8eb2efd91aeee37743"><div class="ttname"><a href="structarmnn__driver_1_1_canonical_execution_context.xhtml#aeb7cb4ac5b343a8eb2efd91aeee37743">armnn_driver::CanonicalExecutionContext::measureTimings</a></div><div class="ttdeci">::android::nn::MeasureTiming measureTimings</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8hpp_source.xhtml#l00031">ArmnnPreparedModel.hpp:31</a></div></div>
<div class="ttc" id="_canonical_utils_8hpp_xhtml"><div class="ttname"><a href="_canonical_utils_8hpp.xhtml">CanonicalUtils.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_af87d0743d1266e264c3197a32299f4b2"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#af87d0743d1266e264c3197a32299f4b2">armnn::IRuntime::GetProfiler</a></div><div class="ttdeci">const std::shared_ptr&lt; IProfiler &gt; GetProfiler(NetworkId networkId) const</div><div class="ttdoc">Gets the profiler corresponding to the given network id. </div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00148">Runtime.cpp:148</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_a6d898cab83b5bb67f5b8f6a766ea245b"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a6d898cab83b5bb67f5b8f6a766ea245b">armnn_driver::ArmnnPreparedModel::configureExecutionBurst</a></div><div class="ttdeci">GeneralResult&lt; SharedBurst &gt; configureExecutionBurst() const override</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00600">ArmnnPreparedModel.cpp:600</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_a8d70cd869c7c1eda1c5891ba7e015661"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a8d70cd869c7c1eda1c5891ba7e015661">armnn_driver::ArmnnPreparedModel::executeFenced</a></div><div class="ttdeci">GeneralResult&lt; std::pair&lt; SyncFence, ExecuteFencedInfoCallback &gt; &gt; executeFenced(const Request &amp;request, const std::vector&lt; SyncFence &gt; &amp;waitFor, MeasureTiming measureTiming, const OptionalTimePoint &amp;deadline, const OptionalDuration &amp;loopTimeoutDuration, const OptionalDuration &amp;timeoutDurationAfterFence, const std::vector&lt; android::nn::TokenValuePair &gt; &amp;hints, const std::vector&lt; android::nn::ExtensionNameAndPrefix &gt; &amp;extensionNameToPrefix) const override</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00478">ArmnnPreparedModel.cpp:478</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a1fa5070fa0d079873acaf7581de8a2ad"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a1fa5070fa0d079873acaf7581de8a2ad">armnn_driver::ErrorStatus</a></div><div class="ttdeci">::android::nn::ErrorStatus ErrorStatus</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_utils_8hpp_source.xhtml#l00049">ConversionUtils.hpp:49</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
<div class="ttc" id="structarmnn__driver_1_1_canonical_execution_context_xhtml_a6da5957063ca094917c6e5bfeac65898"><div class="ttname"><a href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a6da5957063ca094917c6e5bfeac65898">armnn_driver::CanonicalExecutionContext::deviceStart</a></div><div class="ttdeci">android::nn::TimePoint deviceStart</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8hpp_source.xhtml#l00035">ArmnnPreparedModel.hpp:35</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_af62ba010a5b9f3187cfeb50db1dcad0a"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#af62ba010a5b9f3187cfeb50db1dcad0a">armnn_driver::ArmnnPreparedModel::ExecuteGraph</a></div><div class="ttdeci">ErrorStatus ExecuteGraph(std::shared_ptr&lt; std::vector&lt; android::nn::RunTimePoolInfo &gt;&gt; &amp;pMemPools, armnn::InputTensors &amp;inputTensors, armnn::OutputTensors &amp;outputTensors, CanonicalExecutionContext callback, const bool pointerMemory=false) const</div><div class="ttdoc">execute the graph prepared from the request </div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00375">ArmnnPreparedModel.cpp:375</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a96666c2945d7fe8c34aee30a449287d5"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a96666c2945d7fe8c34aee30a449287d5">armnn_driver::GetMemoryFromPool</a></div><div class="ttdeci">void * GetMemoryFromPool(DataLocation location, const std::vector&lt; android::nn::RunTimePoolInfo &gt; &amp;memPools)</div><div class="ttdoc">Returns a pointer to a specific location in a pool`. </div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8cpp_source.xhtml#l00066">CanonicalUtils.cpp:66</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abcbdfb544ece4c31d0b37715ad0f3be0"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">armnn::TensorInfo::GetNumBytes</a></div><div class="ttdeci">unsigned int GetNumBytes() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00427">Tensor.cpp:427</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a93d7282d7b5701a723304d87fcdc3a43"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a93d7282d7b5701a723304d87fcdc3a43">armnn_driver::ComputeShape</a></div><div class="ttdeci">OutputShape ComputeShape(const armnn::TensorInfo &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8hpp_source.xhtml#l00095">CanonicalUtils.hpp:95</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_a25f528b76d8116e08cddc7d4a8661ee1"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#a25f528b76d8116e08cddc7d4a8661ee1">armnn::IRuntime::GetInputTensorInfo</a></div><div class="ttdeci">TensorInfo GetInputTensorInfo(NetworkId networkId, LayerBindingId layerId) const</div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00079">Runtime.cpp:79</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="namespacearmnn_xhtml_aa01bce88f89975a5a031db4cc8861527"><div class="ttname"><a href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; LayerBindingId, class ConstTensor &gt; &gt; InputTensors</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00392">Tensor.hpp:392</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a31b494d1b36f5ed7fc7556a0fbc2c17c"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a31b494d1b36f5ed7fc7556a0fbc2c17c">armnn_driver::GetModelSummary</a></div><div class="ttdeci">std::string GetModelSummary(const Model &amp;model)</div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8cpp_source.xhtml#l00521">CanonicalUtils.cpp:521</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="classarmnn_1_1_i_runtime_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml">armnn::IRuntime</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00082">IRuntime.hpp:82</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_aa25bddb175983b2d3e0965440323d789"><div class="ttname"><a href="namespacearmnn__driver.xhtml#aa25bddb175983b2d3e0965440323d789">armnn_driver::DumpTensor</a></div><div class="ttdeci">void DumpTensor(const std::string &amp;dumpDir, const std::string &amp;requestName, const std::string &amp;tensorName, const TensorType &amp;tensor)</div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8cpp_source.xhtml#l00217">CanonicalUtils.cpp:217</a></div></div>
<div class="ttc" id="structarmnn__driver_1_1_canonical_execution_context_xhtml"><div class="ttname"><a href="structarmnn__driver_1_1_canonical_execution_context.xhtml">armnn_driver::CanonicalExecutionContext</a></div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8hpp_source.xhtml#l00029">ArmnnPreparedModel.hpp:29</a></div></div>
<div class="ttc" id="namespaceandroid_xhtml"><div class="ttname"><a href="namespaceandroid.xhtml">android</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_ad84aace3d1df79ad6fa37dcd952c085f"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ad84aace3d1df79ad6fa37dcd952c085f">armnn_driver::ArmnnPreparedModel::ExecuteWithDummyInputs</a></div><div class="ttdeci">bool ExecuteWithDummyInputs(unsigned int numInputs, unsigned int numOutputs) const</div><div class="ttdoc">Executes this model with dummy inputs (e.g. </div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00648">ArmnnPreparedModel.cpp:648</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="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a923b39ec5f83672f50289cbaf5de6798"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a923b39ec5f83672f50289cbaf5de6798">armnn_driver::Model</a></div><div class="ttdeci">::android::nn::Model Model</div><div class="ttdoc">Helper classes. </div><div class="ttdef"><b>Definition:</b> <a href="_conversion_utils_8hpp_source.xhtml#l00043">ConversionUtils.hpp:43</a></div></div>
<div class="ttc" id="structarmnn__driver_1_1_canonical_execution_context_xhtml_ab6f19cc463ef7a388af5de182a393ed2"><div class="ttname"><a href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ab6f19cc463ef7a388af5de182a393ed2">armnn_driver::CanonicalExecutionContext::driverStart</a></div><div class="ttdeci">android::nn::TimePoint driverStart</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8hpp_source.xhtml#l00033">ArmnnPreparedModel.hpp:33</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_ac88833eb361390437abc2a81ab43d04a"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ac88833eb361390437abc2a81ab43d04a">armnn_driver::ArmnnPreparedModel::GetModelPriority</a></div><div class="ttdeci">Priority GetModelPriority() const</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00472">ArmnnPreparedModel.cpp:472</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a915f2652854e417e26afc297f12e107c"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a915f2652854e417e26afc297f12e107c">armnn_driver::GetMemoryFromPointer</a></div><div class="ttdeci">void * GetMemoryFromPointer(const Request::Argument &amp;requestArg)</div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8cpp_source.xhtml#l00077">CanonicalUtils.cpp:77</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a0d8160388a127c1a23b37bc88dc6e2ec"><div class="ttname"><a href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">armnn::NetworkId</a></div><div class="ttdeci">int NetworkId</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00035">IRuntime.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00327">Tensor.hpp:327</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_aed397991b99f485ffab9a42aece47019"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#aed397991b99f485ffab9a42aece47019">armnn::IRuntime::UnloadNetwork</a></div><div class="ttdeci">Status UnloadNetwork(NetworkId networkId)</div><div class="ttdoc">Unloads a network from the IRuntime. </div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00133">Runtime.cpp:133</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a8f091a512915d1cb29a4ebf13dfc53ea"><div class="ttname"><a href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; LayerBindingId, class Tensor &gt; &gt; OutputTensors</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00393">Tensor.hpp:393</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70b"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">armnn::Status</a></div><div class="ttdeci">Status</div><div class="ttdoc">enumeration </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00042">Types.hpp:42</a></div></div>
<div class="ttc" id="_armnn_prepared_model_8hpp_xhtml"><div class="ttname"><a href="_armnn_prepared_model_8hpp.xhtml">ArmnnPreparedModel.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_aca51209383683ab8dbe801bbfddfe0c0"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#aca51209383683ab8dbe801bbfddfe0c0">armnn::IRuntime::EnqueueWorkload</a></div><div class="ttdeci">Status EnqueueWorkload(NetworkId networkId, const InputTensors &amp;inputTensors, const OutputTensors &amp;outputTensors, std::vector&lt; ImportedInputId &gt; preImportedInputIds={}, std::vector&lt; ImportedOutputId &gt; preImportedOutputIds={})</div><div class="ttdoc">Evaluates a network using input in inputTensors and outputs filled into outputTensors. </div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00110">Runtime.cpp:110</a></div></div>
<div class="ttc" id="namespaceandroid_1_1nn_xhtml"><div class="ttname"><a href="namespaceandroid_1_1nn.xhtml">android::nn</a></div><div class="ttdef"><b>Definition:</b> <a href="support__library__service_8cpp_source.xhtml#l00010">support_library_service.cpp:10</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523"><div class="ttname"><a href="namespacearmnn.xhtml#a14fcd7f88d11cea0a018269dca5f9277a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_ac8ea5639172e7326168e2b73ed07e47e"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ac8ea5639172e7326168e2b73ed07e47e">armnn_driver::ArmnnPreparedModel::~ArmnnPreparedModel</a></div><div class="ttdeci">virtual ~ArmnnPreparedModel()</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00628">ArmnnPreparedModel.cpp:628</a></div></div>
<div class="ttc" id="classarmnn_1_1_base_tensor_xhtml_a8aeddebdcf02e1832b22203c08a6b678"><div class="ttname"><a href="classarmnn_1_1_base_tensor.xhtml#a8aeddebdcf02e1832b22203c08a6b678">armnn::BaseTensor::GetInfo</a></div><div class="ttdeci">const TensorInfo &amp; GetInfo() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00295">Tensor.hpp:295</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a1c5ec805688cb558465a82a8d9f56a90"><div class="ttname"><a href="namespacearmnn.xhtml#a1c5ec805688cb558465a82a8d9f56a90">armnn::ImportedInputId</a></div><div class="ttdeci">unsigned int ImportedInputId</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00291">Types.hpp:291</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_a4905d77691ee9a2e9705e90557f64c2b"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a4905d77691ee9a2e9705e90557f64c2b">armnn_driver::ArmnnPreparedModel::ArmnnPreparedModel</a></div><div class="ttdeci">ArmnnPreparedModel(armnn::NetworkId networkId, armnn::IRuntime *runtime, const Model &amp;model, const std::string &amp;requestInputsAndOutputsDumpDir, const bool gpuProfilingEnabled, Priority priority=Priority::MEDIUM)</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00126">ArmnnPreparedModel.cpp:126</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_ac2cb56a0d7ee6fb53e9f97e624973c19"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#ac2cb56a0d7ee6fb53e9f97e624973c19">armnn::IRuntime::ImportInputs</a></div><div class="ttdeci">std::vector&lt; ImportedInputId &gt; ImportInputs(NetworkId networkId, const InputTensors &amp;inputTensors, MemorySource forceImportMemorySource=MemorySource::Undefined)</div><div class="ttdoc">ImportInputs separates the importing and mapping of InputTensors from network execution. </div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00089">Runtime.cpp:89</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_a5dccecd36bb6eda573be616face68035"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#a5dccecd36bb6eda573be616face68035">armnn::IRuntime::GetOutputTensorInfo</a></div><div class="ttdeci">TensorInfo GetOutputTensorInfo(NetworkId networkId, LayerBindingId layerId) const</div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00084">Runtime.cpp:84</a></div></div>
<div class="ttc" id="structarmnn__driver_1_1_canonical_execution_context_xhtml_ac4711bb6ab33a33529c62c2c6842a831"><div class="ttname"><a href="structarmnn__driver_1_1_canonical_execution_context.xhtml#ac4711bb6ab33a33529c62c2c6842a831">armnn_driver::CanonicalExecutionContext::deviceEnd</a></div><div class="ttdeci">android::nn::TimePoint deviceEnd</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8hpp_source.xhtml#l00036">ArmnnPreparedModel.hpp:36</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_a67e5c38788f9b0152baee24e8f57bc2b"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a67e5c38788f9b0152baee24e8f57bc2b">armnn_driver::ArmnnPreparedModel::execute</a></div><div class="ttdeci">ExecutionResult&lt; std::pair&lt; std::vector&lt; OutputShape &gt;, Timing &gt; &gt; execute(const Request &amp;request, MeasureTiming measureTiming, const OptionalTimePoint &amp;deadline, const OptionalDuration &amp;loopTimeoutDuration, const std::vector&lt; android::nn::TokenValuePair &gt; &amp;hints, const std::vector&lt; android::nn::ExtensionNameAndPrefix &gt; &amp;extensionNameToPrefix) const override</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00295">ArmnnPreparedModel.cpp:295</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="structarmnn__driver_1_1_canonical_execution_context_xhtml_a45f03338910173fc12dd2ac19521a742"><div class="ttname"><a href="structarmnn__driver_1_1_canonical_execution_context.xhtml#a45f03338910173fc12dd2ac19521a742">armnn_driver::CanonicalExecutionContext::driverEnd</a></div><div class="ttdeci">android::nn::TimePoint driverEnd</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8hpp_source.xhtml#l00034">ArmnnPreparedModel.hpp:34</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8ffca1e21bdfa7f945617acd606aac91"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8ffca1e21bdfa7f945617acd606aac91">armnn::TensorInfo::SetConstant</a></div><div class="ttdeci">void SetConstant(const bool IsConstant=true)</div><div class="ttdoc">Marks the data corresponding to this tensor info as constant. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00514">Tensor.cpp:514</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_a0481f4c1ca5608339a5688daf256a4e4"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#a0481f4c1ca5608339a5688daf256a4e4">armnn_driver::ArmnnPreparedModel::getUnderlyingResource</a></div><div class="ttdeci">std::any getUnderlyingResource() const override</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00606">ArmnnPreparedModel.cpp:606</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_a7db39b06bc7f50287f54320d26df4373"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#a7db39b06bc7f50287f54320d26df4373">armnn::IRuntime::ImportOutputs</a></div><div class="ttdeci">std::vector&lt; ImportedOutputId &gt; ImportOutputs(NetworkId networkId, const OutputTensors &amp;outputTensors, MemorySource forceImportMemorySource=MemorySource::Undefined)</div><div class="ttdoc">ImportOutputs separates the importing and mapping of OutputTensors from network execution. </div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00095">Runtime.cpp:95</a></div></div>
<div class="ttc" id="classarmnn__driver_1_1_armnn_prepared_model_xhtml_ab108fedcef5c0d766444eb2def3b7bad"><div class="ttname"><a href="classarmnn__driver_1_1_armnn_prepared_model.xhtml#ab108fedcef5c0d766444eb2def3b7bad">armnn_driver::ArmnnPreparedModel::createReusableExecution</a></div><div class="ttdeci">GeneralResult&lt; android::nn::SharedExecution &gt; createReusableExecution(const Request &amp;request, MeasureTiming measureTiming, const OptionalDuration &amp;loopTimeoutDuration, const std::vector&lt; android::nn::TokenValuePair &gt; &amp;hints, const std::vector&lt; android::nn::ExtensionNameAndPrefix &gt; &amp;extensionNameToPrefix) const override</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_prepared_model_8cpp_source.xhtml#l00586">ArmnnPreparedModel.cpp:586</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_a7c1c80ee0f432b6b621c40571410195a"><div class="ttname"><a href="namespacearmnn__driver.xhtml#a7c1c80ee0f432b6b621c40571410195a">armnn_driver::CommitPools</a></div><div class="ttdeci">void CommitPools(std::vector&lt;::android::nn::RunTimePoolInfo &gt; &amp;memPools)</div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8cpp_source.xhtml#l00610">CanonicalUtils.cpp:610</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml"><div class="ttname"><a href="namespacearmnn__driver.xhtml">armnn_driver</a></div><div class="ttdoc">Helper classes. </div><div class="ttdef"><b>Definition:</b> <a href="_armnn_device_8cpp_source.xhtml#l00037">ArmnnDevice.cpp:37</a></div></div>
<div class="ttc" id="namespacearmnn__driver_xhtml_aa313ae79f70102e3451d45d3387c2e46"><div class="ttname"><a href="namespacearmnn__driver.xhtml#aa313ae79f70102e3451d45d3387c2e46">armnn_driver::DumpJsonProfilingIfRequired</a></div><div class="ttdeci">void DumpJsonProfilingIfRequired(bool gpuProfilingEnabled, const std::string &amp;dumpDir, armnn::NetworkId networkId, const armnn::IProfiler *profiler)</div><div class="ttdef"><b>Definition:</b> <a href="_canonical_utils_8cpp_source.xhtml#l00350">CanonicalUtils.cpp:350</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_b4dbf96392bc72a402a7206cbda88a03.xhtml">shim</a></li><li class="navelem"><a class="el" href="dir_09eea26cf0279feb9fcfb9b796a3e57e.xhtml">sl</a></li><li class="navelem"><a class="el" href="dir_6de13b49022bb7cfc6557e28050d5cbe.xhtml">canonical</a></li><li class="navelem"><a class="el" href="_armnn_prepared_model_8cpp.xhtml">ArmnnPreparedModel.cpp</a></li>
    <li class="footer">Generated on Wed Nov 23 2022 10:57:36 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>