blob: 8fc23efc130d5b4eb33c37c37245b19b62e138df [file] [log] [blame]
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001<!-- HTML header for doxygen 1.8.17-->
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml">
4<head>
5<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6<meta http-equiv="X-UA-Compatible" content="IE=9"/>
7<meta name="generator" content="Doxygen 1.8.17"/>
8<meta name="viewport" content="width=device-width, initial-scale=1"/>
9<title>Arm NN: IOptimizedNetwork Class Reference</title>
10<link href="tabs.css" rel="stylesheet" type="text/css"/>
11<script type="text/javascript" src="jquery.js"></script>
12<script type="text/javascript" src="dynsections.js"></script>
13<link href="navtree.css" rel="stylesheet" type="text/css"/>
14<script type="text/javascript" src="resize.js"></script>
15<script type="text/javascript" src="navtreedata.js"></script>
16<script type="text/javascript" src="navtree.js"></script>
17<link href="search/search.css" rel="stylesheet" type="text/css"/>
18<script type="text/javascript" src="search/searchdata.js"></script>
19<script type="text/javascript" src="search/search.js"></script>
20<script type="text/x-mathjax-config">
21 MathJax.Hub.Config({
22 extensions: ["tex2jax.js"],
23 jax: ["input/TeX","output/HTML-CSS"],
24});
25</script>
26<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
27<link href="doxygen.css" rel="stylesheet" type="text/css" />
28<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
29</head>
30<body>
31<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
32<div id="titlearea">
33<table cellspacing="0" cellpadding="0">
34 <tbody>
35 <tr style="height: 56px;">
36 <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/>
37 <td id="projectalign" style="padding-left: 0.9em;">
38 <div id="projectname">
39 &#160;<span id="projectnumber">24.05</span>
40 </div>
41 </td>
42 </tr>
43 </tbody>
44</table>
45</div>
46<!-- end header part -->
47<!-- Generated by Doxygen 1.8.17 -->
48<script type="text/javascript">
49/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
50var searchBox = new SearchBox("searchBox", "search",false,'Search');
51/* @license-end */
52</script>
53<script type="text/javascript" src="menudata.js"></script>
54<script type="text/javascript" src="menu.js"></script>
55<script type="text/javascript">
56/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
57$(function() {
58 initMenu('',true,false,'search.php','Search');
59 $(document).ready(function() { init_search(); });
60});
61/* @license-end */</script>
62<div id="main-nav"></div>
63</div><!-- top -->
64<div id="side-nav" class="ui-resizable side-nav-resizable">
65 <div id="nav-tree">
66 <div id="nav-tree-contents">
67 <div id="nav-sync" class="sync"></div>
68 </div>
69 </div>
70 <div id="splitbar" style="-moz-user-select:none;"
71 class="ui-resizable-handle">
72 </div>
73</div>
74<script type="text/javascript">
75/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
76$(document).ready(function(){initNavTree('classarmnn_1_1_i_optimized_network.html',''); initResizable(); });
77/* @license-end */
78</script>
79<div id="doc-content">
80<!-- window showing the filter options -->
81<div id="MSearchSelectWindow"
82 onmouseover="return searchBox.OnSearchSelectShow()"
83 onmouseout="return searchBox.OnSearchSelectHide()"
84 onkeydown="return searchBox.OnSearchSelectKey(event)">
85</div>
86
87<!-- iframe showing the search results (closed by default) -->
88<div id="MSearchResultsWindow">
89<iframe src="javascript:void(0)" frameborder="0"
90 name="MSearchResults" id="MSearchResults">
91</iframe>
92</div>
93
94<div class="header">
95 <div class="summary">
96<a href="#pub-methods">Public Member Functions</a> &#124;
97<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
98<a href="#pro-methods">Protected Member Functions</a> &#124;
99<a href="#pro-attribs">Protected Attributes</a> &#124;
100<a href="#friends">Friends</a> &#124;
101<a href="classarmnn_1_1_i_optimized_network-members.html">List of all members</a> </div>
102 <div class="headertitle">
103<div class="title">IOptimizedNetwork Class Reference</div> </div>
104</div><!--header-->
105<div class="contents">
106
107<p><code>#include &lt;<a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>&gt;</code></p>
108<table class="memberdecls">
109<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
110Public Member Functions</h2></td></tr>
111<tr class="memitem:aff3fde909d22ed157046682e70129259"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#aff3fde909d22ed157046682e70129259">PrintGraph</a> ()</td></tr>
112<tr class="separator:aff3fde909d22ed157046682e70129259"><td class="memSeparator" colspan="2">&#160;</td></tr>
113<tr class="memitem:a26794f014974a6f963a8925de07bffeb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a26794f014974a6f963a8925de07bffeb">SerializeToDot</a> (std::ostream &amp;stream) const</td></tr>
114<tr class="separator:a26794f014974a6f963a8925de07bffeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
115<tr class="memitem:aa1b6106cb25d38e369fd647f4324cebe"><td class="memItemLeft" align="right" valign="top">arm::pipe::ProfilingGuid&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#aa1b6106cb25d38e369fd647f4324cebe">GetGuid</a> () const</td></tr>
116<tr class="separator:aa1b6106cb25d38e369fd647f4324cebe"><td class="memSeparator" colspan="2">&#160;</td></tr>
117<tr class="memitem:a8d8179a4a0703602a5d7dbb6e92eaf69"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a8d8179a4a0703602a5d7dbb6e92eaf69">GetNumInputs</a> () const</td></tr>
118<tr class="separator:a8d8179a4a0703602a5d7dbb6e92eaf69"><td class="memSeparator" colspan="2">&#160;</td></tr>
119<tr class="memitem:a604654b453ec291a503d62a0beb849d3"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a604654b453ec291a503d62a0beb849d3">GetNumOutputs</a> () const</td></tr>
120<tr class="separator:a604654b453ec291a503d62a0beb849d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
121<tr class="memitem:a72032c65bf8b8acf09b564b7d80078c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a72032c65bf8b8acf09b564b7d80078c5">ExecuteStrategy</a> (<a class="el" href="classarmnn_1_1_i_strategy.html">IStrategy</a> &amp;strategy) const</td></tr>
122<tr class="separator:a72032c65bf8b8acf09b564b7d80078c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
123<tr class="memitem:a32eecbed1d4cd2602204a2ab3f5f249e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">IOptimizedNetwork</a> (const <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> &amp;other, const <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;modelOptions)</td></tr>
124<tr class="memdesc:a32eecbed1d4cd2602204a2ab3f5f249e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a copy of the <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a>. <a href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">More...</a><br /></td></tr>
125<tr class="separator:a32eecbed1d4cd2602204a2ab3f5f249e"><td class="memSeparator" colspan="2">&#160;</td></tr>
126<tr class="memitem:af730a6ec3deb072dc2687089f3f77f9e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#af730a6ec3deb072dc2687089f3f77f9e">IOptimizedNetwork</a> (std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &gt; graph)</td></tr>
127<tr class="separator:af730a6ec3deb072dc2687089f3f77f9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
128<tr class="memitem:a5fd8b75db92fb2a84d12e2092a173716"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a5fd8b75db92fb2a84d12e2092a173716">IOptimizedNetwork</a> (std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> &gt; impl)</td></tr>
129<tr class="separator:a5fd8b75db92fb2a84d12e2092a173716"><td class="memSeparator" colspan="2">&#160;</td></tr>
130<tr class="memitem:a437cc59f5247f213adf34e84696f60da"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a437cc59f5247f213adf34e84696f60da">~IOptimizedNetwork</a> ()</td></tr>
131<tr class="separator:a437cc59f5247f213adf34e84696f60da"><td class="memSeparator" colspan="2">&#160;</td></tr>
132<tr class="memitem:a880db527e7dbf8d0de3fee52ba072482"><td class="memItemLeft" align="right" valign="top">const std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a880db527e7dbf8d0de3fee52ba072482">GetProfiler</a> () const</td></tr>
133<tr class="separator:a880db527e7dbf8d0de3fee52ba072482"><td class="memSeparator" colspan="2">&#160;</td></tr>
134</table><table class="memberdecls">
135<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
136Static Public Member Functions</h2></td></tr>
137<tr class="memitem:a58ee539cf95c1e99fe4f54ef6e8bbd05"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">Destroy</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *network)</td></tr>
138<tr class="separator:a58ee539cf95c1e99fe4f54ef6e8bbd05"><td class="memSeparator" colspan="2">&#160;</td></tr>
139</table><table class="memberdecls">
140<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
141Protected Member Functions</h2></td></tr>
142<tr class="memitem:a230acad28622c18ab32254f74af569b0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a230acad28622c18ab32254f74af569b0">IOptimizedNetwork</a> (std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &gt; graph, const <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;modelOptions)</td></tr>
143<tr class="separator:a230acad28622c18ab32254f74af569b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
144</table><table class="memberdecls">
145<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
146Protected Attributes</h2></td></tr>
147<tr class="memitem:a374d52340ec8dc02a819acc20fb5aa92"><td class="memItemLeft" align="right" valign="top">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a></td></tr>
148<tr class="separator:a374d52340ec8dc02a819acc20fb5aa92"><td class="memSeparator" colspan="2">&#160;</td></tr>
149</table><table class="memberdecls">
150<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
151Friends</h2></td></tr>
152<tr class="memitem:a848000b2be0cb1853c9f7c4fb4dc719e"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a848000b2be0cb1853c9f7c4fb4dc719e">LoadedNetwork</a></td></tr>
153<tr class="separator:a848000b2be0cb1853c9f7c4fb4dc719e"><td class="memSeparator" colspan="2">&#160;</td></tr>
154<tr class="memitem:a150601aebab0c979f258bf862b6fd5db"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a150601aebab0c979f258bf862b6fd5db">experimental::AsyncNetworkImpl</a></td></tr>
155<tr class="separator:a150601aebab0c979f258bf862b6fd5db"><td class="memSeparator" colspan="2">&#160;</td></tr>
156<tr class="memitem:a21b1820e69a256697d3a5603d656e833"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a21b1820e69a256697d3a5603d656e833">experimental::WorkingMemHandle</a></td></tr>
157<tr class="separator:a21b1820e69a256697d3a5603d656e833"><td class="memSeparator" colspan="2">&#160;</td></tr>
158<tr class="memitem:a519b2b784c275693e37a9b6c693342eb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a519b2b784c275693e37a9b6c693342eb">GetGraphForTesting</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *optNetPtr)</td></tr>
159<tr class="separator:a519b2b784c275693e37a9b6c693342eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
160<tr class="memitem:aa25c1acd249228c82a687d713673725a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#aa25c1acd249228c82a687d713673725a">GetModelOptionsForTesting</a> (<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *optNetPtr)</td></tr>
161<tr class="separator:aa25c1acd249228c82a687d713673725a"><td class="memSeparator" colspan="2">&#160;</td></tr>
162<tr class="memitem:ad6454b9a2fdc8862f25bcfeb36433eb7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#ad6454b9a2fdc8862f25bcfeb36433eb7">Optimize</a> (const <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> &amp;inNetwork, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;options, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; messages)</td></tr>
163<tr class="memdesc:ad6454b9a2fdc8862f25bcfeb36433eb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="classarmnn_1_1_i_optimized_network.html#ad6454b9a2fdc8862f25bcfeb36433eb7">More...</a><br /></td></tr>
164<tr class="separator:ad6454b9a2fdc8862f25bcfeb36433eb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
165<tr class="memitem:a4fc03669355aaf417a872947754af6bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_i_optimized_network.html#a4fc03669355aaf417a872947754af6bf">Optimize</a> (const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;inGraph, const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;backendPreferences, const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;deviceSpec, const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;options, <a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt; messages)</td></tr>
166<tr class="memdesc:a4fc03669355aaf417a872947754af6bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an optimized version of the network. <a href="classarmnn_1_1_i_optimized_network.html#a4fc03669355aaf417a872947754af6bf">More...</a><br /></td></tr>
167<tr class="separator:a4fc03669355aaf417a872947754af6bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
168</table>
169<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
170<div class="textblock">
171<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00908">908</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
172</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
173<a id="a32eecbed1d4cd2602204a2ab3f5f249e"></a>
174<h2 class="memtitle"><span class="permalink"><a href="#a32eecbed1d4cd2602204a2ab3f5f249e">&#9670;&nbsp;</a></span>IOptimizedNetwork() <span class="overload">[1/4]</span></h2>
175
176<div class="memitem">
177<div class="memproto">
178 <table class="memname">
179 <tr>
180 <td class="memname"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> </td>
181 <td>(</td>
182 <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> &amp;&#160;</td>
183 <td class="paramname"><em>other</em>, </td>
184 </tr>
185 <tr>
186 <td class="paramkey"></td>
187 <td></td>
188 <td class="paramtype">const <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td>
189 <td class="paramname"><em>modelOptions</em>&#160;</td>
190 </tr>
191 <tr>
192 <td></td>
193 <td>)</td>
194 <td></td><td></td>
195 </tr>
196 </table>
197</div><div class="memdoc">
198
199<p>Creates a copy of the <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a>. </p>
200<p>The <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> will not be reoptimized, the provided ModelOptions will only be used when creating a <a class="el" href="classarmnn_1_1_loaded_network.html">LoadedNetwork</a>. </p>
201
202<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00692">692</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
203<div class="fragment"><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(<span class="keyword">new</span> OptimizedNetworkImpl(*other.pOptimizedNetworkImpl.get(), modelOptions)) {}</div>
204</div><!-- fragment -->
205</div>
206</div>
207<a id="af730a6ec3deb072dc2687089f3f77f9e"></a>
208<h2 class="memtitle"><span class="permalink"><a href="#af730a6ec3deb072dc2687089f3f77f9e">&#9670;&nbsp;</a></span>IOptimizedNetwork() <span class="overload">[2/4]</span></h2>
209
210<div class="memitem">
211<div class="memproto">
212 <table class="memname">
213 <tr>
214 <td class="memname"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> </td>
215 <td>(</td>
216 <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &gt;&#160;</td>
217 <td class="paramname"><em>graph</em></td><td>)</td>
218 <td></td>
219 </tr>
220 </table>
221</div><div class="memdoc">
222
223<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00695">695</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
224<div class="fragment"><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(<span class="keyword">new</span> OptimizedNetworkImpl(std::move(graph))) {}</div>
225</div><!-- fragment -->
226</div>
227</div>
228<a id="a5fd8b75db92fb2a84d12e2092a173716"></a>
229<h2 class="memtitle"><span class="permalink"><a href="#a5fd8b75db92fb2a84d12e2092a173716">&#9670;&nbsp;</a></span>IOptimizedNetwork() <span class="overload">[3/4]</span></h2>
230
231<div class="memitem">
232<div class="memproto">
233 <table class="memname">
234 <tr>
235 <td class="memname"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> </td>
236 <td>(</td>
237 <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a> &gt;&#160;</td>
238 <td class="paramname"><em>impl</em></td><td>)</td>
239 <td></td>
240 </tr>
241 </table>
242</div><div class="memdoc">
243
244<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00698">698</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
245<div class="fragment"><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(std::move(impl)) {}</div>
246</div><!-- fragment -->
247</div>
248</div>
249<a id="a437cc59f5247f213adf34e84696f60da"></a>
250<h2 class="memtitle"><span class="permalink"><a href="#a437cc59f5247f213adf34e84696f60da">&#9670;&nbsp;</a></span>~IOptimizedNetwork()</h2>
251
252<div class="memitem">
253<div class="memproto">
254<table class="mlabels">
255 <tr>
256 <td class="mlabels-left">
257 <table class="memname">
258 <tr>
259 <td class="memname">~<a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> </td>
260 <td>(</td>
261 <td class="paramname"></td><td>)</td>
262 <td></td>
263 </tr>
264 </table>
265 </td>
266 <td class="mlabels-right">
267<span class="mlabels"><span class="mlabel">default</span></span> </td>
268 </tr>
269</table>
270</div><div class="memdoc">
271
272</div>
273</div>
274<a id="a230acad28622c18ab32254f74af569b0"></a>
275<h2 class="memtitle"><span class="permalink"><a href="#a230acad28622c18ab32254f74af569b0">&#9670;&nbsp;</a></span>IOptimizedNetwork() <span class="overload">[4/4]</span></h2>
276
277<div class="memitem">
278<div class="memproto">
279<table class="mlabels">
280 <tr>
281 <td class="mlabels-left">
282 <table class="memname">
283 <tr>
284 <td class="memname"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> </td>
285 <td>(</td>
286 <td class="paramtype">std::unique_ptr&lt; <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &gt;&#160;</td>
287 <td class="paramname"><em>graph</em>, </td>
288 </tr>
289 <tr>
290 <td class="paramkey"></td>
291 <td></td>
292 <td class="paramtype">const <a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> &amp;&#160;</td>
293 <td class="paramname"><em>modelOptions</em>&#160;</td>
294 </tr>
295 <tr>
296 <td></td>
297 <td>)</td>
298 <td></td><td></td>
299 </tr>
300 </table>
301 </td>
302 <td class="mlabels-right">
303<span class="mlabels"><span class="mlabel">protected</span></span> </td>
304 </tr>
305</table>
306</div><div class="memdoc">
307
308<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00701">701</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
309<div class="fragment"><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(<span class="keyword">new</span> OptimizedNetworkImpl(std::move(graph), modelOptions)) {}</div>
310</div><!-- fragment -->
311</div>
312</div>
313<h2 class="groupheader">Member Function Documentation</h2>
314<a id="a58ee539cf95c1e99fe4f54ef6e8bbd05"></a>
315<h2 class="memtitle"><span class="permalink"><a href="#a58ee539cf95c1e99fe4f54ef6e8bbd05">&#9670;&nbsp;</a></span>Destroy()</h2>
316
317<div class="memitem">
318<div class="memproto">
319<table class="mlabels">
320 <tr>
321 <td class="mlabels-left">
322 <table class="memname">
323 <tr>
324 <td class="memname">void Destroy </td>
325 <td>(</td>
326 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *&#160;</td>
327 <td class="paramname"><em>network</em></td><td>)</td>
328 <td></td>
329 </tr>
330 </table>
331 </td>
332 <td class="mlabels-right">
333<span class="mlabels"><span class="mlabel">static</span></span> </td>
334 </tr>
335</table>
336</div><div class="memdoc">
337
338<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00706">706</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
339<div class="fragment"><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;{</div>
340<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">delete</span> network;</div>
341<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;}</div>
342</div><!-- fragment -->
343</div>
344</div>
345<a id="a72032c65bf8b8acf09b564b7d80078c5"></a>
346<h2 class="memtitle"><span class="permalink"><a href="#a72032c65bf8b8acf09b564b7d80078c5">&#9670;&nbsp;</a></span>ExecuteStrategy()</h2>
347
348<div class="memitem">
349<div class="memproto">
350 <table class="memname">
351 <tr>
352 <td class="memname">void ExecuteStrategy </td>
353 <td>(</td>
354 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_strategy.html">IStrategy</a> &amp;&#160;</td>
355 <td class="paramname"><em>strategy</em></td><td>)</td>
356 <td> const</td>
357 </tr>
358 </table>
359</div><div class="memdoc">
360
361<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l03135">3135</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
362<div class="fragment"><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;{</div>
363<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160; <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;ExecuteStrategy(strategy);</div>
364<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;}</div>
365</div><!-- fragment -->
366<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
367
368</div>
369</div>
370<a id="aa1b6106cb25d38e369fd647f4324cebe"></a>
371<h2 class="memtitle"><span class="permalink"><a href="#aa1b6106cb25d38e369fd647f4324cebe">&#9670;&nbsp;</a></span>GetGuid()</h2>
372
373<div class="memitem">
374<div class="memproto">
375 <table class="memname">
376 <tr>
377 <td class="memname">arm::pipe::ProfilingGuid GetGuid </td>
378 <td>(</td>
379 <td class="paramname"></td><td>)</td>
380 <td> const</td>
381 </tr>
382 </table>
383</div><div class="memdoc">
384
385<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00726">726</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
386<div class="fragment"><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;{</div>
387<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetGuid();</div>
388<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;}</div>
389</div><!-- fragment -->
390<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
391
392</div>
393</div>
394<a id="a8d8179a4a0703602a5d7dbb6e92eaf69"></a>
395<h2 class="memtitle"><span class="permalink"><a href="#a8d8179a4a0703602a5d7dbb6e92eaf69">&#9670;&nbsp;</a></span>GetNumInputs()</h2>
396
397<div class="memitem">
398<div class="memproto">
399 <table class="memname">
400 <tr>
401 <td class="memname">size_t GetNumInputs </td>
402 <td>(</td>
403 <td class="paramname"></td><td>)</td>
404 <td> const</td>
405 </tr>
406 </table>
407</div><div class="memdoc">
408
409<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00731">731</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
410<div class="fragment"><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;{</div>
411<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetNumInputs();</div>
412<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;}</div>
413</div><!-- fragment -->
414<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
415
416</div>
417</div>
418<a id="a604654b453ec291a503d62a0beb849d3"></a>
419<h2 class="memtitle"><span class="permalink"><a href="#a604654b453ec291a503d62a0beb849d3">&#9670;&nbsp;</a></span>GetNumOutputs()</h2>
420
421<div class="memitem">
422<div class="memproto">
423 <table class="memname">
424 <tr>
425 <td class="memname">size_t GetNumOutputs </td>
426 <td>(</td>
427 <td class="paramname"></td><td>)</td>
428 <td> const</td>
429 </tr>
430 </table>
431</div><div class="memdoc">
432
433<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00736">736</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
434<div class="fragment"><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;{</div>
435<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetNumOutputs();</div>
436<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;}</div>
437</div><!-- fragment -->
438<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
439
440</div>
441</div>
442<a id="a880db527e7dbf8d0de3fee52ba072482"></a>
443<h2 class="memtitle"><span class="permalink"><a href="#a880db527e7dbf8d0de3fee52ba072482">&#9670;&nbsp;</a></span>GetProfiler()</h2>
444
445<div class="memitem">
446<div class="memproto">
447 <table class="memname">
448 <tr>
449 <td class="memname">const std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a> &gt; &amp; GetProfiler </td>
450 <td>(</td>
451 <td class="paramname"></td><td>)</td>
452 <td> const</td>
453 </tr>
454 </table>
455</div><div class="memdoc">
456
457<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00721">721</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
458<div class="fragment"><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;{</div>
459<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;GetGraph().GetProfiler();</div>
460<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;}</div>
461</div><!-- fragment -->
462<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
463
464</div>
465</div>
466<a id="aff3fde909d22ed157046682e70129259"></a>
467<h2 class="memtitle"><span class="permalink"><a href="#aff3fde909d22ed157046682e70129259">&#9670;&nbsp;</a></span>PrintGraph()</h2>
468
469<div class="memitem">
470<div class="memproto">
471 <table class="memname">
472 <tr>
473 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> PrintGraph </td>
474 <td>(</td>
475 <td class="paramname"></td><td>)</td>
476 <td></td>
477 </tr>
478 </table>
479</div><div class="memdoc">
480
481<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00711">711</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
482<div class="fragment"><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;{</div>
483<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;PrintGraph();</div>
484<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;}</div>
485</div><!-- fragment -->
486<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
487
488</div>
489</div>
490<a id="a26794f014974a6f963a8925de07bffeb"></a>
491<h2 class="memtitle"><span class="permalink"><a href="#a26794f014974a6f963a8925de07bffeb">&#9670;&nbsp;</a></span>SerializeToDot()</h2>
492
493<div class="memitem">
494<div class="memproto">
495 <table class="memname">
496 <tr>
497 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> SerializeToDot </td>
498 <td>(</td>
499 <td class="paramtype">std::ostream &amp;&#160;</td>
500 <td class="paramname"><em>stream</em></td><td>)</td>
501 <td> const</td>
502 </tr>
503 </table>
504</div><div class="memdoc">
505
506<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00716">716</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
507<div class="fragment"><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;{</div>
508<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>-&gt;SerializeToDot(stream);</div>
509<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;}</div>
510</div><!-- fragment -->
511<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p>
512
513<p class="reference">Referenced by <a class="el" href="_canonical_utils_8cpp_source.html#l00392">armnn_driver::ExportNetworkGraphToDotFile()</a>.</p>
514
515</div>
516</div>
517<h2 class="groupheader">Friends And Related Function Documentation</h2>
518<a id="a150601aebab0c979f258bf862b6fd5db"></a>
519<h2 class="memtitle"><span class="permalink"><a href="#a150601aebab0c979f258bf862b6fd5db">&#9670;&nbsp;</a></span>experimental::AsyncNetworkImpl</h2>
520
521<div class="memitem">
522<div class="memproto">
523<table class="mlabels">
524 <tr>
525 <td class="mlabels-left">
526 <table class="memname">
527 <tr>
528 <td class="memname">friend class experimental::AsyncNetworkImpl</td>
529 </tr>
530 </table>
531 </td>
532 <td class="mlabels-right">
533<span class="mlabels"><span class="mlabel">friend</span></span> </td>
534 </tr>
535</table>
536</div><div class="memdoc">
537
538<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00935">935</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
539
540</div>
541</div>
542<a id="a21b1820e69a256697d3a5603d656e833"></a>
543<h2 class="memtitle"><span class="permalink"><a href="#a21b1820e69a256697d3a5603d656e833">&#9670;&nbsp;</a></span>experimental::WorkingMemHandle</h2>
544
545<div class="memitem">
546<div class="memproto">
547<table class="mlabels">
548 <tr>
549 <td class="mlabels-left">
550 <table class="memname">
551 <tr>
552 <td class="memname">friend class <a class="el" href="classarmnn_1_1experimental_1_1_working_mem_handle.html">experimental::WorkingMemHandle</a></td>
553 </tr>
554 </table>
555 </td>
556 <td class="mlabels-right">
557<span class="mlabels"><span class="mlabel">friend</span></span> </td>
558 </tr>
559</table>
560</div><div class="memdoc">
561
562<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00936">936</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
563
564</div>
565</div>
566<a id="a519b2b784c275693e37a9b6c693342eb"></a>
567<h2 class="memtitle"><span class="permalink"><a href="#a519b2b784c275693e37a9b6c693342eb">&#9670;&nbsp;</a></span>GetGraphForTesting</h2>
568
569<div class="memitem">
570<div class="memproto">
571<table class="mlabels">
572 <tr>
573 <td class="mlabels-left">
574 <table class="memname">
575 <tr>
576 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; GetGraphForTesting </td>
577 <td>(</td>
578 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *&#160;</td>
579 <td class="paramname"><em>optNetPtr</em></td><td>)</td>
580 <td></td>
581 </tr>
582 </table>
583 </td>
584 <td class="mlabels-right">
585<span class="mlabels"><span class="mlabel">friend</span></span> </td>
586 </tr>
587</table>
588</div><div class="memdoc">
589
590<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.html#l00049">49</a> of file <a class="el" href="_test_utils_8cpp_source.html">TestUtils.cpp</a>.</p>
591<div class="fragment"><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
592<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">return</span> optNet-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div>
593<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}</div>
594</div><!-- fragment -->
595</div>
596</div>
597<a id="aa25c1acd249228c82a687d713673725a"></a>
598<h2 class="memtitle"><span class="permalink"><a href="#aa25c1acd249228c82a687d713673725a">&#9670;&nbsp;</a></span>GetModelOptionsForTesting</h2>
599
600<div class="memitem">
601<div class="memproto">
602<table class="mlabels">
603 <tr>
604 <td class="mlabels-left">
605 <table class="memname">
606 <tr>
607 <td class="memname"><a class="el" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a>&amp; GetModelOptionsForTesting </td>
608 <td>(</td>
609 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a> *&#160;</td>
610 <td class="paramname"><em>optNetPtr</em></td><td>)</td>
611 <td></td>
612 </tr>
613 </table>
614 </td>
615 <td class="mlabels-right">
616<span class="mlabels"><span class="mlabel">friend</span></span> </td>
617 </tr>
618</table>
619</div><div class="memdoc">
620
621<p class="definition">Definition at line <a class="el" href="_test_utils_8cpp_source.html#l00054">54</a> of file <a class="el" href="_test_utils_8cpp_source.html">TestUtils.cpp</a>.</p>
622<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div>
623<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> optNet-&gt;pOptimizedNetworkImpl-&gt;GetModelOptions();</div>
624<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
625</div><!-- fragment -->
626</div>
627</div>
628<a id="a848000b2be0cb1853c9f7c4fb4dc719e"></a>
629<h2 class="memtitle"><span class="permalink"><a href="#a848000b2be0cb1853c9f7c4fb4dc719e">&#9670;&nbsp;</a></span>LoadedNetwork</h2>
630
631<div class="memitem">
632<div class="memproto">
633<table class="mlabels">
634 <tr>
635 <td class="mlabels-left">
636 <table class="memname">
637 <tr>
638 <td class="memname">friend class <a class="el" href="classarmnn_1_1_loaded_network.html">LoadedNetwork</a></td>
639 </tr>
640 </table>
641 </td>
642 <td class="mlabels-right">
643<span class="mlabels"><span class="mlabel">friend</span></span> </td>
644 </tr>
645</table>
646</div><div class="memdoc">
647
648<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00933">933</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
649
650</div>
651</div>
652<a id="a4fc03669355aaf417a872947754af6bf"></a>
653<h2 class="memtitle"><span class="permalink"><a href="#a4fc03669355aaf417a872947754af6bf">&#9670;&nbsp;</a></span>Optimize <span class="overload">[1/2]</span></h2>
654
655<div class="memitem">
656<div class="memproto">
657<table class="mlabels">
658 <tr>
659 <td class="mlabels-left">
660 <table class="memname">
661 <tr>
662 <td class="memname"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
663 <td>(</td>
664 <td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
665 <td class="paramname"><em>inGraph</em>, </td>
666 </tr>
667 <tr>
668 <td class="paramkey"></td>
669 <td></td>
670 <td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
671 <td class="paramname"><em>backendPreferences</em>, </td>
672 </tr>
673 <tr>
674 <td class="paramkey"></td>
675 <td></td>
676 <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;&#160;</td>
677 <td class="paramname"><em>deviceSpec</em>, </td>
678 </tr>
679 <tr>
680 <td class="paramkey"></td>
681 <td></td>
682 <td class="paramtype">const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;&#160;</td>
683 <td class="paramname"><em>options</em>, </td>
684 </tr>
685 <tr>
686 <td class="paramkey"></td>
687 <td></td>
688 <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
689 <td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>()</code>&#160;</td>
690 </tr>
691 <tr>
692 <td></td>
693 <td>)</td>
694 <td></td><td></td>
695 </tr>
696 </table>
697 </td>
698 <td class="mlabels-right">
699<span class="mlabels"><span class="mlabel">friend</span></span> </td>
700 </tr>
701</table>
702</div><div class="memdoc">
703
704<p>Create an optimized version of the network. </p>
705<dl class="params"><dt>Parameters</dt><dd>
706 <table class="params">
707 <tr><td class="paramname">inGraph</td><td><a class="el" href="classarmnn_1_1_graph.html">Graph</a> to be optimized. </td></tr>
708 <tr><td class="paramname">backendPreferences</td><td>The choice of the backend ordered by user preferences. </td></tr>
709 <tr><td class="paramname">deviceSpec</td><td><a class="el" href="classarmnn_1_1_device_spec.html">DeviceSpec</a> object as queried from the runtime. See <a class="el" href="classarmnn_1_1_i_runtime.html#a25db7b8e6fc90f8418439ccd33aaf184">IRuntime::GetDeviceSpec()</a> </td></tr>
710 <tr><td class="paramname">messages</td><td>If there are failures or warnings a string describing same will be added to the vector </td></tr>
711 <tr><td class="paramname">options</td><td><a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a> object with optimizer configuration options </td></tr>
712 </table>
713 </dd>
714</dl>
715<dl class="section return"><dt>Returns</dt><dd>An IOptimizedNetworkPtr interface to the optimized network, throws an exception derived from <a class="el" href="classarmnn_1_1_exception.html" title="Base class for all ArmNN exceptions so that users can filter to just those.">armnn::Exception</a> if process fails. </dd></dl>
716
717<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01906">1906</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
718<div class="fragment"><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;{</div>
719<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) &lt;&lt; options.ToString();</div>
720<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; </div>
721<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; <span class="comment">// Enable profiling</span></div>
722<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div>
723<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; <a class="code" href="classarmnn_1_1_profiler_manager.html#a93857080c2523bf3395e7aa7e6024d5c">ProfilerManager::GetInstance</a>().<a class="code" href="classarmnn_1_1_profiler_manager.html#a7b1e3e5bf386004541be2b5b22443208">RegisterProfiler</a>(profiler.get());</div>
724<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; profiler-&gt;EnableProfiling(options.GetProfilingEnabled());</div>
725<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; </div>
726<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; <span class="comment">// Some backends don&#39;t play well together. Check here before continuing.</span></div>
727<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; {</div>
728<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; std::set&lt;BackendId&gt; backendSet(backendPreferences.begin(), backendPreferences.end());</div>
729<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; <span class="comment">// GpuFsa cannot co-exist with GpuAcc.</span></div>
730<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; <span class="keywordflow">if</span> (backendSet.find(<span class="stringliteral">&quot;GpuFsa&quot;</span>) != backendSet.end() &amp;&amp;</div>
731<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; backendSet.find(<span class="stringliteral">&quot;GpuAcc&quot;</span>) != backendSet.end())</div>
732<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; {</div>
733<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;The backends \&quot;GpuAcc\&quot; and \&quot;GpuFsa\&quot; cannot be specified &quot;</span></div>
734<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; <span class="stringliteral">&quot;for the same optimized network.&quot;</span>);</div>
735<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; }</div>
736<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; }</div>
737<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; </div>
738<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;Optimizer&quot;</span>);</div>
739<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; <span class="keywordflow">if</span> (backendPreferences.empty())</div>
740<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; {</div>
741<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invoked Optimize with no backends specified&quot;</span>);</div>
742<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; }</div>
743<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; </div>
744<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; <span class="keywordflow">if</span> (options.GetReduceFp32ToBf16())</div>
745<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; {</div>
746<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 optimization is currently ignored. In order to use Bf16 optimization &quot;</span></div>
747<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; <span class="stringliteral">&quot;Please use the FastMathEnabled backend option for CpuAcc or GpuAcc.&quot;</span>);</div>
748<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; }</div>
749<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; </div>
750<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16() &amp;&amp; options.GetReduceFp32ToBf16())</div>
751<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; {</div>
752<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;BFloat16 and Float16 optimization cannot be enabled at the same time.&quot;</span>);</div>
753<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; }</div>
754<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; </div>
755<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div>
756<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; inGraph.VerifyConstantLayerSetTensorInfo();</div>
757<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; </div>
758<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; std::unique_ptr&lt;Graph&gt; graph = std::make_unique&lt;Graph&gt;(inGraph);</div>
759<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; </div>
760<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div>
761<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div>
762<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <a class="code" href="structarmnn_1_1_backend_options.html">armnn::BackendOptions</a> importExport(<span class="stringliteral">&quot;Global&quot;</span>,</div>
763<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; {{<span class="stringliteral">&quot;ImportEnabled&quot;</span>, options.GetImportEnabled()},</div>
764<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; {<span class="stringliteral">&quot;ExportEnabled&quot;</span>, options.GetExportEnabled()}});</div>
765<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <a class="code" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> optimizedOptions(options.GetModelOptions());</div>
766<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; optimizedOptions.push_back(importExport);</div>
767<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; </div>
768<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="keyword">auto</span> optNet = <a class="code" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">IOptimizedNetwork</a>(std::move(graph), optimizedOptions),</div>
769<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; &amp;<a class="code" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">IOptimizedNetwork::Destroy</a>);</div>
770<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; </div>
771<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; <a class="code" href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">IOptimizedNetwork</a>* optNetObjPtr = optNet.get();</div>
772<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; </div>
773<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="comment">// Get the optimized graph</span></div>
774<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; Graph&amp; optGraph = optNetObjPtr-&gt;pOptimizedNetworkImpl-&gt;GetGraph();</div>
775<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; </div>
776<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">ShapeInferenceMethod::InferAndValidate</a>)</div>
777<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; {</div>
778<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; <span class="comment">// Infer the tensor infos for all output slots. Throws an exception on failure</span></div>
779<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; optGraph.InferTensorInfos();</div>
780<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; }</div>
781<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; </div>
782<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; <span class="keyword">using namespace </span>optimizations;</div>
783<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="comment">// Substitute Max + Min with Bounded Relu before AddBroadcastReshapeLayer optimisation,</span></div>
784<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="comment">// as Bounded ReLu needs the constants to be 1D size 1</span></div>
785<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#abc1cdfdd0c890de85bfd7eaac1292ffe">MaxMinIntoBoundedRelu</a>()));</div>
786<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; </div>
787<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="comment">// Perform BroadcastToOptimizationLayer before AddBroadcastReshapeLayer optimisation</span></div>
788<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">BroadcastToOptimizationLayer</a>()));</div>
789<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; </div>
790<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>()));</div>
791<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; </div>
792<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ShapeInferenceMethod::ValidateOnly</a>)</div>
793<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; {</div>
794<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <span class="comment">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div>
795<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; optGraph.InferTensorInfos();</div>
796<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; }</div>
797<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; </div>
798<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <span class="comment">// Group Constant Layer optimizations together where possible.</span></div>
799<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <span class="comment">// This is important as:</span></div>
800<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div>
801<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div>
802<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div>
803<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#ad668074369437a111649f51296ff8959">FusePermuteIntoConstLayer</a>(),</div>
804<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div>
805<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <span class="comment">// Perform optimisation passes</span></div>
806<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a64ddffb38fbe5b78ec92b753cd4bd0ba">SquashEqualPermuteSiblings</a>(),</div>
807<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div>
808<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div>
809<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div>
810<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div>
811<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div>
812<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div>
813<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div>
814<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div>
815<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div>
816<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div>
817<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div>
818<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div>
819<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">BroadcastToOptimizationLayer</a>(),</div>
820<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div>
821<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div>
822<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div>
823<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div>
824<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div>
825<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div>
826<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; </div>
827<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; <span class="comment">// Initialize backend settings</span></div>
828<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; BackendSettings backendSettings(backendPreferences, deviceSpec);</div>
829<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div>
830<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div>
831<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; {</div>
832<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; std::stringstream failureMsg;</div>
833<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; failureMsg &lt;&lt; <span class="stringliteral">&quot;None of the preferred backends &quot;</span> &lt;&lt; backendPreferences</div>
834<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; &lt;&lt; <span class="stringliteral">&quot; are supported. Current platform provides &quot;</span> &lt;&lt; backendSettings.m_SupportedBackends;</div>
835<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), messages);</div>
836<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div>
837<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; }</div>
838<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; </div>
839<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div>
840<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div>
841<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <a class="code" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends = <a class="code" href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a>(tensorHandleFactoryRegistry, backendSettings);</div>
842<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; </div>
843<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16())</div>
844<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; {</div>
845<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <span class="keywordtype">bool</span> hasFp16 = <a class="code" href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">CheckFp16Support</a>(backends, availablePreferredBackends);</div>
846<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; <span class="keywordflow">if</span> (hasFp16)</div>
847<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; {</div>
848<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;Optimizer_ReduceFp32ToFp16&quot;</span>);</div>
849<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a86d19da62b6cfed3928f6fe7026f22fa">Fp32NetworkToFp16Converter</a>()));</div>
850<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a226cef3d775179e25ee35d231f4e8fae">ConvertConstantsFloatToHalf</a>()));</div>
851<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; }</div>
852<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; }</div>
853<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; </div>
854<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; <span class="comment">// Assign an available backend to each layer</span></div>
855<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> firstLayer = optGraph.begin();</div>
856<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> lastLayer = optGraph.end();</div>
857<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.html#a839ad76f1f52a70b540805b231f05d9c">AssignBackends</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div>
858<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; backendSettings,</div>
859<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; firstLayer,</div>
860<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; lastLayer,</div>
861<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; messages);</div>
862<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div>
863<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; {</div>
864<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; <span class="comment">// Failed to assign a backend to each layer</span></div>
865<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Failed to assign a backend to each layer&quot;</span>);</div>
866<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; }</div>
867<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; </div>
868<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a1a9d718b48612b5817a3c369f9fd71ee">OptimizeInverseConversionsFp16</a>(),</div>
869<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; <a class="code" href="namespacearmnn_1_1optimizations.html#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div>
870<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; </div>
871<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; <span class="comment">// Apply the backend-specific optimizations</span></div>
872<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a>(optNetObjPtr-&gt;pOptimizedNetworkImpl.get(),</div>
873<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; backendSettings,</div>
874<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; backends,</div>
875<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; options.GetModelOptions(),</div>
876<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; messages);</div>
877<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div>
878<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; {</div>
879<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div>
880<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Failed to apply the backend-specific optimizations&quot;</span>);</div>
881<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; }</div>
882<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; </div>
883<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; <span class="comment">// Convert constants</span></div>
884<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; {</div>
885<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;Optimizer_ConvertConstants&quot;</span>);</div>
886<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a226cef3d775179e25ee35d231f4e8fae">ConvertConstantsFloatToHalf</a>()));</div>
887<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a06cac66872538895dd6b59cdf39173d2">ConvertConstantsHalfToFloat</a>()));</div>
888<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; }</div>
889<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; </div>
890<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div>
891<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="comment">// If the debug flag is set, then insert a DebugLayer after each layer</span></div>
892<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <span class="comment">// Doing this after applying the backend optimizations as they might have changed some layers</span></div>
893<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <span class="keywordflow">if</span> (options.GetDebugEnabled() &amp;&amp; !options.GetDebugToFileEnabled())</div>
894<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; {</div>
895<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#aa76c76565125ad77092403176d74fd85">InsertDebugLayer</a>()));</div>
896<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; }</div>
897<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (options.GetDebugToFileEnabled())</div>
898<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; {</div>
899<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="comment">// Setup the output file path</span></div>
900<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="keywordflow">try</span></div>
901<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; {</div>
902<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;<span class="preprocessor">#if !defined(ARMNN_DISABLE_FILESYSTEM)</span></div>
903<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.html#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">&quot;/ArmNNIntermediateLayerOutputs&quot;</span>);</div>
904<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Intermediate tensors will be written to: &quot;</span> &lt;&lt; result;</div>
905<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;<span class="preprocessor">#endif</span></div>
906<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; <a class="code" href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">Optimizer::Pass</a>(optGraph, <a class="code" href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.html#a9c0a3a9a388a01bc21e20a16e70055f0">InsertDebugToFileLayer</a>()));</div>
907<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; }</div>
908<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.html">armnn::RuntimeException</a>&amp; e)</div>
909<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; {</div>
910<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; <span class="comment">// If we cannot create the output directory then we&#39;ll issue a warning and continue.</span></div>
911<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) &lt;&lt; <span class="stringliteral">&quot;Unable to print intermediate layer outputs : &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.html#abf843cbb29dec939d0731e491bab6f70">what</a>();</div>
912<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; }</div>
913<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; }</div>
914<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; </div>
915<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div>
916<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; OptimizationResult strategyResult = <a class="code" href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">SelectTensorHandleStrategy</a>(optGraph,</div>
917<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; backends,</div>
918<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; tensorHandleFactoryRegistry,</div>
919<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; options.GetImportEnabled(),</div>
920<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; options.GetExportEnabled(),</div>
921<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; messages);</div>
922<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; </div>
923<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; <span class="keywordflow">if</span> (strategyResult.m_Error)</div>
924<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; {</div>
925<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; <span class="comment">// Failed to apply the backend-specific optimizations</span></div>
926<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &amp;<a class="code" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">IOptimizedNetwork::Destroy</a>);</div>
927<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; }</div>
928<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; </div>
929<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="comment">// Based on the tensor handle strategy determined above, insert copy layers where required.</span></div>
930<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; {</div>
931<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;Optimizer_AddCompatibilityLayers&quot;</span>);</div>
932<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div>
933<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; }</div>
934<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; </div>
935<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; <span class="keywordflow">return</span> optNet;</div>
936<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;}</div>
937</div><!-- fragment -->
938</div>
939</div>
940<a id="ad6454b9a2fdc8862f25bcfeb36433eb7"></a>
941<h2 class="memtitle"><span class="permalink"><a href="#ad6454b9a2fdc8862f25bcfeb36433eb7">&#9670;&nbsp;</a></span>Optimize <span class="overload">[2/2]</span></h2>
942
943<div class="memitem">
944<div class="memproto">
945<table class="mlabels">
946 <tr>
947 <td class="mlabels-left">
948 <table class="memname">
949 <tr>
950 <td class="memname"><a class="el" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> Optimize </td>
951 <td>(</td>
952 <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_network.html">INetwork</a> &amp;&#160;</td>
953 <td class="paramname"><em>inNetwork</em>, </td>
954 </tr>
955 <tr>
956 <td class="paramkey"></td>
957 <td></td>
958 <td class="paramtype">const std::vector&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a> &gt; &amp;&#160;</td>
959 <td class="paramname"><em>backendPreferences</em>, </td>
960 </tr>
961 <tr>
962 <td class="paramkey"></td>
963 <td></td>
964 <td class="paramtype">const <a class="el" href="classarmnn_1_1_i_device_spec.html">IDeviceSpec</a> &amp;&#160;</td>
965 <td class="paramname"><em>deviceSpec</em>, </td>
966 </tr>
967 <tr>
968 <td class="paramkey"></td>
969 <td></td>
970 <td class="paramtype">const <a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a> &amp;&#160;</td>
971 <td class="paramname"><em>options</em> = <code><a class="el" href="classarmnn_1_1_optimizer_options_opaque.html">OptimizerOptionsOpaque</a>()</code>, </td>
972 </tr>
973 <tr>
974 <td class="paramkey"></td>
975 <td></td>
976 <td class="paramtype"><a class="el" href="classarmnn_1_1_optional.html">Optional</a>&lt; std::vector&lt; std::string &gt; &amp; &gt;&#160;</td>
977 <td class="paramname"><em>messages</em> = <code><a class="el" href="structarmnn_1_1_empty_optional.html">EmptyOptional</a>()</code>&#160;</td>
978 </tr>
979 <tr>
980 <td></td>
981 <td>)</td>
982 <td></td><td></td>
983 </tr>
984 </table>
985 </td>
986 <td class="mlabels-right">
987<span class="mlabels"><span class="mlabel">friend</span></span> </td>
988 </tr>
989</table>
990</div><div class="memdoc">
991
992<p>Create an optimized version of the network. </p>
993<dl class="params"><dt>Parameters</dt><dd>
994 <table class="params">
995 <tr><td class="paramname">network</td><td><a class="el" href="classarmnn_1_1_i_network.html" title="Main network class which provides the interface for building up a neural network.">INetwork</a> description of the network to be optimized. </td></tr>
996 <tr><td class="paramname">backendPreferences</td><td>The choice of the backend ordered by user preferences. </td></tr>
997 <tr><td class="paramname">deviceSpec</td><td><a class="el" href="classarmnn_1_1_device_spec.html">DeviceSpec</a> object as queried from the runtime. See <a class="el" href="classarmnn_1_1_i_runtime.html#a25db7b8e6fc90f8418439ccd33aaf184">IRuntime::GetDeviceSpec()</a> </td></tr>
998 <tr><td class="paramname">messages</td><td>If there are failures or warnings a string describing same will be added to the vector </td></tr>
999 <tr><td class="paramname">options</td><td><a class="el" href="structarmnn_1_1_optimizer_options.html">OptimizerOptions</a> object with optimizer configuration options </td></tr>
1000 </table>
1001 </dd>
1002</dl>
1003<dl class="section return"><dt>Returns</dt><dd>An IOptimizedNetworkPtr interface to the optimized network, throws an exception derived from <a class="el" href="classarmnn_1_1_exception.html" title="Base class for all ArmNN exceptions so that users can filter to just those.">armnn::Exception</a> if process fails. </dd></dl>
1004
1005<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l02145">2145</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p>
1006<div class="fragment"><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;{</div>
1007<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#ad6454b9a2fdc8862f25bcfeb36433eb7">Optimize</a>(inNetwork.pNetworkImpl-&gt;GetGraph(),</div>
1008<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; backendPreferences,</div>
1009<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; deviceSpec,</div>
1010<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; options,</div>
1011<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; messages);</div>
1012<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;}</div>
1013</div><!-- fragment -->
1014</div>
1015</div>
1016<h2 class="groupheader">Member Data Documentation</h2>
1017<a id="a374d52340ec8dc02a819acc20fb5aa92"></a>
1018<h2 class="memtitle"><span class="permalink"><a href="#a374d52340ec8dc02a819acc20fb5aa92">&#9670;&nbsp;</a></span>pOptimizedNetworkImpl</h2>
1019
1020<div class="memitem">
1021<div class="memproto">
1022<table class="mlabels">
1023 <tr>
1024 <td class="mlabels-left">
1025 <table class="memname">
1026 <tr>
1027 <td class="memname">std::unique_ptr&lt;<a class="el" href="classarmnn_1_1_optimized_network_impl.html">OptimizedNetworkImpl</a>&gt; pOptimizedNetworkImpl</td>
1028 </tr>
1029 </table>
1030 </td>
1031 <td class="mlabels-right">
1032<span class="mlabels"><span class="mlabel">protected</span></span> </td>
1033 </tr>
1034</table>
1035</div><div class="memdoc">
1036
1037<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00953">953</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p>
1038
1039<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l03135">IOptimizedNetwork::ExecuteStrategy()</a>, <a class="el" href="_test_utils_8cpp_source.html#l00049">armnn::GetGraphForTesting()</a>, <a class="el" href="_network_8cpp_source.html#l00726">IOptimizedNetwork::GetGuid()</a>, <a class="el" href="_test_utils_8cpp_source.html#l00054">armnn::GetModelOptionsForTesting()</a>, <a class="el" href="_network_8cpp_source.html#l00731">IOptimizedNetwork::GetNumInputs()</a>, <a class="el" href="_network_8cpp_source.html#l00736">IOptimizedNetwork::GetNumOutputs()</a>, <a class="el" href="_network_8cpp_source.html#l00721">IOptimizedNetwork::GetProfiler()</a>, <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>, <a class="el" href="_network_8cpp_source.html#l00711">IOptimizedNetwork::PrintGraph()</a>, and <a class="el" href="_network_8cpp_source.html#l00716">IOptimizedNetwork::SerializeToDot()</a>.</p>
1040
1041</div>
1042</div>
1043<hr/>The documentation for this class was generated from the following files:<ul>
1044<li>include/armnn/<a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a></li>
1045<li>src/armnn/<a class="el" href="_network_8cpp_source.html">Network.cpp</a></li>
1046</ul>
1047</div><!-- contents -->
1048</div><!-- doc-content -->
1049<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a9c0a3a9a388a01bc21e20a16e70055f0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a9c0a3a9a388a01bc21e20a16e70055f0">armnn::optimizations::InsertDebugToFileLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugToFileImpl &gt; InsertDebugToFileLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.html#l00054">AddDebug.hpp:54</a></div></div>
1050<div class="ttc" id="anamespacearmnn_html_a674efcf6cbdb9e831d653ff0e821fb38"><div class="ttname"><a href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IOptimizedNetwork, void(*)(IOptimizedNetwork *network)&gt; IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00340">INetwork.hpp:340</a></div></div>
1051<div class="ttc" id="anamespacearmnn_html_ac39f2b15d34d3e2fc74d586fc3e26231"><div class="ttname"><a href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">armnn::ApplyBackendOptimizations</a></div><div class="ttdeci">OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, BackendsMap &amp;backends, const ModelOptions &amp;modelOptions, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01320">Network.cpp:1320</a></div></div>
1052<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div><div class="ttdeci">@ Undefined</div></div>
1053<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aa76c76565125ad77092403176d74fd85"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aa76c76565125ad77092403176d74fd85">armnn::optimizations::InsertDebugLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddDebugImpl &gt; InsertDebugLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.html#l00053">AddDebug.hpp:53</a></div></div>
1054<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aa52c06792e18dc13030e82476f706f9e"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aa52c06792e18dc13030e82476f706f9e">armnn::optimizations::FuseBatchNormIntoConvolution2DFloat32</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; Convolution2dLayer, armnn::DataType::Float32 &gt; &gt; FuseBatchNormIntoConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00222">FuseBatchNorm.hpp:222</a></div></div>
1055<div class="ttc" id="aclassarmnn_1_1_profiler_manager_html_a7b1e3e5bf386004541be2b5b22443208"><div class="ttname"><a href="classarmnn_1_1_profiler_manager.html#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.html#l00609">Profiling.cpp:609</a></div></div>
1056<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aa31127c77d2117f78d43ca2958dcae19"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aa31127c77d2117f78d43ca2958dcae19">armnn::optimizations::OptimizeInversePermutes</a></div><div class="ttdeci">OptimizeForConnection&lt; PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl&lt; PermuteLayer &gt; &gt; OptimizeInversePermutes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.html#l00043">OptimizeInversePermutes.hpp:43</a></div></div>
1057<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a98f54d4391347d517c7a7869e7707203"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a98f54d4391347d517c7a7869e7707203">armnn::optimizations::TransposeAndBatchToSpaceAsDepthToSpace</a></div><div class="ttdeci">OptimizeForConnection&lt; TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl&lt; TransposeLayer &gt; &gt; TransposeAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.html#l00104">PermuteAndBatchToSpaceAsDepthToSpace.hpp:104</a></div></div>
1058<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a279d0a7c56966cea334303d48a874964"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a279d0a7c56966cea334303d48a874964">armnn::optimizations::FoldPadIntoPooling2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl &gt; FoldPadIntoPooling2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00283">FoldPadIntoLayer2d.hpp:283</a></div></div>
1059<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a86d19da62b6cfed3928f6fe7026f22fa"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a86d19da62b6cfed3928f6fe7026f22fa">armnn::optimizations::Fp32NetworkToFp16Converter</a></div><div class="ttdeci">OptimizeForType&lt; Layer, ConvertFp32NetworkToFp16Impl &gt; Fp32NetworkToFp16Converter</div><div class="ttdef"><b>Definition:</b> <a href="_convert_fp32_network_to_fp16_8hpp_source.html#l00087">ConvertFp32NetworkToFp16.hpp:87</a></div></div>
1060<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a8b394ff60ed829a91f07deac476f3db2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a8b394ff60ed829a91f07deac476f3db2">armnn::optimizations::FoldPadIntoConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl &gt; FoldPadIntoConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00277">FoldPadIntoLayer2d.hpp:277</a></div></div>
1061<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a4dfbdc8cc90b67e74eccd146d977ff66"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a4dfbdc8cc90b67e74eccd146d977ff66">armnn::optimizations::ConvertConstDequantisationLayersToConstLayers</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl &gt; ConvertConstDequantisationLayersToConstLayers</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_dequantisation_layers_to_const_layers_8hpp_source.html#l00173">ConvertConstDequantisationLayersToConstLayers.hpp:173</a></div></div>
1062<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a5918588fa316cf4c23f1cf02c81ee706"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a5918588fa316cf4c23f1cf02c81ee706">armnn::optimizations::MoveTransposeUp</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, TransposeLayer, MoveTransposeUpImpl &gt; MoveTransposeUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_transpose_up_8hpp_source.html#l00083">MoveTransposeUp.hpp:83</a></div></div>
1063<div class="ttc" id="anamespacearmnn_html_a839ad76f1f52a70b540805b231f05d9c"><div class="ttname"><a href="namespacearmnn.html#a839ad76f1f52a70b540805b231f05d9c">armnn::AssignBackends</a></div><div class="ttdeci">OptimizationResult AssignBackends(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &amp;backendSettings, Graph::Iterator &amp;firstLayer, Graph::Iterator &amp;lastLayer, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01179">Network.cpp:1179</a></div></div>
1064<div class="ttc" id="anamespacearmnn_1_1optimizations_html_abe2f78445ce58bc35eff698bf77f42d0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">armnn::optimizations::BroadcastToOptimizationLayer</a></div><div class="ttdeci">OptimizeForType&lt; BroadcastToLayer, DeleteBroadcastToImpl &gt; BroadcastToOptimizationLayer</div><div class="ttdef"><b>Definition:</b> <a href="_delete_broadcast_to_8hpp_source.html#l00038">DeleteBroadcastTo.hpp:38</a></div></div>
1065<div class="ttc" id="aclassarmnn_1_1_graph_html_acc25db0641c1c22faf95af3bb49080c9"><div class="ttname"><a href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">armnn::Graph::Iterator</a></div><div class="ttdeci">LayerList::const_iterator Iterator</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00053">Graph.hpp:53</a></div></div>
1066<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ae0b1382e3af141896a46531c50e8863f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ae0b1382e3af141896a46531c50e8863f">armnn::optimizations::PermuteAsReshape</a></div><div class="ttdeci">OptimizeForType&lt; PermuteLayer, PermuteAsReshapeImpl &gt; PermuteAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_permute_as_reshape_8hpp_source.html#l00066">PermuteAsReshape.hpp:66</a></div></div>
1067<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a17d1279f5f8e3b92c328b1ed3b6fd549"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a17d1279f5f8e3b92c328b1ed3b6fd549">armnn::optimizations::PermuteAndBatchToSpaceAsDepthToSpace</a></div><div class="ttdeci">OptimizeForConnection&lt; PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl&lt; PermuteLayer &gt; &gt; PermuteAndBatchToSpaceAsDepthToSpace</div><div class="ttdef"><b>Definition:</b> <a href="_permute_and_batch_to_space_as_depth_to_space_8hpp_source.html#l00102">PermuteAndBatchToSpaceAsDepthToSpace.hpp:102</a></div></div>
1068<div class="ttc" id="anamespacearmnn_html_acbf7c9a630f03ece800f807d946239ab"><div class="ttname"><a href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">armnn::SelectTensorHandleStrategy</a></div><div class="ttdeci">OptimizationResult SelectTensorHandleStrategy(Graph &amp;optGraph, BackendsMap &amp;backends, TensorHandleFactoryRegistry &amp;registry, bool importEnabled, bool exportEnabled, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01821">Network.cpp:1821</a></div></div>
1069<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aafc70d5af99400ff5ea7991825658b2f"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aafc70d5af99400ff5ea7991825658b2f">armnn::optimizations::MovePermuteUp</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, PermuteLayer, MovePermuteUpImpl &gt; MovePermuteUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_permute_up_8hpp_source.html#l00083">MovePermuteUp.hpp:83</a></div></div>
1070<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a1a9d718b48612b5817a3c369f9fd71ee"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a1a9d718b48612b5817a3c369f9fd71ee">armnn::optimizations::OptimizeInverseConversionsFp16</a></div><div class="ttdeci">OptimizeForConnection&lt; ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl &gt; OptimizeInverseConversionsFp16</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.html#l00042">OptimizeInverseConversions.hpp:42</a></div></div>
1071<div class="ttc" id="aclassarmnn_1_1_exception_html_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.html#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.html#l00032">Exceptions.cpp:32</a></div></div>
1072<div class="ttc" id="a_logging_8hpp_html_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.html#l00212">Logging.hpp:212</a></div></div>
1073<div class="ttc" id="anamespacearmnn_html_a1ec6b4c20ed294a96cf94c33c24caaf5"><div class="ttname"><a href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">armnn::CreateSupportedBackends</a></div><div class="ttdeci">BackendsMap CreateSupportedBackends(TensorHandleFactoryRegistry &amp;handleFactoryRegistry, BackendSettings &amp;backendSettings)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01302">Network.cpp:1302</a></div></div>
1074<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a226cef3d775179e25ee35d231f4e8fae"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a226cef3d775179e25ee35d231f4e8fae">armnn::optimizations::ConvertConstantsFloatToHalf</a></div><div class="ttdeci">ConvertConstants&lt; Float32ToFloat16, IsFloat16Layer &gt; ConvertConstantsFloatToHalf</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.html#l00099">ConvertConstants.hpp:99</a></div></div>
1075<div class="ttc" id="a_profiling_8hpp_html_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.html#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.html#l00220">Profiling.hpp:220</a></div></div>
1076<div class="ttc" id="anamespacearmnn_html_a3cf1cee98e0ed8b54263ec7279f6ec69"><div class="ttname"><a href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">armnn::ReportError</a></div><div class="ttdeci">void ReportError(const std::string &amp;errorMessage, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00762">Network.cpp:762</a></div></div>
1077<div class="ttc" id="anamespacearmnn_html_aa52ce4f1fab044ad0c73f9613e2ef6ce"><div class="ttname"><a href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">armnn::CheckFp16Support</a></div><div class="ttdeci">bool CheckFp16Support(BackendsMap &amp;backends, const std::vector&lt; BackendId &gt; &amp;availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01026">Network.cpp:1026</a></div></div>
1078<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ad668074369437a111649f51296ff8959"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ad668074369437a111649f51296ff8959">armnn::optimizations::FusePermuteIntoConstLayer</a></div><div class="ttdeci">OptimizeForConnection&lt; ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers &gt; FusePermuteIntoConstLayer</div><div class="ttdef"><b>Definition:</b> <a href="_convert_const_permute_layers_to_const_layers_8hpp_source.html#l00124">ConvertConstPermuteLayersToConstLayers.hpp:124</a></div></div>
1079<div class="ttc" id="anamespacearmnn_html_aa7427025a851113a492de0b68b23d22a"><div class="ttname"><a href="namespacearmnn.html#aa7427025a851113a492de0b68b23d22a">armnn::MakeOptimizations</a></div><div class="ttdeci">Optimizer::Optimizations MakeOptimizations(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.html#l00043">Optimizer.hpp:43</a></div></div>
1080<div class="ttc" id="aclassarmnn_1_1_runtime_exception_html"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.html">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00120">Exceptions.hpp:120</a></div></div>
1081<div class="ttc" id="aclassarmnn_1_1_i_optimized_network_html_ad6454b9a2fdc8862f25bcfeb36433eb7"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.html#ad6454b9a2fdc8862f25bcfeb36433eb7">armnn::IOptimizedNetwork::Optimize</a></div><div class="ttdeci">friend IOptimizedNetworkPtr Optimize(const INetwork &amp;inNetwork, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptionsOpaque &amp;options, Optional&lt; std::vector&lt; std::string &gt; &amp; &gt; messages)</div><div class="ttdoc">Create an optimized version of the network.</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l02145">Network.cpp:2145</a></div></div>
1082<div class="ttc" id="anamespacearmnn_html_adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"><div class="ttname"><a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ShapeInferenceMethod::ValidateOnly</a></div><div class="ttdeci">@ ValidateOnly</div><div class="ttdoc">Validate all output shapes.</div></div>
1083<div class="ttc" id="anamespacearmnn_html_adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"><div class="ttname"><a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">armnn::ShapeInferenceMethod::InferAndValidate</a></div><div class="ttdeci">@ InferAndValidate</div><div class="ttdoc">Infer missing output shapes and validate all output shapes.</div></div>
1084<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ae1509d340bc981b11101c3316ee8afd6"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ae1509d340bc981b11101c3316ee8afd6">armnn::optimizations::OptimizeInverseConversionsFp32</a></div><div class="ttdeci">OptimizeForConnection&lt; ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl &gt; OptimizeInverseConversionsFp32</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.html#l00044">OptimizeInverseConversions.hpp:44</a></div></div>
1085<div class="ttc" id="astructarmnn_1_1_backend_options_html"><div class="ttname"><a href="structarmnn_1_1_backend_options.html">armnn::BackendOptions</a></div><div class="ttdoc">Struct for the users to pass backend specific options.</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.html#l00022">BackendOptions.hpp:22</a></div></div>
1086<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ad1aaeee71293f34d9f65d2dd2792830d"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ad1aaeee71293f34d9f65d2dd2792830d">armnn::optimizations::TransposeAsReshape</a></div><div class="ttdeci">OptimizeForType&lt; TransposeLayer, TransposeAsReshapeImpl &gt; TransposeAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_transpose_as_reshape_8hpp_source.html#l00077">TransposeAsReshape.hpp:77</a></div></div>
1087<div class="ttc" id="aclassarmnn_1_1_profiler_manager_html_a93857080c2523bf3395e7aa7e6024d5c"><div class="ttname"><a href="classarmnn_1_1_profiler_manager.html#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.html#l00602">Profiling.cpp:602</a></div></div>
1088<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a8a81178ddcebb93ec0c35b6e6284273c"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a8a81178ddcebb93ec0c35b6e6284273c">armnn::optimizations::FuseBatchNormIntoConvolution2DFloat16</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; Convolution2dLayer, armnn::DataType::Float16 &gt; &gt; FuseBatchNormIntoConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00227">FuseBatchNorm.hpp:227</a></div></div>
1089<div class="ttc" id="aclassarmnn_1_1_i_optimized_network_html_a58ee539cf95c1e99fe4f54ef6e8bbd05"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">armnn::IOptimizedNetwork::Destroy</a></div><div class="ttdeci">static void Destroy(IOptimizedNetwork *network)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00706">Network.cpp:706</a></div></div>
1090<div class="ttc" id="anamespacearmnn_1_1optimizations_html_ab40bb51feca46649eb9d00522bfe51f6"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#ab40bb51feca46649eb9d00522bfe51f6">armnn::optimizations::FuseBatchNormIntoDepthwiseConvolution2DFloat16</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; DepthwiseConvolution2dLayer, armnn::DataType::Float16 &gt; &gt; FuseBatchNormIntoDepthwiseConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00237">FuseBatchNorm.hpp:237</a></div></div>
1091<div class="ttc" id="anamespacearmnn_html_a9173495a61a0092b5f38b855f02c3585"><div class="ttname"><a href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">armnn::BackendsMap</a></div><div class="ttdeci">std::map&lt; BackendId, std::unique_ptr&lt; class IBackendInternal &gt; &gt; BackendsMap</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.html#l00285">Network.hpp:285</a></div></div>
1092<div class="ttc" id="anamespacearmnn_1_1optimizations_html_aba7b0ca6192b8b58ecd517a82b4f378e"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#aba7b0ca6192b8b58ecd517a82b4f378e">armnn::optimizations::SquashEqualTransposeSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, TransposeLayer, SquashEqualSiblingsImpl&lt; TransposeLayer &gt; &gt; SquashEqualTransposeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00069">SquashEqualSiblings.hpp:69</a></div></div>
1093<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a06cac66872538895dd6b59cdf39173d2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a06cac66872538895dd6b59cdf39173d2">armnn::optimizations::ConvertConstantsHalfToFloat</a></div><div class="ttdeci">ConvertConstants&lt; Float16ToFloat32, IsFloat32Layer &gt; ConvertConstantsHalfToFloat</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.html#l00098">ConvertConstants.hpp:98</a></div></div>
1094<div class="ttc" id="aclassarmnn_1_1_i_optimized_network_html_a32eecbed1d4cd2602204a2ab3f5f249e"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">armnn::IOptimizedNetwork::IOptimizedNetwork</a></div><div class="ttdeci">IOptimizedNetwork(const IOptimizedNetwork &amp;other, const ModelOptions &amp;modelOptions)</div><div class="ttdoc">Creates a copy of the IOptimizedNetwork.</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00692">Network.cpp:692</a></div></div>
1095<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a64ddffb38fbe5b78ec92b753cd4bd0ba"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a64ddffb38fbe5b78ec92b753cd4bd0ba">armnn::optimizations::SquashEqualPermuteSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, PermuteLayer, SquashEqualSiblingsImpl&lt; PermuteLayer &gt; &gt; SquashEqualPermuteSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00067">SquashEqualSiblings.hpp:67</a></div></div>
1096<div class="ttc" id="aclassarmnn_1_1_optimizer_html_a1f48ba622b76ea04d15c9b62f642bf08"><div class="ttname"><a href="classarmnn_1_1_optimizer.html#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a></div><div class="ttdeci">static void Pass(Graph &amp;graph, const Optimizations &amp;optimizations)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8cpp_source.html#l00016">Optimizer.cpp:16</a></div></div>
1097<div class="ttc" id="anamespacearmnn_html_a5b6893cda5b69359a4244c06054da18f"><div class="ttname"><a href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">armnn::ModelOptions</a></div><div class="ttdeci">std::vector&lt; BackendOptions &gt; ModelOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.html#l00018">BackendOptions.hpp:18</a></div></div>
1098<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a227e9ab5e488aa90ba462790ba0e5aec"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a227e9ab5e488aa90ba462790ba0e5aec">armnn::optimizations::FoldPadIntoDepthwiseConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl &gt; FoldPadIntoDepthwiseConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00281">FoldPadIntoLayer2d.hpp:281</a></div></div>
1099<div class="ttc" id="anamespacearmnn_utils_1_1_filesystem_html_a0477efb2c6f5b41fbfe937fef6db312d"><div class="ttname"><a href="namespacearmnn_utils_1_1_filesystem.html#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a></div><div class="ttdeci">std::string CreateDirectory(std::string sPath)</div><div class="ttdoc">Returns full path to temporary folder.</div><div class="ttdef"><b>Definition:</b> <a href="_filesystem_8cpp_source.html#l00047">Filesystem.cpp:47</a></div></div>
1100<div class="ttc" id="anamespacearmnn_1_1optimizations_html_abc1cdfdd0c890de85bfd7eaac1292ffe"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#abc1cdfdd0c890de85bfd7eaac1292ffe">armnn::optimizations::MaxMinIntoBoundedRelu</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; ElementwiseBinaryLayer, ElementwiseBinaryLayer, MaxMinIntoBoundedReluImpl &gt; MaxMinIntoBoundedRelu</div><div class="ttdef"><b>Definition:</b> <a href="_max_min_into_bounded_relu_8hpp_source.html#l00134">MaxMinIntoBoundedRelu.hpp:134</a></div></div>
1101<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a29f8d97b2d74f99c88298881cd1d825b"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a29f8d97b2d74f99c88298881cd1d825b">armnn::optimizations::SquashEqualReshapeSiblings</a></div><div class="ttdeci">OptimizeForConnection&lt; Layer, ReshapeLayer, SquashEqualSiblingsImpl&lt; ReshapeLayer &gt; &gt; SquashEqualReshapeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00070">SquashEqualSiblings.hpp:70</a></div></div>
1102<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a2f9d1a13be2ac1c4213729a0ef181fc0"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a2f9d1a13be2ac1c4213729a0ef181fc0">armnn::optimizations::OptimizeInverseTransposes</a></div><div class="ttdeci">OptimizeForConnection&lt; TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl&lt; TransposeLayer &gt; &gt; OptimizeInverseTransposes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.html#l00045">OptimizeInversePermutes.hpp:45</a></div></div>
1103<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.html#l00094">AddBroadcastReshapeLayer.hpp:94</a></div></div>
1104<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a56e54a818166a2f4b2c1a7f76a3629ff"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a56e54a818166a2f4b2c1a7f76a3629ff">armnn::optimizations::FuseBatchNormIntoDepthwiseConvolution2DFloat32</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm&lt; DepthwiseConvolution2dLayer, armnn::DataType::Float32 &gt; &gt; FuseBatchNormIntoDepthwiseConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00232">FuseBatchNorm.hpp:232</a></div></div>
1105<div class="ttc" id="anamespacearmnn_1_1optimizations_html_a8341ca3512ebafb19d60eba44d40d9e4"><div class="ttname"><a href="namespacearmnn_1_1optimizations.html#a8341ca3512ebafb19d60eba44d40d9e4">armnn::optimizations::OptimizeConsecutiveReshapes</a></div><div class="ttdeci">OptimizeForConnection&lt; ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl &gt; OptimizeConsecutiveReshapes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_consecutive_reshapes_8hpp_source.html#l00061">OptimizeConsecutiveReshapes.hpp:61</a></div></div>
1106<div class="ttc" id="aclassarmnn_1_1_i_optimized_network_html_a374d52340ec8dc02a819acc20fb5aa92"><div class="ttname"><a href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">armnn::IOptimizedNetwork::pOptimizedNetworkImpl</a></div><div class="ttdeci">std::unique_ptr&lt; OptimizedNetworkImpl &gt; pOptimizedNetworkImpl</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00953">INetwork.hpp:953</a></div></div>
1107<!-- start footer part -->
1108<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
1109 <ul>
1110 <li class="navelem"><a class="el" href="namespacearmnn.html">armnn</a></li><li class="navelem"><a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a></li>
1111 <li class="footer">Generated on Thu May 16 2024 09:31:56 for Arm NN by
1112 <a href="http://www.doxygen.org/index.html">
1113 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
1114 </ul>
1115</div>
1116</body>
1117</html>