diff options
Diffstat (limited to 'latest/classarmnn_1_1_i_optimized_network.html')
-rw-r--r-- | latest/classarmnn_1_1_i_optimized_network.html | 584 |
1 files changed, 293 insertions, 291 deletions
diff --git a/latest/classarmnn_1_1_i_optimized_network.html b/latest/classarmnn_1_1_i_optimized_network.html index 235c8313a6..8fc23efc13 100644 --- a/latest/classarmnn_1_1_i_optimized_network.html +++ b/latest/classarmnn_1_1_i_optimized_network.html @@ -36,7 +36,7 @@ <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/> <td id="projectalign" style="padding-left: 0.9em;"> <div id="projectname"> -  <span id="projectnumber">24.02</span> +  <span id="projectnumber">24.05</span> </div> </td> </tr> @@ -168,7 +168,7 @@ Friends</h2></td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"> -<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00901">901</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p> +<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> </div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a id="a32eecbed1d4cd2602204a2ab3f5f249e"></a> <h2 class="memtitle"><span class="permalink"><a href="#a32eecbed1d4cd2602204a2ab3f5f249e">◆ </a></span>IOptimizedNetwork() <span class="overload">[1/4]</span></h2> @@ -199,8 +199,8 @@ Friends</h2></td></tr> <p>Creates a copy of the <a class="el" href="classarmnn_1_1_i_optimized_network.html">IOptimizedNetwork</a>. </p> <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> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00686">686</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  : <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> +<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> +<div class="fragment"><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  : <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> </div><!-- fragment --> </div> </div> @@ -220,8 +220,8 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00689">689</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(<span class="keyword">new</span> OptimizedNetworkImpl(std::move(graph))) {}</div> +<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> +<div class="fragment"><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(<span class="keyword">new</span> OptimizedNetworkImpl(std::move(graph))) {}</div> </div><!-- fragment --> </div> </div> @@ -241,8 +241,8 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<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> -<div class="fragment"><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(std::move(impl)) {}</div> +<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> +<div class="fragment"><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  : <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>(std::move(impl)) {}</div> </div><!-- fragment --> </div> </div> @@ -305,8 +305,8 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<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> -<div class="fragment"><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  : <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> +<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> +<div class="fragment"><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  : <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> </div><!-- fragment --> </div> </div> @@ -335,13 +335,11 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00700">700</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> {</div> -<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keyword">delete</span> network;</div> -<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> {</div> +<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keyword">delete</span> network;</div> +<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> }</div> </div><!-- fragment --> -<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>.</p> - </div> </div> <a id="a72032c65bf8b8acf09b564b7d80078c5"></a> @@ -360,12 +358,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l03117">3117</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span> {</div> -<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>  <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->ExecuteStrategy(strategy);</div> -<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span> {</div> +<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>  <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->ExecuteStrategy(strategy);</div> +<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> </div> </div> @@ -384,12 +382,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00720">720</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> {</div> -<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetGuid();</div> -<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> {</div> +<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetGuid();</div> +<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> </div> </div> @@ -408,12 +406,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00725">725</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> {</div> -<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetNumInputs();</div> -<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> {</div> +<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetNumInputs();</div> +<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> </div> </div> @@ -432,12 +430,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00730">730</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> {</div> -<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetNumOutputs();</div> -<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00737"></a><span class="lineno"> 737</span> {</div> +<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetNumOutputs();</div> +<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> </div> </div> @@ -456,12 +454,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00715">715</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> {</div> -<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetGraph().GetProfiler();</div> -<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00722"></a><span class="lineno"> 722</span> {</div> +<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->GetGraph().GetProfiler();</div> +<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> </div> </div> @@ -480,12 +478,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00705">705</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> {</div> -<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->PrintGraph();</div> -<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00712"></a><span class="lineno"> 712</span> {</div> +<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->PrintGraph();</div> +<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> </div> </div> @@ -505,12 +503,12 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l00710">710</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> {</div> -<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->SerializeToDot(stream);</div> -<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> {</div> +<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#a374d52340ec8dc02a819acc20fb5aa92">pOptimizedNetworkImpl</a>->SerializeToDot(stream);</div> +<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> }</div> </div><!-- fragment --> -<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00946">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> +<p class="reference">References <a class="el" href="_i_network_8hpp_source.html#l00953">IOptimizedNetwork::pOptimizedNetworkImpl</a>.</p> <p class="reference">Referenced by <a class="el" href="_canonical_utils_8cpp_source.html#l00392">armnn_driver::ExportNetworkGraphToDotFile()</a>.</p> @@ -537,7 +535,7 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00928">928</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p> +<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> </div> </div> @@ -561,7 +559,7 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00929">929</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p> +<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> </div> </div> @@ -647,7 +645,7 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00926">926</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p> +<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> </div> </div> @@ -716,223 +714,226 @@ Friends</h2></td></tr> </dl> <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> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l01896">1896</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> {</div> -<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) << options.ToString();</div> -<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>  </div> -<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>  <span class="comment">// Enable profiling</span></div> -<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>  <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div> -<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>  <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> -<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>  profiler->EnableProfiling(options.GetProfilingEnabled());</div> -<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>  </div> -<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>  <span class="comment">// Some backends don't play well together. Check here before continuing.</span></div> -<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  {</div> -<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>  std::set<BackendId> backendSet(backendPreferences.begin(), backendPreferences.end());</div> -<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  <span class="comment">// GpuFsa cannot co-exist with GpuAcc.</span></div> -<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  <span class="keywordflow">if</span> (backendSet.find(<span class="stringliteral">"GpuFsa"</span>) != backendSet.end() &&</div> -<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>  backendSet.find(<span class="stringliteral">"GpuAcc"</span>) != backendSet.end())</div> -<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>  {</div> -<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"The backends \"GpuAcc\" and \"GpuFsa\" cannot be specified "</span></div> -<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  <span class="stringliteral">"for the same optimized network."</span>);</div> -<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  }</div> -<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>  }</div> -<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>  </div> -<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>  <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">"Optimizer"</span>);</div> -<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  <span class="keywordflow">if</span> (backendPreferences.empty())</div> -<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>  {</div> -<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invoked Optimize with no backends specified"</span>);</div> -<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>  }</div> -<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>  </div> -<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>  <span class="keywordflow">if</span> (options.GetReduceFp32ToBf16())</div> -<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>  {</div> -<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 optimization is currently ignored. In order to use Bf16 optimization "</span></div> -<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>  <span class="stringliteral">"Please use the FastMathEnabled backend option for CpuAcc or GpuAcc."</span>);</div> -<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  }</div> -<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>  </div> -<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>  <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16() && options.GetReduceFp32ToBf16())</div> -<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>  {</div> -<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 and Float16 optimization cannot be enabled at the same time."</span>);</div> -<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>  }</div> -<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>  </div> -<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>  <span class="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div> -<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  inGraph.VerifyConstantLayerSetTensorInfo();</div> -<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>  </div> -<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>  std::unique_ptr<Graph> graph = std::make_unique<Graph>(inGraph);</div> +<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> +<div class="fragment"><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> {</div> +<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(debug) << options.ToString();</div> +<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  </div> +<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>  <span class="comment">// Enable profiling</span></div> +<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>  <span class="keyword">auto</span> profiler = inGraph.GetProfiler();</div> +<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>  <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> +<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  profiler->EnableProfiling(options.GetProfilingEnabled());</div> +<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  </div> +<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>  <span class="comment">// Some backends don't play well together. Check here before continuing.</span></div> +<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>  {</div> +<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>  std::set<BackendId> backendSet(backendPreferences.begin(), backendPreferences.end());</div> +<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  <span class="comment">// GpuFsa cannot co-exist with GpuAcc.</span></div> +<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>  <span class="keywordflow">if</span> (backendSet.find(<span class="stringliteral">"GpuFsa"</span>) != backendSet.end() &&</div> +<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>  backendSet.find(<span class="stringliteral">"GpuAcc"</span>) != backendSet.end())</div> +<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>  {</div> +<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"The backends \"GpuAcc\" and \"GpuFsa\" cannot be specified "</span></div> +<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>  <span class="stringliteral">"for the same optimized network."</span>);</div> +<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>  }</div> +<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>  }</div> +<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>  </div> +<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  <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">"Optimizer"</span>);</div> +<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>  <span class="keywordflow">if</span> (backendPreferences.empty())</div> +<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>  {</div> +<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Invoked Optimize with no backends specified"</span>);</div> +<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>  }</div> +<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>  </div> +<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>  <span class="keywordflow">if</span> (options.GetReduceFp32ToBf16())</div> +<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>  {</div> +<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 optimization is currently ignored. In order to use Bf16 optimization "</span></div> +<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>  <span class="stringliteral">"Please use the FastMathEnabled backend option for CpuAcc or GpuAcc."</span>);</div> +<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>  }</div> <div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>  </div> -<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  <span class="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div> -<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>  <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div> -<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>  <a class="code" href="structarmnn_1_1_backend_options.html">armnn::BackendOptions</a> importExport(<span class="stringliteral">"Global"</span>,</div> -<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>  {{<span class="stringliteral">"ImportEnabled"</span>, options.GetImportEnabled()},</div> -<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>  {<span class="stringliteral">"ExportEnabled"</span>, options.GetExportEnabled()}});</div> -<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>  <a class="code" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> optimizedOptions(options.GetModelOptions());</div> -<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>  optimizedOptions.push_back(importExport);</div> +<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16() && options.GetReduceFp32ToBf16())</div> +<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>  {</div> +<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"BFloat16 and Float16 optimization cannot be enabled at the same time."</span>);</div> +<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>  }</div> +<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>  </div> +<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>  <span class="comment">// Ensure TensorInfo is set on all output slots of ConstantLayers in the graph</span></div> +<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>  inGraph.VerifyConstantLayerSetTensorInfo();</div> <div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>  </div> -<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  <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> -<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>  &<a class="code" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">IOptimizedNetwork::Destroy</a>);</div> -<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>  </div> -<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>  <a class="code" href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">IOptimizedNetwork</a>* optNetObjPtr = optNet.get();</div> -<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>  </div> -<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>  <span class="comment">// Get the optimized graph</span></div> -<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>  Graph& optGraph = optNetObjPtr->pOptimizedNetworkImpl->GetGraph();</div> -<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>  </div> -<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">ShapeInferenceMethod::InferAndValidate</a>)</div> -<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>  {</div> -<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>  <span class="comment">// Infer the tensor infos for all output slots. Throws an exception on failure</span></div> -<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>  optGraph.InferTensorInfos();</div> -<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>  }</div> -<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>  </div> -<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  <span class="comment">// Perform BroadcastToOptimizationLayer and then AddBroadcastReshapeLayer optimisation</span></div> -<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>  <span class="keyword">using namespace </span>optimizations;</div> -<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  <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> +<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  std::unique_ptr<Graph> graph = std::make_unique<Graph>(inGraph);</div> +<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>  </div> +<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>  <span class="comment">// We need to pass on the information about whether import and export is enabled to the LoadNetwork phase.</span></div> +<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>  <span class="comment">// The mechanism to do that is to add model options to the optimized network.</span></div> +<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>  <a class="code" href="structarmnn_1_1_backend_options.html">armnn::BackendOptions</a> importExport(<span class="stringliteral">"Global"</span>,</div> +<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>  {{<span class="stringliteral">"ImportEnabled"</span>, options.GetImportEnabled()},</div> +<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>  {<span class="stringliteral">"ExportEnabled"</span>, options.GetExportEnabled()}});</div> +<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>  <a class="code" href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">ModelOptions</a> optimizedOptions(options.GetModelOptions());</div> +<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  optimizedOptions.push_back(importExport);</div> +<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>  </div> +<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>  <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> +<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>  &<a class="code" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">IOptimizedNetwork::Destroy</a>);</div> +<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>  </div> +<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>  <a class="code" href="classarmnn_1_1_i_optimized_network.html#a32eecbed1d4cd2602204a2ab3f5f249e">IOptimizedNetwork</a>* optNetObjPtr = optNet.get();</div> +<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  </div> +<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>  <span class="comment">// Get the optimized graph</span></div> +<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  Graph& optGraph = optNetObjPtr->pOptimizedNetworkImpl->GetGraph();</div> <div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>  </div> -<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>  <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> -<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>  </div> -<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ShapeInferenceMethod::ValidateOnly</a>)</div> -<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>  {</div> -<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  <span class="comment">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div> -<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  optGraph.InferTensorInfos();</div> -<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>  }</div> -<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  </div> -<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>  </div> -<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>  <span class="comment">// Group Constant Layer optimizations together where possible.</span></div> -<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  <span class="comment">// This is important as:</span></div> -<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div> -<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div> -<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div> -<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  <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> -<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div> -<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>  <span class="comment">// Perform optimisation passes</span></div> -<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>  <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> -<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div> -<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div> -<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div> -<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div> -<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div> -<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div> -<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div> -<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div> -<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div> -<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div> -<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div> -<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div> -<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">BroadcastToOptimizationLayer</a>(),</div> -<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div> -<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div> -<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div> -<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div> -<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div> -<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div> -<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>  </div> -<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>  <span class="comment">// Initialize backend settings</span></div> -<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  BackendSettings backendSettings(backendPreferences, deviceSpec);</div> -<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>  <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div> -<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>  <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div> -<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>  {</div> -<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>  std::stringstream failureMsg;</div> -<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  failureMsg << <span class="stringliteral">"None of the preferred backends "</span> << backendPreferences</div> -<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  << <span class="stringliteral">" are supported. Current platform provides "</span> << backendSettings.m_SupportedBackends;</div> -<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), messages);</div> -<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div> -<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  }</div> -<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  </div> -<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div> -<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div> -<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  <a class="code" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends = <a class="code" href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a>(tensorHandleFactoryRegistry, backendSettings);</div> -<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  </div> -<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16())</div> +<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>  <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">ShapeInferenceMethod::InferAndValidate</a>)</div> +<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>  {</div> +<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  <span class="comment">// Infer the tensor infos for all output slots. Throws an exception on failure</span></div> +<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>  optGraph.InferTensorInfos();</div> +<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  }</div> +<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  </div> +<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>  <span class="keyword">using namespace </span>optimizations;</div> +<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  <span class="comment">// Substitute Max + Min with Bounded Relu before AddBroadcastReshapeLayer optimisation,</span></div> +<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>  <span class="comment">// as Bounded ReLu needs the constants to be 1D size 1</span></div> +<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>  <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> +<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  </div> +<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  <span class="comment">// Perform BroadcastToOptimizationLayer before AddBroadcastReshapeLayer optimisation</span></div> +<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  <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> +<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  </div> +<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  <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> +<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>  </div> +<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>  <span class="keywordflow">if</span>(options.GetShapeInferenceMethod() == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ShapeInferenceMethod::ValidateOnly</a>)</div> +<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>  {</div> +<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <span class="comment">// Validate the tensor infos for all output slots. Throws an exception on failure</span></div> +<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>  optGraph.InferTensorInfos();</div> +<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>  }</div> +<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>  </div> +<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  <span class="comment">// Group Constant Layer optimizations together where possible.</span></div> +<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>  <span class="comment">// This is important as:</span></div> +<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>  <span class="comment">// FusePermuteIntoConstantLayer must happen before FoldPadIntoDepthwiseConvolution2d and</span></div> +<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  <span class="comment">// FuseBatchNormIntoDepthwiseConvolution2D.</span></div> +<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  <span class="comment">// ConvertConstDequantisationLayersToConstLayers must happen before FoldPadIntoConvolution2d</span></div> +<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>  <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> +<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a4dfbdc8cc90b67e74eccd146d977ff66">ConvertConstDequantisationLayersToConstLayers</a>()));</div> +<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>  <span class="comment">// Perform optimisation passes</span></div> +<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  <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> +<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aba7b0ca6192b8b58ecd517a82b4f378e">SquashEqualTransposeSiblings</a>(),</div> +<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a29f8d97b2d74f99c88298881cd1d825b">SquashEqualReshapeSiblings</a>(),</div> +<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aa31127c77d2117f78d43ca2958dcae19">OptimizeInversePermutes</a>(),</div> +<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a2f9d1a13be2ac1c4213729a0ef181fc0">OptimizeInverseTransposes</a>(),</div> +<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aafc70d5af99400ff5ea7991825658b2f">MovePermuteUp</a>(),</div> +<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a5918588fa316cf4c23f1cf02c81ee706">MoveTransposeUp</a>(),</div> +<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ae0b1382e3af141896a46531c50e8863f">PermuteAsReshape</a>(),</div> +<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ad1aaeee71293f34d9f65d2dd2792830d">TransposeAsReshape</a>(),</div> +<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a8341ca3512ebafb19d60eba44d40d9e4">OptimizeConsecutiveReshapes</a>(),</div> +<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>(),</div> +<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>(),</div> +<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>(),</div> +<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#abe2f78445ce58bc35eff698bf77f42d0">BroadcastToOptimizationLayer</a>(),</div> +<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a17d1279f5f8e3b92c328b1ed3b6fd549">PermuteAndBatchToSpaceAsDepthToSpace</a>(),</div> +<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a98f54d4391347d517c7a7869e7707203">TransposeAndBatchToSpaceAsDepthToSpace</a>(),</div> +<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#aa52c06792e18dc13030e82476f706f9e">FuseBatchNormIntoConvolution2DFloat32</a>(),</div> +<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a8a81178ddcebb93ec0c35b6e6284273c">FuseBatchNormIntoConvolution2DFloat16</a>(),</div> +<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#a56e54a818166a2f4b2c1a7f76a3629ff">FuseBatchNormIntoDepthwiseConvolution2DFloat32</a>(),</div> +<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ab40bb51feca46649eb9d00522bfe51f6">FuseBatchNormIntoDepthwiseConvolution2DFloat16</a>()));</div> +<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  </div> +<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  <span class="comment">// Initialize backend settings</span></div> +<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  BackendSettings backendSettings(backendPreferences, deviceSpec);</div> +<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  <span class="keyword">auto</span> availablePreferredBackends = backendSettings.GetAvailablePreferredBackends();</div> +<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  <span class="keywordflow">if</span> (availablePreferredBackends.empty())</div> <div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  {</div> -<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>  <span class="keywordtype">bool</span> hasFp16 = <a class="code" href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">CheckFp16Support</a>(backends, availablePreferredBackends);</div> -<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>  <span class="keywordflow">if</span> (hasFp16)</div> -<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  {</div> -<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  <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">"Optimizer_ReduceFp32ToFp16"</span>);</div> -<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  <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> -<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  <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> -<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  }</div> -<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  }</div> -<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  </div> -<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  <span class="comment">// Assign an available backend to each layer</span></div> -<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> firstLayer = optGraph.begin();</div> -<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> lastLayer = optGraph.end();</div> -<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.html#a839ad76f1f52a70b540805b231f05d9c">AssignBackends</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div> -<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  backendSettings,</div> -<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  firstLayer,</div> -<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  lastLayer,</div> -<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  messages);</div> -<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div> -<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  {</div> -<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  <span class="comment">// Failed to assign a backend to each layer</span></div> -<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to assign a backend to each layer"</span>);</div> -<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  }</div> -<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>  </div> -<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <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> -<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div> -<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>  </div> -<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  <span class="comment">// Apply the backend-specific optimizations</span></div> -<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div> -<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  backendSettings,</div> -<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  backends,</div> -<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  options.GetModelOptions(),</div> -<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  messages);</div> -<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div> -<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  {</div> -<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div> -<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to apply the backend-specific optimizations"</span>);</div> -<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  }</div> -<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>  </div> -<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  <span class="comment">// Convert constants</span></div> -<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>  {</div> -<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  <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">"Optimizer_ConvertConstants"</span>);</div> -<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  <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> -<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  <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> -<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  }</div> -<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  </div> -<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  <span class="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div> -<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>  <span class="comment">// If the debug flag is set, then insert a DebugLayer after each layer</span></div> -<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  <span class="comment">// Doing this after applying the backend optimizations as they might have changed some layers</span></div> -<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  <span class="keywordflow">if</span> (options.GetDebugEnabled() && !options.GetDebugToFileEnabled())</div> -<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>  {</div> -<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  <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> -<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>  }</div> -<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (options.GetDebugToFileEnabled())</div> -<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>  {</div> -<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>  <span class="comment">// Setup the output file path</span></div> -<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>  <span class="keywordflow">try</span></div> -<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  {</div> -<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> <span class="preprocessor">#if !defined(ARMNN_DISABLE_FILESYSTEM)</span></div> -<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.html#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">"/ArmNNIntermediateLayerOutputs"</span>);</div> -<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Intermediate tensors will be written to: "</span> << result;</div> -<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="preprocessor">#endif</span></div> -<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>  <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> -<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  }</div> -<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.html">armnn::RuntimeException</a>& e)</div> -<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  {</div> -<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  <span class="comment">// If we cannot create the output directory then we'll issue a warning and continue.</span></div> -<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>  <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << <span class="stringliteral">"Unable to print intermediate layer outputs : "</span> << e.<a class="code" href="classarmnn_1_1_exception.html#abf843cbb29dec939d0731e491bab6f70">what</a>();</div> -<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  }</div> -<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  }</div> -<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>  </div> -<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>  <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div> -<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>  OptimizationResult strategyResult = <a class="code" href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">SelectTensorHandleStrategy</a>(optGraph,</div> -<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  backends,</div> -<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>  tensorHandleFactoryRegistry,</div> -<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>  options.GetImportEnabled(),</div> -<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  options.GetExportEnabled(),</div> -<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  messages);</div> -<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>  </div> -<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>  <span class="keywordflow">if</span> (strategyResult.m_Error)</div> -<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>  {</div> -<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div> -<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &<a class="code" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">IOptimizedNetwork::Destroy</a>);</div> -<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>  }</div> -<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>  </div> -<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  <span class="comment">// Based on the tensor handle strategy determined above, insert copy layers where required.</span></div> -<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>  {</div> -<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>  <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">"Optimizer_AddCompatibilityLayers"</span>);</div> -<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>  optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div> -<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  }</div> -<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  </div> -<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>  <span class="keywordflow">return</span> optNet;</div> -<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> }</div> +<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>  std::stringstream failureMsg;</div> +<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>  failureMsg << <span class="stringliteral">"None of the preferred backends "</span> << backendPreferences</div> +<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  << <span class="stringliteral">" are supported. Current platform provides "</span> << backendSettings.m_SupportedBackends;</div> +<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  <a class="code" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">ReportError</a>(failureMsg.str(), messages);</div> +<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  <span class="keywordflow">throw</span> InvalidArgumentException(failureMsg.str());</div> +<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  }</div> +<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  </div> +<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  <span class="comment">// Create a map to temporarily hold initialized backend objects</span></div> +<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  TensorHandleFactoryRegistry tensorHandleFactoryRegistry;</div> +<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  <a class="code" href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">BackendsMap</a> backends = <a class="code" href="namespacearmnn.html#a1ec6b4c20ed294a96cf94c33c24caaf5">CreateSupportedBackends</a>(tensorHandleFactoryRegistry, backendSettings);</div> +<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  </div> +<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  <span class="keywordflow">if</span> (options.GetReduceFp32ToFp16())</div> +<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  {</div> +<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  <span class="keywordtype">bool</span> hasFp16 = <a class="code" href="namespacearmnn.html#aa52ce4f1fab044ad0c73f9613e2ef6ce">CheckFp16Support</a>(backends, availablePreferredBackends);</div> +<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  <span class="keywordflow">if</span> (hasFp16)</div> +<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  {</div> +<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  <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">"Optimizer_ReduceFp32ToFp16"</span>);</div> +<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  <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> +<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  <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> +<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  }</div> +<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  }</div> +<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  </div> +<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>  <span class="comment">// Assign an available backend to each layer</span></div> +<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> firstLayer = optGraph.begin();</div> +<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> lastLayer = optGraph.end();</div> +<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>  OptimizationResult assignBackendsResult = <a class="code" href="namespacearmnn.html#a839ad76f1f52a70b540805b231f05d9c">AssignBackends</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div> +<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  backendSettings,</div> +<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  firstLayer,</div> +<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  lastLayer,</div> +<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  messages);</div> +<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  <span class="keywordflow">if</span> (assignBackendsResult.m_Error)</div> +<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  {</div> +<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  <span class="comment">// Failed to assign a backend to each layer</span></div> +<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to assign a backend to each layer"</span>);</div> +<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  }</div> +<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>  </div> +<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  <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> +<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>  <a class="code" href="namespacearmnn_1_1optimizations.html#ae1509d340bc981b11101c3316ee8afd6">OptimizeInverseConversionsFp32</a>()));</div> +<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  </div> +<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>  <span class="comment">// Apply the backend-specific optimizations</span></div> +<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  OptimizationResult backendOptimizationResult = <a class="code" href="namespacearmnn.html#ac39f2b15d34d3e2fc74d586fc3e26231">ApplyBackendOptimizations</a>(optNetObjPtr->pOptimizedNetworkImpl.get(),</div> +<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  backendSettings,</div> +<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  backends,</div> +<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  options.GetModelOptions(),</div> +<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  messages);</div> +<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  <span class="keywordflow">if</span> (backendOptimizationResult.m_Error)</div> +<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>  {</div> +<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div> +<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">"Failed to apply the backend-specific optimizations"</span>);</div> +<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>  }</div> +<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  </div> +<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>  <span class="comment">// Convert constants</span></div> +<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>  {</div> +<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>  <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">"Optimizer_ConvertConstants"</span>);</div> +<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>  <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> +<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>  <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> +<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  }</div> +<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  </div> +<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  <span class="comment">// This must occur after all topological changes to the graph and any redirection of variables</span></div> +<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  <span class="comment">// If the debug flag is set, then insert a DebugLayer after each layer</span></div> +<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  <span class="comment">// Doing this after applying the backend optimizations as they might have changed some layers</span></div> +<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>  <span class="keywordflow">if</span> (options.GetDebugEnabled() && !options.GetDebugToFileEnabled())</div> +<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  {</div> +<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  <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> +<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  }</div> +<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (options.GetDebugToFileEnabled())</div> +<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>  {</div> +<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  <span class="comment">// Setup the output file path</span></div> +<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  <span class="keywordflow">try</span></div> +<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>  {</div> +<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> <span class="preprocessor">#if !defined(ARMNN_DISABLE_FILESYSTEM)</span></div> +<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>  <span class="keyword">auto</span> result = <a class="code" href="namespacearmnn_utils_1_1_filesystem.html#a0477efb2c6f5b41fbfe937fef6db312d">armnnUtils::Filesystem::CreateDirectory</a>(<span class="stringliteral">"/ArmNNIntermediateLayerOutputs"</span>);</div> +<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) << <span class="stringliteral">"Intermediate tensors will be written to: "</span> << result;</div> +<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>  <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> +<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  }</div> +<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_runtime_exception.html">armnn::RuntimeException</a>& e)</div> +<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>  {</div> +<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>  <span class="comment">// If we cannot create the output directory then we'll issue a warning and continue.</span></div> +<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>  <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(warning) << <span class="stringliteral">"Unable to print intermediate layer outputs : "</span> << e.<a class="code" href="classarmnn_1_1_exception.html#abf843cbb29dec939d0731e491bab6f70">what</a>();</div> +<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>  }</div> +<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>  }</div> +<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>  </div> +<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>  <span class="comment">// Calculate the compatibility strategies for tensor handles</span></div> +<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  OptimizationResult strategyResult = <a class="code" href="namespacearmnn.html#acbf7c9a630f03ece800f807d946239ab">SelectTensorHandleStrategy</a>(optGraph,</div> +<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>  backends,</div> +<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>  tensorHandleFactoryRegistry,</div> +<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>  options.GetImportEnabled(),</div> +<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  options.GetExportEnabled(),</div> +<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  messages);</div> +<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>  </div> +<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>  <span class="keywordflow">if</span> (strategyResult.m_Error)</div> +<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>  {</div> +<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>  <span class="comment">// Failed to apply the backend-specific optimizations</span></div> +<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>  <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a>(<span class="keyword">nullptr</span>, &<a class="code" href="classarmnn_1_1_i_optimized_network.html#a58ee539cf95c1e99fe4f54ef6e8bbd05">IOptimizedNetwork::Destroy</a>);</div> +<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>  }</div> +<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>  </div> +<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>  <span class="comment">// Based on the tensor handle strategy determined above, insert copy layers where required.</span></div> +<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>  {</div> +<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>  <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">"Optimizer_AddCompatibilityLayers"</span>);</div> +<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>  optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);</div> +<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>  }</div> +<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>  </div> +<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>  <span class="keywordflow">return</span> optNet;</div> +<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> }</div> </div><!-- fragment --> </div> </div> @@ -1001,14 +1002,14 @@ Friends</h2></td></tr> </dl> <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> -<p class="definition">Definition at line <a class="el" href="_network_8cpp_source.html#l02132">2132</a> of file <a class="el" href="_network_8cpp_source.html">Network.cpp</a>.</p> -<div class="fragment"><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> {</div> -<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#ad6454b9a2fdc8862f25bcfeb36433eb7">Optimize</a>(inNetwork.pNetworkImpl->GetGraph(),</div> -<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>  backendPreferences,</div> -<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>  deviceSpec,</div> -<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>  options,</div> -<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>  messages);</div> -<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> }</div> +<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> +<div class="fragment"><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> {</div> +<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>  <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_i_optimized_network.html#ad6454b9a2fdc8862f25bcfeb36433eb7">Optimize</a>(inNetwork.pNetworkImpl->GetGraph(),</div> +<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>  backendPreferences,</div> +<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  deviceSpec,</div> +<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  options,</div> +<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>  messages);</div> +<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> }</div> </div><!-- fragment --> </div> </div> @@ -1033,9 +1034,9 @@ Friends</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="_i_network_8hpp_source.html#l00946">946</a> of file <a class="el" href="_i_network_8hpp_source.html">INetwork.hpp</a>.</p> +<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> -<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l03117">IOptimizedNetwork::ExecuteStrategy()</a>, <a class="el" href="_test_utils_8cpp_source.html#l00049">armnn::GetGraphForTesting()</a>, <a class="el" href="_network_8cpp_source.html#l00720">IOptimizedNetwork::GetGuid()</a>, <a class="el" href="_test_utils_8cpp_source.html#l00054">armnn::GetModelOptionsForTesting()</a>, <a class="el" href="_network_8cpp_source.html#l00725">IOptimizedNetwork::GetNumInputs()</a>, <a class="el" href="_network_8cpp_source.html#l00730">IOptimizedNetwork::GetNumOutputs()</a>, <a class="el" href="_network_8cpp_source.html#l00715">IOptimizedNetwork::GetProfiler()</a>, <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>, <a class="el" href="_network_8cpp_source.html#l00705">IOptimizedNetwork::PrintGraph()</a>, and <a class="el" href="_network_8cpp_source.html#l00710">IOptimizedNetwork::SerializeToDot()</a>.</p> +<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> </div> </div> @@ -1047,11 +1048,11 @@ Friends</h2></td></tr> </div><!-- doc-content --> <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< Layer, AddDebugToFileImpl > InsertDebugToFileLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.html#l00054">AddDebug.hpp:54</a></div></div> <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< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00340">INetwork.hpp:340</a></div></div> -<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 &backendSettings, BackendsMap &backends, const ModelOptions &modelOptions, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01328">Network.cpp:1328</a></div></div> +<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 &backendSettings, BackendsMap &backends, const ModelOptions &modelOptions, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01320">Network.cpp:1320</a></div></div> <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> <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< Layer, AddDebugImpl > InsertDebugLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_debug_8hpp_source.html#l00053">AddDebug.hpp:53</a></div></div> <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< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float32 > > FuseBatchNormIntoConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00222">FuseBatchNorm.hpp:222</a></div></div> -<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#l00600">Profiling.cpp:600</a></div></div> +<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> <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< PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl< PermuteLayer > > OptimizeInversePermutes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.html#l00043">OptimizeInversePermutes.hpp:43</a></div></div> <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< TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< TransposeLayer > > 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> <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< PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl > 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,54 +1060,55 @@ Friends</h2></td></tr> <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< PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl > FoldPadIntoConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00277">FoldPadIntoLayer2d.hpp:277</a></div></div> <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< ConstantLayer, DequantizeLayer, ConvertConstDequantisationLayersToConstLayersImpl > 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> <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< Layer, TransposeLayer, MoveTransposeUpImpl > MoveTransposeUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_transpose_up_8hpp_source.html#l00083">MoveTransposeUp.hpp:83</a></div></div> -<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 &backendSettings, Graph::Iterator &firstLayer, Graph::Iterator &lastLayer, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01186">Network.cpp:1186</a></div></div> +<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 &backendSettings, Graph::Iterator &firstLayer, Graph::Iterator &lastLayer, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01179">Network.cpp:1179</a></div></div> <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< BroadcastToLayer, DeleteBroadcastToImpl > BroadcastToOptimizationLayer</div><div class="ttdef"><b>Definition:</b> <a href="_delete_broadcast_to_8hpp_source.html#l00038">DeleteBroadcastTo.hpp:38</a></div></div> <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> <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< PermuteLayer, PermuteAsReshapeImpl > PermuteAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_permute_as_reshape_8hpp_source.html#l00066">PermuteAsReshape.hpp:66</a></div></div> <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< PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< PermuteLayer > > 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> -<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 &optGraph, BackendsMap &backends, TensorHandleFactoryRegistry &registry, bool importEnabled, bool exportEnabled, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01812">Network.cpp:1812</a></div></div> +<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 &optGraph, BackendsMap &backends, TensorHandleFactoryRegistry &registry, bool importEnabled, bool exportEnabled, Optional< std::vector< std::string > & > errMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01821">Network.cpp:1821</a></div></div> <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< Layer, PermuteLayer, MovePermuteUpImpl > MovePermuteUp</div><div class="ttdef"><b>Definition:</b> <a href="_move_permute_up_8hpp_source.html#l00083">MovePermuteUp.hpp:83</a></div></div> <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< ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl > OptimizeInverseConversionsFp16</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.html#l00042">OptimizeInverseConversions.hpp:42</a></div></div> <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> <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> -<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 &handleFactoryRegistry, BackendSettings &backendSettings)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01309">Network.cpp:1309</a></div></div> +<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 &handleFactoryRegistry, BackendSettings &backendSettings)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01302">Network.cpp:1302</a></div></div> <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< Float32ToFloat16, IsFloat16Layer > ConvertConstantsFloatToHalf</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.html#l00099">ConvertConstants.hpp:99</a></div></div> <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> -<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 &errorMessage, Optional< std::vector< std::string > & > errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00756">Network.cpp:756</a></div></div> -<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 &backends, const std::vector< BackendId > &availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01029">Network.cpp:1029</a></div></div> +<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 &errorMessage, Optional< std::vector< std::string > & > errorMessages)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00762">Network.cpp:762</a></div></div> +<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 &backends, const std::vector< BackendId > &availablePreferredBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l01026">Network.cpp:1026</a></div></div> <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< ConstantLayer, PermuteLayer, ConvertConstPermuteLayersToConstLayers > 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> <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 &&... args)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.html#l00043">Optimizer.hpp:43</a></div></div> <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> -<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 &inNetwork, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptionsOpaque &options, Optional< std::vector< std::string > & > 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#l02132">Network.cpp:2132</a></div></div> +<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 &inNetwork, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptionsOpaque &options, Optional< std::vector< std::string > & > 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> <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> <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> <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< ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl > OptimizeInverseConversionsFp32</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_conversions_8hpp_source.html#l00044">OptimizeInverseConversions.hpp:44</a></div></div> <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> <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< TransposeLayer, TransposeAsReshapeImpl > TransposeAsReshape</div><div class="ttdef"><b>Definition:</b> <a href="_transpose_as_reshape_8hpp_source.html#l00077">TransposeAsReshape.hpp:77</a></div></div> -<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 & GetInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8cpp_source.html#l00593">Profiling.cpp:593</a></div></div> +<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 & GetInstance()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8cpp_source.html#l00602">Profiling.cpp:602</a></div></div> <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< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float16 > > FuseBatchNormIntoConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00227">FuseBatchNorm.hpp:227</a></div></div> -<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#l00700">Network.cpp:700</a></div></div> +<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> <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< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float16 > > FuseBatchNormIntoDepthwiseConvolution2DFloat16</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00237">FuseBatchNorm.hpp:237</a></div></div> -<div class="ttc" id="anamespacearmnn_html_a9173495a61a0092b5f38b855f02c3585"><div class="ttname"><a href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">armnn::BackendsMap</a></div><div class="ttdeci">std::map< BackendId, std::unique_ptr< class IBackendInternal > > BackendsMap</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.html#l00282">Network.hpp:282</a></div></div> +<div class="ttc" id="anamespacearmnn_html_a9173495a61a0092b5f38b855f02c3585"><div class="ttname"><a href="namespacearmnn.html#a9173495a61a0092b5f38b855f02c3585">armnn::BackendsMap</a></div><div class="ttdeci">std::map< BackendId, std::unique_ptr< class IBackendInternal > > BackendsMap</div><div class="ttdef"><b>Definition:</b> <a href="_network_8hpp_source.html#l00285">Network.hpp:285</a></div></div> <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< Layer, TransposeLayer, SquashEqualSiblingsImpl< TransposeLayer > > SquashEqualTransposeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00069">SquashEqualSiblings.hpp:69</a></div></div> <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< Float16ToFloat32, IsFloat32Layer > ConvertConstantsHalfToFloat</div><div class="ttdef"><b>Definition:</b> <a href="_convert_constants_8hpp_source.html#l00098">ConvertConstants.hpp:98</a></div></div> -<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 &other, const ModelOptions &modelOptions)</div><div class="ttdoc">Creates a copy of the IOptimizedNetwork.</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.html#l00686">Network.cpp:686</a></div></div> +<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 &other, const ModelOptions &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> <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< Layer, PermuteLayer, SquashEqualSiblingsImpl< PermuteLayer > > SquashEqualPermuteSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00067">SquashEqualSiblings.hpp:67</a></div></div> <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 &graph, const Optimizations &optimizations)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8cpp_source.html#l00016">Optimizer.cpp:16</a></div></div> <div class="ttc" id="anamespacearmnn_html_a5b6893cda5b69359a4244c06054da18f"><div class="ttname"><a href="namespacearmnn.html#a5b6893cda5b69359a4244c06054da18f">armnn::ModelOptions</a></div><div class="ttdeci">std::vector< BackendOptions > ModelOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.html#l00018">BackendOptions.hpp:18</a></div></div> <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< PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl > FoldPadIntoDepthwiseConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.html#l00281">FoldPadIntoLayer2d.hpp:281</a></div></div> <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> +<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< ElementwiseBinaryLayer, ElementwiseBinaryLayer, MaxMinIntoBoundedReluImpl > 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> <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< Layer, ReshapeLayer, SquashEqualSiblingsImpl< ReshapeLayer > > SquashEqualReshapeSiblings</div><div class="ttdef"><b>Definition:</b> <a href="_squash_equal_siblings_8hpp_source.html#l00070">SquashEqualSiblings.hpp:70</a></div></div> <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< TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl< TransposeLayer > > OptimizeInverseTransposes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_inverse_permutes_8hpp_source.html#l00045">OptimizeInversePermutes.hpp:45</a></div></div> <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< Layer, AddBroadcastReshapeLayerImpl > AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.html#l00094">AddBroadcastReshapeLayer.hpp:94</a></div></div> <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< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float32 > > FuseBatchNormIntoDepthwiseConvolution2DFloat32</div><div class="ttdef"><b>Definition:</b> <a href="_fuse_batch_norm_8hpp_source.html#l00232">FuseBatchNorm.hpp:232</a></div></div> <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< ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl > OptimizeConsecutiveReshapes</div><div class="ttdef"><b>Definition:</b> <a href="_optimize_consecutive_reshapes_8hpp_source.html#l00061">OptimizeConsecutiveReshapes.hpp:61</a></div></div> -<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< OptimizedNetworkImpl > pOptimizedNetworkImpl</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00946">INetwork.hpp:946</a></div></div> +<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< OptimizedNetworkImpl > pOptimizedNetworkImpl</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.html#l00953">INetwork.hpp:953</a></div></div> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <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> - <li class="footer">Generated on Wed Feb 14 2024 16:36:22 for Arm NN by + <li class="footer">Generated on Thu May 16 2024 09:31:56 for Arm NN by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li> </ul> |