aboutsummaryrefslogtreecommitdiff
path: root/21.02/_loaded_network_8cpp_source.xhtml
blob: 8adbb967db52165f2edcb8ca1fdeaa82c61b5370 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: src/armnn/LoadedNetwork.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_loaded_network_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">LoadedNetwork.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_loaded_network_8cpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_loaded_network_8hpp.xhtml">LoadedNetwork.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_layer_8hpp.xhtml">Layer.hpp</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_graph_8hpp.xhtml">Graph.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="_network_8hpp.xhtml">Network.hpp</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_processes_8hpp.xhtml">Processes.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_profiling_8hpp.xhtml">Profiling.hpp</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_heap_profiling_8hpp.xhtml">HeapProfiling.hpp</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_backend_registry_8hpp.xhtml">armnn/BackendRegistry.hpp</a>&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_logging_8hpp.xhtml">armnn/Logging.hpp</a>&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_assert_8hpp.xhtml">armnn/utility/Assert.hpp</a>&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_cpu_tensor_handle_8hpp.xhtml">backendsCommon/CpuTensorHandle.hpp</a>&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="include_2armnn_2backends_2_i_memory_manager_8hpp.xhtml">armnn/backends/IMemoryManager.hpp</a>&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_mem_copy_workload_8hpp.xhtml">backendsCommon/MemCopyWorkload.hpp</a>&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_mem_sync_workload_8hpp.xhtml">backendsCommon/MemSyncWorkload.hpp</a>&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_labels_and_event_classes_8hpp.xhtml">LabelsAndEventClasses.hpp</a>&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;fmt/format.h&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</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;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.xhtml">std</a>;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_1_1profiling.xhtml">armnn::profiling</a>;</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">namespace</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ExceptionType&gt;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;std::string ToErrorMessage(<span class="keyword">const</span> <span class="keywordtype">char</span> * prefix, <span class="keyword">const</span> ExceptionType &amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>)</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    ss &lt;&lt; prefix &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; error.what();</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keywordflow">return</span> ss.str();</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;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keywordtype">void</span> AddLayerStructure(std::unique_ptr&lt;TimelineUtilityMethods&gt;&amp; timelineUtils,</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;                       <span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer,</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;                       <a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">ProfilingGuid</a> networkGuid)</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="comment">// Add layer to the post-optimisation network structure</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    std::string layerName = layer.GetNameStr().empty() ? <span class="stringliteral">&quot;&lt;Unnamed&gt;&quot;</span> : layer.GetNameStr();</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    timelineUtils-&gt;CreateNamedTypedChildEntity(layer.GetGuid(),</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;                                               networkGuid,</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;                                               layerName,</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;                                               <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a939d115d7a078087c7a826bf2c65bcb4">LabelsAndEventClasses::LAYER_GUID</a>);</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; input : layer.GetInputSlots())</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;        <span class="keyword">const</span> IOutputSlot* source = input.GetConnectedOutputSlot();</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(source != NULL);</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        timelineUtils-&gt;CreateConnectionRelationship(ProfilingRelationshipType::RetentionLink,</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;                                                    source-&gt;GetOwningLayerGuid(),</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;                                                    layer.GetGuid());</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="keywordtype">void</span> AddWorkloadStructure(std::unique_ptr&lt;TimelineUtilityMethods&gt;&amp; timelineUtils,</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;                          std::unique_ptr&lt;IWorkload&gt;&amp; workload,</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;                          <span class="keyword">const</span> <a class="code" href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">Layer</a>&amp; layer)</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="comment">// Add workload to the post-optimisation network structure</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    timelineUtils-&gt;CreateTypedEntity(workload-&gt;GetGuid(), <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a6d5d1a547ba9c92694347fc71ddf0e18">LabelsAndEventClasses::WORKLOAD_GUID</a>);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    timelineUtils-&gt;MarkEntityWithLabel(workload-&gt;GetGuid(),</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;                                       layer.GetBackendId().Get(),</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;                                       <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#ade2233e4c4600c2353dbdd1729977872">LabelsAndEventClasses::BACKENDID_GUID</a>);</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="comment">// Link the workload to the layer</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    timelineUtils-&gt;CreateRelationship(ProfilingRelationshipType::RetentionLink,</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;                                      layer.GetGuid(),</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;                                      workload-&gt;GetGuid(),</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;                                      <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a1caad872d87e206434faf5ca051cf36c">LabelsAndEventClasses::CHILD_GUID</a>);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;}</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;} <span class="comment">// anonymous</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#a8e94a5375ad367ddee9c69e04e110a54">   83</a></span>&#160;std::unique_ptr&lt;LoadedNetwork&gt; <a class="code" href="classarmnn_1_1_loaded_network.xhtml#a8e94a5375ad367ddee9c69e04e110a54">LoadedNetwork::MakeLoadedNetwork</a>(std::unique_ptr&lt;IOptimizedNetwork&gt; net,</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                                                                std::string&amp; errorMessage,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                                                                <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_i_network_properties.xhtml">INetworkProperties</a>&amp; networkProperties,</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                                                                <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">profiling::ProfilingService</a>&amp;  profilingService)</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    std::unique_ptr&lt;LoadedNetwork&gt; loadedNetwork;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keyword">auto</span> Fail = [&amp;](<span class="keyword">const</span> std::exception&amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>) -&gt; std::unique_ptr&lt;LoadedNetwork&gt;</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;        errorMessage = ToErrorMessage(<span class="stringliteral">&quot;An error occurred when preparing the network workloads: &quot;</span>, error);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(error) &lt;&lt; errorMessage;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        <span class="keywordflow">return</span> std::unique_ptr&lt;LoadedNetwork&gt;();</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    };</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordflow">try</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;        loadedNetwork.reset(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_loaded_network.xhtml">LoadedNetwork</a>(std::move(net), networkProperties, profilingService));</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">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>&amp; error)</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">return</span> Fail(error);</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">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>&amp; error)</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    {</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="keywordflow">return</span> Fail(error);</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">catch</span> (<span class="keyword">const</span> std::runtime_error&amp; error)</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    {</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <span class="keywordflow">return</span> Fail(error);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    }</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keywordflow">return</span> loadedNetwork;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;}</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;LoadedNetwork::LoadedNetwork(std::unique_ptr&lt;IOptimizedNetwork&gt; net,</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                             <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_i_network_properties.xhtml">INetworkProperties</a>&amp; networkProperties,</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;                             <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">profiling::ProfilingService</a>&amp;  profilingService) :</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;                             m_OptimizedNetwork(std::move(net)),</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;                             m_IsImportEnabled(networkProperties.<a class="code" href="structarmnn_1_1_i_network_properties.xhtml#a111a52fb2bd24aee9fc125f28c2eb1cb">m_ImportEnabled</a>),</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;                             m_IsExportEnabled(networkProperties.<a class="code" href="structarmnn_1_1_i_network_properties.xhtml#a042fb9a87ffa70730766d19505d80490">m_ExportEnabled</a>),</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;                             m_TensorHandleFactoryRegistry(),</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                             m_ProfilingService(profilingService)</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;{</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="comment">// Create a profiler and register it for the current thread.</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    m_Profiler = std::make_shared&lt;IProfiler&gt;();</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <a class="code" href="classarmnn_1_1_profiler_manager.xhtml#a93857080c2523bf3395e7aa7e6024d5c">ProfilerManager::GetInstance</a>().<a class="code" href="classarmnn_1_1_profiler_manager.xhtml#a7b1e3e5bf386004541be2b5b22443208">RegisterProfiler</a>(m_Profiler.get());</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>&amp; order = m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetGraph().<a class="code" href="classarmnn_1_1_graph.xhtml#a9a7209345edfdb2b066b0ceb66414d7c">TopologicalSort</a>();</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="comment">//First create tensor handlers, backends and workload factories.</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="comment">//Handlers are created before workloads are.</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="comment">//Because workload creation can modify some of the handlers,</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="comment">//(for example the splitter and concat layers).</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : order)</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    {</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keyword">auto</span> <span class="keyword">const</span>&amp; backendId = layer-&gt;GetBackendId();</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <span class="keywordflow">if</span> (m_Backends.count(backendId) == 0)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        {</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;            <span class="keyword">auto</span> createBackend = <a class="code" href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">BackendRegistryInstance</a>().<a class="code" href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">GetFactory</a>(backendId);</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;            <span class="keyword">auto</span> it = m_Backends.emplace(std::make_pair(backendId, createBackend()));</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml">IBackendInternal</a>* backend = it.first-&gt;second.get();</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;            <span class="keywordflow">if</span> (backend-&gt;<a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#af8f716b0eab6b9d63196d5a53d5fac81">SupportsTensorAllocatorAPI</a>())</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            {</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                <span class="keyword">auto</span> workloadFactory = backend-&gt;<a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#afd5a5e90515b31c0174f76ec8897e9b1">CreateWorkloadFactory</a>(</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;                    m_TensorHandleFactoryRegistry, m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetModelOptions());</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                m_WorkloadFactories.emplace(</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                    std::make_pair(backendId, std::make_pair(std::move(workloadFactory), <span class="keyword">nullptr</span>)));</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;            }</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;            {</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;                <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">IBackendInternal::IMemoryManagerSharedPtr</a> memoryManager = backend-&gt;<a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a0e8cb8533d1d0b2cb93f926dac11dd16">CreateMemoryManager</a>();</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                <span class="keyword">auto</span> workloadFactory = backend-&gt;<a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#afd5a5e90515b31c0174f76ec8897e9b1">CreateWorkloadFactory</a>(</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;                    memoryManager, m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetModelOptions());</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;                m_WorkloadFactories.emplace(</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;                    std::make_pair(backendId, std::make_pair(std::move(workloadFactory), memoryManager)));</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;            }</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        }</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    }</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : order)</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    {</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        <span class="keyword">auto</span>&amp; workloadFactory = GetWorkloadFactory(*layer);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        <span class="keywordflow">switch</span> (layer-&gt;GetType())</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">LayerType::Input</a>:</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">LayerType::MemImport</a>:</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;            {</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;                <span class="comment">// If IsImportEnabled is true then we need to set IsMemoryManaged to false when creating TensorHandles</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;                layer-&gt;CreateTensorHandles(m_TensorHandleFactoryRegistry, workloadFactory, !m_IsImportEnabled);</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;                <span class="keywordflow">break</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;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;            {</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;                <span class="comment">// Look for the layer with 1 OutputSlot which has 1 connection and that connection is an Output Layer</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;                <span class="comment">// If Export is enabled disable memory management so we can export, otherwise we do a copy</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;                <span class="keywordflow">if</span>((layer-&gt;GetNumOutputSlots() == 1) &amp;&amp;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;                   (layer-&gt;GetOutputSlots()[0].GetNumConnections() == 1) &amp;&amp;</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                   (layer-&gt;GetOutputSlots()[0].GetConnection(0)-&gt;GetOwningLayer().GetType() == <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">LayerType::Output</a>))</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;                    layer-&gt;CreateTensorHandles(m_TensorHandleFactoryRegistry, workloadFactory, !m_IsExportEnabled);</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                }</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;                {</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;                    layer-&gt;CreateTensorHandles(m_TensorHandleFactoryRegistry, workloadFactory);</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;                }</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;            }</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;        }</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    }</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;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">ProfilingGuid</a> networkGuid = m_OptimizedNetwork-&gt;GetGuid();</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    std::unique_ptr&lt;TimelineUtilityMethods&gt; timelineUtils =</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                        <a class="code" href="classarmnn_1_1profiling_1_1_timeline_utility_methods.xhtml#a0e5c863245b8d7dc5e874c0c66eebae1">TimelineUtilityMethods::GetTimelineUtils</a>(m_ProfilingService);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    {</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        timelineUtils-&gt;CreateTypedEntity(networkGuid, <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a2803368c101910905392bc7edd4c9cc5">LabelsAndEventClasses::NETWORK_GUID</a>);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <span class="comment">// Mark the network with a start of life event</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;        timelineUtils-&gt;RecordEvent(networkGuid, <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a75123df426e55b7e9c218704cb52120f">LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS</a>);</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <span class="comment">// and with the process ID</span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <span class="keywordtype">int</span> processID = <a class="code" href="namespacearmnn_utils_1_1_processes.xhtml#a1d95dea376acbd82dde773e05db454be">armnnUtils::Processes::GetCurrentId</a>();</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        ss &lt;&lt; processID;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        timelineUtils-&gt;MarkEntityWithLabel(networkGuid, ss.str(), <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a0c786c3e4560c019deef4d6fc63b847b">LabelsAndEventClasses::PROCESS_ID_GUID</a>);</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    }</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="comment">//Then create workloads.</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : order)</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    {</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;            <span class="comment">// Add layer to the post-optimisation network structure</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;            AddLayerStructure(timelineUtils, *layer, networkGuid);</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;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">IWorkloadFactory</a>&amp; workloadFactory = GetWorkloadFactory(*layer);</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;        <span class="keywordflow">switch</span> (layer-&gt;GetType())</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        {</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">LayerType::Input</a>:</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">LayerType::Output</a>:</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;            {</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;                <span class="comment">// Inputs and outputs are treated in a special way - see EnqueueInput() and EnqueueOutput().</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;            }</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;            {</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                <span class="keyword">auto</span> workload = layer-&gt;CreateWorkload(workloadFactory);</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;                <span class="keywordflow">if</span> (!workload)</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;                {</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> layerName =</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                        layer-&gt;GetNameStr().length() != 0 ? layer-&gt;GetName() : <span class="stringliteral">&quot;&lt;Unnamed&gt;&quot;</span>;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;                        fmt::format(<span class="stringliteral">&quot;No workload created for layer (name: &#39;{0}&#39; type: &#39;{1}&#39;) (compute &#39;{2}&#39;)&quot;</span>,</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;                                    layerName, static_cast&lt;int&gt;(layer-&gt;GetType()), layer-&gt;GetBackendId().Get()</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;                    ));</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;                }</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;                <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;                {</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;                    <span class="comment">// Add workload to the post-optimisation network structure</span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;                    AddWorkloadStructure(timelineUtils, workload, *layer);</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;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;                m_WorkloadQueue.push_back(move(workload));</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;                <span class="comment">// release the constant data in the layer..</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;                layer-&gt;ReleaseConstantData();</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            }</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        }</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; workloadFactory : m_WorkloadFactories)</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    {</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        workloadFactory.second.first-&gt;AfterWorkloadsCreated();</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;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    {</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        <span class="comment">// Commit to send the post-optimisation network structure</span></div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        timelineUtils-&gt;Commit();</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    }</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="comment">// Set up memory.</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetGraph().AllocateDynamicBuffers();</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;    <span class="comment">// Now that the intermediate tensor memory has been set-up, do any post allocation configuration for each workload.</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; workload : m_WorkloadQueue)</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;        workload-&gt;PostAllocationConfigure();</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    }</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;}</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#a23e33c3caadba06bcd5b50dc2c23c19e">  279</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#a23e33c3caadba06bcd5b50dc2c23c19e">LoadedNetwork::SendNetworkStructure</a>()</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;{</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>&amp; order = m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetGraph().<a class="code" href="classarmnn_1_1_graph.xhtml#a9a7209345edfdb2b066b0ceb66414d7c">TopologicalSort</a>();</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">ProfilingGuid</a> networkGuid = m_OptimizedNetwork-&gt;GetGuid();</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    std::unique_ptr&lt;TimelineUtilityMethods&gt; timelineUtils =</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;                        <a class="code" href="classarmnn_1_1profiling_1_1_timeline_utility_methods.xhtml#a0e5c863245b8d7dc5e874c0c66eebae1">TimelineUtilityMethods::GetTimelineUtils</a>(m_ProfilingService);</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    timelineUtils-&gt;CreateTypedEntity(networkGuid, <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a2803368c101910905392bc7edd4c9cc5">LabelsAndEventClasses::NETWORK_GUID</a>);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : order)</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;        <span class="comment">// Add layer to the post-optimisation network structure</span></div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        AddLayerStructure(timelineUtils, *layer, networkGuid);</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">switch</span> (layer-&gt;GetType())</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        {</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">LayerType::Input</a>:</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">LayerType::Output</a>:</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        {</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;            <span class="comment">// Inputs and outputs are treated in a special way - see EnqueueInput() and EnqueueOutput().</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        }</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;            {</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;            <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; workload : m_WorkloadQueue)</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;                <span class="comment">// Add workload to the post-optimisation network structure</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;                AddWorkloadStructure(timelineUtils, workload, *layer);</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;            }</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;            }</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;        }</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="comment">// Commit to send the post-optimisation network structure</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    timelineUtils-&gt;Commit();</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;}</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#ac8be6c967db9e797ade32fa3db497422">  316</a></span>&#160;<a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">profiling::ProfilingGuid</a> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#ac8be6c967db9e797ade32fa3db497422">LoadedNetwork::GetNetworkGuid</a>()</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;{</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    <span class="keywordflow">return</span> m_OptimizedNetwork-&gt;GetGuid();</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;}</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"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#af616683424cb40d83b5a923db7f06f11">  321</a></span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#af616683424cb40d83b5a923db7f06f11">LoadedNetwork::GetInputTensorInfo</a>(<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId)<span class="keyword"> const</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; inputLayer : m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetGraph().GetInputLayers())</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;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(inputLayer-&gt;GetNumOutputSlots() == 1, <span class="stringliteral">&quot;Input layer should have exactly 1 output slot&quot;</span>);</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="keywordflow">if</span> (inputLayer-&gt;GetBindingId() == layerId)</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        {</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            <span class="keywordflow">return</span> inputLayer-&gt;GetOutputSlot(0).GetTensorInfo();</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;        }</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    }</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;No input layer is associated with id {}&quot;</span>, layerId));</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;}</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#a2b6b57945bc68f659e08d28c8a015e91">  335</a></span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#a2b6b57945bc68f659e08d28c8a015e91">LoadedNetwork::GetOutputTensorInfo</a>(<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId)<span class="keyword"> const</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; outputLayer : m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetGraph().GetOutputLayers())</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    {</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(outputLayer-&gt;GetNumInputSlots() == 1, <span class="stringliteral">&quot;Output layer should have exactly 1 input slot&quot;</span>);</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(outputLayer-&gt;GetInputSlot(0).GetConnection(), <span class="stringliteral">&quot;Input slot on Output layer must be connected&quot;</span>);</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        <span class="keywordflow">if</span> (outputLayer-&gt;GetBindingId() == layerId)</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">return</span> outputLayer-&gt;GetInputSlot(0).GetConnection()-&gt;GetTensorInfo();</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        }</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    }</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;No output layer is associated with id {}&quot;</span>, layerId));</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;}</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">IWorkloadFactory</a>&amp; LoadedNetwork::GetWorkloadFactory(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>&amp; layer)<span class="keyword"> const</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_workload_factory.xhtml">IWorkloadFactory</a>* workloadFactory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="keyword">auto</span> it = m_WorkloadFactories.find(layer.<a class="code" href="classarmnn_1_1_layer.xhtml#afdb1d37740e7a083b625d669588b6a0e">GetBackendId</a>());</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="keywordflow">if</span> (it ==  m_WorkloadFactories.end())</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    {</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>(fmt::format(<span class="stringliteral">&quot;No workload factory for {0} to be used for layer: {1}&quot;</span>,</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;                                           layer.<a class="code" href="classarmnn_1_1_layer.xhtml#afdb1d37740e7a083b625d669588b6a0e">GetBackendId</a>().<a class="code" href="classarmnn_1_1_backend_id.xhtml#af7445617163d3f07c47b92ae56c6cf8b">Get</a>(),</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;                                           layer.<a class="code" href="classarmnn_1_1_layer.xhtml#a9a97cb6d32661a57fc33bd29b8e41ff4">GetNameStr</a>()),</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                                           <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>());</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;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    workloadFactory = it-&gt;second.first.get();</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(workloadFactory, <span class="stringliteral">&quot;No workload factory&quot;</span>);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    std::string reasonIfUnsupported;</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<a class="code" href="classarmnn_1_1_i_workload_factory.xhtml#a74dc9ec1a223eab8b072368b2dacee87">IWorkloadFactory::IsLayerSupported</a>(layer,</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;                                                        reasonIfUnsupported,</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;                                                        m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetModelOptions()),</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        <span class="stringliteral">&quot;Factory does not support layer&quot;</span>);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(reasonIfUnsupported);</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="keywordflow">return</span> *workloadFactory;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;}</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="keyword">namespace </span>{</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="comment">// Non-copyable class owning accelerator-specific tensor data.</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="keyword">class </span>TensorPin</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;{</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    TensorPin(std::unique_ptr&lt;ITensorHandle&gt; handle, <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>, <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;        : m_TensorHandle(std::move(handle))</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;        , m_TensorInfo(info)</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        , m_Id(<span class="keywordtype">id</span>)</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    {</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    }</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a>* GetTensorHandle()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_TensorHandle.get(); }</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; <a class="code" href="namespacearmnn.xhtml#af7ec4c0fa4375a45a70e4e31f3d8af47">GetTensorInfo</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_TensorInfo; }</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> GetBindingId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Id; }</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    std::unique_ptr&lt;ITensorHandle&gt; m_TensorHandle;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> m_TensorInfo;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> m_Id;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;};</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> TensorPin&amp; GetTensorPin(<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span>,</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    <span class="keyword">const</span> std::vector&lt;TensorPin&gt;&amp; pins,</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordtype">char</span> <span class="keyword">const</span>* bindingPointDesc)</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;{</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <span class="keyword">auto</span> it = std::find_if(pins.begin(), pins.end(),</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        [id](<span class="keyword">const</span> TensorPin&amp; pin)</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    {</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        <span class="keywordflow">return</span> pin.GetBindingId() == id;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    });</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <span class="keywordflow">if</span> (it != pins.end())</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    {</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        <span class="keywordflow">return</span> *it;</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="keywordflow">else</span></div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    {</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;No tensor supplied for {0} {1}&quot;</span>, bindingPointDesc, <span class="keywordtype">id</span>));</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;}</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="comment">// Stores data that needs to be kept accessible for the entire execution of a workload.</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="keyword">class </span>WorkloadData</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;{</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    WorkloadData(<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a>&amp; inputTensors, <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>&amp; outputTensors)</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;        m_InputTensorPins.reserve(inputTensors.size());</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        m_OutputTensorPins.reserve(outputTensors.size());</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> inputTensorPair : inputTensors)</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        {</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;            <span class="keyword">auto</span> inputTensor = inputTensorPair.second;</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;            std::unique_ptr&lt;ITensorHandle&gt; tensorHandle =</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                std::make_unique&lt;ConstPassthroughCpuTensorHandle&gt;(inputTensor.GetInfo(),inputTensor.GetMemoryArea());</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;            <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId = inputTensorPair.first;</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;            m_InputTensorPins.emplace_back(std::move(tensorHandle), inputTensor.GetInfo(), layerId);</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;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> outputTensorPair : outputTensors)</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;            <span class="keyword">auto</span> outputTensor = outputTensorPair.second;</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;            std::unique_ptr&lt;ITensorHandle&gt; tensorHandle =</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;                std::make_unique&lt;PassthroughCpuTensorHandle&gt;(outputTensor.GetInfo(), outputTensor.GetMemoryArea());</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;            <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId = outputTensorPair.first;</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;            m_OutputTensorPins.emplace_back(std::move(tensorHandle), outputTensor.GetInfo(), layerId);</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        }</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    }</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    <span class="keyword">const</span> TensorPin&amp; GetInputTensorPin(<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        <span class="keywordflow">return</span> GetTensorPin(<span class="keywordtype">id</span>, m_InputTensorPins, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    }</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keyword">const</span> TensorPin&amp; GetOutputTensorPin(<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> <span class="keywordtype">id</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;        <span class="keywordflow">return</span> GetTensorPin(<span class="keywordtype">id</span>, m_OutputTensorPins, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    }</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    std::vector&lt;TensorPin&gt; m_InputTensorPins;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    std::vector&lt;TensorPin&gt; m_OutputTensorPins;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;};</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;</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;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#a878c3febb600fd2ccf3b5cb1f9a61e27">  470</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#a878c3febb600fd2ccf3b5cb1f9a61e27">LoadedNetwork::EnqueueWorkload</a>(<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a>&amp; inputTensors,</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;                                      <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>&amp; outputTensors)</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;{</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>&amp; graph = m_OptimizedNetwork-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="comment">// Walk graph to determine the order of execution.</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keywordflow">if</span> (graph.<a class="code" href="classarmnn_1_1_graph.xhtml#afdf8eb85585a798ad0e936bde884d87b">GetNumLayers</a>() &lt; 2)</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">  478</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">warning</a>) &lt;&lt; <span class="stringliteral">&quot;IRuntime::EnqueueWorkload()::Less than two nodes in graph&quot;</span>;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Status::Failure</a>;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    }</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="comment">// Data that must be kept alive for the entire execution of the workload.</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    WorkloadData workloadData(inputTensors, outputTensors);</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <span class="keywordflow">if</span> (graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a8d8179a4a0703602a5d7dbb6e92eaf69">GetNumInputs</a>() != inputTensors.size())</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    {</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;Number of inputs provided does not match network.&quot;</span>);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    }</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="comment">// For each input to the network, call EnqueueInput with the data passed by the user.</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    {</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;PrepareInputs&quot;</span>);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        m_InputQueue.clear();</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;        m_InputQueue.reserve(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a8d8179a4a0703602a5d7dbb6e92eaf69">GetNumInputs</a>());</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_bindable_layer.xhtml">BindableLayer</a>* inputLayer : graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a919fb58873ef3a6549e4490e226f2eae">GetInputLayers</a>())</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        {</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;            <span class="keyword">const</span> TensorPin&amp; pin = workloadData.GetInputTensorPin(inputLayer-&gt;GetBindingId());</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;            EnqueueInput(*inputLayer, pin.GetTensorHandle(), pin.GetTensorInfo());</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        }</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    }</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="comment">// For each output to the network, call EnqueueOutput with the data passed by the user.</span></div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    {</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;        <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;PrepareOutputs&quot;</span>);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;        m_OutputQueue.clear();</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;        m_OutputQueue.reserve(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a604654b453ec291a503d62a0beb849d3">GetNumOutputs</a>());</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_bindable_layer.xhtml">BindableLayer</a>* outputLayer : graph.<a class="code" href="classarmnn_1_1_graph.xhtml#aa311c7fe7e05406c9ff4e4ed3ba09825">GetOutputLayers</a>())</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;            <span class="keyword">const</span> TensorPin&amp; pin = workloadData.GetOutputTensorPin(outputLayer-&gt;GetBindingId());</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;            EnqueueOutput(*outputLayer, pin.GetTensorHandle(), pin.GetTensorInfo());</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;        }</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;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    std::unique_ptr&lt;TimelineUtilityMethods&gt; timelineUtils =</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;                        <a class="code" href="classarmnn_1_1profiling_1_1_timeline_utility_methods.xhtml#a0e5c863245b8d7dc5e874c0c66eebae1">TimelineUtilityMethods::GetTimelineUtils</a>(m_ProfilingService);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">ProfilingGuid</a> inferenceGuid = m_ProfilingService.GetNextGuid();</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    <span class="keywordflow">if</span> (timelineUtils)</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="comment">// Add inference timeline trace if profiling is enabled.</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;        <a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">ProfilingGuid</a> networkGuid = m_OptimizedNetwork-&gt;GetGuid();</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        timelineUtils-&gt;CreateTypedEntity(inferenceGuid, <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#ae3da9252fb4310cb359c5d64a5573926">LabelsAndEventClasses::INFERENCE_GUID</a>);</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        timelineUtils-&gt;CreateRelationship(ProfilingRelationshipType::RetentionLink,</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;                                          networkGuid,</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;                                          inferenceGuid,</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;                                          <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a9b431866f8b82e77c6ed26c119078ff8">LabelsAndEventClasses::EXECUTION_OF_GUID</a>);</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        timelineUtils-&gt;RecordEvent(inferenceGuid, <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a75123df426e55b7e9c218704cb52120f">LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS</a>);</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="keywordtype">bool</span> executionSucceeded = <span class="keyword">true</span>;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    {</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        <span class="keywordflow">if</span> (m_ProfilingService.IsProfilingEnabled())</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;        {</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;            m_ProfilingService.IncrementCounterValue(armnn::profiling::INFERENCES_RUN);</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;        }</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;Execute&quot;</span>);</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;        <a class="code" href="_heap_profiling_8hpp.xhtml#aeeb927880fc4ffc2eea754a67d884a53">ARMNN_SCOPED_HEAP_PROFILING</a>(<span class="stringliteral">&quot;Executing&quot;</span>);</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;        executionSucceeded = Execute(timelineUtils, inferenceGuid);</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    }</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    {</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;        <span class="comment">// Add end of life of the inference timeline if profiling is enabled.</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        timelineUtils-&gt;RecordEvent(inferenceGuid, <a class="code" href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#abff887aa42263e0816432cdd0987e27d">LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS</a>);</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;        timelineUtils-&gt;Commit();</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    }</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    <span class="keywordflow">return</span> executionSucceeded ? <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a> : <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Status::Failure</a>;</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;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="keywordtype">void</span> LoadedNetwork::EnqueueInput(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_bindable_layer.xhtml">BindableLayer</a>&amp; layer, <a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a>* tensorHandle, <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensorInfo)</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;{</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="keywordflow">if</span> (layer.<a class="code" href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">GetType</a>() != <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">LayerType::Input</a>)</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    {</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;EnqueueInput: given layer not an InputLayer&quot;</span>);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    }</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    <span class="keywordflow">if</span> (tensorHandle == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    {</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;EnqueueInput: tensorHandle must not be NULL&quot;</span>);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    }</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    <a class="code" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">InputQueueDescriptor</a> inputQueueDescriptor;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    inputQueueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.push_back(tensorHandle);</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    info.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.push_back(tensorInfo);</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;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(layer.<a class="code" href="classarmnn_1_1_layer.xhtml#a1594bddc87d6477df300317658f566bb">GetNumOutputSlots</a>() == 1, <span class="stringliteral">&quot;Can only handle Input Layer with one output&quot;</span>);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_output_handler.xhtml">OutputHandler</a>&amp; handler = layer.<a class="code" href="classarmnn_1_1_layer.xhtml#af2c0edc7ea62a8baaec4d3d9b2b09256">GetOutputHandler</a>();</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; outputTensorInfo = handler.GetTensorInfo();</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a>* outputTensorHandle = handler.GetData();</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(outputTensorHandle != <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;                     <span class="stringliteral">&quot;Data should have been allocated.&quot;</span>);</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    inputQueueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.push_back(outputTensorHandle);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    info.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.push_back(outputTensorInfo);</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> importFlags = outputTensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a55cddc2dbb32d680cd85b635ba370e48">GetImportFlags</a>();</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    <span class="keywordtype">bool</span> needMemCopy = <span class="keyword">true</span>;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <span class="keywordflow">if</span> (m_IsImportEnabled)  <span class="comment">// Try import the input tensor</span></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">if</span>(<a class="code" href="namespacearmnn.xhtml#a84f86b4de5adf0b164e811c87051a0ee">CheckFlag</a>(importFlags, <a class="code" href="namespacearmnn.xhtml#a0fc99721e27eb20ecd0ea85a3cc8b488a1131a914388fac73e5f07b0ba0aad523">MemorySource::Malloc</a>) )</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;            needMemCopy = <span class="keyword">false</span>;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;            <span class="comment">// This assumes a CPU Tensor handle</span></div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;            <span class="keywordtype">void</span>* mem = tensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">Map</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;            <span class="keywordflow">if</span> (outputTensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a4f81a9eff30c9b9fe76f5b83af470ba7">Import</a>(mem, <a class="code" href="namespacearmnn.xhtml#a0fc99721e27eb20ecd0ea85a3cc8b488a1131a914388fac73e5f07b0ba0aad523">MemorySource::Malloc</a>))</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;            {</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;                tensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a563609828050f1b3a7868c23f3365923">Unmap</a>();</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;                <span class="keywordflow">return</span>; <span class="comment">// No need for a workload since the import has been done.</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;            }</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;            tensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a563609828050f1b3a7868c23f3365923">Unmap</a>();</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_memory_import_exception.xhtml">MemoryImportException</a>(<span class="stringliteral">&quot;EnqueueInput: Memory Import failed&quot;</span>);</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        }</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    }</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="keywordflow">if</span> (needMemCopy)</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    {</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        <span class="comment">// Create a mem copy workload for input since we did not import</span></div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        std::unique_ptr&lt;IWorkload&gt; inputWorkload = std::make_unique&lt;CopyMemGenericWorkload&gt;(inputQueueDescriptor, <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(inputWorkload, <span class="stringliteral">&quot;No input workload created&quot;</span>);</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;        std::unique_ptr&lt;TimelineUtilityMethods&gt; timelineUtils =</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;                            <a class="code" href="classarmnn_1_1profiling_1_1_timeline_utility_methods.xhtml#a0e5c863245b8d7dc5e874c0c66eebae1">TimelineUtilityMethods::GetTimelineUtils</a>(m_ProfilingService);</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;        <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;        {</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;            <span class="comment">// Add Input Workload to the post-optimisation network structure</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;            AddWorkloadStructure(timelineUtils, inputWorkload, layer);</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;            timelineUtils-&gt;Commit();</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;        m_InputQueue.push_back(move(inputWorkload));</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    }</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;}</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="keywordtype">void</span> LoadedNetwork::EnqueueOutput(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_bindable_layer.xhtml">BindableLayer</a>&amp; layer, <a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a>* tensorHandle, <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; tensorInfo)</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;{</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="keywordflow">if</span> (layer.<a class="code" href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">GetType</a>() != <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">LayerType::Output</a>)</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    {</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;EnqueueOutput: given layer not an OutputLayer&quot;</span>);</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    }</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    <span class="keywordflow">if</span> (tensorHandle == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    {</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;EnqueueOutput: tensorHandle must not be NULL&quot;</span>);</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;    <a class="code" href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">OutputQueueDescriptor</a> outputQueueDescriptor;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    <a class="code" href="structarmnn_1_1_workload_info.xhtml">WorkloadInfo</a> <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</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;    outputQueueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">m_Outputs</a>.push_back(tensorHandle);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    info.<a class="code" href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">m_OutputTensorInfos</a>.push_back(tensorInfo);</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(layer.<a class="code" href="classarmnn_1_1_layer.xhtml#abc0660dc440c8a285b456c9ef6383c26">GetNumInputSlots</a>() == 1, <span class="stringliteral">&quot;Output Layer should have exactly one input.&quot;</span>);</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="comment">// Gets the output handler from the previous node.</span></div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_output_handler.xhtml">OutputHandler</a>&amp; outputHandler = layer.<a class="code" href="classarmnn_1_1_layer.xhtml#af5f530544d09a44d726f24702b67b35b">GetInputSlots</a>()[0].GetConnectedOutputSlot()-&gt;GetOutputHandler();</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo = outputHandler.GetTensorInfo();</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    <a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml">ITensorHandle</a>* inputTensorHandle = outputHandler.GetData();</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(inputTensorHandle != <span class="keyword">nullptr</span>, <span class="stringliteral">&quot;Data should have been allocated.&quot;</span>);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    <span class="comment">// Try import the output tensor.</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    <span class="comment">// Note: We can only import the output pointer if all of the following  hold true:</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    <span class="comment">// a) The imported pointer is aligned sufficiently</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <span class="comment">// b) The tensor has zero padding</span></div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    <span class="comment">// c) There is only one connection to the OutputSlot and it is to an OutputLayer.</span></div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    <span class="comment">// d) The output pointer is allocated via malloc. (Other types will be supported in a later release)</span></div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <span class="comment">// e) m_IsExportEnabled must be set to true</span></div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <span class="keywordtype">bool</span> needMemCopy = <span class="keyword">true</span>;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keywordflow">if</span> (m_IsExportEnabled &amp;&amp; (layer.<a class="code" href="classarmnn_1_1_layer.xhtml#af5f530544d09a44d726f24702b67b35b">GetInputSlots</a>()[0].GetConnectedOutputSlot()-&gt;GetNumConnections() == 1))</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    {</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        <span class="keywordflow">if</span>(layer.<a class="code" href="classarmnn_1_1_layer.xhtml#af5f530544d09a44d726f24702b67b35b">GetInputSlots</a>()[0].GetConnectedOutputSlot()-&gt;GetOwningLayer().GetType() != <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">LayerType::Input</a>)</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="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">MemorySourceFlags</a> importFlags = inputTensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a55cddc2dbb32d680cd85b635ba370e48">GetImportFlags</a>();</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="namespacearmnn.xhtml#a84f86b4de5adf0b164e811c87051a0ee">CheckFlag</a>(importFlags, <a class="code" href="namespacearmnn.xhtml#a0fc99721e27eb20ecd0ea85a3cc8b488a1131a914388fac73e5f07b0ba0aad523">MemorySource::Malloc</a>))</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;            {</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;                needMemCopy = <span class="keyword">false</span>;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                <span class="keywordtype">void</span> *mem = tensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">Map</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                <span class="keywordtype">bool</span> importOk = inputTensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a4f81a9eff30c9b9fe76f5b83af470ba7">Import</a>(mem, <a class="code" href="namespacearmnn.xhtml#a0fc99721e27eb20ecd0ea85a3cc8b488a1131a914388fac73e5f07b0ba0aad523">MemorySource::Malloc</a>);</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;                tensorHandle-&gt;<a class="code" href="classarmnn_1_1_i_tensor_handle.xhtml#a563609828050f1b3a7868c23f3365923">Unmap</a>();</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;                <span class="keywordflow">if</span> (importOk)</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;                    <span class="comment">// Insert synchronization workload</span></div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;                    <a class="code" href="structarmnn_1_1_mem_sync_queue_descriptor.xhtml">MemSyncQueueDescriptor</a> syncDesc;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                    syncDesc.<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.push_back(inputTensorHandle);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                    info.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.push_back(inputTensorInfo);</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                    <span class="keyword">auto</span> syncWorkload = std::make_unique&lt;SyncMemGenericWorkload&gt;(syncDesc, <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(syncWorkload, <span class="stringliteral">&quot;No sync workload created&quot;</span>);</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;                    m_OutputQueue.push_back(move(syncWorkload));</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;                }</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;                {</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_memory_export_exception.xhtml">MemoryExportException</a>(<span class="stringliteral">&quot;EnqueueOutput: Memory Export failed&quot;</span>);</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                }</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;            }</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;        }</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    }</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    <span class="keywordflow">if</span> (needMemCopy)</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    {</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;        <span class="comment">// If we got here then we didn&#39;t export the memory, so add an output workload which performs a memcopy.</span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;        outputQueueDescriptor.<a class="code" href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">m_Inputs</a>.push_back(inputTensorHandle);</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;        info.<a class="code" href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">m_InputTensorInfos</a>.push_back(inputTensorInfo);</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;        std::unique_ptr&lt;IWorkload&gt; outputWorkload =</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;            std::make_unique&lt;CopyMemGenericWorkload&gt;(outputQueueDescriptor, <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>);</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(outputWorkload, <span class="stringliteral">&quot;No output workload created&quot;</span>);</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;        std::unique_ptr&lt;TimelineUtilityMethods&gt; timelineUtils =</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;            <a class="code" href="classarmnn_1_1profiling_1_1_timeline_utility_methods.xhtml#a0e5c863245b8d7dc5e874c0c66eebae1">TimelineUtilityMethods::GetTimelineUtils</a>(m_ProfilingService);</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;        <span class="keywordflow">if</span> (timelineUtils)</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;        {</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;            <span class="comment">// Add Output Workload to the post-optimisation network structure</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;            AddWorkloadStructure(timelineUtils, outputWorkload, layer);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;            timelineUtils-&gt;Commit();</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;        }</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;        m_OutputQueue.push_back(move(outputWorkload));</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    }</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;}</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;<span class="keywordtype">void</span> LoadedNetwork::AllocateWorkingMemory(std::lock_guard&lt;std::mutex&gt;&amp; lock)</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;{</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    <a class="code" href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;Working Memory Allocation&quot;</span>);</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="comment">// this unused parameter makes sure we can only call this function with a valid lock</span></div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(lock);</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <span class="keywordflow">if</span> (m_IsWorkingMemAllocated)</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    {</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    }</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; workloadFactory : m_WorkloadFactories)</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    {</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;        <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">IBackendInternal::IMemoryManagerSharedPtr</a> memoryManager = workloadFactory.second.second;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;        <span class="keywordflow">if</span> (memoryManager)</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        {</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;            memoryManager-&gt;Acquire();</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;        }</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    }</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    m_TensorHandleFactoryRegistry.AquireMemory();</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    m_IsWorkingMemAllocated = <span class="keyword">true</span>;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;}</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#aaf8558a23ae9be6e7ea165989f1fa808">  725</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#aaf8558a23ae9be6e7ea165989f1fa808">LoadedNetwork::FreeWorkingMemory</a>()</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;{</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    std::lock_guard&lt;std::mutex&gt; lockGuard(m_WorkingMemMutex);</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <span class="keywordflow">if</span> (!m_IsWorkingMemAllocated)</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    {</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    }</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <span class="comment">// Informs the memory managers to release memory in it&#39;s respective memory group</span></div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; workloadFactory : m_WorkloadFactories)</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    {</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;        <a class="code" href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">IBackendInternal::IMemoryManagerSharedPtr</a> memoryManager = workloadFactory.second.second;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;        <span class="keywordflow">if</span> (memoryManager)</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        {</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;            memoryManager-&gt;Release();</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        }</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    }</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    m_TensorHandleFactoryRegistry.ReleaseMemory();</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    m_IsWorkingMemAllocated = <span class="keyword">false</span>;</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;}</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;<span class="keywordtype">bool</span> LoadedNetwork::Execute(std::unique_ptr&lt;TimelineUtilityMethods&gt;&amp; timelineUtils,</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;                            <a class="code" href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">profiling::ProfilingGuid</a> inferenceGuid)</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;{</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    <span class="keyword">auto</span> Fail = [&amp;](<span class="keyword">const</span> std::exception&amp; <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>)</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    {</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(error) &lt;&lt; <span class="stringliteral">&quot;An error occurred attempting to execute a workload: &quot;</span> &lt;&lt; error.what();</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;        success = <span class="keyword">false</span>;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    };</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    {</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;        std::lock_guard&lt;std::mutex&gt; lockGuard(m_WorkingMemMutex);</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        AllocateWorkingMemory(lockGuard);</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;        <a class="code" href="structarmnn_1_1profiling_1_1_profiling_dynamic_guid.xhtml">ProfilingDynamicGuid</a> workloadInferenceID(0);</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;        <span class="keyword">auto</span> ExecuteQueue = [&amp;timelineUtils, &amp;workloadInferenceID, &amp;inferenceGuid](<a class="code" href="classarmnn_1_1_loaded_network.xhtml#a15f53f26b8495b51d0bba3d1bc4efc80">WorkloadQueue</a>&amp; queue)</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        {</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;            <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; workload : queue)</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;            {</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;                <span class="keywordflow">if</span>(timelineUtils)</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;                {</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;                    workloadInferenceID = timelineUtils-&gt;RecordWorkloadInferenceAndStartOfLifeEvent(workload-&gt;GetGuid(),</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;                                                                                                    inferenceGuid);</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;                }</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;                workload-&gt;Execute();</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                <span class="keywordflow">if</span>(timelineUtils)</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;                {</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;                    timelineUtils-&gt;RecordEndOfLifeEvent(workloadInferenceID);</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;                }</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;            }</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        };</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        ExecuteQueue(m_InputQueue);</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;        ExecuteQueue(m_WorkloadQueue);</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;        ExecuteQueue(m_OutputQueue);</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    }</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>&amp; error)</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    {</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        Fail(error);</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    }</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::runtime_error&amp; error)</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    {</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        Fail(error);</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    }</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    <span class="keywordflow">return</span> success;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;}</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;</div><div class="line"><a name="l00795"></a><span class="lineno"><a class="line" href="classarmnn_1_1_loaded_network.xhtml#a091ea8d2d804c8902f3120fdf2a36512">  795</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1_loaded_network.xhtml#a091ea8d2d804c8902f3120fdf2a36512">LoadedNetwork::RegisterDebugCallback</a>(<span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a15f3ad9b5e4e3d46b0a6dda246a7bc28">DebugCallbackFunction</a>&amp; func)</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;{</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; workloadPtr: m_WorkloadQueue)</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    {</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;        workloadPtr.get()-&gt;RegisterDebugCallback(func);</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    }</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;}</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;}</div><div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_ae3da9252fb4310cb359c5d64a5573926"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#ae3da9252fb4310cb359c5d64a5573926">armnn::profiling::LabelsAndEventClasses::INFERENCE_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid INFERENCE_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00051">LabelsAndEventClasses.hpp:51</a></div></div>
<div class="ttc" id="_mem_copy_workload_8hpp_xhtml"><div class="ttname"><a href="_mem_copy_workload_8hpp.xhtml">MemCopyWorkload.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_xhtml_a4f81a9eff30c9b9fe76f5b83af470ba7"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle.xhtml#a4f81a9eff30c9b9fe76f5b83af470ba7">armnn::ITensorHandle::Import</a></div><div class="ttdeci">virtual bool Import(void *memory, MemorySource source)</div><div class="ttdoc">Import externally allocated memory. </div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00075">ITensorHandle.hpp:75</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_registry_xhtml_afc0c63ca8db8957b58826f6d7bd231b2"><div class="ttname"><a href="classarmnn_1_1_backend_registry.xhtml#afc0c63ca8db8957b58826f6d7bd231b2">armnn::BackendRegistry::GetFactory</a></div><div class="ttdeci">FactoryFunction GetFactory(const BackendId &amp;id) const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00054">BackendRegistry.cpp:54</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_abc0660dc440c8a285b456c9ef6383c26"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#abc0660dc440c8a285b456c9ef6383c26">armnn::Layer::GetNumInputSlots</a></div><div class="ttdeci">unsigned int GetNumInputSlots() const override</div><div class="ttdoc">Returns the number of connectable input slots. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00313">Layer.hpp:313</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_a15f53f26b8495b51d0bba3d1bc4efc80"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#a15f53f26b8495b51d0bba3d1bc4efc80">armnn::LoadedNetwork::WorkloadQueue</a></div><div class="ttdeci">std::vector&lt; std::unique_ptr&lt; IWorkload &gt; &gt; WorkloadQueue</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8hpp_source.xhtml#l00037">LoadedNetwork.hpp:37</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_network_properties_xhtml_a111a52fb2bd24aee9fc125f28c2eb1cb"><div class="ttname"><a href="structarmnn_1_1_i_network_properties.xhtml#a111a52fb2bd24aee9fc125f28c2eb1cb">armnn::INetworkProperties::m_ImportEnabled</a></div><div class="ttdeci">const bool m_ImportEnabled</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00034">IRuntime.hpp:34</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml">armnn::IBackendInternal</a></div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_backend_internal_8hpp_source.xhtml#l00068">IBackendInternal.hpp:68</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_timeline_utility_methods_xhtml_a0e5c863245b8d7dc5e874c0c66eebae1"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_timeline_utility_methods.xhtml#a0e5c863245b8d7dc5e874c0c66eebae1">armnn::profiling::TimelineUtilityMethods::GetTimelineUtils</a></div><div class="ttdeci">static std::unique_ptr&lt; TimelineUtilityMethods &gt; GetTimelineUtils(ProfilingService &amp;profilingService)</div><div class="ttdef"><b>Definition:</b> <a href="_timeline_utility_methods_8cpp_source.xhtml#l00015">TimelineUtilityMethods.cpp:15</a></div></div>
<div class="ttc" id="classarmnn_1_1_profiler_manager_xhtml_a93857080c2523bf3395e7aa7e6024d5c"><div class="ttname"><a href="classarmnn_1_1_profiler_manager.xhtml#a93857080c2523bf3395e7aa7e6024d5c">armnn::ProfilerManager::GetInstance</a></div><div class="ttdeci">static ProfilerManager &amp; GetInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8cpp_source.xhtml#l00489">Profiling.cpp:489</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_processes_xhtml_a1d95dea376acbd82dde773e05db454be"><div class="ttname"><a href="namespacearmnn_utils_1_1_processes.xhtml#a1d95dea376acbd82dde773e05db454be">armnnUtils::Processes::GetCurrentId</a></div><div class="ttdeci">int GetCurrentId()</div><div class="ttdef"><b>Definition:</b> <a href="_processes_8cpp_source.xhtml#l00019">Processes.cpp:19</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="classarmnn_1_1_i_workload_factory_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml">armnn::IWorkloadFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8hpp_source.xhtml#l00022">WorkloadFactory.hpp:22</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_xhtml_a55cddc2dbb32d680cd85b635ba370e48"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle.xhtml#a55cddc2dbb32d680cd85b635ba370e48">armnn::ITensorHandle::GetImportFlags</a></div><div class="ttdeci">virtual unsigned int GetImportFlags() const</div><div class="ttdoc">Get flags describing supported import sources. </div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00069">ITensorHandle.hpp:69</a></div></div>
<div class="ttc" id="namespacearmnn_serializer_xhtml_a9a8118be7780e95363d631cbca7e7800"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a9a8118be7780e95363d631cbca7e7800">armnnSerializer::Layer</a></div><div class="ttdeci">Layer</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l01144">ArmnnSchema_generated.h:1144</a></div></div>
<div class="ttc" id="classarmnn_1_1_bindable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_bindable_layer.xhtml">armnn::BindableLayer</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00431">Layer.hpp:431</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_guid_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_guid.xhtml">armnn::profiling::ProfilingGuid</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00291">Types.hpp:291</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_profiling_dynamic_guid_xhtml"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_profiling_dynamic_guid.xhtml">armnn::profiling::ProfilingDynamicGuid</a></div><div class="ttdoc">Strongly typed guids to distinguish between those generated at runtime, and those that are statically...</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00335">Types.hpp:335</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_af616683424cb40d83b5a923db7f06f11"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#af616683424cb40d83b5a923db7f06f11">armnn::LoadedNetwork::GetInputTensorInfo</a></div><div class="ttdeci">TensorInfo GetInputTensorInfo(LayerBindingId layerId) const</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00321">LoadedNetwork.cpp:321</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00202">Logging.hpp:202</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ac2807505b850738bc8a1991ce669dd47"><div class="ttname"><a href="namespacearmnn.xhtml#ac2807505b850738bc8a1991ce669dd47">armnn::BackendRegistryInstance</a></div><div class="ttdeci">BackendRegistry &amp; BackendRegistryInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_backend_registry_8cpp_source.xhtml#l00013">BackendRegistry.cpp:13</a></div></div>
<div class="ttc" id="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#l00340">Tensor.hpp:340</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a5b05f3b7208ec7cea3338e30057c0bac"><div class="ttname"><a href="namespacearmnn.xhtml#a5b05f3b7208ec7cea3338e30057c0bac">armnn::MemorySourceFlags</a></div><div class="ttdeci">unsigned int MemorySourceFlags</div><div class="ttdef"><b>Definition:</b> <a href="_memory_sources_8hpp_source.xhtml#l00021">MemorySources.hpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a604654b453ec291a503d62a0beb849d3"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a604654b453ec291a503d62a0beb849d3">armnn::Graph::GetNumOutputs</a></div><div class="ttdeci">size_t GetNumOutputs() const</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00181">Graph.hpp:181</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_a2b6b57945bc68f659e08d28c8a015e91"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#a2b6b57945bc68f659e08d28c8a015e91">armnn::LoadedNetwork::GetOutputTensorInfo</a></div><div class="ttdeci">TensorInfo GetOutputTensorInfo(LayerBindingId layerId) const</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00335">LoadedNetwork.cpp:335</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_af5f530544d09a44d726f24702b67b35b"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#af5f530544d09a44d726f24702b67b35b">armnn::Layer::GetInputSlots</a></div><div class="ttdeci">const std::vector&lt; InputSlot &gt; &amp; GetInputSlots() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00237">Layer.hpp:237</a></div></div>
<div class="ttc" id="_loaded_network_8hpp_xhtml"><div class="ttname"><a href="_loaded_network_8hpp.xhtml">LoadedNetwork.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a15f3ad9b5e4e3d46b0a6dda246a7bc28"><div class="ttname"><a href="namespacearmnn.xhtml#a15f3ad9b5e4e3d46b0a6dda246a7bc28">armnn::DebugCallbackFunction</a></div><div class="ttdeci">std::function&lt; void(LayerGuid guid, unsigned int slotIndex, ITensorHandle *tensorHandle)&gt; DebugCallbackFunction</div><div class="ttdoc">Define the type of callback for the Debug layer to call. </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00283">Types.hpp:283</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_a1594bddc87d6477df300317658f566bb"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a1594bddc87d6477df300317658f566bb">armnn::Layer::GetNumOutputSlots</a></div><div class="ttdeci">unsigned int GetNumOutputSlots() const override</div><div class="ttdoc">Returns the number of connectable output slots. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00314">Layer.hpp:314</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a6d5d1a547ba9c92694347fc71ddf0e18"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a6d5d1a547ba9c92694347fc71ddf0e18">armnn::profiling::LabelsAndEventClasses::WORKLOAD_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid WORKLOAD_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00048">LabelsAndEventClasses.hpp:48</a></div></div>
<div class="ttc" id="_processes_8hpp_xhtml"><div class="ttname"><a href="_processes_8hpp.xhtml">Processes.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">armnn::BoostLogSeverityMapping::error</a></div></div>
<div class="ttc" id="_backend_registry_8hpp_xhtml"><div class="ttname"><a href="_backend_registry_8hpp.xhtml">BackendRegistry.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_abff887aa42263e0816432cdd0987e27d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#abff887aa42263e0816432cdd0987e27d">armnn::profiling::LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid ARMNN_PROFILING_EOL_EVENT_CLASS</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00060">LabelsAndEventClasses.hpp:60</a></div></div>
<div class="ttc" id="_profiling_8hpp_xhtml_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.xhtml#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.xhtml#l00173">Profiling.hpp:173</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00210">Types.hpp:210</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_network_properties_xhtml"><div class="ttname"><a href="structarmnn_1_1_i_network_properties.xhtml">armnn::INetworkProperties</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00028">IRuntime.hpp:28</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a75123df426e55b7e9c218704cb52120f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a75123df426e55b7e9c218704cb52120f">armnn::profiling::LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid ARMNN_PROFILING_SOL_EVENT_CLASS</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00056">LabelsAndEventClasses.hpp:56</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_afd5a5e90515b31c0174f76ec8897e9b1"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#afd5a5e90515b31c0174f76ec8897e9b1">armnn::IBackendInternal::CreateWorkloadFactory</a></div><div class="ttdeci">virtual IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr &amp;memoryManager=nullptr) const =0</div></div>
<div class="ttc" id="namespacestd_xhtml"><div class="ttname"><a href="namespacestd.xhtml">std</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00147">BackendId.hpp:147</a></div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml_ac97905bfa0daab357b91df1347600309"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#ac97905bfa0daab357b91df1347600309">armnn::WorkloadInfo::m_InputTensorInfos</a></div><div class="ttdeci">std::vector&lt; TensorInfo &gt; m_InputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00018">WorkloadInfo.hpp:18</a></div></div>
<div class="ttc" id="_labels_and_event_classes_8hpp_xhtml"><div class="ttname"><a href="_labels_and_event_classes_8hpp.xhtml">LabelsAndEventClasses.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a0fc99721e27eb20ecd0ea85a3cc8b488a1131a914388fac73e5f07b0ba0aad523"><div class="ttname"><a href="namespacearmnn.xhtml#a0fc99721e27eb20ecd0ea85a3cc8b488a1131a914388fac73e5f07b0ba0aad523">armnn::MemorySource::Malloc</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="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a939d115d7a078087c7a826bf2c65bcb4"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a939d115d7a078087c7a826bf2c65bcb4">armnn::profiling::LabelsAndEventClasses::LAYER_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid LAYER_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00047">LabelsAndEventClasses.hpp:47</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_af8f716b0eab6b9d63196d5a53d5fac81"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#af8f716b0eab6b9d63196d5a53d5fac81">armnn::IBackendInternal::SupportsTensorAllocatorAPI</a></div><div class="ttdeci">bool SupportsTensorAllocatorAPI() const</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_internal_8cpp_source.xhtml#l00145">IBackendInternal.cpp:145</a></div></div>
<div class="ttc" id="_graph_8hpp_xhtml"><div class="ttname"><a href="_graph_8hpp.xhtml">Graph.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_a693b40e6b94e958836aeb0410ca186bd"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#a693b40e6b94e958836aeb0410ca186bd">armnn::IBackendInternal::IMemoryManagerSharedPtr</a></div><div class="ttdeci">std::shared_ptr&lt; IMemoryManager &gt; IMemoryManagerSharedPtr</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_backend_internal_8hpp_source.xhtml#l00092">IBackendInternal.hpp:92</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle.xhtml">armnn::ITensorHandle</a></div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_i_tensor_handle_8hpp_source.xhtml#l00015">ITensorHandle.hpp:15</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407a7b83d3f08fa392b79e3f553b585971cd">armnn::BoostLogSeverityMapping::warning</a></div></div>
<div class="ttc" id="_heap_profiling_8hpp_xhtml_aeeb927880fc4ffc2eea754a67d884a53"><div class="ttname"><a href="_heap_profiling_8hpp.xhtml#aeeb927880fc4ffc2eea754a67d884a53">ARMNN_SCOPED_HEAP_PROFILING</a></div><div class="ttdeci">#define ARMNN_SCOPED_HEAP_PROFILING(TAG)</div><div class="ttdef"><b>Definition:</b> <a href="_heap_profiling_8hpp_source.xhtml#l00045">HeapProfiling.hpp:45</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a9b431866f8b82e77c6ed26c119078ff8"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a9b431866f8b82e77c6ed26c119078ff8">armnn::profiling::LabelsAndEventClasses::EXECUTION_OF_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid EXECUTION_OF_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00037">LabelsAndEventClasses.hpp:37</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#l00341">Tensor.hpp:341</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_a9a97cb6d32661a57fc33bd29b8e41ff4"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a9a97cb6d32661a57fc33bd29b8e41ff4">armnn::Layer::GetNameStr</a></div><div class="ttdeci">const std::string &amp; GetNameStr() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00220">Layer.hpp:220</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_ad8e15c530c929ab823d89ae9fd2d3f11"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#ad8e15c530c929ab823d89ae9fd2d3f11">armnn::Layer::GetType</a></div><div class="ttdeci">LayerType GetType() const override</div><div class="ttdoc">Returns the armnn::LayerType of this layer. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00265">Layer.hpp:265</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#l00026">Types.hpp:26</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_network_properties_xhtml_a042fb9a87ffa70730766d19505d80490"><div class="ttname"><a href="structarmnn_1_1_i_network_properties.xhtml#a042fb9a87ffa70730766d19505d80490">armnn::INetworkProperties::m_ExportEnabled</a></div><div class="ttdeci">const bool m_ExportEnabled</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="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1_output_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1_output_handler.xhtml">armnn::OutputHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_output_handler_8hpp_source.xhtml#l00028">OutputHandler.hpp:28</a></div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml_a67b178f8a836bc1e52b8de109760adfd"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml#a67b178f8a836bc1e52b8de109760adfd">armnn::WorkloadInfo::m_OutputTensorInfos</a></div><div class="ttdeci">std::vector&lt; TensorInfo &gt; m_OutputTensorInfos</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00019">WorkloadInfo.hpp:19</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml">armnn::profiling</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00168">BackendId.hpp:168</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_workload_factory_xhtml_a74dc9ec1a223eab8b072368b2dacee87"><div class="ttname"><a href="classarmnn_1_1_i_workload_factory.xhtml#a74dc9ec1a223eab8b072368b2dacee87">armnn::IWorkloadFactory::IsLayerSupported</a></div><div class="ttdeci">static bool IsLayerSupported(const BackendId &amp;backendId, const IConnectableLayer &amp;layer, Optional&lt; DataType &gt; dataType, std::string &amp;outReasonIfUnsupported)</div><div class="ttdef"><b>Definition:</b> <a href="_workload_factory_8cpp_source.xhtml#l01246">WorkloadFactory.cpp:1246</a></div></div>
<div class="ttc" id="classarmnn_1_1_runtime_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00120">Exceptions.hpp:120</a></div></div>
<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_afdb1d37740e7a083b625d669588b6a0e"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#afdb1d37740e7a083b625d669588b6a0e">armnn::Layer::GetBackendId</a></div><div class="ttdeci">const BackendId &amp; GetBackendId() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00269">Layer.hpp:269</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml">armnn::Graph</a></div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00029">Graph.hpp:29</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml"><div class="ttname"><a href="_logging_8hpp.xhtml">Logging.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_aaf8558a23ae9be6e7ea165989f1fa808"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#aaf8558a23ae9be6e7ea165989f1fa808">armnn::LoadedNetwork::FreeWorkingMemory</a></div><div class="ttdeci">void FreeWorkingMemory()</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00725">LoadedNetwork.cpp:725</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_aa311c7fe7e05406c9ff4e4ed3ba09825"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#aa311c7fe7e05406c9ff4e4ed3ba09825">armnn::Graph::GetOutputLayers</a></div><div class="ttdeci">OutputLayersAccessor GetOutputLayers() const</div><div class="ttdoc">Returns a wrapper object with begin(), end() methods to iterate over the output layers in a range-bas...</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00189">Graph.hpp:189</a></div></div>
<div class="ttc" id="_cpu_tensor_handle_8hpp_xhtml"><div class="ttname"><a href="_cpu_tensor_handle_8hpp.xhtml">CpuTensorHandle.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a2803368c101910905392bc7edd4c9cc5"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a2803368c101910905392bc7edd4c9cc5">armnn::profiling::LabelsAndEventClasses::NETWORK_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid NETWORK_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00049">LabelsAndEventClasses.hpp:49</a></div></div>
<div class="ttc" id="structarmnn_1_1_mem_copy_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_mem_copy_queue_descriptor.xhtml">armnn::MemCopyQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00076">WorkloadData.hpp:76</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_a878c3febb600fd2ccf3b5cb1f9a61e27"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#a878c3febb600fd2ccf3b5cb1f9a61e27">armnn::LoadedNetwork::EnqueueWorkload</a></div><div class="ttdeci">Status EnqueueWorkload(const InputTensors &amp;inputTensors, const OutputTensors &amp;outputTensors)</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00470">LoadedNetwork.cpp:470</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml"><div class="ttname"><a href="_assert_8hpp.xhtml">Assert.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8hpp_source.xhtml#l00049">ProfilingService.hpp:49</a></div></div>
<div class="ttc" id="_layer_8hpp_xhtml"><div class="ttname"><a href="_layer_8hpp.xhtml">Layer.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">armnn::LayerType::MemImport</a></div></div>
<div class="ttc" id="classarmnn_1_1_profiler_manager_xhtml_a7b1e3e5bf386004541be2b5b22443208"><div class="ttname"><a href="classarmnn_1_1_profiler_manager.xhtml#a7b1e3e5bf386004541be2b5b22443208">armnn::ProfilerManager::RegisterProfiler</a></div><div class="ttdeci">void RegisterProfiler(IProfiler *profiler)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8cpp_source.xhtml#l00496">Profiling.cpp:496</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_xhtml_a9afbc055a017adf1bc38ee137bca6e90"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle.xhtml#a9afbc055a017adf1bc38ee137bca6e90">armnn::ITensorHandle::Map</a></div><div class="ttdeci">virtual const void * Map(bool blocking=true) const =0</div><div class="ttdoc">Map the tensor data for access. </div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml">armnn::LoadedNetwork</a></div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8hpp_source.xhtml#l00034">LoadedNetwork.hpp:34</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_ac8be6c967db9e797ade32fa3db497422"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#ac8be6c967db9e797ade32fa3db497422">armnn::LoadedNetwork::GetNetworkGuid</a></div><div class="ttdeci">profiling::ProfilingGuid GetNetworkGuid()</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00316">LoadedNetwork.cpp:316</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_tensor_handle_xhtml_a563609828050f1b3a7868c23f3365923"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle.xhtml#a563609828050f1b3a7868c23f3365923">armnn::ITensorHandle::Unmap</a></div><div class="ttdeci">virtual void Unmap() const =0</div><div class="ttdoc">Unmap the tensor data. </div></div>
<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_xhtml_a6abd491bb99ffe88bd472c1ae5a1ed1a"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.xhtml#a6abd491bb99ffe88bd472c1ae5a1ed1a">armnn::QueueDescriptor::m_Outputs</a></div><div class="ttdeci">std::vector&lt; ITensorHandle * &gt; m_Outputs</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00031">WorkloadData.hpp:31</a></div></div>
<div class="ttc" id="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="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_af2c0edc7ea62a8baaec4d3d9b2b09256"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#af2c0edc7ea62a8baaec4d3d9b2b09256">armnn::Layer::GetOutputHandler</a></div><div class="ttdeci">const OutputHandler &amp; GetOutputHandler(unsigned int i=0) const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00225">Layer.hpp:225</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_id_xhtml_af7445617163d3f07c47b92ae56c6cf8b"><div class="ttname"><a href="classarmnn_1_1_backend_id.xhtml#af7445617163d3f07c47b92ae56c6cf8b">armnn::BackendId::Get</a></div><div class="ttdeci">const std::string &amp; Get() const</div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00136">BackendId.hpp:136</a></div></div>
<div class="ttc" id="classarmnn_1_1_memory_import_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_memory_import_exception.xhtml">armnn::MemoryImportException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00125">Exceptions.hpp:125</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_a091ea8d2d804c8902f3120fdf2a36512"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#a091ea8d2d804c8902f3120fdf2a36512">armnn::LoadedNetwork::RegisterDebugCallback</a></div><div class="ttdeci">void RegisterDebugCallback(const DebugCallbackFunction &amp;func)</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00795">LoadedNetwork.cpp:795</a></div></div>
<div class="ttc" id="_network_8hpp_xhtml"><div class="ttname"><a href="_network_8hpp.xhtml">Network.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a></div></div>
<div class="ttc" id="include_2armnn_2backends_2_i_memory_manager_8hpp_xhtml"><div class="ttname"><a href="include_2armnn_2backends_2_i_memory_manager_8hpp.xhtml">IMemoryManager.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_memory_export_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_memory_export_exception.xhtml">armnn::MemoryExportException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00130">Exceptions.hpp:130</a></div></div>
<div class="ttc" id="structarmnn_1_1_workload_info_xhtml"><div class="ttname"><a href="structarmnn_1_1_workload_info.xhtml">armnn::WorkloadInfo</a></div><div class="ttdoc">Contains information about inputs and outputs to a layer. </div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_2backends_2_workload_info_8hpp_source.xhtml#l00016">WorkloadInfo.hpp:16</a></div></div>
<div class="ttc" id="_mem_sync_workload_8hpp_xhtml"><div class="ttname"><a href="_mem_sync_workload_8hpp.xhtml">MemSyncWorkload.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a84f86b4de5adf0b164e811c87051a0ee"><div class="ttname"><a href="namespacearmnn.xhtml#a84f86b4de5adf0b164e811c87051a0ee">armnn::CheckFlag</a></div><div class="ttdeci">bool CheckFlag(MemorySourceFlags flags, MemorySource source)</div><div class="ttdef"><b>Definition:</b> <a href="_memory_sources_8hpp_source.xhtml#l00047">MemorySources.hpp:47</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a9a7209345edfdb2b066b0ceb66414d7c"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a9a7209345edfdb2b066b0ceb66414d7c">armnn::Graph::TopologicalSort</a></div><div class="ttdeci">Graph &amp; TopologicalSort()</div><div class="ttdoc">Sorts layers in topological order and return this. </div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00177">Graph.hpp:177</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a919fb58873ef3a6549e4490e226f2eae"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a919fb58873ef3a6549e4490e226f2eae">armnn::Graph::GetInputLayers</a></div><div class="ttdeci">InputLayersAccessor GetInputLayers() const</div><div class="ttdoc">Returns a wrapper object with begin(), end() methods to iterate over the input layers in a range-base...</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00185">Graph.hpp:185</a></div></div>
<div class="ttc" id="structarmnn_1_1_queue_descriptor_xhtml_a4b50e46a6810018f3edecfb68b2a76b3"><div class="ttname"><a href="structarmnn_1_1_queue_descriptor.xhtml#a4b50e46a6810018f3edecfb68b2a76b3">armnn::QueueDescriptor::m_Inputs</a></div><div class="ttdeci">std::vector&lt; ITensorHandle * &gt; m_Inputs</div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00030">WorkloadData.hpp:30</a></div></div>
<div class="ttc" id="_heap_profiling_8hpp_xhtml"><div class="ttname"><a href="_heap_profiling_8hpp.xhtml">HeapProfiling.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a0c786c3e4560c019deef4d6fc63b847b"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a0c786c3e4560c019deef4d6fc63b847b">armnn::profiling::LabelsAndEventClasses::PROCESS_ID_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid PROCESS_ID_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00038">LabelsAndEventClasses.hpp:38</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_afdf8eb85585a798ad0e936bde884d87b"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#afdf8eb85585a798ad0e936bde884d87b">armnn::Graph::GetNumLayers</a></div><div class="ttdeci">size_t GetNumLayers() const</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00191">Graph.hpp:191</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_backend_internal_xhtml_a0e8cb8533d1d0b2cb93f926dac11dd16"><div class="ttname"><a href="classarmnn_1_1_i_backend_internal.xhtml#a0e8cb8533d1d0b2cb93f926dac11dd16">armnn::IBackendInternal::CreateMemoryManager</a></div><div class="ttdeci">virtual ARMNN_NO_DEPRECATE_WARN_END IMemoryManagerUniquePtr CreateMemoryManager() const</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_internal_8cpp_source.xhtml#l00032">IBackendInternal.cpp:32</a></div></div>
<div class="ttc" id="structarmnn_1_1_mem_sync_queue_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_mem_sync_queue_descriptor.xhtml">armnn::MemSyncQueueDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_workload_data_8hpp_source.xhtml#l00089">WorkloadData.hpp:89</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_af7ec4c0fa4375a45a70e4e31f3d8af47"><div class="ttname"><a href="namespacearmnn.xhtml#af7ec4c0fa4375a45a70e4e31f3d8af47">armnn::GetTensorInfo</a></div><div class="ttdeci">const TensorInfo &amp; GetTensorInfo(const ITensorHandle *tensorHandle)</div><div class="ttdoc">float32 helpers </div><div class="ttdef"><b>Definition:</b> <a href="_ref_workload_utils_8hpp_source.xhtml#l00026">RefWorkloadUtils.hpp:26</a></div></div>
<div class="ttc" id="_profiling_8hpp_xhtml"><div class="ttname"><a href="_profiling_8hpp.xhtml">Profiling.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_a8e94a5375ad367ddee9c69e04e110a54"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#a8e94a5375ad367ddee9c69e04e110a54">armnn::LoadedNetwork::MakeLoadedNetwork</a></div><div class="ttdeci">static std::unique_ptr&lt; LoadedNetwork &gt; MakeLoadedNetwork(std::unique_ptr&lt; IOptimizedNetwork &gt; net, std::string &amp;errorMessage, const INetworkProperties &amp;networkProperties, profiling::ProfilingService &amp;profilingService)</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00083">LoadedNetwork.cpp:83</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a8d8179a4a0703602a5d7dbb6e92eaf69"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a8d8179a4a0703602a5d7dbb6e92eaf69">armnn::Graph::GetNumInputs</a></div><div class="ttdeci">size_t GetNumInputs() const</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00180">Graph.hpp:180</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_ade2233e4c4600c2353dbdd1729977872"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#ade2233e4c4600c2353dbdd1729977872">armnn::profiling::LabelsAndEventClasses::BACKENDID_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid BACKENDID_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00035">LabelsAndEventClasses.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml">armnn::Layer</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00210">Layer.hpp:210</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_labels_and_event_classes_xhtml_a1caad872d87e206434faf5ca051cf36c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_labels_and_event_classes.xhtml#a1caad872d87e206434faf5ca051cf36c">armnn::profiling::LabelsAndEventClasses::CHILD_GUID</a></div><div class="ttdeci">static ARMNN_DLLEXPORT ProfilingStaticGuid CHILD_GUID</div><div class="ttdef"><b>Definition:</b> <a href="_labels_and_event_classes_8hpp_source.xhtml#l00036">LabelsAndEventClasses.hpp:36</a></div></div>
<div class="ttc" id="classarmnn_1_1_loaded_network_xhtml_a23e33c3caadba06bcd5b50dc2c23c19e"><div class="ttname"><a href="classarmnn_1_1_loaded_network.xhtml#a23e33c3caadba06bcd5b50dc2c23c19e">armnn::LoadedNetwork::SendNetworkStructure</a></div><div class="ttdeci">void SendNetworkStructure()</div><div class="ttdef"><b>Definition:</b> <a href="_loaded_network_8cpp_source.xhtml#l00279">LoadedNetwork.cpp:279</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_e0a84d05c80a2ef4231141dcbbeac5c8.xhtml">armnn</a></li><li class="navelem"><a class="el" href="_loaded_network_8cpp.xhtml">LoadedNetwork.cpp</a></li>
    <li class="footer">Generated on Fri Mar 19 2021 15:25: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>